From 7edfc8bcecb10a2eec1f4c17a8eef7cd8469557f Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Sat, 11 Dec 2021 13:27:24 -0500 Subject: [PATCH] decomp: Re-attempting previously blocked state decomp files (#907) * blocked: `part-tester` - `code` handler thinks it returns nothing * blocked: `crates` finished but `go` is returning none causing issues * blocked: `(event ram-boss-idle)::snow-ram-boss` expression building fails due to delay slot issue * decomp: finish `snow-ram` | `seagull` blocked, new static data issue * decomp: finish `snow-bumper` * stuck: `snow-ball` close, can't figure out a type made on the stack * decomp: finish `spider-egg` * decomp: finish `puffer` * decomp: finish `driller-lurker` * decomp: finish `dark-crystal` * stuck: `kermit` - mostly done but stuck on a joint related callback arg * decomp: finish `gnawer` * decomp: finish `mother-spider-egg` * decomp: finish `swamp-blimp` * stuck: `mistycannon` prebind function signature * decomp: finish `citb-plat` * decomp: finish `darkvine` * blocked: `jungle-mirrors` - issues with `link` macro * decomp: finish `launcherdoor` * decomp: finish `quicksandlurker` except for 1 unused function * stuck: `balloonlurker` - `(code balloonlurker-mine-explode)` has some weird joint related code * stuck: need to decompile an asm func in `orbit-plat` * decomp: finish `voicebox` * blocked: `mother-spider` has issues where `go` returns none * decomp: finish `bully` * decomp: finish `seagull` * fixed up after merge conflicts * decomp: finish `jungle-mirrors` * update gsrc * double checked files, fixed issues * decomp: revert change to projectile methods * decomp: some more fixes * address feedback * fix up remaining method calls in `cam-states` * fix jungle-mirrors --- Taskfile.yml | 3 +- decompiler/config/all-types.gc | 895 +- .../anonymous_function_types.jsonc | 17 + .../config/jak1_ntsc_black_label/hacks.jsonc | 6 +- .../jak1_ntsc_black_label/label_types.jsonc | 108 +- .../stack_structures.jsonc | 866 +- .../jak1_ntsc_black_label/type_casts.jsonc | 598 +- .../jak1_ntsc_black_label/var_names.jsonc | 6 + goal_src/engine/camera/cam-master.gc | 3634 +++---- goal_src/engine/camera/cam-states.gc | 6369 +++++------ goal_src/engine/camera/camera-h.gc | 2 +- goal_src/engine/camera/camera.gc | 7 +- goal_src/engine/collide/collide-cache-h.gc | 2 +- goal_src/engine/collide/collide-shape.gc | 3859 ++++--- goal_src/engine/debug/part-tester.gc | 4 +- goal_src/engine/game/generic-obs.gc | 8 + goal_src/engine/game/projectiles-h.gc | 65 +- goal_src/engine/game/voicebox.gc | 330 + goal_src/engine/nav/navigate-h.gc | 4 +- goal_src/engine/sparticle/sparticle-h.gc | 1 + goal_src/engine/target/logic-target.gc | 12 +- goal_src/engine/ui/text-h.gc | 59 +- goal_src/kernel-defs.gc | 2 +- goal_src/levels/beach/seagull.gc | 1571 +++ goal_src/levels/citadel/citb-plat.gc | 1840 ++++ goal_src/levels/common/baseplat.gc | 2 +- goal_src/levels/common/launcherdoor.gc | 304 + goal_src/levels/common/mistycannon.gc | 18 +- goal_src/levels/common/plat-eco.gc | 15 + goal_src/levels/finalboss/robotboss.gc | 9428 +++++++---------- goal_src/levels/jungle/darkvine.gc | 549 + goal_src/levels/jungle/jungle-mirrors.gc | 2314 ++++ goal_src/levels/maincave/dark-crystal.gc | 750 ++ goal_src/levels/maincave/driller-lurker.gc | 1848 ++++ goal_src/levels/maincave/gnawer.gc | 1826 ++++ goal_src/levels/maincave/maincave-obs.gc | 10 + goal_src/levels/maincave/mother-spider-egg.gc | 653 ++ goal_src/levels/maincave/mother-spider-h.gc | 28 +- goal_src/levels/misty/quicksandlurker.gc | 1719 +++ goal_src/levels/ogre/flying-lurker.gc | 2512 ++--- goal_src/levels/robocave/spider-egg.gc | 525 + goal_src/levels/snow/snow-bumper.gc | 672 ++ goal_src/levels/snow/snow-obs.gc | 10 + goal_src/levels/snow/snow-ram-boss.gc | 24 + goal_src/levels/snow/snow-ram-h.gc | 9 +- goal_src/levels/snow/snow-ram.gc | 786 ++ goal_src/levels/sunken/bully.gc | 1100 ++ goal_src/levels/sunken/puffer.gc | 1193 +++ goal_src/levels/swamp/swamp-obs.gc | 1821 ++-- .../levels/village2/assistant-village2.gc | 4417 +++----- goal_src/levels/village2/swamp-blimp.gc | 1841 ++++ scripts/update-goal-src.py | 6 +- sunken-obs.manual_restore_reminder | 0 .../reference/engine/camera/cam-master_REF.gc | 2 +- .../reference/engine/camera/cam-states_REF.gc | 20 +- .../reference/engine/camera/camera-h_REF.gc | 102 +- .../reference/engine/camera/camera_REF.gc | 4 +- .../engine/collide/collide-cache-h_REF.gc | 2 +- .../reference/engine/debug/part-tester_REF.gc | 2 +- .../reference/engine/game/voicebox_REF.gc | 294 + .../reference/engine/nav/navigate-h_REF.gc | 4 +- .../engine/target/logic-target_REF.gc | 12 +- .../reference/levels/beach/seagull_REF.gc | 1652 +++ .../reference/levels/citadel/citb-plat_REF.gc | 1541 +++ .../levels/common/babak-with-cannon_REF.gc | 2 +- .../levels/common/launcherdoor_REF.gc | 252 + .../levels/finalboss/robotboss_REF.gc | 2 +- .../reference/levels/jungle/darkvine_REF.gc | 448 + .../levels/jungle/jungle-mirrors_REF.gc | 2457 +++++ .../levels/maincave/dark-crystal_REF.gc | 782 ++ .../levels/maincave/driller-lurker_REF.gc | 1477 +++ .../reference/levels/maincave/gnawer_REF.gc | 1929 ++++ .../levels/maincave/mother-spider-egg_REF.gc | 674 ++ .../levels/maincave/mother-spider-h_REF.gc | 28 +- .../levels/misty/quicksandlurker_REF.gc | 1267 +++ .../levels/ogre/flying-lurker_REF.gc | 14 +- .../levels/robocave/spider-egg_REF.gc | 360 + .../reference/levels/snow/snow-bumper_REF.gc | 515 + .../reference/levels/snow/snow-ram-h_REF.gc | 9 +- .../reference/levels/snow/snow-ram_REF.gc | 592 ++ .../reference/levels/sunken/bully_REF.gc | 1153 ++ .../reference/levels/sunken/puffer_REF.gc | 1261 +++ .../levels/village2/assistant-village2_REF.gc | 2 +- .../levels/village2/swamp-blimp_REF.gc | 2030 ++++ 84 files changed, 54467 insertions(+), 19070 deletions(-) delete mode 100644 sunken-obs.manual_restore_reminder create mode 100644 test/decompiler/reference/engine/game/voicebox_REF.gc create mode 100644 test/decompiler/reference/levels/beach/seagull_REF.gc create mode 100644 test/decompiler/reference/levels/citadel/citb-plat_REF.gc create mode 100644 test/decompiler/reference/levels/common/launcherdoor_REF.gc create mode 100644 test/decompiler/reference/levels/jungle/darkvine_REF.gc create mode 100644 test/decompiler/reference/levels/jungle/jungle-mirrors_REF.gc create mode 100644 test/decompiler/reference/levels/maincave/dark-crystal_REF.gc create mode 100644 test/decompiler/reference/levels/maincave/driller-lurker_REF.gc create mode 100644 test/decompiler/reference/levels/maincave/gnawer_REF.gc create mode 100644 test/decompiler/reference/levels/maincave/mother-spider-egg_REF.gc create mode 100644 test/decompiler/reference/levels/misty/quicksandlurker_REF.gc create mode 100644 test/decompiler/reference/levels/robocave/spider-egg_REF.gc create mode 100644 test/decompiler/reference/levels/snow/snow-bumper_REF.gc create mode 100644 test/decompiler/reference/levels/snow/snow-ram_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/bully_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/puffer_REF.gc create mode 100644 test/decompiler/reference/levels/village2/swamp-blimp_REF.gc diff --git a/Taskfile.yml b/Taskfile.yml index 1009f321fe..a6f5c6a09c 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -76,7 +76,8 @@ tasks: - python ./scripts/find-label-types.py --file "{{.FILES}}" type-test: cmds: - - ./out/build/Release/bin/goalc-test.exe --gtest_brief=0 --gtest_filter="*MANUAL_TEST_TypeConsistencyWithBuildFirst*" + - cmd: ./out/build/Release/bin/goalc-test.exe --gtest_brief=0 --gtest_filter="*MANUAL_TEST_TypeConsistencyWithBuildFirst*" + ignore_error: true check-gsrc-file: cmds: - python ./scripts/check-gsrc-file.py --files "{{.FILES}}" diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 2ded49e6b6..aaa0336838 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -939,12 +939,18 @@ (jungle-precursorbridge-hint #x25b) (daxter-launcher-no-eco #x25c) + (jungle-mirrors-completion-talk-to-mayor #x25e) + (beach-gimmie #x262) (beach-sentinel #x263) (jungle-canyon-end #x264) (jungle-temple-door #x265) (misty-bike-jump #x266) (misty-eco-challenge #x267) + (beach-seagull-chased-one #x268) + (beach-seagull-chased-two #x26a) + (beach-seagull-chased-three #x26b) + (beach-seagull-chased-four #x26c) (misty-daxter-scared #x26f) @@ -955,33 +961,37 @@ (beach-flutflutegg-hint #x275) (sidekick-hint-fish-powerup #x278) - (misty-racer-hit-the-ballon-lurkers #x27e) - + (misty-daxter-hit-lurkers-not-mines #x27f) (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) (sidekick-speech-hint-crate-steel #x285) - + (beach-collectors-unblocked #x288) + (misty-stopped-lurkers-at-silo #x28a) + (misty-stopped-balloon-lurkers #x28b) (jungleb-eco-vents-opened #x289) - (sidekick-speech-crate-steel-break2 #x28e) (sidekick-speech-hint-crate-darkeco2 #x28f) + + (daxter-screaming-jump #x290) + (daxter-wahoo-jump #x291) (collectables-scout-flies-red-boxes #x295) - (found-all-scout-flies #x296) (yakow-owed-powercell #x297) + (jungle-mirrors-tutorial #x29c) + (jungle-mirrors-break-the-mirror-jak #x29d) + (jungle-mirrors-go-to-the-next-tower #x29f) + (jungle-mirrors-follow-the-beam #x2a0) + (misty-teetertotter-bonk-dax-tutorial #x2a4) (sidekick-hint-misty-get-red-eco #x2a5) + (red-eco-tutorial #x2a6) + (daxter-blue-eco-plat-tutorial #x2a7) (misty-bone-bridge-hint #x2aa) @@ -994,10 +1004,9 @@ (missed #x2b5) (lose! #x2b6) - (daxter-screaming-jump #x290) - (daxter-wahoo-jump #x291) + - (red-eco-tutorial #x2a6) + (village2-gambler-money #x300) (village2-geologist-money #x301) @@ -1055,16 +1064,28 @@ (sunken-take-it-easy-hot-pipes #x34e) (sunken-double-lurker-hint #x347) (sunken-qbert-plat-hint #x34a) + (sunken-bully-dive-hint #x34b) (sunken-blue-eco-charger-all-hint #x34d) + (swamp-tethers-advice-hint #x352) + + (kermit-break-tongue #x357) (swamp-rats-nest-hint #x358) (daxter-you-can-shoot-with-yellow-eco #x359) - (swamp-bats-hint #x364) ;; maybe we can ???? the bats. lol + (kermit-run-away-jak #x35f) + + (swamp-bats-hint #x364) ;; maybe we can duck the bats + (swamp-tethers-three-to-go #x365) + (swamp-tethers-two-to-go #x366) + (swamp-tethers-lefts-find-the-last #x367) (flutflut-reminder #x368) (sage-golfclap-i-have-low-expectations #x36a) ;; where was this said? + + (swamp-tethers-completion-sage-precursor-arm #x36b) + (village2-warp-gate-reminder #x36f) (village2-warp-gate-reminder-annoyed #x370) @@ -1117,13 +1138,17 @@ (snow-frozen-crate #x42b) ;; task name? (snow-bumpers #x42c) + (dark-crystal-last-one #x432) (daxter-maybe-you-can-shoot-better-goggles #x433) (darkcave-light-crystal-low-light-hint #x437) (darkcave-light-crystal-hint #x438) - + (dark-crystal-run-away #x439) (cave-trap-nest-hint #x440) (snow-fort-reminder #x443) + + + (ram-boss-red-eco-hint #x444) (ice-cube-hint #x448) @@ -1135,8 +1160,8 @@ (fire-canyon-end #x500) (fire-canyon-buzzer #x501) - (sidekick-speech-hint-firecanyon-crate-darkeco1 #x506) - (sidekick-speech-hint-firecanyon-crate-darkeco2 #x507) + (daxter-maybe-i-should-drive #x506) + (daxter-you-are-trying-to-avoid-dark-eco #x507) (fire-canyon-level-name #x50c) @@ -12383,7 +12408,7 @@ :flag-assert #x2100008670 (:methods (dummy-9 (_type_) none 9) - (dummy-10 (_type_ vector vector float int process collide-mesh-cache-tri int) float 10) + (dummy-10 (_type_ vector vector float int process collide-tri-result int) float 10) (dummy-11 (_type_ collide-using-spheres-params) none 11) (fill-and-probe-using-y-probe (_type_ vector float uint process collide-tri-result uint) float 12) (dummy-13 (_type_ bounding-box uint process-drawable uint) none 13) @@ -14003,6 +14028,7 @@ (bit1 1) ;; village1-part (bit2 2) ;; cleared after an aux has its func set to add-to-sprite-aux-lst (bit3 3) + (bit4 4) ;; see - swamp-blimp (ready-to-launch 6) ;; maybe just just death? (bit7 7) (aux-list 8) ;; prevents relaunch, adds to aux @@ -14397,7 +14423,7 @@ (saved-pt vector :inline :offset-assert 2464) (spline-tt float :offset-assert 2480) (spline-follow-dist float :offset-assert 2484) - (change-event-from uint32 :offset-assert 2488) + (change-event-from (pointer process-drawable) :offset-assert 2488) ;; mistycannon (enter-has-run symbol :offset-assert 2492) (blend-from-type uint64 :offset-assert 2496) (blend-to-type uint64 :offset-assert 2504) @@ -15243,7 +15269,7 @@ (point-in-bounds? (_type_ vector) symbol 10) (dummy-11 (_type_ vector) none 11) (dummy-12 () none 12) - (dummy-13 () none 13) + (dummy-13 (_type_ vector vector) vector 13) ;; see - puffer::20 (set-current-poly! (_type_ nav-poly) none 14) (set-target-pos! (_type_ vector) none 15) (dummy-16 (_type_ vector) nav-poly 16) ; see - nav-enemy-test-point-in-nav-mesh? @@ -15257,7 +15283,7 @@ (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) + (dummy-27 (_type_) none 27) (dummy-28 (_type_ int) none 28) (should-display? (_type_) symbol 29) (dummy-30 () none 30) @@ -19888,33 +19914,34 @@ ) (deftype voicebox (process-drawable) - ((base-trans vector :inline :offset-assert 176) + ((parent-override (pointer camera-voicebox) :score 100 :offset 12) + (base-trans vector :inline :offset-assert 176) (seeker cam-float-seeker :inline :offset-assert 192) (blend float :offset-assert 216) (twist float :offset-assert 220) - (hint uint64 :offset-assert 224) + (hint handle :offset-assert 224) ) :method-count-assert 23 :size-assert #xe8 :heap-base #x80 :flag-assert #x17008000e8 (:methods - (unknown-state00 () _type_ :state 20) - (dummy-21 () none 21) - (dummy-22 () none 22) + (enter () _type_ :state 20) + (idle () _type_ :state 21) + (exit () _type_ :state 22) ) ) ;; - Functions -(define-extern voicebox-init-by-other function) +(define-extern voicebox-init-by-other (function vector handle none :behavior voicebox)) ;; first arg is either a `level-hint` process or a `vector` (define-extern voicebox-track (function none :behavior voicebox)) ;; - Unknowns -(define-extern cam-voicebox camera-voicebox) ;; unknown type +(define-extern cam-voicebox (state camera-voicebox)) ;; unknown type (define-extern *voicebox-sg* skeleton-group) -(define-extern empty-state state) ;; unknown type +(define-extern empty-state (state process)) ;; unknown type ;; ---------------------- @@ -22019,9 +22046,9 @@ ;; - Types (deftype part-tester (process) - ((root trsqv :offset-assert 112) + ((root trsqv :offset-assert 112) (part sparticle-launch-control :offset-assert 116) - (old-group basic :offset-assert 120)) + (old-group sparticle-launch-group :offset-assert 120)) :method-count-assert 14 :size-assert #x7c :heap-base #x100 @@ -22832,9 +22859,9 @@ (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) - (dummy-52 (_type_ vector) symbol 52) - (dummy-53 (_type_) symbol 53) + (dummy-51 (_type_ vector) object 51) ;; ret - float | symbol + (dummy-52 (_type_ vector) symbol 52) ;; ret - symbol | vector + (dummy-53 (_type_) symbol 53) ;; ret - symbol | none (dummy-54 (_type_) none 54) (dummy-55 (_type_) none 55) (set-jump-height-factor! (_type_ int) float 56) @@ -23582,12 +23609,13 @@ ) (deftype mistycannon-missile (process-drawable) - ((muzzle-time float :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (muzzle-time float :offset-assert 176) (tumble-quat quaternion :inline :offset-assert 192) (blast-radius float :offset-assert 208) (water-height float :offset-assert 212) (sfx uint32 :offset-assert 216) - (part2 basic :offset-assert 220) + (part2 sparticle-launch-control :offset-assert 220) (ground-time uint64 :offset-assert 224) ) :method-count-assert 21 @@ -23595,7 +23623,7 @@ :heap-base #x80 :flag-assert #x15008000e8 (:methods - (dummy-20 () none 20) + (spawn-part (_type_) none 20) ) ) @@ -23613,34 +23641,36 @@ ) (deftype mistycannon (process-drawable) - ((rotate angle-tracker :inline :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (rotate angle-tracker :inline :offset-assert 176) + (fact-info-override fact-info-enemy :score 100 :offset 144) (tilt angle-tracker :inline :offset-assert 192) (front-wheel float :offset-assert 208) (rear-wheel float :offset-assert 212) (last-known-rotation float :offset-assert 216) (part-timer uint64 :offset-assert 224) (hellmouth vector :inline :offset-assert 240) - (postbindinfo-ok basic :offset-assert 256) + (postbindinfo-ok symbol :offset-assert 256) (launch-origin vector :inline :offset-assert 272) (goggles vector :inline :offset-assert 288) - (avoid-entity basic :offset-assert 304) + (avoid-entity entity-actor :offset-assert 304) (center-point vector :inline :offset-assert 320) (at-point vector :inline :offset-assert 336) (accuracy-range float :offset-assert 352) (target-theta float :offset-assert 356) (sound-id sound-id :offset-assert 360) (aim-sound-id sound-id :offset-assert 364) - (player-touching-grips? basic :offset-assert 368) + (player-touching-grips? symbol :offset-assert 368) ) :method-count-assert 24 :size-assert #x174 :heap-base #x110 :flag-assert #x1801100174 (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) - (dummy-23 () none 23) + (rotate! (_type_ float) none 20) + (tilt! (_type_ float) none 21) + (dummy-22 (_type_ float float float) none 22) + (dummy-23 (_type_) none 23) ) ) @@ -23668,22 +23698,22 @@ ;; - Functions -(define-extern mistycannon-prebind-function function) -(define-extern mistycannon-postbind-function function) -(define-extern angle-tracker-init-range! function) -(define-extern mistycannon-pick-random-target-point function) -(define-extern angle-tracker-seek! function) -(define-extern mistycannon-do-aim function) -(define-extern mistycannon-find-trajectory function) -(define-extern solve-missile-velocity function) -(define-extern spawn-mistycannon-missile function) -(define-extern angle-tracker-apply-move! function) -(define-extern mistycannon-missile-init-by-other function) -(define-extern mistycannon-collision-reaction function) -(define-extern angle-tracker-get-value function) -(define-extern angle-tracker-set-value function) -(define-extern solve-missile-tilt function) -(define-extern mistycannon-find-best-solution function) +(define-extern mistycannon-prebind-function (function mistycannon object)) +(define-extern mistycannon-postbind-function (function mistycannon none)) +(define-extern angle-tracker-init-range! (function angle-tracker float float float none)) +(define-extern mistycannon-pick-random-target-point (function float :behavior mistycannon)) +(define-extern angle-tracker-seek! (function angle-tracker float symbol)) +(define-extern mistycannon-do-aim (function vector vector none :behavior mistycannon)) +(define-extern mistycannon-find-trajectory (function trajectory-params none :behavior mistycannon)) +(define-extern solve-missile-velocity (function trajectory-params float none)) +(define-extern spawn-mistycannon-missile (function process-tree vector vector float float float float entity none)) +(define-extern angle-tracker-apply-move! (function angle-tracker float float)) +(define-extern mistycannon-missile-init-by-other (function mistycannon-init-data entity none :behavior mistycannon-missile)) +(define-extern mistycannon-collision-reaction (function collide-shape-moving collide-shape-intersect none)) +(define-extern angle-tracker-get-value (function angle-tracker float)) +(define-extern angle-tracker-set-value (function angle-tracker float float)) +(define-extern solve-missile-tilt (function trajectory-params float float float float symbol)) +(define-extern mistycannon-find-best-solution (function quadratic-solution none :behavior mistycannon)) ;; - Unknowns @@ -24312,9 +24342,11 @@ ;; - Types +(declare-type seagullflock process) (deftype seagull (process-drawable) - ((index int32 :offset-assert 176) - (flock uint32 :offset-assert 180) + ((root-override collide-shape-moving :score 100 :offset 112) + (index int32 :offset-assert 176) + (flock (pointer seagullflock) :offset-assert 180) (heading float :offset-assert 184) (tilt float :offset-assert 188) (max-tilt float :offset-assert 192) @@ -24325,31 +24357,37 @@ (temp-heading-time int32 :offset-assert 212) (part-time uint64 :offset-assert 216) (thrust float :offset-assert 224) - (teleport basic :offset-assert 228) + (teleport symbol :offset-assert 228) ) :method-count-assert 28 :heap-base #x80 :size-assert #xe8 :flag-assert #x1c008000e8 - ;; inherited inspect of process-drawable (:methods - (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) + (move-vertically! (_type_ symbol) none 20) + (adjust-heading-around-point-slow! (_type_ float) none 21) + (dummy-22 (_type_) none 22) + (adjust-heading-around-point! (_type_ float) none 23) + (dummy-24 (_type_) none 24) + (dummy-25 (_type_ float) none 25) + (dummy-26 (_type_) symbol 26) (dummy-27 (_type_) none 27) ) + (:states + (seagull-idle) + (seagull-soaring) + (seagull-flying) + (seagull-landing float) + (seagull-takeoff)) ) (deftype seagullflock (process) - ((path basic :offset-assert 112) + ((self-override seagullflock :score 100 :offset 28) + (path path-control :offset-assert 112) (trans vector :inline :offset-assert 128) - (bird seagull 64 :offset-assert 144) + (bird (pointer seagull) 64 :offset-assert 144) (birds int32 :offset-assert 400) - (link basic :offset-assert 404) + (link actor-link-info :offset-assert 404) (bird-at-waterfall uint64 :offset-assert 408) (birds-at-waterfall int32 :offset-assert 416) (target vector :inline :offset-assert 432) @@ -24358,7 +24396,7 @@ (teleport-frames int32 :offset-assert 464) (cam-tracker uint64 :offset-assert 472) (state-time uint64 :offset-assert 480) - (squall basic :offset-assert 488) + (squall ambient-sound :offset-assert 488) (max-lift float :offset-assert 492) ) :method-count-assert 17 @@ -24366,32 +24404,28 @@ :heap-base #x180 :flag-assert #x11018001f0 (:methods - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) + (create-the-flock! (_type_ vector) (pointer process) 14) + (play-hint (_type_ int) none 15) + (dummy-16 (_type_ seagull) float 16) ) + (:states + (seagullflock-idle) + (seagullflock-at-waterfall)) ) ;; - Functions -(define-extern seagull-init-by-other function) -(define-extern seagull-reaction function) -(define-extern seagull-post function) -(define-extern beach-rock-trigger function) +(define-extern seagull-init-by-other (function vector int seagullflock none :behavior seagull)) +(define-extern seagull-reaction (function collide-shape-moving collide-shape-intersect none)) +(define-extern seagull-post (function none :behavior seagull)) +(define-extern beach-rock-trigger (function int)) ;; - Unknowns (define-extern sound-seagull-squall sound-spec) -(define-extern seagullflock-idle (state seagullflock)) -(define-extern seagullflock-at-waterfall (state seagullflock)) (define-extern aybabtu (function int int)) ;; this is just sceCdMmode (define-extern *seagull-sg* skeleton-group) -(define-extern seagull-idle (state seagull)) -(define-extern seagull-soaring (state seagull)) -(define-extern seagull-flying (state seagull)) -(define-extern seagull-landing (state seagull)) (define-extern *seagull-boxes* (inline-array air-box)) -(define-extern seagull-takeoff (state seagull)) ;; ---------------------- @@ -25295,7 +25329,8 @@ ;; - Types (deftype citb-base-plat (process-drawable) - ((idle-distance float :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (idle-distance float :offset-assert 176) ) :method-count-assert 25 :size-assert #xb4 @@ -25304,10 +25339,10 @@ ;; inherited inspect of process-drawable (:methods (citb-base-plat-idle () _type_ :state 20) ;; state - (dummy-21 () none 21) - (dummy-22 () none 22) + (dummy-21 (_type_) none 21) + (dummy-22 (_type_) none 22) (citb-base-plat-active () _type_ :state 23) ;; state - (dummy-24 () none 24) + (dummy-24 (_type_) none 24) ) ) @@ -25332,7 +25367,7 @@ ((idle-height float :offset-assert 180) (rise-height float :offset-assert 184) (delay uint64 :offset-assert 192) - (rise basic :offset-assert 200) + (rise symbol :offset-assert 200) ; educated guess ) :method-count-assert 25 :size-assert #xcc @@ -25379,7 +25414,8 @@ ) (deftype citb-firehose (process-drawable) - ((idle-distance float :offset-assert 176) + ((root-override collide-shape :score 100 :offset 112) + (idle-distance float :offset-assert 176) (sync sync-info :inline :offset-assert 180) (last-sync float :offset-assert 188) (blast-pos vector :inline :offset-assert 192) @@ -25393,7 +25429,7 @@ (deftype citb-exit-plat (plat-button) ((idle-height float :offset-assert 240) (rise-height float :offset-assert 244) - (activated basic :offset-assert 248) + (activated symbol :offset-assert 248) ) :method-count-assert 33 :size-assert #xfc @@ -25403,8 +25439,8 @@ ;; - Functions -(define-extern citb-exit-plat-move-player function) -(define-extern citb-firehose-blast-particles function) +(define-extern citb-exit-plat-move-player (function vector none :behavior citb-exit-plat)) +(define-extern citb-firehose-blast-particles (function object :behavior citb-firehose)) ;; - Unknowns @@ -27978,45 +28014,32 @@ ;; - Types -; (deftype darkvine (process-drawable) -; ((speed float :offset-assert 176) -; (tip-index int8 :offset-assert 180) -; (dangerous basic :offset-assert 184) -; (vulnerable basic :offset-assert 188) -; (hit-player basic :offset-assert 192) -; (touch-time uint64 :offset-assert 200) -; (player-attack-id int32 :offset-assert 208) -; ) -; :method-count-assert 20 -; :size-assert #xd4 -; :heap-base #x70 -; :flag-assert #x14007000d4 -; ;; 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 darkvine (process-drawable) + ((root-override collide-shape :score 100 :offset 112) + (speed float :offset-assert 176) + (tip-index int8 :offset-assert 180) + (dangerous symbol :offset-assert 184) + (vulnerable symbol :offset-assert 188) + (hit-player symbol :offset-assert 192) + (touch-time uint64 :offset-assert 200) + (player-attack-id int32 :offset-assert 208) + ) + :method-count-assert 20 + :size-assert #xd4 + :heap-base #x70 + :flag-assert #x14007000d4 + ) ;; - Functions -(define-extern darkvine-event-handler function) +(define-extern darkvine-event-handler (function process int symbol event-message-block object :behavior darkvine)) ;; - Unknowns (define-extern *darkvine-sg* skeleton-group) -;;(define-extern darkvine-die object) ;; unknown type -;;(define-extern darkvine-idle object) ;; unknown type -;;(define-extern darkvine-retreat object) ;; unknown type +(define-extern darkvine-die (state symbol darkvine)) ;; unknown type +(define-extern darkvine-idle (state darkvine)) ;; unknown type +(define-extern darkvine-retreat (state darkvine)) ;; unknown type ;; ---------------------- @@ -28203,8 +28226,10 @@ ;; - Types +(declare-type reflector process-drawable) (deftype periscope (process-drawable) - ((y-offset meters :offset-assert 176) + ((root-override collide-shape :score 100 :offset 112) + (y-offset meters :offset-assert 176) (y-offset-grips meters :offset-assert 180) (height meters :offset-assert 184) (turn degrees :offset-assert 188) @@ -28216,92 +28241,98 @@ (next-reflector-trans vector :inline :offset-assert 240) (prev-reflector-trans vector :inline :offset-assert 256) (old-camera-matrix matrix :inline :offset-assert 272) - (reflector uint32 :offset-assert 336) + (reflector (pointer reflector) :offset-assert 336) (gauge-rot degrees :offset-assert 340) (lock-time uint64 :offset-assert 344) - (aligned? basic :offset-assert 352) - (raised? basic :offset-assert 356) - (player-touching-grips? basic :offset-assert 360) - (grips-moving? basic :offset-assert 364) + (aligned? symbol :offset-assert 352) + (raised? symbol :offset-assert 356) + (player-touching-grips? symbol :offset-assert 360) + (grips-moving? symbol :offset-assert 364) (sound-id sound-id :offset-assert 368) (rise-sound-id sound-id :offset-assert 372) (grips-sound-id sound-id :offset-assert 376) - (grips basic :offset-assert 380) - (part-aligned basic :offset-assert 384) + (grips joint-mod-set-world :offset-assert 380) + (part-aligned sparticle-launch-control :offset-assert 384) ) :method-count-assert 20 :size-assert #x184 :heap-base #x120 :flag-assert #x1401200184 + (:states + (periscope-power-on) + (periscope-wait-for-player) + (periscope-idle) + (periscope-wait-for-power-input) + (periscope-player-control) + (periscope-activate)) ) (deftype reflector (process-drawable) - () + ((parent-override (pointer periscope) :score 100 :offset 12) + (root-override collide-shape :score 100 :offset 112)) :method-count-assert 20 :size-assert #xb0 :heap-base #x40 :flag-assert #x14004000b0 + (:states + (reflector-idle)) ) (deftype reflector-origin (process-drawable) ((reflector-trans vector :inline :offset-assert 176) (next-reflector-trans vector :inline :offset-assert 192) (reflector uint32 :offset-assert 208) - (next basic :offset-assert 212) - (blocker basic :offset-assert 216) + (next basic :offset-assert 212) ;; no clue, never filled...? + (blocker entity-actor :offset-assert 216) ) :method-count-assert 20 :size-assert #xdc :heap-base #x70 :flag-assert #x14007000dc + (:states + (reflector-origin-idle)) ) (deftype reflector-mirror (process-drawable) - ((beam-end vector :inline :offset-assert 176) + ((root-override collide-shape :score 100 :offset 112) + (beam-end vector :inline :offset-assert 176) ) :method-count-assert 20 :size-assert #xc0 :heap-base #x50 :flag-assert #x14005000c0 + (:states + (reflector-mirror-broken) + (reflector-mirror-idle)) ) ;; - Functions -(define-extern peri-beamcam-init-by-other function) -(define-extern draw-power-beam function) -(define-extern reflector-origin-update function) -(define-extern reflector-init-by-other function) -(define-extern periscope-find-next function) -(define-extern periscope-find-reflection-angles function) -(define-extern periscope-update-joints function) -(define-extern periscope-has-power-input? function) -(define-extern periscope-draw-beam function) -(define-extern periscope-find-aim-at-angles function) -(define-extern periscope-crosshair function) -(define-extern periscope-test-task-complete? function) -(define-extern periscope-draw-beam-impact function) -(define-extern periscope-set-target-direction function) -(define-extern periscope-post function) -(define-extern periscope-debug-trans function) -(define-extern target-close-to-point? function) +(define-extern peri-beamcam-init-by-other (function string (pointer process))) +(define-extern draw-power-beam (function vector vector none)) +(define-extern reflector-origin-update (function entity-actor none :behavior reflector-origin)) +(define-extern reflector-init-by-other (function vector none :behavior reflector)) +(define-extern periscope-find-next (function object :behavior periscope)) +(define-extern periscope-find-reflection-angles (function float :behavior periscope)) +(define-extern periscope-update-joints (function float :behavior periscope)) +(define-extern periscope-has-power-input? (function symbol :behavior periscope)) +(define-extern periscope-draw-beam (function none :behavior periscope)) +(define-extern periscope-find-aim-at-angles (function float :behavior periscope)) +(define-extern periscope-crosshair (function symbol :behavior periscope)) +(define-extern periscope-test-task-complete? (function symbol :behavior periscope)) +(define-extern periscope-draw-beam-impact (function none :behavior periscope)) +(define-extern periscope-set-target-direction (function vector float :behavior periscope)) +(define-extern periscope-post (function none :behavior periscope)) +(define-extern periscope-debug-trans (function none :behavior periscope)) +(define-extern target-close-to-point? (function vector float symbol)) ;; - Unknowns (define-extern *reflector-mirror-sg* skeleton-group) -(define-extern reflector-mirror-broken (state reflector-mirror)) ;; unknown type -(define-extern reflector-mirror-idle (state reflector-mirror)) ;; unknown type (define-extern *reflector-mirror-break-sg* skeleton-group) -(define-extern reflector-origin-idle (state reflector-origin)) ;; unknown type (define-extern *periscope-base-sg* skeleton-group) -(define-extern periscope-power-on (state periscope)) ;; unknown type -(define-extern periscope-wait-for-player (state periscope)) ;; unknown type -(define-extern periscope-idle (state periscope)) ;; unknown type (define-extern cam-periscope (state camera-slave)) ;; unknown type -(define-extern periscope-wait-for-power-input (state periscope)) ;; unknown type -(define-extern periscope-player-control (state periscope)) ;; unknown type -(define-extern periscope-activate (state periscope)) ;; unknown type (define-extern *periscope-mirror-sg* skeleton-group) -(define-extern reflector-idle (state reflector)) ;; unknown type ;; ---------------------- @@ -28467,39 +28498,26 @@ ;; - Types -; (deftype launcherdoor (process-drawable) -; ((notify-player-passed-thru? basic :offset-assert 176) -; (thresh-y float :offset-assert 180) -; (open-speed float :offset-assert 184) -; (close-speed float :offset-assert 188) -; (load-mode basic :offset-assert 192) -; ) -; :method-count-assert 20 -; :size-assert #xc4 -; :heap-base #x60 -; :flag-assert #x14006000c4 -; ;; 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 launcherdoor (process-drawable) + ((root-override collide-shape :score 100 :offset 112) + (notify-player-passed-thru? symbol :offset-assert 176) + (thresh-y float :offset-assert 180) + (open-speed float :offset-assert 184) + (close-speed float :offset-assert 188) + (load-mode symbol :offset-assert 192) + ) + :method-count-assert 20 + :size-assert #xc4 + :heap-base #x60 + :flag-assert #x14006000c4 + ) ;; - Unknowns (define-extern *launcherdoor-maincave-sg* skeleton-group) (define-extern *launcherdoor-sg* skeleton-group) -;;(define-extern launcherdoor-open object) ;; unknown type -;;(define-extern launcherdoor-closed object) ;; unknown type +(define-extern launcherdoor-open (state symbol launcherdoor)) ;; unknown type +(define-extern launcherdoor-closed (state symbol launcherdoor)) ;; unknown type ;; ---------------------- @@ -30451,8 +30469,10 @@ ;; - Types +(declare-type quicksandlurker process-drawable) (deftype quicksandlurker-missile (process-drawable) - () + ((parent-override (pointer quicksandlurker) :score 100 :offset 12) + (root-override collide-shape-moving :score 100 :offset 112)) :method-count-assert 20 :size-assert #xb0 :heap-base #x40 @@ -30469,7 +30489,8 @@ ) (deftype quicksandlurker (process-drawable) - ((original-position vector :inline :offset-assert 176) + ((root-override collide-shape :score 100 :offset 112) + (original-position vector :inline :offset-assert 176) (y-offset float :offset-assert 192) (theta-angle float :offset-assert 196) (radial-offset float :offset-assert 200) @@ -30484,16 +30505,16 @@ ;; - Functions -(define-extern orient-to-face-target function) -(define-extern quicksandlurker-spit function) -(define-extern spawn-quicksandlurker-missile function) -(define-extern quicksandlurker-check-hide-transition function) -(define-extern inc-angle function) -(define-extern quicksandlurker-missile-init-by-other function) -(define-extern get-height-over-navmesh! function) -(define-extern intersects-nav-mesh? function) -(define-extern quicksandlurker-default-event-handler function) -(define-extern quicksandlurker-post function) +(define-extern orient-to-face-target (function quaternion :behavior quicksandlurker)) +(define-extern quicksandlurker-spit (function (pointer process) :behavior quicksandlurker)) +(define-extern spawn-quicksandlurker-missile (function quicksandlurker vector vector entity none)) +(define-extern quicksandlurker-check-hide-transition (function none :behavior quicksandlurker)) +(define-extern inc-angle (function (pointer float) float float)) +(define-extern quicksandlurker-missile-init-by-other (function quicksandlurker-missile-init-data entity none :behavior quicksandlurker-missile)) +(define-extern get-height-over-navmesh! function) ;; unused +(define-extern intersects-nav-mesh? (function quicksandlurker int (inline-array vector) vector symbol)) ;; unused +(define-extern quicksandlurker-default-event-handler (function process int symbol event-message-block object :behavior quicksandlurker)) +(define-extern quicksandlurker-post (function none :behavior quicksandlurker)) ;; - Unknowns @@ -30570,13 +30591,13 @@ (deftype balloonlurker (rigid-body-platform) ((explosion-force-position vector :inline :offset-assert 736) (explosion-force vector :inline :offset-assert 752) - (explosion basic :offset-assert 768) + (explosion basic :offset-assert 768) ;; ?? (explosion-joint-index uint16 2 :offset-assert 772) - (vulnerable basic :offset-assert 776) + (vulnerable symbol :offset-assert 776) (water-y float :offset-assert 780) - (propeller basic :offset-assert 784) - (rudder basic :offset-assert 788) - (mine basic 2 :offset-assert 792) + (propeller joint-mod-set-local :offset-assert 784) + (rudder joint-mod-set-local :offset-assert 788) + (mine joint-mod-set-world 2 :offset-assert 792) (buoyancy-factor float :offset-assert 800) (rudder-control float :offset-assert 804) (throttle-control float :offset-assert 808) @@ -30584,8 +30605,8 @@ (dest-point vector :inline :offset-assert 816) (dest-point-old vector :inline :offset-assert 832) (dest-index int8 :offset-assert 848) - (auto-pilot basic :offset-assert 852) - (dead basic :offset-assert 856) + (auto-pilot symbol :offset-assert 852) + (dead symbol :offset-assert 856) (anim-frame float :offset-assert 860) (engine-sound-id sound-id :offset-assert 864) (pedal-sound-id sound-id :offset-assert 868) @@ -30598,28 +30619,29 @@ ) (deftype balloonlurker-pilot (process-drawable) - () + ((parent-override (pointer balloonlurker) :score 100 :offset 12) + (root-override collide-shape-moving :score 100 :offset 112)) :method-count-assert 22 :size-assert #xb0 :heap-base #x40 :flag-assert #x16004000b0 (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) none 21) ) ) ;; - Functions -(define-extern balloonlurker-pilot-init-by-other function) -(define-extern balloonlurker-find-nearest-path-point function) -(define-extern balloonlurker-snap-to-path-point function) -(define-extern balloonlurker-get-next-path-point function) -(define-extern balloonlurker-play-sounds function) -(define-extern balloonlurker-player-impulse function) -(define-extern balloonlurker-get-path-point function) -(define-extern balloonlurker-event-handler function) -(define-extern balloonlurker-post function) +(define-extern balloonlurker-pilot-init-by-other (function balloonlurker none :behavior balloonlurker-pilot)) +(define-extern balloonlurker-find-nearest-path-point (function none :behavior balloonlurker)) +(define-extern balloonlurker-snap-to-path-point (function int quaternion :behavior balloonlurker)) +(define-extern balloonlurker-get-next-path-point (function none :behavior balloonlurker)) +(define-extern balloonlurker-play-sounds (function none :behavior balloonlurker)) +(define-extern balloonlurker-player-impulse (function vector :behavior balloonlurker)) +(define-extern balloonlurker-get-path-point (function int none :behavior balloonlurker)) +(define-extern balloonlurker-event-handler (function process int symbol event-message-block object :behavior balloonlurker)) +(define-extern balloonlurker-post (function none :behavior balloonlurker)) ;; - Unknowns @@ -30632,7 +30654,7 @@ (define-extern *BALLOONLURKER-bank* balloonlurker-bank) ;; unknown type (define-extern balloonlurker-die (state balloonlurker)) ;; unknown type (define-extern *balloonlurker-rudder-joint-home* vector) ;; unknown type -(define-extern balloonlurker-mine-explode (state balloonlurker)) ;; unknown type +(define-extern balloonlurker-mine-explode (state int balloonlurker)) ;; unknown type ;; ---------------------- @@ -31023,8 +31045,8 @@ ) (deftype tetherrock-info (structure) - ((rock-camera basic :offset-assert 0) - (arm-camera basic :offset-assert 4) + ((rock-camera string :offset-assert 0) + (arm-camera string :offset-assert 4) (blimp-rp int32 :offset-assert 8) (other-rp int32 :offset-assert 12) (connected-to-rock basic :offset-assert 16) @@ -31047,8 +31069,8 @@ :size-assert #x14 :flag-assert #xb00000014 (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (init! (_type_ int int float) none 9) + (update-timer! (_type_) none 10) ) ) @@ -31057,6 +31079,7 @@ (value float :offset-assert 4) (vel float :offset-assert 8) (accel float :offset-assert 12) + (vector-overlay vector :inline :offset 0) (max-vel float :offset-assert 16) (damping float :offset-assert 20) ) @@ -31064,8 +31087,8 @@ :size-assert #x18 :flag-assert #xb00000018 (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (init! (_type_ float float float float) none 9) + (TODO-RENAME-10 (_type_ float) none 10) ) ) @@ -31081,8 +31104,8 @@ :size-assert #x30 :flag-assert #xb00000030 (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (init! (_type_ int int float float) none 9) + (update-timer! (_type_) none 10) ) ) @@ -31099,15 +31122,16 @@ :size-assert #x3c :flag-assert #xb0000003c (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (init! (_type_ vector float float float) none 9) + (TODO-RENAME-10 (_type_ vector) none 10) ) ) (deftype swamp-tetherrock (process-drawable) - ((tension float :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (tension float :offset-assert 176) (tension-pt vector :inline :offset-assert 192) - (blimp basic :offset-assert 208) + (blimp entity-actor :offset-assert 208) (rot-at-init quaternion :inline :offset-assert 224) (hits int32 :offset-assert 240) ) @@ -31118,7 +31142,8 @@ ) (deftype precursor-arm (process-drawable) - ((y-init float :offset-assert 176) + ((root-override collide-shape :score 100 :offset 112) + (y-init float :offset-assert 176) (y-offset float :offset-assert 180) (rot-speed float :offset-assert 184) (rot-dist float :offset-assert 188) @@ -31133,9 +31158,11 @@ :flag-assert #x1400b00114 ) +(declare-type swamp-blimp process-drawable) (deftype swamp-rope (process-drawable) - ((parent-rp int32 :offset-assert 176) - (other-entity basic :offset-assert 180) + ((parent-override (pointer swamp-blimp) :score 100 :offset 12) ;; or is it the tether rock... + (parent-rp int32 :offset-assert 176) + (other-entity entity-actor :offset-assert 180) (other-rp int32 :offset-assert 184) (old-scale float :offset-assert 188) (frame swamp-rope-oscillator :inline :offset-assert 192) @@ -31152,17 +31179,13 @@ :heap-base #xb0 :flag-assert #x1500b00120 (:methods - (dummy-20 () none 20) + (dummy-20 (_type_) basic 20) ;; ret - entity-actor | symbol ) ) (deftype swamp-blimp (process-drawable) - ((the-ropes swamp-rope 5 :offset-assert 176) - (unknown00 structure :offset-assert 196) - (unknown01 structure :offset-assert 200) - (unknown02 structure :offset-assert 204) - (unknown03 structure :offset-assert 208) - (unknown04 structure :offset-assert 212) + ((root-override collide-shape-moving :score 100 :offset 112) + (the-ropes handle 5 :offset-assert 176) (arm-timer int32 :offset-assert 216) (trans-at-init vector :inline :offset-assert 224) (rot-at-init quaternion :inline :offset-assert 240) @@ -31176,8 +31199,8 @@ (pos-oscillator swamp-blimp-oscillator :inline :offset-assert 496) (scale-rand swamp-rope-rand-float :inline :offset-assert 556) (scale-oscillator swamp-rope-oscillator :inline :offset-assert 576) - (gondola basic :offset-assert 600) - (bag basic :offset-assert 604) + (gondola joint-mod :offset-assert 600) + (bag joint-mod :offset-assert 604) ) :method-count-assert 20 :size-assert #x260 @@ -31187,16 +31210,16 @@ ;; - Functions -(define-extern swamp-rope-init-by-other function) -(define-extern swamp-blimp-setup function) -(define-extern tetherrock-get-info function) -(define-extern swamp-rope-post function) -(define-extern swamp-rope-break-code function) -(define-extern swamp-rope-update-bounding-spheres function) -(define-extern precursor-arm-slip function) -(define-extern swamp-rope-trans function) -(define-extern blimp-trans function) -(define-extern bustarock function) +(define-extern swamp-rope-init-by-other (function vector entity-actor none :behavior swamp-rope)) +(define-extern swamp-blimp-setup (function none :behavior swamp-blimp)) +(define-extern tetherrock-get-info (function entity tetherrock-info)) +(define-extern swamp-rope-post (function none :behavior swamp-rope)) +(define-extern swamp-rope-break-code (function quaternion :behavior swamp-rope)) +(define-extern swamp-rope-update-bounding-spheres (function none :behavior swamp-rope)) +(define-extern precursor-arm-slip (function float float)) +(define-extern swamp-rope-trans (function none :behavior swamp-rope)) +(define-extern blimp-trans (function float :behavior swamp-blimp)) +(define-extern bustarock (function int object)) ;; - Unknowns @@ -31698,10 +31721,14 @@ :method-count-assert 9 :size-assert #x3a :flag-assert #x90000003a + (:methods (new (symbol type kermit int function int8 int8) _type_ 0)) ) (deftype kermit-pulse (process-drawable) - ((sound-id sound-id :offset-assert 176) + ((parent-override (pointer kermit) :score 100 :offset 12) + (self-override kermit-pulse :score 100 :offset 28) + (root-override collide-shape-moving :score 100 :offset 112) + (sound-id sound-id :offset-assert 176) ) :method-count-assert 20 :size-assert #xb4 @@ -31710,7 +31737,8 @@ ) (deftype kermit (nav-enemy) - ((rotate-dir vector :inline :offset-assert 400) + ((child-override (pointer kermit-pulse) :score 100 :offset 20) + (rotate-dir vector :inline :offset-assert 400) (charging-part sparticle-launch-control :offset-assert 416) (airborne symbol :offset-assert 420) (tongue-control joint-mod-tracker :offset-assert 424) @@ -31727,28 +31755,28 @@ ;; - Functions -(define-extern kermit-get-tongue-target-callback function) -(define-extern kermit-disable-tongue function) -(define-extern kermit-hop function) -(define-extern kermit-set-nav-mesh-target function) -(define-extern kermit-set-rotate-dir-to-player function) -(define-extern kermit-simple-post function) -(define-extern kermit-player-target-pos function) -(define-extern kermit-tongue-pos function) -(define-extern kermit-check-tongue-is-clear? function) -(define-extern kermit-enable-tongue function) -(define-extern spawn-kermit-pulse function) -(define-extern kermit-check-to-hit-player? function) -(define-extern kermit-get-head-dir-xz function) -(define-extern kermit-set-rotate-dir-to-nav-target function) -(define-extern kermit-get-new-patrol-point function) -(define-extern kermit-long-hop function) -(define-extern kermit-short-hop function) -(define-extern kermit-pulse-init-by-other function) -(define-extern joint-mod-tracker-callback function) -(define-extern build-matrix-from-up-and-forward-axes! function) -(define-extern kermit-get-head-dir function) -(define-extern kermit-post function) +(define-extern kermit-get-tongue-target-callback (function vector vector)) +(define-extern kermit-disable-tongue (function none :behavior kermit)) +(define-extern kermit-hop (function float symbol :behavior kermit)) +(define-extern kermit-set-nav-mesh-target (function vector vector :behavior kermit)) +(define-extern kermit-set-rotate-dir-to-player (function vector :behavior kermit)) +(define-extern kermit-simple-post (function none :behavior kermit)) +(define-extern kermit-player-target-pos (function vector)) +(define-extern kermit-tongue-pos (function kermit vector)) +(define-extern kermit-check-tongue-is-clear? (function symbol :behavior kermit)) +(define-extern kermit-enable-tongue (function none :behavior kermit)) +(define-extern spawn-kermit-pulse (function kermit vector entity none)) +(define-extern kermit-check-to-hit-player? (function float symbol :behavior kermit)) +(define-extern kermit-get-head-dir-xz (function kermit vector vector)) +(define-extern kermit-set-rotate-dir-to-nav-target (function vector :behavior kermit)) +(define-extern kermit-get-new-patrol-point (function vector :behavior kermit)) +(define-extern kermit-long-hop (function symbol :behavior kermit)) +(define-extern kermit-short-hop (function symbol :behavior kermit)) +(define-extern kermit-pulse-init-by-other (function vector entity none :behavior kermit-pulse)) +(define-extern joint-mod-tracker-callback (function basic vector none)) ;; TODO - no idea what this basic is! +(define-extern build-matrix-from-up-and-forward-axes! (function matrix none)) +(define-extern kermit-get-head-dir (function kermit vector vector)) +(define-extern kermit-post (function none :behavior kermit)) ;; - Unknowns @@ -32111,8 +32139,9 @@ ;; - Types (deftype dark-crystal (process-drawable) - ((crystal-num int32 :offset-assert 176) - (underwater? basic :offset-assert 180) + ((root-override collide-shape :score 100 :offset 112) + (crystal-num int32 :offset-assert 176) + (underwater? symbol :offset-assert 180) (explode-danger-radius float :offset-assert 184) (lit-color-mult vector :inline :offset-assert 192) (lit-color-emissive vector :inline :offset-assert 208) @@ -32124,8 +32153,8 @@ :heap-base #x90 :flag-assert #x1600900100 (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) symbol 21) ) ) @@ -32234,6 +32263,7 @@ (trans-u float :offset-assert 4) (swing-arc-u float :offset-assert 8) ) + :pack-me :method-count-assert 9 :size-assert #xc :flag-assert #x90000000c @@ -32266,7 +32296,8 @@ ) (deftype mother-spider (process-drawable) - ((mode uint64 :offset-assert 176) + ((root-override collide-shape :score 100 :offset 112) + (mode uint64 :offset-assert 176) (damage int32 :offset-assert 184) (baby-count int32 :offset-assert 188) (max-baby-count int32 :offset-assert 192) @@ -32314,18 +32345,18 @@ :heap-base #x180 :flag-assert #x20018001f0 (:methods - (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) + (TODO-RENAME-20 (_type_ vector vector) symbol 20) + (TODO-RENAME-21 (_type_ vector float symbol) symbol 21) + (dummy-22 (_type_ matrix vector) float 22) + (TODO-RENAME-23 (_type_) none 23) + (TODO-RENAME-24 (_type_) number 24) + (letgo-player? (_type_) symbol 25) + (grab-player? (_type_) symbol 26) + (STUB-27 (_type_) none 27) + (STUB-28 (_type_) none 28) + (TODO-RENAME-29 (_type_ symbol symbol) none 29) + (spawn-child (_type_ vector vector symbol) int 30) + (is-player-stuck? (_type_) symbol 31) ) ) @@ -32339,7 +32370,9 @@ ;; - Types (deftype mother-spider-egg (process-drawable) - ((anim-speed float :offset-assert 176) + ((parent-override (pointer mother-spider) :score 100 :offset 12) + (root-override collide-shape-moving :score 100 :offset 112) + (anim-speed float :offset-assert 176) (part2 sparticle-launch-control :offset-assert 180) (falling-start-time uint64 :offset-assert 184) (fall-dest vector :inline :offset-assert 192) @@ -32353,14 +32386,14 @@ :heap-base #xe0 :flag-assert #x1600e00150 (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) + (dummy-20 (_type_) none 20) + (draw-egg-shadow (_type_ vector symbol) symbol 21) ) ) ;; - Functions -(define-extern mother-spider-egg-init-by-other function) +(define-extern mother-spider-egg-init-by-other (function entity vector vector vector none :behavior mother-spider-egg)) ;; - Unknowns @@ -32406,10 +32439,10 @@ ;; - Functions -(define-extern mother-spider-leg-init-by-other function) -(define-extern mother-spider-full-joint-callback function) -(define-extern mother-spider-default-event-handler function) -(define-extern mother-spider-death-event-handler function) +(define-extern mother-spider-leg-init-by-other (function mother-spider vector vector vector none :behavior mother-spider-leg)) +(define-extern mother-spider-full-joint-callback (function mother-spider none)) +(define-extern mother-spider-default-event-handler (function process int symbol event-message-block object :behavior mother-spider)) +(define-extern mother-spider-death-event-handler (function process int symbol event-message-block object :behavior mother-spider)) ;; - Unknowns @@ -32420,7 +32453,7 @@ (define-extern *mother-spider-leg-infos* (inline-array mother-spider-leg-info)) ;; unknown type (define-extern mother-spider-hit-while-birthing (state mother-spider)) ;; unknown type (define-extern mother-spider-birthing (state mother-spider)) ;; unknown type -(define-extern mother-spider-traveling (state mother-spider)) ;; unknown type +(define-extern mother-spider-traveling (state uint mother-spider)) ;; unknown type (define-extern mother-spider-birth-baby (state mother-spider)) ;; unknown type (define-extern mother-spider-tracking (state mother-spider)) ;; unknown type (define-extern mother-spider-hit-while-tracking (state mother-spider)) ;; unknown type @@ -32494,18 +32527,19 @@ ) (deftype gnawer (process-drawable) - ((hit-points int32 :offset-assert 176) + ((root-override collide-shape :score 100 :offset 112) + (hit-points int32 :offset-assert 176) (gnawer-id int32 :offset-assert 180) (total-money int32 :offset-assert 184) (money-mask uint32 :offset-assert 188) (eco-green-mask uint32 :offset-assert 192) - (hidden? basic :offset-assert 196) - (show-damage? basic :offset-assert 200) + (hidden? symbol :offset-assert 196) + (show-damage? symbol :offset-assert 200) (route-dist float :offset-assert 204) (speed float :offset-assert 208) (anim-speed float :offset-assert 212) - (part2 basic :offset-assert 216) - (sound2 basic :offset-assert 220) + (part2 sparticle-launch-control :offset-assert 216) + (sound2 ambient-sound :offset-assert 220) (last-hit-time uint64 :offset-assert 224) (post-trans vector :inline :offset-assert 240) (fall-trans vector :inline :offset-assert 256) @@ -32517,24 +32551,24 @@ :heap-base #x560 :flag-assert #x1f056005d0 (:methods - (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-20 (_type_ int) matrix 20) + (dummy-21 (_type_ int bounding-box symbol float) float 21) + (dummy-22 (_type_ float) symbol 22) + (dummy-23 (_type_) none 23) + (dummy-24 (_type_) none 24) + (dummy-25 (_type_) symbol 25) + (dummy-26 (_type_) none 26) + (dummy-27 (_type_) none 27) + (dummy-28 (_type_ int int) symbol 28) + (dummy-29 (_type_ int vector vector) float 29) + (dummy-30 (_type_ process-drawable) uint 30) ) ) ;; - Functions -(define-extern gnawer-falling-segment-init-by-other function) -(define-extern gnawer-joint-callback function) +(define-extern gnawer-falling-segment-init-by-other (function gnawer vector vector none :behavior gnawer-falling-segment)) +(define-extern gnawer-joint-callback (function gnawer none)) ;; - Unknowns @@ -32560,8 +32594,9 @@ ;; - Types (deftype driller-lurker (process-drawable) - ((hit-player? basic :offset-assert 176) - (played-drill-sound? basic :offset-assert 180) + ((root-overeride collide-shape-moving :score 100 :offset 112) + (hit-player? symbol :offset-assert 176) + (played-drill-sound? symbol :offset-assert 180) (mode uint64 :offset-assert 184) (path-u float :offset-assert 192) (path-units-per-meter float :offset-assert 196) @@ -32576,9 +32611,9 @@ (player-path-u float :offset-assert 232) (ambient-drilling-u float :offset-assert 236) (timeout int32 :offset-assert 240) - (neck basic :offset-assert 244) - (drill basic :offset-assert 248) - (sound2 basic :offset-assert 252) + (neck joint-mod :offset-assert 244) + (drill joint-mod :offset-assert 248) + (sound2 ambient-sound :offset-assert 252) (last-update-time uint64 :offset-assert 256) (last-player-path-u-time uint64 :offset-assert 264) (started-chasing-time uint64 :offset-assert 272) @@ -32590,20 +32625,20 @@ :heap-base #xc0 :flag-assert #x1c00c00128 (:methods - (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-20 (_type_ symbol target) symbol 20) + (dummy-21 (_type_) none 21) + (dummy-22 (_type_) none 22) + (dummy-23 (_type_) float 23) + (dummy-24 (_type_) symbol 24) + (dummy-25 (_type_) symbol 25) + (dummy-26 (_type_) symbol 26) + (dummy-27 (_type_) object 27) ) ) ;; - Functions -(define-extern driller-lurker-default-event-handler function) +(define-extern driller-lurker-default-event-handler (function process int symbol event-message-block object :behavior driller-lurker)) ;; - Unknowns @@ -32611,7 +32646,7 @@ (define-extern *driller-lurker-shadow-control* shadow-control) ;; unknown type (define-extern driller-lurker-idle-drilling (state driller-lurker)) ;; unknown type (define-extern driller-lurker-patrol (state driller-lurker)) ;; unknown type -(define-extern driller-lurker-chase (state driller-lurker)) ;; unknown type +(define-extern driller-lurker-chase (state symbol driller-lurker)) ;; unknown type (define-extern driller-lurker-jammed-standing (state driller-lurker)) ;; unknown type (define-extern driller-lurker-attack (state driller-lurker)) ;; unknown type (define-extern driller-lurker-patrol-pause (state driller-lurker)) ;; unknown type @@ -32962,23 +32997,25 @@ ;; - Types +(declare-type orbit-plat baseplat) (deftype orbit-plat-bottom (process-drawable) - ((part2 sparticle-launch-control :offset-assert 176) + ((parent-override (pointer orbit-plat) :score 100 :offset 12) + (part2 sparticle-launch-control :offset-assert 176) ) :method-count-assert 21 :size-assert #xb4 :heap-base #x50 :flag-assert #x15005000b4 (:methods - (dummy-20 () none 20) + (dummy-20 (_type_ vector vector) none 20) ) ) (deftype orbit-plat (baseplat) - ((other basic :offset-assert 228) + ((other entity-actor :offset-assert 228) (rot-dir float :offset-assert 232) (reset-trans vector :inline :offset-assert 240) - (is-reset? basic :offset-assert 256) + (is-reset? symbol :offset-assert 256) (reset-length float :offset-assert 260) (timeout float :offset-assert 264) (plat-status uint64 :offset-assert 272) @@ -32988,16 +33025,16 @@ :heap-base #xb0 :flag-assert #x1d00b00118 (:methods - (dummy-27 () none 27) - (dummy-28 () none 28) + (dummy-27 (_type_) symbol 27) + (dummy-28 (_type_) symbol 28) ) ) ;; - Functions -(define-extern orbit-plat-bottom-init-by-other function) -(define-extern get-rotate-point! function) -(define-extern get-nav-point! function) +(define-extern orbit-plat-bottom-init-by-other (function entity orbit-plat none :behavior orbit-plat-bottom)) +(define-extern get-rotate-point! (function vector vector vector vector float float vector)) +(define-extern get-nav-point! (function vector orbit-plat vector float vector)) ;; - Unknowns @@ -33492,16 +33529,22 @@ ;; - Types +(declare-type bully process-drawable) (deftype bully-broken-cage (process-drawable) - () + ((parent-override (pointer bully) :score 100 :offset 12)) :method-count-assert 20 :size-assert #xb0 :heap-base #x40 :flag-assert #x14004000b0 + (:states + (bully-broken-cage-explode bully-broken-cage) + ) ) (deftype bully (process-drawable) - ((hit-player? symbol :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (fact-override fact-info-enemy :score 100 :offset 144) + (hit-player? symbol :offset-assert 176) (bounced? symbol :offset-assert 180) (bounce-volume int32 :offset-assert 184) (facing-ry float :offset-assert 188) @@ -33513,34 +33556,35 @@ (start-spin-time uint64 :offset-assert 216) (slow-down uint64 :offset-assert 224) (hit-player-time uint64 :offset-assert 232) - (neck basic :offset-assert 240) + (neck joint-mod :offset-assert 240) ) :method-count-assert 21 :size-assert #xf4 :heap-base #x90 :flag-assert #x15009000f4 (:methods - (dummy-20 () none 20) + (dummy-20 (_type_) float 20) + ) + (:states + (bully-idle symbol) + (bully-start-spinning) + (bully-stop-spinning) + (bully-notice) + (bully-die) ) ) ;; - Functions -(define-extern bully-broken-cage-init-by-other function) -(define-extern bully-default-event-handler function) -(define-extern bully-post function) +(define-extern bully-broken-cage-init-by-other (function entity none :behavior bully-broken-cage)) +(define-extern bully-default-event-handler (function process int symbol event-message-block object :behavior bully)) +(define-extern bully-post (function none :behavior bully)) ;; - Unknowns (define-extern *bully-sg* skeleton-group) -(define-extern *bully-shadow-control* shadow-control) ;; unknown type -(define-extern bully-idle (state bully)) ;; unknown type -(define-extern bully-start-spinning (state bully)) ;; unknown type -(define-extern bully-stop-spinning (state bully)) ;; unknown type -(define-extern bully-notice (state bully)) ;; unknown type -(define-extern bully-die (state bully)) ;; unknown type +(define-extern *bully-shadow-control* shadow-control) (define-extern *bully-broken-cage-sg* skeleton-group) -(define-extern bully-broken-cage-explode (state bully-broken-cage)) ;; unknown type ;; ---------------------- @@ -33684,7 +33728,9 @@ ;; - Types (deftype puffer (process-drawable) - ((path-index int32 :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (fact-info-override fact-info-enemy :score 100 :offset 144) + (path-index int32 :offset-assert 176) (facing-ry float :offset-assert 180) (travel-ry float :offset-assert 184) (travel-speed float :offset-assert 188) @@ -33706,7 +33752,7 @@ (picked-point-time uint64 :offset-assert 272) (pick-new-point-delay uint64 :offset-assert 280) (last-on-screen-time uint64 :offset-assert 288) - (buddy basic :offset-assert 296) + (buddy process-drawable :offset-assert 296) ;; what is this, its very likely wrong! (nice-look lod-set :inline :offset-assert 300) (mean-look lod-set :inline :offset-assert 336) (dest-pos vector :inline :offset-assert 384) @@ -33717,18 +33763,18 @@ :heap-base #x130 :flag-assert #x2001300198 (:methods - (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-20 (_type_ vector) none 20) + (dummy-21 (_type_) none 21) + (dummy-22 (_type_) symbol 22) + (dummy-23 (_type_ symbol) symbol 23) + (dummy-24 (_type_ vector) symbol 24) + (dummy-25 (_type_ float) symbol 25) + (dummy-26 (_type_) none 26) + (dummy-27 (_type_) none 27) + (dummy-28 (_type_) none 28) + (flip-look! (_type_ symbol) none 29) + (dummy-30 (_type_) vector 30) + (dummy-31 (_type_) vector 31) ) ) @@ -33747,8 +33793,8 @@ ;; - Functions -(define-extern puffer-default-event-handler function) -(define-extern puffer-post function) +(define-extern puffer-default-event-handler (function process int symbol event-message-block object :behavior puffer)) +(define-extern puffer-post (function none :behavior puffer)) ;; - Unknowns @@ -34984,7 +35030,8 @@ ;; - Types (deftype spider-egg (process-drawable) - ((notify-actor basic :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (notify-actor entity-actor :offset-assert 176) (broken-look lod-set :inline :offset-assert 180) ) :method-count-assert 20 @@ -34997,7 +35044,7 @@ (define-extern *spider-egg-unbroken-sg* skeleton-group) (define-extern *spider-egg-broken-sg* skeleton-group) -(define-extern spider-egg-idle (state spider-egg)) ;; unknown type +(define-extern spider-egg-idle (state symbol spider-egg)) ;; unknown type (define-extern spider-egg-hatch (state spider-egg)) ;; unknown type (define-extern spider-egg-die (state spider-egg)) ;; unknown type @@ -35127,8 +35174,9 @@ ;; - Types +(declare-type snow-ball-roller process-drawable) (deftype snow-ball-shadow (process-drawable) - () + ((parent-override (pointer snow-ball-roller) :score 100 :offset 12)) :method-count-assert 20 :size-assert #xb0 :heap-base #x40 @@ -35154,7 +35202,8 @@ ) (deftype snow-ball-roller (process-drawable) - ((which-path int32 :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (which-path int32 :offset-assert 176) (path-u float :offset-assert 180) (path-speed float :offset-assert 184) (path-length float :offset-assert 188) @@ -35174,9 +35223,9 @@ :heap-base #xe0 :flag-assert #x1700e00150 (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) + (follow-path (_type_) float 20) + (play-landing-sound (_type_ float) sound-id 21) + (dummy-22 (_type_ process-drawable) none 22) ) ) @@ -35185,24 +35234,24 @@ (last-path-picked int32 :offset-assert 120) (same-path-picked-count int32 :offset-assert 124) (delay-til-next int32 :offset-assert 128) - (path snow-ball-path-info 2 :offset-assert 132) + (path curve-control 2 :offset-assert 132) ) :method-count-assert 16 :size-assert #x8c :heap-base #x20 :flag-assert #x100020008c (:methods - (dummy-14 () none 14) - (dummy-15 () none 15) + (dummy-14 (_type_ vector float int) none 14) ;; TODO - im pretty sure the 2nd arg is snow-ball-junction related! + (dummy-15 (_type_ vector int) none 15) ;; TODO - same type as above ) ) ;; - Functions -(define-extern snow-ball-roller-init-by-other function) -(define-extern snow-ball-shadow-init-by-other function) -(define-extern snow-ball-roller-path-update function) -(define-extern snow-ball-roller-path-init function) +(define-extern snow-ball-roller-init-by-other (function entity snow-ball float int vector none :behavior snow-ball-roller)) +(define-extern snow-ball-shadow-init-by-other (function none :behavior snow-ball-shadow)) +(define-extern snow-ball-roller-path-update (function none :behavior snow-ball-roller)) +(define-extern snow-ball-roller-path-init (function float :behavior snow-ball-roller)) ;; - Unknowns @@ -35465,8 +35514,8 @@ :heap-base #x60 :flag-assert #x16006000c8 (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) + (dummy-20 (_type_) none 20) + (shove-player (_type_ process-drawable) none 21) ) ) @@ -35489,7 +35538,8 @@ ;; - Types (deftype ram (process-drawable) - ((ram-id int32 :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (ram-id int32 :offset-assert 176) (give-fuel-cell? symbol :offset-assert 180) (give-fuel-cell-anim spool-anim :offset-assert 184) (part2 sparticle-launch-control :offset-assert 188) @@ -35501,9 +35551,9 @@ :heap-base #x70 :flag-assert #x17007000e0 (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) + (dummy-20 (_type_) object 20) + (dummy-21 (_type_) object 21) + (dummy-22 (_type_) symbol 22) ) ) @@ -35516,9 +35566,11 @@ ;; - Types +(declare-type ram-boss nav-enemy) (deftype ram-boss-proj (projectile) - ((part2 basic :offset-assert 412) - (launched? basic :offset-assert 416) + ((parent-override (pointer ram-boss) :score 100 :offset 12) + (part2 sparticle-launch-control :offset-assert 412) + (launched? symbol :offset-assert 416) (growth float :offset-assert 420) (charge-sound-id sound-id :offset-assert 424) (launch-time uint64 :offset-assert 432) @@ -35531,20 +35583,21 @@ ) (deftype ram-boss (nav-enemy) - ((facing-y float :offset-assert 400) + ((parent-override (pointer ram) :score 100 :offset 12) + (facing-y float :offset-assert 400) (player-dir-y float :offset-assert 404) (last-turn-speed float :offset-assert 408) (frustration int32 :offset-assert 412) - (dead? basic :offset-assert 416) - (has-shield? basic :offset-assert 420) + (dead? symbol :offset-assert 416) + (has-shield? symbol :offset-assert 420) (proj-stoked basic :offset-assert 424) (proj-status uint64 :offset-assert 432) - (part2 basic :offset-assert 440) + (part2 sparticle-launch-control :offset-assert 440) (proj-last-thrown-time uint64 :offset-assert 448) (nav-enemy-patrol-timeout uint64 :offset-assert 456) (proj-launch-vec vector :inline :offset-assert 464) (local-throw-point vector :inline :offset-assert 480) - (shield-jmod basic :offset-assert 496) + (shield-jmod joint-mod-set-local :offset-assert 496) ) :method-count-assert 76 :size-assert #x1f4 @@ -35554,28 +35607,28 @@ ;; - Functions -(define-extern snow-ram-proj-update-velocity function) -(define-extern ram-boss-on-ground-event-handler function) -(define-extern ram-boss-init-by-other function) +(define-extern snow-ram-proj-update-velocity (function ram-boss-proj none)) +(define-extern ram-boss-on-ground-event-handler (function process int symbol event-message-block object :behavior ram-boss)) +(define-extern ram-boss-init-by-other (function basic nav-enemy symbol none :behavior ram-boss)) ;; - Unknowns (define-extern ram-boss-tracking (state ram-boss)) ;; unknown type -;;(define-extern *ram-boss-nav-enemy-info-no-shield* object) ;; unknown type +(define-extern *ram-boss-nav-enemy-info-no-shield* nav-enemy-info) ;; unknown type (define-extern ram-boss-nav-resume (state ram-boss)) ;; unknown type (define-extern ram-boss-throw (state ram-boss)) ;; unknown type (define-extern ram-boss-nav-start (state ram-boss)) ;; unknown type (define-extern ram-boss-jump-down-hit-ground (state ram-boss)) ;; unknown type -(define-extern ram-boss-jump-down (state ram-boss)) ;; unknown type -(define-extern ram-boss-already-down (state ram-boss)) ;; unknown type +(define-extern ram-boss-jump-down (state basic vector ram-boss)) ;; unknown type +(define-extern ram-boss-already-down (state basic vector ram-boss)) ;; unknown type (define-extern ram-boss-idle (state ram-boss)) ;; unknown type (define-extern *ram-boss-sg* skeleton-group) (define-extern *ram-boss-nav-enemy-info* nav-enemy-info) (define-extern ram-boss-lose-shield (state ram-boss)) ;; unknown type (define-extern ram-boss-up-defend-block (state ram-boss)) ;; unknown type (define-extern ram-boss-forward-defend-block (state ram-boss)) ;; unknown type -(define-extern ram-boss-proj-launch (state ram-boss)) ;; unknown type -(define-extern ram-boss-proj-growing (state ram-boss)) ;; unknown type +(define-extern ram-boss-proj-launch (state ram-boss-proj)) ;; unknown type +(define-extern ram-boss-proj-growing (state ram-boss-proj)) ;; unknown type (define-extern ram-boss-show-anims (state ram-boss)) ;; 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 43115aa38b..610815e4e4 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -890,5 +890,22 @@ [99, "(function symbol)"] ], + "swamp-blimp": [ + [29, "(function int none)"] + ], + + "jungle-mirrors": [ + [14, "(function string none)"], + [32, "(function entity-actor (pointer symbol) object)"] // passed to `actor-link-info` function + ], + + "voicebox": [ + [1, "(function none :behavior voicebox)"] + ], + + "seagull": [ + [30, "(function process symbol)"] + ], + "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 d7451025e0..aecf038e12 100644 --- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc @@ -312,14 +312,14 @@ // all unchecked and in level DGO code "(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", // CFG failure "kermit-check-to-hit-player?", "(anon-function 36 mistycannon)", + "(anon-function 6 title-obs)", + "(anon-function 43 maincave-obs)", "(anon-function 2 target-tube)", - "(anon-function 5 orbit-plat)", + "(anon-function 5 orbit-plat)", // CFG "(anon-function 2 ogreboss)" ], diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index c4adfeb1bd..9e83f806a4 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -809,7 +809,10 @@ ], "balloonlurker": [ + ["L99", "vector"], ["L105", "vector"], + ["L107", "attack-info"], + ["L108", "attack-info"], ["L113", "rigid-body-platform-constants"] ], @@ -819,7 +822,10 @@ ["L268", "vector"] ], - "citb-plat": [["L155", "rigid-body-platform-constants"]], + "citb-plat": [ + ["L136", "attack-info"], + ["L155", "rigid-body-platform-constants"] + ], "qbert-plat": [["L99", "rigid-body-platform-constants"]], @@ -843,7 +849,12 @@ ["L46", "vector"] ], - "gnawer": [["L216", "(inline-array gnawer-segment-info)", 10]], + "gnawer": [ + ["L195", "attack-info"], + ["L196", "attack-info"], + ["L200", "attack-info"], + ["L216", "(inline-array gnawer-segment-info)", 10] + ], "target-tube": [["L142", "vector"]], @@ -937,7 +948,9 @@ ["L314", "float", true] ], - "seagull": [["L226", "(inline-array air-box)", 20]], + "seagull": [ + ["L226", "(inline-array air-box)", 10] + ], "rolling-race-ring": [ ["L94", "vector"], @@ -1865,6 +1878,95 @@ ["L1", "vu-function"] ], + "snow-ram-boss": [ + ["L220", "attack-info"], + ["L221", "attack-info"], + ["L222", "attack-info"], + ["L223", "attack-info"], + ["L225", "attack-info"] + ], + + "snow-ram": [ + ["L73", "attack-info"] + ], + + "snow-bumper": [ + ["L54", "attack-info"] + ], + + "snow-ball": [ + ["L86", "snow-ball-path-info"], + ["L87", "snow-ball-path-info"], + ["L89", "attack-info"] + ], + + "puffer": [ + ["L170", "attack-info"] + ], + + "driller-lurker": [ + ["L174", "attack-info"], + ["L175", "attack-info"] + ], + + "dark-crystal": [ + ["L36", "attack-info"] + ], + + "kermit": [ + ["L164", "attack-info"] + ], + + "swamp-blimp": [ + ["L177", "vector"], + ["L182", "vector"], + ["L187", "vector"], + ["L198", "tetherrock-info"], + ["L200", "tetherrock-info"], + ["L203", "tetherrock-info"], + ["L206", "tetherrock-info"], + ["L209", "tetherrock-info"] + ], + + "mistycannon": [ + ["L199", "attack-info"] + ], + + "darkvine": [ + ["L41", "attack-info"] + ], + + "jungle-mirrors": [ + ["L325", "vector"], + ["L326", "vector4w-4"] + ], + + "quicksandlurker": [ + ["L111", "attack-info"] + ], + + "voicebox": [ + ["L47", "vector"], + ["L48", "vector"], + ["L49", "vector"], + ["L50", "vector"], + ["L51", "vector"] + ], + + "mother-spider": [ + ["L278", "vector"], + ["L279", "vector"], + ["L288", "attack-info"], + ["L301", "(inline-array mother-spider-leg-info)", 8], + ["L302", "(inline-array mother-spider-thread)", 9] + ], + + "bully": [ + ["L90", "attack-info"], + ["L91", "attack-info"], + ["L93", "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 64cd24a635..96cb447be1 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -1054,7 +1054,7 @@ "target-no-stick-post": [[16, "vector"]], "target-no-move-post": [ - [16, "collide-edge-hold-list"] // a total guess + [16, "overlaps-others-params"] // a total guess ], "target-slide-down-post": [ @@ -1065,7 +1065,7 @@ ], "target-no-ja-move-post": [ - [16, "collide-edge-hold-list"] // a total guess + [16, "overlaps-others-params"] // a total guess ], "target-print-stats": [ @@ -1303,7 +1303,11 @@ "voicebox-track": [ [16, "vector"], [32, "vector"], - [48, "vector"] + [48, "vector"], + [64, "quaternion"], + [80, "vector"], + [96, "vector"], + [112, "event-message-block"] ], "crate-standard-event-handler": [[16, "event-message-block"]], @@ -1397,7 +1401,7 @@ [16, "vector"], [32, "vector"], [48, "vector"], - [64, "collide-mesh-cache-tri"], + [64, "collide-tri-result"], [160, "vector"], [176, "vector"], [192, "vector"], @@ -1432,7 +1436,7 @@ "cam-string-find-position-rel!": [ [16, "vector"], [32, "vector"], - [48, "bone"], + [48, "collide-tri-result"], [144, "matrix"] ], "cam-los-spline-collide": [ @@ -1558,7 +1562,7 @@ ], "cam-string-find-hidden": [ - [16, "collide-mesh-cache-tri"], + [16, "collide-tri-result"], [112, "vector"], [128, "vector"] ], @@ -1569,7 +1573,7 @@ [48, "vector"], [64, "vector"], [80, "vector"], - [96, "collide-mesh-cache-tri"], + [96, "collide-tri-result"], [192, "vector"], [208, "vector"], [224, "vector"] @@ -1596,7 +1600,7 @@ [128, "vector"], [144, "vector"], [160, "vector"], - [176, "collide-mesh-cache-tri"], + [176, "collide-tri-result"], [272, "vector"] ], @@ -1606,13 +1610,13 @@ [48, "vector"], [64, "vector"], [80, "vector"], - [96, "collide-mesh-cache-tri"], + [96, "collide-tri-result"], [192, "vector"] ], "(enter cam-string)": [ [16, "vector"], - [32, "collide-mesh-cache-tri"], + [32, "collide-tri-result"], [128, "vector"], [144, "vector"], [160, "vector"] @@ -1785,7 +1789,7 @@ [32, "vector"] ], "(method 20 flying-lurker)": [ - [16, "collide-mesh-cache-tri"], + [16, "collide-tri-result"], [112, "vector"], [128, "vector"], [144, "bounding-box"], @@ -2605,7 +2609,7 @@ [16, "vector"], [32, "vector"], [48, "vector"], - [64, "collide-mesh-cache-tri"], + [64, "collide-tri-result"], [160, "event-message-block"] ], @@ -3124,7 +3128,7 @@ [16, "vector"], [32, "vector"], [48, "vector"], - [64, "collide-mesh-cache-tri"], + [64, "collide-tri-result"], [160, "vector"], [176, "event-message-block"] ], @@ -4187,7 +4191,7 @@ ], "(method 59 collide-shape-moving)": [ - [16, "collide-mesh-cache-tri"], + [16, "collide-tri-result"], [112, "touching-shapes-entry"] ], @@ -5041,5 +5045,839 @@ [32, "matrix"] ], + "(trans notice-blue crate)": [ + [16, "event-message-block"] + ], + + "(event die crate)": [ + [16, "event-message-block"] + ], + + "(code notice-blue crate)": [ + [16, "vector"] + ], + + "(method 28 ram-boss-proj)": [ + [16, "vector"] + ], + + "(method 56 ram-boss)": [ + [16, "vector"] + ], + + "(code ram-boss-jump-down)": [ + [16, "vector"] + ], + + "(method 57 ram-boss)": [ + [16, "vector"] + ], + + "(post ram-boss-lose-shield)": [ + [16, "vector"] + ], + + "(trans ram-boss-tracking)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(code ram-boss-already-down)": [ + [16, "vector"], + [32, "vector"] + ], + + "(code ram-boss-lose-shield)": [ + [16, "vector"], + [32, "vector"] + ], + + "snow-ram-proj-update-velocity": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "matrix"] + ], + + "ram-boss-on-ground-event-handler": [ + [16, "event-message-block"] + ], + + "(enter ram-boss-throw)": [ + [16, "event-message-block"] + ], + + "(code nav-enemy-die ram-boss)": [ + [16, "event-message-block"] + ], + + "(method 55 ram-boss)": [ + [16, "vector"], + [32, "vector"], + [48, "collide-mesh-cache-tri"] + ], + + "(enter ram-boss-jump-down)": [ + [16, "vector"], + [32, "matrix"], + [96, "vector"], + [112, "vector"] + ], + + "(method 20 ram)": [ + [16, "vector"] + ], + + "(method 21 ram)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + + "(event ram-idle)": [ + [16, "event-message-block"] + ], + + "(code ram-idle)": [ + [32, "event-message-block"] + ], + + "(method 21 snow-bumper)": [ + [16, "vector"], + [32, "vector"], + [48, "event-message-block"] + ], + + "(method 20 snow-ball-roller)": [ + [16, "vector"] + ], + + "snow-ball-roller-path-update": [ + [16, "vector"], + [32, "vector"], + [48, "matrix"], + [112, "matrix"], + [176, "vector"] + ], + + "(method 22 snow-ball-roller)": [ + [16, "vector"], + [32, "vector"], + [48, "event-message-block"] + ], + + "(code snow-ball-idle)": [ + [16, "vector"] + ], + + "(method 11 spider-egg)": [ + [16, "vector"] + ], + + "(code spider-egg-die)": [ + [16, "event-message-block"] + ], + + "puffer-default-event-handler": [ + [16, "event-message-block"] + ], + + "(method 28 puffer)": [ + [16, "collide-tri-result"], + [112, "vector"], + [128, "vector"] + ], + + "(method 23 puffer)": [ + [16, ["inline-array", "vector", 5]], + [96, "vector"] + ], + + "(method 20 puffer)": [ + [16, "vector"], + [32, "vector"], + [48, "clip-travel-vector-to-mesh-return-info"], + [208, "matrix"] + ], + + "(trans puffer-patrol)": [ + [16, "vector"] + ], + + "(trans puffer-attack)": [ + [16, "vector"] + ], + + "(method 27 driller-lurker)": [ + [16, "vector"] + ], + + "(method 11 driller-lurker)": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 20 driller-lurker)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "quaternion"] + ], + + "driller-lurker-default-event-handler": [ + [16, "event-message-block"] + ], + + "(code driller-lurker-die)": [ + [16, "event-message-block"] + ], + + "(code dark-crystal-explode)": [ + [16, "joint-exploder-tuning"] + ], + + "(method 20 dark-crystal)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "collide-tri-result"], + [160, "event-message-block"] + ], + + "(event kermit-pulse-idle)": [ + [16, "event-message-block"] + ], + + "kermit-check-tongue-is-clear?": [ + [16, "vector"], + [32, "collide-tri-result"] + ], + + "kermit-check-to-hit-player?": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "kermit-set-nav-mesh-target": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(enter kermit-chase-new-position)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "kermit-post": [ + [16, "vector"] + ], + + "(trans kermit-tongue-stuck)": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "gnawer-falling-segment-init-by-other": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 24 gnawer)": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 30 gnawer)": [ + [16, "vector"], + [32, "vector"] + ], + + "(code gnawer-dying-give-pickups)": [ + [16, "vector"], + [32, "vector"], + [48, "event-message-block"] + ], + + "(code gnawer-chewing-on-post)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + + "(method 22 gnawer)": [ + [16, "bounding-box"] + ], + + "(method 25 gnawer)": [ + [16, "vector"] + ], + + "(method 29 gnawer)": [ + [16, "vector"] + ], + + "(trans gnawer-die)": [ + [16, "vector"] + ], + + "(method 21 gnawer)": [ + [16, "vector"], + [32, "vector"] + ], + + "(code gnawer-give-fuel-cell)": [ + [16, "vector"] + ], + + "(code gnawer-put-items-at-dest)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(event gnawer-chewing-on-post)": [ + [16, "event-message-block"] + ], + + "(event gnawer-run)": [ + [16, "event-message-block"] + ], + + "(code mother-spider-egg-hatch)": [ + [16, "event-message-block"] + ], + + "(code mother-spider-egg-die-exit)": [ + [16, "event-message-block"] + ], + + "(method 21 mother-spider-egg)": [ + [16, "collide-tri-result"], + [112, "vector"], + [128, "vector"] + ], + + "(code mother-spider-egg-on-ground)": [ + [16, "quaternion"], + [32, "quaternion"], + [48, "vector"], + [64, "vector"] + ], + + "(trans mother-spider-egg-hatch)": [ + [16, "vector"] + ], + + "(trans precursor-arm-idle)": [ + [16, "matrix"] + ], + + "swamp-rope-break-code": [ + [16, "matrix"], + [80, "vector"] + ], + + "(method 10 swamp-blimp-oscillator)": [ + [16, "vector"] + ], + + "swamp-rope-update-bounding-spheres": [ + [16, "vector"] + ], + + "swamp-rope-trans": [ + [16, "matrix"], + [80, "matrix"], + [144, "vector"] + ], + + "(code swamp-tetherrock-idle)": [ + [16, "vector"], + [32, "vector"], + [48, "quaternion"] + ], + + "(code swamp-tetherrock-break)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "blimp-trans": [ + [16, "vector"], + [32, "vector"], + [48, "quaternion"], + [64, "vector"] + ], + + "(enter swamp-blimp-bye-bye)": [ + [16, "event-message-block"] + ], + + "(code swamp-blimp-bye-bye)": [ + [16, "quaternion"] + ], + + "swamp-blimp-setup": [ + [16, "vector"] + ], + + "(method 11 swamp-blimp)": [ + [16, "vector"] + ], + + "bustarock": [ + [16, "event-message-block"] + ], + + "(code mistycannon-missile-in-water)": [ + [16, "event-message-block"], + [32, "vector"] + ], + + "(method 20 mistycannon-missile)": [ + [16, "vector"] + ], + + "(post mistycannon-missile-idle)": [ + [16, "vector"] + ], + + "(code mistycannon-missile-explode)": [ + [16, "vector2w"] + ], + + "(event mistycannon-missile-explode)": [ + [16, "vector"], + [32, "collide-mesh-cache-tri"], + [128, "event-message-block"] + ], + + "mistycannon-collision-reaction": [ + [16, "vector"], + [32, "vector"] + ], + + "spawn-mistycannon-missile": [ + [16, "mistycannon-init-data"] + ], + + "(method 22 mistycannon)": [ + [16, "vector"] + ], + + "mistycannon-postbind-function": [ + [16, "vector"] + ], + + "(code mistycannon-aim-at-player)": [ + [16, "vector"] + ], + + "mistycannon-do-aim": [ + [16, "trajectory-params"], + [48, "vector"], + [64, "vector"], + [80, "vector"], + [96, "vector"] + ], + + "(code mistycannon-waiting-for-player)": [ + [16, "font-context"], + [112, "event-message-block"] + ], + + "(event mistycannon-player-control)": [ + [16, "event-message-block"] + ], + + "(code mistycannon-player-control)": [ + [16, "event-message-block"] + ], + + "(trans rigid-body-platform-idle citb-chain-plat)": [ + [16, "event-message-block"] + ], + + "(trans rigid-body-platform-float citb-chain-plat)": [ + [16, "event-message-block"] + ], + + "(event citb-firehose-blast)": [ + [16, "event-message-block"] + ], + + "(method 27 citb-chain-plat)": [ + [16, "vector"] + ], + + "(trans plat-button-move-downward citb-exit-plat)": [ + [16, "vector"] + ], + + "(trans plat-button-move-upward citb-exit-plat)": [ + [16, "vector"] + ], + + "citb-firehose-blast-particles": [ + [16, "quaternion"] + ], + + "(code citb-chain-plat-settle)": [ + [16, "vector"], + [32, "quaternion"] + ], + + "citb-exit-plat-move-player": [ + [16, "vector"], + [32, "vector"], + [48, "event-message-block"] + ], + + "darkvine-event-handler": [ + [16, "event-message-block"] + ], + + "(post darkvine-idle)": [ + [16, "vector"] + ], + + "(enter cam-periscope)": [ + [16, "vector"] + ], + + "(code cam-periscope)": [ + [16, "vector"] + ], + + "(code reflector-idle)": [ + [16, "vector"] + ], + + "(code reflector-mirror-idle)": [ + [16, "vector"] + ], + + "periscope-crosshair": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector4w"], + [80, "vector"], + [96, "vector"], + [112, "vector"] + ], + + "periscope-find-reflection-angles": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + + "(code periscope-wait-for-player)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "font-context"], + [176, "event-message-block"] + ], + + "periscope-find-aim-at-angles": [ + [16, "vector"], + [32, "vector"] + ], + + "draw-power-beam": [ + [16, "vector"], + [32, "collide-mesh-cache-tri"], + [128, "event-message-block"] + ], + + "periscope-update-joints": [ + [16, "event-message-block"] + ], + + "(code reflector-mirror-broken)": [ + [16, "event-message-block"] + ], + + "(code periscope-player-control)": [ + [16, "event-message-block"] + ], + + "(code reflector-origin-idle)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(code launcherdoor-closed)": [ + [16, "event-message-block"] + ], + + "(event quicksandlurker-missile-idle)": [ + [16, "event-message-block"] + ], + + "quicksandlurker-spit": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "spawn-quicksandlurker-missile": [ + [16, "quicksandlurker-missile-init-data"] + ], + + "balloonlurker-snap-to-path-point": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 23 balloonlurker)": [ + [16, "vector"], + [32, "vector"] + ], + + "balloonlurker-find-nearest-path-point": [ + [16, "vector"] + ], + + "(post balloonlurker-pilot-die)": [ + [16, "vector"] + ], + + "balloonlurker-post": [ + [16, "quaternion"] + ], + + "balloonlurker-event-handler": [ + [16, "event-message-block"] + ], + + "(event balloonlurker-pilot-idle)": [ + [16, "event-message-block"] + ], + + "(code balloonlurker-die)": [ + [32, "event-message-block"] + ], + + "(event orbit-plat-idle)": [ + [16, "event-message-block"] + ], + + "(code orbit-plat-idle)": [ + [16, "event-message-block"] + ], + + "(code orbit-plat-still)": [ + [16, "event-message-block"] + ], + + "(code orbit-plat-riding)": [ + [16, "event-message-block"] + ], + + "(code orbit-plat-reset)": [ + [16, "event-message-block"] + ], + + "(method 20 orbit-plat-bottom)": [ + [16, "vector"] + ], + + "(code orbit-plat-bottom-idle)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + + "(method 27 orbit-plat)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"], + [96, "vector"] + ], + + "get-rotate-point!": [ + [16, "vector"], + [32, "vector"] + ], + + "(code enter voicebox)": [ + [16, "event-message-block"] + ], + + "(code exit voicebox)": [ + [16, "event-message-block"] + ], + + "mother-spider-death-event-handler": [ + [16, "vector"] + ], + + "mother-spider-full-joint-callback": [ + [16, "vector"] + ], + + "(method 29 mother-spider)": [ + [16, "vector"] + ], + + "(method 30 mother-spider)": [ + [16, "baby-spider-spawn-params"] + ], + + "(trans mother-spider-leg-flying)": [ + [16, "collide-mesh-cache-tri"], + [112, "vector"] + ], + + "(method 24 mother-spider)": [ + [16, "collide-mesh-cache-tri"], + [112, "vector"], + [128, "vector"] + ], + + "(method 20 mother-spider)": [ + [16, "vector"], + [32, "vector"], + [48, "collide-mesh-cache-tri"], + [144, "vector"], + [160, "collide-mesh-cache-tri"] + ], + + "mother-spider-default-event-handler": [ + [16, "vector"], + [32, "vector"], + [48, "event-message-block"], + [128, "vector"], + [144, "vector"] + ], + + "(method 23 mother-spider)": [ + [16, "vector"], + [32, "event-message-block"], + [128, "vector"], + [144, "vector"] + ], + + "(method 21 mother-spider)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"], + [96, "vector"] + ], + + "(code mother-spider-spit)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + + "(trans mother-spider-tracking)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(method 11 mother-spider)": [ + [32, "vector"], + [48, "vector"] + ], + + "(enter mother-spider-die-from-uppercut)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(code mother-spider-birth-baby)": [ + [16, "vector"], + [32, "vector"] + ], + + "bully-default-event-handler": [ + [16, "vector"], + [32, "vector"], + [48, "event-message-block"] + ], + + "(method 20 bully)": [ + [16, "check-vector-collision-with-nav-spheres-info"], + [64, "vector"], + [80, "clip-travel-vector-to-mesh-return-info"], + [240, "vector"] + ], + + "(code bully-notice)": [ + [16, "vector"] + ], + + "(enter bully-start-spinning)": [ + [16, "vector"] + ], + + "(method 24 seagull)": [ + [16, "vector"] + ], + + "seagull-reaction": [ + [16, "vector"], + [32, "vector"] + ], + + "(code seagull-landing)": [ + [16, "collide-tri-result"], + [112, "vector"] + ], + + "(trans seagull-idle)": [ + [16, "vector"] + ], + + "(method 16 seagullflock)": [ + [16, "vector"] + ], + + "(method 11 seagullflock)": [ + [16, "vector"] + ], + + "(code seagullflock-at-waterfall)": [ + [16, "event-message-block"] + ], + + "(code seagull-flying)": [ + [16, "vector"] + ], + + "(code seagull-soaring)": [ + [16, "vector"] + ], + + "(method 26 seagull)": [ + [16, "vector"] + ], + + "seagull-post": [ + [16, "quaternion"], + [32, "quaternion"] + ], + "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 161d270f4a..f76cf1e34b 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -2641,8 +2641,6 @@ [101, "v1", "art-joint-anim"] ], - "voicebox-track": [[4, "a0", "target"]], - "(method 27 plat-button)": [[37, "v1", "art-joint-anim"]], "(method 11 plat-button)": [[17, "v1", "vector"]], @@ -6377,5 +6375,601 @@ [49, "gp", "(pointer uint32)"] ], + "(method 24 ram-boss-proj)": [ + [64, "v0", "sound-rpc-set-param"], + [83, "gp", "process-drawable"], + [86, "gp", "process-drawable"] + ], + + "ram-boss-on-ground-event-handler": [ + [260, "v1", "ram-boss"] + ], + + "(method 52 ram-boss)": [ + [11, "v1", "(array collide-shape-prim)"], + [21, "v1", "(array collide-shape-prim)"], + [31, "v1", "(array collide-shape-prim)"], + [41, "v1", "(array collide-shape-prim)"] + ], + + "(method 53 ram-boss)": [ + [2, "v1", "(array collide-shape-prim)"], + [5, "v1", "(array collide-shape-prim)"], + [8, "v1", "(array collide-shape-prim)"], + [11, "v1", "(array collide-shape-prim)"] + ], + + "(code ram-boss-idle)": [ + [38, "v1", "collide-shape-prim-group"] + ], + + "(code ram-boss-jump-down)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code ram-boss-jump-down-hit-ground)": [ + [23, "v1", "art-joint-anim"] + ], + + "(code ram-boss-forward-defend-block)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code ram-boss-up-defend-block)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-victory ram-boss)": [ + [28, "v1", "art-joint-anim"] + ], + + "(code ram-boss-lose-shield)": [ + [29, "v1", "art-joint-anim"] + ], + + "(code ram-boss-throw)": [ + [16, "v1", "art-joint-anim"], + [67, "v1", "art-joint-anim"] + ], + + "(method 56 ram-boss)": [ + [24, "v0", "ram-boss-proj"], + [58, "v1", "(pointer ram-boss-proj)"] + ], + + "(code ram-idle)": [ + [28, "v1", "art-joint-anim"], + [98, "v1", "art-joint-anim"] + ], + + "(code ram-give-fuel-cell)": [ + [47, "v0", "snowcam"], + [69, "v1", "(pointer snowcam)"] + ], + + "(code snow-bumper-deactivate)": [ + [29, "v1", "art-joint-anim"], + [106, "v1", "art-joint-anim"] + ], + + "(code snow-bumper-spawn-fuel-cell)": [ + [16, "v1", "art-joint-anim"] + ], + + "(code snow-bumper-inactive-idle)": [ + [19, "v1", "art-joint-anim"] + ], + + "(method 7 snow-bumper)": [ + [14, "t9", "(function process-drawable int process-drawable)"] + ], + + "(method 11 snow-bumper)": [ + ["_stack_", 16, "res-tag"], + [216, "v0", "(pointer float)"] + ], + + "(code spider-egg-idle)": [ + [20, "v1", "art-joint-anim"], + [97, "v1", "art-joint-anim"], + [153, "v1", "art-joint-anim"] + ], + + "(code spider-egg-hatch)": [ + [62, "v1", "art-joint-anim"] + ], + + "(code spider-egg-die)": [ + [79, "v1", "art-joint-anim"] + ], + + "(code puffer-die)": [ + [33, "v1", "art-joint-anim"] + ], + + "puffer-default-event-handler": [ + [28, "v1", "process-drawable"], + [34, "v1", "process-drawable"] + ], + + "(method 22 puffer)": [ + [10, "v1", "process-drawable"] + ], + + "(method 25 puffer)": [ + [49, "v1", "puffer"], + [56, "v1", "puffer"] + ], + + "(method 23 puffer)": [ + [18, "v1", "process-drawable"] + ], + + "(trans puffer-attack)": [ + [23, "v1", "collide-shape-prim-group"] + ], + + "(method 30 puffer)": [ + [16, "v1", "(array collide-shape-prim)"] + ], + + "(method 31 puffer)": [ + [16, "v1", "(array collide-shape-prim)"] + ], + + "(method 7 puffer)": [ + [14, "t9", "(function process-drawable int process-drawable)"] + ], + + "(method 11 puffer)": [ + ["_stack_", 16, "res-tag"], + [213, "v0", "(pointer float)"] + ], + + "driller-lurker-default-event-handler": [ + [[51, 87], "s1", "touching-shapes-entry"] + ], + + "(code driller-lurker-idle-drilling)": [ + [33, "v1", "art-joint-anim"] + ], + + "(code driller-lurker-jammed-standing)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code driller-lurker-die)": [ + [28, "v1", "art-joint-anim"] + ], + + "(method 7 driller-lurker)": [ + [24, "t9", "(function process-drawable int process-drawable)"] + ], + + "(method 11 driller-lurker)": [ + ["_stack_", 16, "res-tag"], + [373, "v0", "(pointer float)"] + ], + + "kermit-short-hop": [ + [10, "v1", "art-joint-anim"] + ], + + "kermit-long-hop": [ + [10, "v1", "art-joint-anim"] + ], + + "(code kermit-patrol)": [ + [10, "v1", "art-joint-anim"] + ], + + "(code kermit-chase-new-position)": [ + [16, "v1", "art-joint-anim"] + ], + + "(code kermit-chase)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code kermit-attack)": [ + [22, "v1", "art-joint-anim"] + ], + + "(code kermit-tongue-stuck)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code kermit-retract-tongue)": [ + [14, "v1", "art-joint-anim"], + [90, "v1", "art-joint-anim"] + ], + + "(method 39 kermit)": [ + [7, "t9", "(function nav-enemy none)"] + ], + + "(code falling gnawer-falling-segment)": [ + [16, "v1", "art-joint-anim"], + [70, "v1", "art-joint-anim"] + ], + + "(method 22 gnawer)": [ + [18, "f0", "float"] + ], + + "(code gnawer-chewing-on-post)": [ + [139, "v1", "art-joint-anim"], + [210, "v1", "art-joint-anim"], + [272, "v1", "art-joint-anim"], + [363, "v1", "art-joint-anim"], + [451, "v1", "art-joint-anim"] + ], + + "(code gnawer-retreat-into-post)": [ + [18, "v1", "art-joint-anim"] + ], + + "(code gnawer-die)": [ + [28, "v1", "art-joint-anim"] + ], + + "(event gnawer-run)": [ + [54, "a2", "touching-shapes-entry"] + ], + + "(method 7 gnawer)": [ + [19, "t9", "(function nav-enemy int nav-enemy)"] + ], + + "(code gnawer-give-fuel-cell)": [ + [43, "v0", "maincavecam"], + [64, "v1", "maincavecam"] + ], + + "(method 11 gnawer)": [ + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"], + ["_stack_", 48, "res-tag"], + [361, "v0", "(pointer float)"], + [426, "v0", "(pointer int32)"], + [446, "v0", "(pointer int32)"] + ], + + "(code mother-spider-egg-falling)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code mother-spider-egg-hatch)": [ + [65, "v1", "art-joint-anim"] + ], + + "(code mother-spider-egg-die)": [ + [63, "v1", "art-joint-anim"] + ], + + "(code mother-spider-egg-die-while-falling)": [ + [63, "v1", "art-joint-anim"] + ], + + "(code mother-spider-egg-on-ground)": [ + [50, "v1", "art-joint-anim"], + [124, "v1", "art-joint-anim"] + ], + + "(method 7 swamp-blimp)": [ + [19, "t9", "(function process-drawable int process-drawable)"] + ], + + "(code swamp-tetherrock-break)": [ + [238, "s4", "handle"], + [261, "s4", "handle"], + [283, "s4", "handle"], + [300, "s4", "handle"], + [373, "a0", "swamp-blimp"] + ], + + "(event swamp-tetherrock-idle)": [ + [55, "gp", "process-drawable"] + ], + + "(code swamp-rope-break)": [ + [10, "v1", "float"], + [26, "v1", "float"], + [48, "v1", "float"], + [64, "v1", "art-joint-anim"] + ], + + "swamp-rope-trans": [ + [40, "v1", "swamp-rope"], + [48, "v1", "swamp-rope"] + ], + + "(code swamp-rope-idle-arm)": [ + [13, "v1", "swamp-rope"] + ], + + "swamp-blimp-setup": [ + [[26, 117], "s4", "swamp-rope"] + ], + + "(code swamp-rope-idle-rock)": [ + [32, "a0", "swamp-rope"], + [33, "a0", "swamp-rope"] + ], + + "(code mistycannon-missile-idle)": [ + [207, "v1", "art-joint-anim"], + [257, "v1", "art-joint-anim"] + ], + + "(event mistycannon-missile-explode)": [ + [16, "v1", "mistycannon-missile"] + ], + + "(code cam-mistycannon)": [ + [3, "a1", "mistycannon"], + [9, "v1", "mistycannon"] + ], + + "(method 26 citb-plat)": [ + [18, "v1", "vector"], + [47, "v1", "vector"] + ], + + "(method 23 citb-chain-plat)": [ + [9, "t9", "(function rigid-body-platform float none)"] + ], + + "(code citb-firehose-blast)": [ + [10, "v1", "art-joint-anim"], + [86, "v1", "art-joint-anim"], + [157, "v1", "art-joint-anim"] + ], + + "(trans plat-button-move-downward citb-exit-plat)": [ + [10, "v0", "(state plat-button)"] + ], + + "(trans plat-button-move-upward citb-exit-plat)": [ + [10, "v0", "(state plat-button)"] + ], + + "(code darkvine-idle)": [ + [32, "v1", "art-joint-anim"] + ], + + "(code darkvine-retreat)": [ + [23, "v1", "art-joint-anim"], + [138, "v1", "art-joint-anim"] + ], + + "(enter cam-periscope)": [ + [7, "a1", "periscope"], + [13, "a1", "periscope"], + [16, "v1", "periscope"] + ], + + "(code cam-periscope)": [ + [2, "v1", "periscope"], + [4, "v1", "periscope"], + [12, "v1", "periscope"], + [71, "v1", "periscope"], + [79, "v1", "periscope"] + ], + + "periscope-crosshair": [ + [50, "v1", "periscope"] + ], + + "periscope-find-next": [ + [58, "v1", "vector"] + ], + + "(code reflector-origin-idle)": [ + [60, "v1", "periscope"] + ], + + "(code periscope-player-control)": [ + [41, "v0", "(pointer float)"], + [508, "gp", "handle"] + ], + + "quicksandlurker-post": [ + [50, "a0", "water-anim"], + [54, "a0", "water-anim"] + ], + + "(code quicksandlurker-wait)": [ + [33, "v1", "art-joint-anim"], + [89, "v1", "art-joint-anim"] + ], + + "(code quicksandlurker-yawn)": [ + [10, "v1", "art-joint-anim"] + ], + + "(code quicksandlurker-track)": [ + [29, "v1", "art-joint-anim"] + ], + + "(code quicksandlurker-attack)": [ + [12, "v1", "art-joint-anim"] + ], + + "(code quicksandlurker-hide)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code quicksandlurker-popup)": [ + [38, "v1", "art-joint-anim"] + ], + + "(code quicksandlurker-die)": [ + [18, "v1", "art-joint-anim"] + ], + + "(code quicksandlurker-victory)": [ + [18, "v1", "art-joint-anim"], + [69, "v1", "art-joint-anim"] + ], + + "(method 7 balloonlurker)": [ + [29, "t9", "(function process-drawable int process-drawable)"] + ], + + "(code balloonlurker-pilot-die)": [ + [58, "v1", "art-joint-anim"] + ], + + "(code orbit-plat-bottom-idle)": [ + [29, "v1", "orbit-plat"], + [35, "v1", "orbit-plat"], + [109, "v1", "orbit-plat"], + [126, "v1", "orbit-plat"] + ], + + "(method 27 orbit-plat)": [ + [20, "s5", "orbit-plat"], + [29, "s5", "orbit-plat"], + [33, "s5", "orbit-plat"], + [40, "s5", "orbit-plat"], + [44, "s5", "orbit-plat"], + [72, "a2", "orbit-plat"], + [153, "a1", "orbit-plat"] + ], + + "(code mother-spider-leg-flying)": [ + [21, "v1", "art-joint-anim"], + [80, "v1", "art-joint-anim"] + ], + + "(code mother-spider-stop-traveling)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code mother-spider-hit-while-birthing)": [ + [14, "v1", "art-joint-anim"], + [68, "v1", "art-joint-anim"] + ], + + "(code mother-spider-birthing)": [ + [53, "v1", "art-joint-anim"] + ], + + "(code mother-spider-die)": [ + [36, "v1", "art-joint-anim"] + ], + + "(code mother-spider-die-from-uppercut)": [ + [31, "v1", "art-joint-anim"] + ], + + "(code mother-spider-spit)": [ + [15, "v1", "art-joint-anim"] + ], + + "(code mother-spider-birth-baby)": [ + [15, "v1", "art-joint-anim"] + ], + + "(code mother-spider-hit-while-tracking)": [ + [14, "v1", "art-joint-anim"], + [68, "v1", "art-joint-anim"] + ], + + "(code mother-spider-tracking)": [ + [53, "v1", "art-joint-anim"] + ], + + "mother-spider-default-event-handler": [ + [52, "a0", "process-drawable"], + [138, "a0", "process-drawable"] + ], + + "mother-spider-death-event-handler": [ + [7, "a0", "process-drawable"] + ], + + "(code bully-broken-cage-explode)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code bully-notice)": [ + [148, "v1", "art-joint-anim"] + ], + + "(code bully-start-spinning)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code bully-die)": [ + [70, "v1", "art-joint-anim"] + ], + + "bully-default-event-handler": [ + [21, "gp", "process-drawable"] + ], + + "(trans bully-notice)": [ + [10, "v1", "collide-shape-prim-group"] + ], + + "(trans bully-start-spinning)": [ + [10, "v1", "collide-shape-prim-group"] + ], + + "(trans bully-stop-spinning)": [ + [10, "v1", "collide-shape-prim-group"] + ], + + "(method 7 bully)": [ + [14, "t9", "(function process-drawable int process-drawable)"] + ], + + "(enter seagull-idle)": [ + [20, "v1", "float"] + ], + + "seagull-init-by-other": [ + [96, "v1", "float"] + ], + + "seagull-reaction": [ + [36, "s4", "seagull"], + [38, "s4", "seagull"] + ], + + "beach-rock-trigger": [ + [5, "v0", "seagullflock"] + ], + + "(method 11 seagullflock)": [ + [80, "v1", "float"], + [99, "v1", "float"] + ], + + "(code seagull-flying)": [ + [13, "v1", "art-joint-anim"], + [373, "v1", "float"] + ], + + "(code seagull-soaring)": [ + [15, "v1", "art-joint-anim"], + [296, "v1", "float"] + ], + + "(method 26 seagull)": [ + [12, "v1", "float"], + [33, "v1", "float"], + [54, "v1", "float"] + ], + + "(code seagull-idle)": [ + [51, "v1", "float"], + [67, "v1", "float"], + [143, "v1", "float"], + [218, "v1", "float"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc index 75b7f759de..dc7ef66c39 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -3742,5 +3742,11 @@ } }, + "(event puffer-die)": { + "vars": { + "v0-0": ["v0-0", "uint"] + } + }, + "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/goal_src/engine/camera/cam-master.gc b/goal_src/engine/camera/cam-master.gc index b8ffcc8d86..e3e8b611b6 100644 --- a/goal_src/engine/camera/cam-master.gc +++ b/goal_src/engine/camera/cam-master.gc @@ -30,19 +30,17 @@ ) -(define - *CAMERA_MASTER-bank* - (new 'static 'camera-master-bank - :onscreen-head-height (meters 2.65) - :onscreen-foot-height (meters -0.5) - :target-height (meters 2.15) - :up-move-to-pitch-ratio-in-air 1.0 - :down-move-to-pitch-ratio-in-air 0.5 - :up-move-to-pitch-on-ground 0.9 - :down-move-to-pitch-on-ground 0.9 - :pitch-off-blend 0.5 - ) - ) +(define *CAMERA_MASTER-bank* (new 'static 'camera-master-bank + :onscreen-head-height (meters 2.65) + :onscreen-foot-height (meters -0.5) + :target-height (meters 2.15) + :up-move-to-pitch-ratio-in-air 1.0 + :down-move-to-pitch-ratio-in-air 0.5 + :up-move-to-pitch-on-ground 0.9 + :down-move-to-pitch-on-ground 0.9 + :pitch-off-blend 0.5 + ) + ) (defbehavior reset-follow camera-master () (set! (-> self tpos-old quad) (-> (target-cam-pos) quad)) @@ -51,9 +49,9 @@ (set! (-> self tpos-curr-adj quad) (-> self tpos-old quad)) (set! (-> self tpos-tgt quad) (-> self tpos-old quad)) (let ((f0-0 0.0)) - (set! (-> self upspeed) f0-0) - f0-0 - ) + (set! (-> self upspeed) f0-0) + f0-0 + ) ) (defbehavior reset-target-tracking camera-master () @@ -63,165 +61,126 @@ (set! (-> self tpos-curr-adj quad) (-> self tpos-old quad)) (set! (-> self tpos-tgt quad) (-> self tpos-old quad)) (quaternion->matrix (-> self tgt-rot-mat) (-> *target* control dir-targ)) - (quaternion->matrix - (-> self tgt-face-mat) - (-> *target* control unknown-quaternion00) - ) + (quaternion->matrix (-> self tgt-face-mat) (-> *target* control unknown-quaternion00)) (vector-reset! (-> self pitch-off)) (set! (-> self upspeed) 0.0) (set! (-> self foot-offset) (-> *CAMERA_MASTER-bank* onscreen-foot-height)) (set! (-> self head-offset) (-> *CAMERA_MASTER-bank* onscreen-head-height)) (set! (-> self target-height) (-> *CAMERA_MASTER-bank* target-height)) - (set! - (-> self on-ground) - (not - (and - (logtest? (-> *target* control unknown-surface00 flags) 2048) - (zero? (logand (-> *target* control status) 1)) - ) - ) - ) + (set! (-> self on-ground) (not (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + ) + ) (set! (-> self on-pole) #f) (set! (-> self ease-t) 1.0) (set! (-> self string-max target y) (-> self stringMaxHeight)) (set! (-> self string-max target z) (-> self stringMaxLength)) - (set! - (-> self string-push-z) - (fmax (-> self string-min value z) (-> *CAMERA-bank* default-string-push-z)) - ) + (set! (-> self string-push-z) (fmax (-> self string-min value z) (-> *CAMERA-bank* default-string-push-z))) (cond - ((>= (- (-> *display* base-frame-counter) (if *target* - (-> *target* neck notice-time) - 0 - ) + ((>= (- (-> *display* base-frame-counter) (if *target* + (-> *target* neck notice-time) + 0 + ) + ) + (the-as int (-> *CAMERA-bank* attack-timeout)) ) - (the-as int (-> *CAMERA-bank* attack-timeout)) + (set! (-> self being-attacked) #f) ) - (set! (-> self being-attacked) #f) + (else + (set! (-> self attack-start) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self being-attacked) #t) + (when (and + (zero? (logand (-> self master-options) 64)) + (or (!= (-> last-try-to-look-at-data horz) 0.0) (!= (-> last-try-to-look-at-data vert) 0.0)) + ) + (set! (-> self string-max target y) (fmax (-> self string-max target y) (-> last-try-to-look-at-data vert))) + (set! (-> self string-max target z) (fmax (-> self string-max target z) (-> last-try-to-look-at-data horz))) + (set! (-> self string-push-z) (fmax (-> self string-push-z) (-> self string-max target z))) + ) + ) ) - (else - (set! - (-> self attack-start) - (the-as uint (-> *display* base-frame-counter)) - ) - (set! (-> self being-attacked) #t) - (when - (and - (zero? (logand (-> self master-options) 64)) - (or - (!= (-> last-try-to-look-at-data horz) 0.0) - (!= (-> last-try-to-look-at-data vert) 0.0) - ) - ) - (set! - (-> self string-max target y) - (fmax (-> self string-max target y) (-> last-try-to-look-at-data vert)) - ) - (set! - (-> self string-max target z) - (fmax (-> self string-max target z) (-> last-try-to-look-at-data horz)) - ) - (set! - (-> self string-push-z) - (fmax (-> self string-push-z) (-> self string-max target z)) - ) - ) - ) - ) (cond - ((and - (logtest? (-> *target* water flags) 4096) - (zero? (logand (-> *target* water flags) 16)) + ((and (logtest? (-> *target* water flags) 4096) (zero? (logand (-> *target* water flags) 16))) + (set! (-> self under-water) 2) ) - (set! (-> self under-water) 2) + (else + (set! (-> self under-water) 0) + 0 + ) ) - (else - (set! (-> self under-water) 0) - 0 - ) - ) (let ((gp-1 (new 'stack-no-clear 'vector))) - (vector--float*! - gp-1 - (-> self tpos-curr-adj) - (-> self local-down) - (-> self target-height) + (vector--float*! gp-1 (-> self tpos-curr-adj) (-> self local-down) (-> self target-height)) + (the-as symbol (TODO-RENAME-10 (-> self target-spline) gp-1)) ) - (the-as symbol (TODO-RENAME-10 (-> self target-spline) gp-1)) - ) ) (defbehavior reset-drawable-follow camera-master () (let ((v1-2 (the-as target (-> self drawable-target process 0)))) - (if (nonzero? (-> v1-2 node-list)) - (vector<-cspace! - (-> self tpos-old) - (-> v1-2 node-list data (-> self which-bone)) - ) - (set! (-> self tpos-old quad) (-> v1-2 control trans quad)) + (if (nonzero? (-> v1-2 node-list)) + (vector<-cspace! (-> self tpos-old) (-> v1-2 node-list data (-> self which-bone))) + (set! (-> self tpos-old quad) (-> v1-2 control trans quad)) + ) ) - ) (set! (-> self tpos-curr quad) (-> self tpos-old quad)) (set! (-> self tpos-old-adj quad) (-> self tpos-old quad)) (set! (-> self tpos-curr-adj quad) (-> self tpos-old quad)) (let ((f0-0 0.0)) - (set! (-> self upspeed) f0-0) - f0-0 - ) + (set! (-> self upspeed) f0-0) + f0-0 + ) ) (defbehavior reset-drawable-tracking camera-master () (let ((gp-0 (the-as target (-> self drawable-target process 0)))) - (cond - ((nonzero? (-> gp-0 node-list)) - (vector<-cspace! - (-> self tpos-old) - (-> gp-0 node-list data (-> self which-bone)) + (cond + ((nonzero? (-> gp-0 node-list)) + (vector<-cspace! (-> self tpos-old) (-> gp-0 node-list data (-> self which-bone))) + (let* ((v1-6 (-> self tgt-rot-mat)) + (a3-0 (-> gp-0 node-list data (-> self which-bone) bone transform)) + (a0-4 (-> a3-0 vector 0 quad)) + (a1-4 (-> a3-0 vector 1 quad)) + (a2-0 (-> a3-0 vector 2 quad)) + (a3-1 (-> a3-0 vector 3 quad)) + ) + (set! (-> v1-6 vector 0 quad) a0-4) + (set! (-> v1-6 vector 1 quad) a1-4) + (set! (-> v1-6 vector 2 quad) a2-0) + (set! (-> v1-6 vector 3 quad) a3-1) + ) + (set! (-> self tgt-rot-mat vector 3 quad) (the-as uint128 0)) + (let* ((v1-8 (-> self tgt-face-mat)) + (a3-2 (-> self tgt-rot-mat)) + (a0-5 (-> a3-2 vector 0 quad)) + (a1-5 (-> a3-2 vector 1 quad)) + (a2-1 (-> a3-2 vector 2 quad)) + (a3-3 (-> a3-2 vector 3 quad)) + ) + (set! (-> v1-8 vector 0 quad) a0-5) + (set! (-> v1-8 vector 1 quad) a1-5) + (set! (-> v1-8 vector 2 quad) a2-1) + (set! (-> v1-8 vector 3 quad) a3-3) + ) + ) + (else + (set! (-> self tpos-old quad) (-> gp-0 control trans quad)) + (quaternion->matrix (-> self tgt-rot-mat) (-> gp-0 control quat)) + (let* ((v1-11 (-> self tgt-face-mat)) + (a3-4 (-> self tgt-rot-mat)) + (a0-10 (-> a3-4 vector 0 quad)) + (a1-7 (-> a3-4 vector 1 quad)) + (a2-2 (-> a3-4 vector 2 quad)) + (a3-5 (-> a3-4 vector 3 quad)) + ) + (set! (-> v1-11 vector 0 quad) a0-10) + (set! (-> v1-11 vector 1 quad) a1-7) + (set! (-> v1-11 vector 2 quad) a2-2) + (set! (-> v1-11 vector 3 quad) a3-5) + ) + ) ) - (let* ((v1-6 (-> self tgt-rot-mat)) - (a3-0 (-> gp-0 node-list data (-> self which-bone) bone transform)) - (a0-4 (-> a3-0 vector 0 quad)) - (a1-4 (-> a3-0 vector 1 quad)) - (a2-0 (-> a3-0 vector 2 quad)) - (a3-1 (-> a3-0 vector 3 quad)) - ) - (set! (-> v1-6 vector 0 quad) a0-4) - (set! (-> v1-6 vector 1 quad) a1-4) - (set! (-> v1-6 vector 2 quad) a2-0) - (set! (-> v1-6 vector 3 quad) a3-1) - ) - (set! (-> self tgt-rot-mat vector 3 quad) (the-as uint128 0)) - (let* ((v1-8 (-> self tgt-face-mat)) - (a3-2 (-> self tgt-rot-mat)) - (a0-5 (-> a3-2 vector 0 quad)) - (a1-5 (-> a3-2 vector 1 quad)) - (a2-1 (-> a3-2 vector 2 quad)) - (a3-3 (-> a3-2 vector 3 quad)) - ) - (set! (-> v1-8 vector 0 quad) a0-5) - (set! (-> v1-8 vector 1 quad) a1-5) - (set! (-> v1-8 vector 2 quad) a2-1) - (set! (-> v1-8 vector 3 quad) a3-3) - ) - ) - (else - (set! (-> self tpos-old quad) (-> gp-0 control trans quad)) - (quaternion->matrix (-> self tgt-rot-mat) (-> gp-0 control quat)) - (let* ((v1-11 (-> self tgt-face-mat)) - (a3-4 (-> self tgt-rot-mat)) - (a0-10 (-> a3-4 vector 0 quad)) - (a1-7 (-> a3-4 vector 1 quad)) - (a2-2 (-> a3-4 vector 2 quad)) - (a3-5 (-> a3-4 vector 3 quad)) - ) - (set! (-> v1-11 vector 0 quad) a0-10) - (set! (-> v1-11 vector 1 quad) a1-7) - (set! (-> v1-11 vector 2 quad) a2-2) - (set! (-> v1-11 vector 3 quad) a3-5) - ) - ) ) - ) (set! (-> self tpos-curr quad) (-> self tpos-old quad)) (set! (-> self tpos-old-adj quad) (-> self tpos-old quad)) (set! (-> self tpos-curr-adj quad) (-> self tpos-old quad)) @@ -236,997 +195,657 @@ (set! (-> self being-attacked) #f) (set! (-> self string-max target y) (-> self stringMaxHeight)) (set! (-> self string-max target z) (-> self stringMaxLength)) - (set! - (-> self string-push-z) - (fmax (-> self string-min value z) (-> *CAMERA-bank* default-string-push-z)) - ) + (set! (-> self string-push-z) (fmax (-> self string-min value z) (-> *CAMERA-bank* default-string-push-z))) (set! (-> self under-water) 0) (let ((gp-1 (new 'stack-no-clear 'vector))) - (vector--float*! - gp-1 - (-> self tpos-curr-adj) - (-> self local-down) - (-> self target-height) + (vector--float*! gp-1 (-> self tpos-curr-adj) (-> self local-down) (-> self target-height)) + (the-as symbol (TODO-RENAME-10 (-> self target-spline) gp-1)) ) - (the-as symbol (TODO-RENAME-10 (-> self target-spline) gp-1)) - ) ) (defbehavior master-track-target camera-master () (cond - ((and - (logtest? (-> self master-options) 2) - (!= (-> self drawable-target) #f) - (not (handle->process (-> self drawable-target))) - ) - (set! (-> self master-options) (logand -3 (-> self master-options))) - (set! (-> self drawable-target) (the-as handle #f)) - ) - ((and - (logtest? (-> self master-options) 2) - (handle->process (-> self drawable-target)) - ) - (let ((gp-0 (-> self drawable-target process 0))) - (if (paused?) - (return (the-as symbol #f)) - ) - (set! (-> self tpos-old quad) (-> self tpos-curr quad)) - (set! (-> self tpos-old-adj quad) (-> self tpos-curr-adj quad)) - (cond - ((nonzero? (-> (the-as target gp-0) node-list)) - (let* ((v1-24 (-> self tgt-rot-mat)) - (a3-0 - (-> - (the-as target gp-0) - node-list - data - (-> self which-bone) - bone - transform - ) - ) - (a0-17 (-> a3-0 vector 0 quad)) - (a1-4 (-> a3-0 vector 1 quad)) - (a2-0 (-> a3-0 vector 2 quad)) - (a3-1 (-> a3-0 vector 3 quad)) - ) - (set! (-> v1-24 vector 0 quad) a0-17) - (set! (-> v1-24 vector 1 quad) a1-4) - (set! (-> v1-24 vector 2 quad) a2-0) - (set! (-> v1-24 vector 3 quad) a3-1) - ) - (set! (-> self tgt-rot-mat vector 3 quad) (the-as uint128 0)) - (let* ((a2-1 (-> self tgt-face-mat)) - (a3-2 (-> self tgt-rot-mat)) - (v1-26 (-> a3-2 vector 0 quad)) - (a0-18 (-> a3-2 vector 1 quad)) - (a1-5 (-> a3-2 vector 2 quad)) - (a3-3 (-> a3-2 vector 3 quad)) - ) - (set! (-> a2-1 vector 0 quad) v1-26) - (set! (-> a2-1 vector 1 quad) a0-18) - (set! (-> a2-1 vector 2 quad) a1-5) - (set! (-> a2-1 vector 3 quad) a3-3) - ) - (vector<-cspace! - (-> self tpos-curr) - (-> (the-as target gp-0) node-list data (-> self which-bone)) - ) + ((and + (logtest? (-> self master-options) 2) + (!= (-> self drawable-target) #f) + (not (handle->process (-> self drawable-target))) ) - (else - (quaternion->matrix - (-> self tgt-rot-mat) - (-> (the-as target gp-0) control quat) - ) - (let* ((a2-3 (-> self tgt-face-mat)) - (a3-4 (-> self tgt-rot-mat)) - (v1-31 (-> a3-4 vector 0 quad)) - (a0-21 (-> a3-4 vector 1 quad)) - (a1-9 (-> a3-4 vector 2 quad)) - (a3-5 (-> a3-4 vector 3 quad)) - ) - (set! (-> a2-3 vector 0 quad) v1-31) - (set! (-> a2-3 vector 1 quad) a0-21) - (set! (-> a2-3 vector 2 quad) a1-9) - (set! (-> a2-3 vector 3 quad) a3-5) - ) - ) - ) + (set! (-> self master-options) (logand -3 (-> self master-options))) + (set! (-> self drawable-target) (the-as handle #f)) ) - (let ((v1-32 (new-stack-vector0))) - 0.0 - (vector-! v1-32 (-> self tpos-curr-adj) (-> self tpos-curr)) - (let* ((f0-2 (vector-dot v1-32 (-> self local-down))) - (f0-3 (if (< 0.0 f0-2) - (* f0-2 (-> *CAMERA_MASTER-bank* up-move-to-pitch-on-ground)) - (* - f0-2 - (-> *CAMERA_MASTER-bank* down-move-to-pitch-on-ground) - ) - ) - ) + ((and (logtest? (-> self master-options) 2) (handle->process (-> self drawable-target))) + (let ((gp-0 (-> self drawable-target process 0))) + (if (paused?) + (return (the-as symbol #f)) + ) + (set! (-> self tpos-old quad) (-> self tpos-curr quad)) + (set! (-> self tpos-old-adj quad) (-> self tpos-curr-adj quad)) + (cond + ((nonzero? (-> (the-as target gp-0) node-list)) + (let* ((v1-24 (-> self tgt-rot-mat)) + (a3-0 (-> (the-as target gp-0) node-list data (-> self which-bone) bone transform)) + (a0-17 (-> a3-0 vector 0 quad)) + (a1-4 (-> a3-0 vector 1 quad)) + (a2-0 (-> a3-0 vector 2 quad)) + (a3-1 (-> a3-0 vector 3 quad)) + ) + (set! (-> v1-24 vector 0 quad) a0-17) + (set! (-> v1-24 vector 1 quad) a1-4) + (set! (-> v1-24 vector 2 quad) a2-0) + (set! (-> v1-24 vector 3 quad) a3-1) ) - (vector+float*! - (-> self tpos-curr-adj) - (-> self tpos-curr) - (-> self local-down) - f0-3 + (set! (-> self tgt-rot-mat vector 3 quad) (the-as uint128 0)) + (let* ((a2-1 (-> self tgt-face-mat)) + (a3-2 (-> self tgt-rot-mat)) + (v1-26 (-> a3-2 vector 0 quad)) + (a0-18 (-> a3-2 vector 1 quad)) + (a1-5 (-> a3-2 vector 2 quad)) + (a3-3 (-> a3-2 vector 3 quad)) + ) + (set! (-> a2-1 vector 0 quad) v1-26) + (set! (-> a2-1 vector 1 quad) a0-18) + (set! (-> a2-1 vector 2 quad) a1-5) + (set! (-> a2-1 vector 3 quad) a3-3) + ) + (vector<-cspace! (-> self tpos-curr) (-> (the-as target gp-0) node-list data (-> self which-bone))) + ) + (else + (quaternion->matrix (-> self tgt-rot-mat) (-> (the-as target gp-0) control quat)) + (let* ((a2-3 (-> self tgt-face-mat)) + (a3-4 (-> self tgt-rot-mat)) + (v1-31 (-> a3-4 vector 0 quad)) + (a0-21 (-> a3-4 vector 1 quad)) + (a1-9 (-> a3-4 vector 2 quad)) + (a3-5 (-> a3-4 vector 3 quad)) + ) + (set! (-> a2-3 vector 0 quad) v1-31) + (set! (-> a2-3 vector 1 quad) a0-21) + (set! (-> a2-3 vector 2 quad) a1-9) + (set! (-> a2-3 vector 3 quad) a3-5) + ) + ) + ) + ) + (let ((v1-32 (new-stack-vector0))) + 0.0 + (vector-! v1-32 (-> self tpos-curr-adj) (-> self tpos-curr)) + (let* ((f0-2 (vector-dot v1-32 (-> self local-down))) + (f0-3 (if (< 0.0 f0-2) + (* f0-2 (-> *CAMERA_MASTER-bank* up-move-to-pitch-on-ground)) + (* f0-2 (-> *CAMERA_MASTER-bank* down-move-to-pitch-on-ground)) + ) + ) + ) + (vector+float*! (-> self tpos-curr-adj) (-> self tpos-curr) (-> self local-down) f0-3) + ) + ) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (vector--float*! gp-1 (-> self tpos-curr-adj) (-> self local-down) (-> self target-height)) + (TODO-RENAME-17 (-> self target-spline) gp-1 2048.0 0.0 #f) + ) + (TODO-RENAME-22 (-> self target-spline) 40960.0) + ) + ((handle->process (-> self drawable-target)) + (logior! (-> self master-options) 2) + (reset-drawable-tracking) + ) + ) + (the-as + symbol + (cond + ((handle->process (-> self drawable-target)) + #f + ) + ((and *target* (logtest? (-> self master-options) 2)) + (if (paused?) + (return (the-as symbol #f)) + ) + (cond + ((>= (- (-> *display* base-frame-counter) (if *target* + (-> *target* neck notice-time) + 0 + ) + ) + (the-as int (-> *CAMERA-bank* attack-timeout)) + ) + (set! (-> self being-attacked) #f) + ) + (else + (if (not (-> self being-attacked)) + (set! (-> self attack-start) (the-as uint (-> *display* base-frame-counter))) + ) + (set! (-> self being-attacked) #t) + (when (and + (zero? (logand (-> self master-options) 64)) + (or (!= (-> last-try-to-look-at-data horz) 0.0) (!= (-> last-try-to-look-at-data vert) 0.0)) + ) + (set! (-> self string-max target y) (fmax (-> self string-max target y) (-> last-try-to-look-at-data vert))) + (set! (-> self string-max target z) (fmax (-> self string-max target z) (-> last-try-to-look-at-data horz))) + (set! (-> self string-push-z) (fmax (-> self string-push-z) (-> self string-max target z))) + ) + ) + ) + (cond + ((and (logtest? (-> *target* water flags) 4096) (zero? (logand (-> *target* water flags) 16))) + (set! (-> self under-water) 2) + ) + ((> (-> self under-water) 0) + (+! (-> self under-water) -1) + ) + ) + (set! (-> self tpos-old quad) (-> self tpos-curr quad)) + (set! (-> self tpos-old-adj quad) (-> self tpos-curr-adj quad)) + (quaternion->matrix (-> self tgt-rot-mat) (-> *target* control dir-targ)) + (quaternion->matrix (-> self tgt-face-mat) (-> *target* control unknown-quaternion00)) + (cond + ((< (-> self ease-t) 1.0) + (new 'stack-no-clear 'vector) + (cond + ((logtest? (-> self master-options) 32) + (vector-lerp! + (-> self tpos-curr) + (-> self ease-from) + (-> self ease-to) + (parameter-ease-sin-clamp (-> self ease-t)) + ) + (set! (-> self master-options) (logand -33 (-> self master-options))) + ) + (else + (vector-lerp! + (-> self tpos-curr) + (-> self ease-from) + (target-cam-pos) + (parameter-ease-sin-clamp (-> self ease-t)) + ) + ) + ) + (+! (-> self ease-t) (-> self ease-step)) + ) + (else + (set! (-> self tpos-curr quad) (-> (target-cam-pos) quad)) + ) + ) + (when (logtest? (-> *target* control root-prim prim-core action) 128) + (if *display-cam-los-debug* + (format *stdcon* "ride edge~%") + ) + (let ((s4-2 (new 'stack-no-clear 'collide-tri-result)) + (gp-5 (new 'stack-no-clear 'vector)) + (s5-2 (new 'stack-no-clear 'vector)) + ) + (vector--float*! s5-2 (-> self tpos-curr) (-> self local-down) (-> self target-height)) + (vector-float*! gp-5 (-> self tgt-rot-mat vector 2) 4915.2) + (vector-! s5-2 s5-2 gp-5) + (let ((f0-20 (dummy-10 *collide-cache* s5-2 gp-5 4300.8 1 (the-as process #f) s4-2 4098))) + (if (and (< 0.0 f0-20) (< f0-20 1.0)) + (vector+float*! (-> self tpos-curr) (-> self tpos-curr) gp-5 (+ -1.0 f0-20)) + ) + ) + ) + ) + (set! (-> self on-ground) (not (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + ) + ) + (let ((gp-6 (new-stack-vector0))) + 0.0 + (cond + ((and + (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + (!= (-> *target* control unknown-surface00 name) 'launch-jump) + ) + (if *display-cam-los-debug* + (format *stdcon* "air tracking~%") + ) + (vector+float*! (-> self tpos-curr-adj) (-> self tpos-curr-adj) (-> self local-down) (-> self upspeed)) + (vector+float*! (-> self tpos-tgt) (-> self tpos-tgt) (-> self local-down) (-> self upspeed)) + (vector-! gp-6 (-> self tpos-curr) (-> self tpos-tgt)) + (let ((f30-0 (vector-dot gp-6 (-> self local-down)))) + (vector--float*! gp-6 gp-6 (-> self local-down) f30-0) + (if (< 0.0 f30-0) + (set! (-> self upspeed) (* 0.5 (-> self upspeed))) + ) + (vector+! (-> self tpos-tgt) (-> self tpos-tgt) gp-6) + (let ((f0-30 (* 0.05 f30-0))) + (vector+float*! (-> self tpos-tgt) (-> self tpos-tgt) (-> self local-down) f0-30) + ) + ) + (vector-! gp-6 (-> self tpos-curr-adj) (-> self tpos-tgt)) + (let* ((f0-32 (vector-dot gp-6 (-> self local-down))) + (f0-33 (if (< 0.0 f0-32) + (* f0-32 (-> *CAMERA_MASTER-bank* up-move-to-pitch-ratio-in-air)) + (* f0-32 (-> *CAMERA_MASTER-bank* down-move-to-pitch-ratio-in-air)) + ) + ) + ) + (vector+float*! (-> self tpos-curr-adj) (-> self tpos-tgt) (-> self local-down) f0-33) + ) + (vector-! gp-6 (-> *target* control shadow-pos) (-> self tpos-curr-adj)) + (let* ((f0-35 (vector-dot gp-6 (-> self local-down))) + (f0-36 (* 0.03 f0-35)) + ) + (if (and (< f0-36 0.0) (< f0-36 (-> self upspeed))) + (set! (-> self upspeed) f0-36) + ) + ) + ) + (else + (if *display-cam-los-debug* + (format *stdcon* "ground tracking~%") + ) + (vector-! gp-6 (-> self tpos-curr) (-> self tpos-old)) + (let ((f0-38 (vector-dot gp-6 (-> self local-down)))) + (cond + ((logtest? (-> *target* water flags) 512) + (set! (-> self upspeed) 0.0) + ) + ((< 0.0 f0-38) + (set! (-> self upspeed) 0.0) + ) + (else + (set! (-> self upspeed) f0-38) + ) + ) + ) + (set! (-> self tpos-tgt quad) (-> self tpos-curr quad)) + (vector-! gp-6 (-> self tpos-curr-adj) (-> self tpos-curr)) + (let* ((f0-42 (vector-dot gp-6 (-> self local-down))) + (f0-43 (if (< 0.0 f0-42) + (* f0-42 (-> *CAMERA_MASTER-bank* up-move-to-pitch-on-ground)) + (* f0-42 (-> *CAMERA_MASTER-bank* down-move-to-pitch-on-ground)) + ) + ) + ) + (vector+float*! (-> self tpos-curr-adj) (-> self tpos-curr) (-> self local-down) f0-43) + ) + ) + ) + ) + (if (zero? (logand (-> self slave-options) 16)) + (reset-follow) + ) + (let ((v1-196 (-> *target* water flags))) + (when (and (logtest? v1-196 512) (logtest? v1-196 6144)) + (let ((f0-45 (- (-> *target* water base-height) (-> self target-height)))) + (if (< (-> self tpos-curr-adj y) f0-45) + (set! (-> self tpos-curr-adj y) f0-45) + ) + ) + ) + ) + (vector+! (-> self pitch-off) (-> self pitch-off) (-> self tpos-curr)) + (vector-! (-> self pitch-off) (-> self pitch-off) (-> self tpos-old)) + (vector-float*! (-> self pitch-off) (-> self pitch-off) (-> *CAMERA_MASTER-bank* pitch-off-blend)) + (let ((gp-7 (new 'stack-no-clear 'vector))) + (vector--float*! gp-7 (-> self tpos-curr-adj) (-> self local-down) (-> self target-height)) + (let ((v1-207 (new 'stack-no-clear 'vector))) + 0.0 + (vector-! v1-207 (-> *target* control shadow-pos) gp-7) + (let* ((f0-50 (vector-dot v1-207 (-> self local-down))) + (f0-51 (+ -4096.0 f0-50)) + ) + (if (< f0-51 0.0) + (vector+float*! gp-7 gp-7 (-> self local-down) f0-51) + ) + ) + ) + (TODO-RENAME-17 (-> self target-spline) gp-7 2048.0 0.0 #f) + ) + (the-as symbol (TODO-RENAME-22 (-> self target-spline) 40960.0)) + ) + (*target* + (logior! (-> self master-options) 2) + (reset-target-tracking) + ) + ((logtest? (-> self master-options) 2) + (let ((v0-1 (the-as symbol (logand -3 (-> self master-options))))) + (set! (-> self master-options) (the-as uint v0-1)) + v0-1 + ) ) ) - ) - (let ((gp-1 (new 'stack-no-clear 'vector))) - (vector--float*! - gp-1 - (-> self tpos-curr-adj) - (-> self local-down) - (-> self target-height) - ) - (TODO-RENAME-17 (-> self target-spline) gp-1 2048.0 0.0 #f) - ) - (TODO-RENAME-22 (-> self target-spline) 40960.0) ) - ((handle->process (-> self drawable-target)) - (logior! (-> self master-options) 2) - (reset-drawable-tracking) - ) - ) - (the-as symbol (cond - ((handle->process (-> self drawable-target)) - #f - ) - ((and *target* (logtest? (-> self master-options) 2)) - (if (paused?) - (return (the-as symbol #f)) - ) - (cond - ((>= (- (-> *display* base-frame-counter) (if *target* - (-> - *target* - neck - notice-time - ) - 0 - ) - ) - (the-as int (-> *CAMERA-bank* attack-timeout)) - ) - (set! (-> self being-attacked) #f) - ) - (else - (if (not (-> self being-attacked)) - (set! - (-> self attack-start) - (the-as uint (-> *display* base-frame-counter)) - ) - ) - (set! (-> self being-attacked) #t) - (when - (and - (zero? (logand (-> self master-options) 64)) - (or - (!= (-> last-try-to-look-at-data horz) 0.0) - (!= (-> last-try-to-look-at-data vert) 0.0) - ) - ) - (set! - (-> self string-max target y) - (fmax - (-> self string-max target y) - (-> last-try-to-look-at-data vert) - ) - ) - (set! - (-> self string-max target z) - (fmax - (-> self string-max target z) - (-> last-try-to-look-at-data horz) - ) - ) - (set! - (-> self string-push-z) - (fmax - (-> self string-push-z) - (-> self string-max target z) - ) - ) - ) - ) - ) - (cond - ((and - (logtest? (-> *target* water flags) 4096) - (zero? (logand (-> *target* water flags) 16)) - ) - (set! (-> self under-water) 2) - ) - ((> (-> self under-water) 0) - (+! (-> self under-water) -1) - ) - ) - (set! (-> self tpos-old quad) (-> self tpos-curr quad)) - (set! - (-> self tpos-old-adj quad) - (-> self tpos-curr-adj quad) - ) - (quaternion->matrix - (-> self tgt-rot-mat) - (-> *target* control dir-targ) - ) - (quaternion->matrix - (-> self tgt-face-mat) - (-> *target* control unknown-quaternion00) - ) - (cond - ((< (-> self ease-t) 1.0) - (new 'stack-no-clear 'vector) - (cond - ((logtest? (-> self master-options) 32) - (vector-lerp! - (-> self tpos-curr) - (-> self ease-from) - (-> self ease-to) - (parameter-ease-sin-clamp (-> self ease-t)) - ) - (set! - (-> self master-options) - (logand -33 (-> self master-options)) - ) - ) - (else - (vector-lerp! - (-> self tpos-curr) - (-> self ease-from) - (target-cam-pos) - (parameter-ease-sin-clamp (-> self ease-t)) - ) - ) - ) - (+! (-> self ease-t) (-> self ease-step)) - ) - (else - (set! (-> self tpos-curr quad) (-> (target-cam-pos) quad)) - ) - ) - (when - (logtest? - (-> *target* control root-prim prim-core action) - 128 - ) - (if *display-cam-los-debug* - (format *stdcon* "ride edge~%") - ) - (let ((s4-2 (new 'stack-no-clear 'collide-mesh-cache-tri)) - (gp-5 (new 'stack-no-clear 'vector)) - (s5-2 (new 'stack-no-clear 'vector)) - ) - (vector--float*! - s5-2 - (-> self tpos-curr) - (-> self local-down) - (-> self target-height) - ) - (vector-float*! gp-5 (-> self tgt-rot-mat vector 2) 4915.2) - (vector-! s5-2 s5-2 gp-5) - (let - ((f0-20 - (dummy-10 - *collide-cache* - s5-2 - gp-5 - 4300.8 - 1 - (the-as process #f) - s4-2 - 4098 - ) - ) - ) - (if (and (< 0.0 f0-20) (< f0-20 1.0)) - (vector+float*! - (-> self tpos-curr) - (-> self tpos-curr) - gp-5 - (+ -1.0 f0-20) - ) - ) - ) - ) - ) - (set! - (-> self on-ground) - (not - (and - (logtest? - (-> *target* control unknown-surface00 flags) - 2048 - ) - (zero? (logand (-> *target* control status) 1)) - ) - ) - ) - (let ((gp-6 (new-stack-vector0))) - 0.0 - (cond - ((and - (and - (logtest? - (-> *target* control unknown-surface00 flags) - 2048 - ) - (zero? (logand (-> *target* control status) 1)) - ) - (!= - (-> *target* control unknown-surface00 name) - 'launch-jump - ) - ) - (if *display-cam-los-debug* - (format *stdcon* "air tracking~%") - ) - (vector+float*! - (-> self tpos-curr-adj) - (-> self tpos-curr-adj) - (-> self local-down) - (-> self upspeed) - ) - (vector+float*! - (-> self tpos-tgt) - (-> self tpos-tgt) - (-> self local-down) - (-> self upspeed) - ) - (vector-! gp-6 (-> self tpos-curr) (-> self tpos-tgt)) - (let ((f30-0 (vector-dot gp-6 (-> self local-down)))) - (vector--float*! gp-6 gp-6 (-> self local-down) f30-0) - (if (< 0.0 f30-0) - (set! (-> self upspeed) (* 0.5 (-> self upspeed))) - ) - (vector+! (-> self tpos-tgt) (-> self tpos-tgt) gp-6) - (let ((f0-30 (* 0.05 f30-0))) - (vector+float*! - (-> self tpos-tgt) - (-> self tpos-tgt) - (-> self local-down) - f0-30 - ) - ) - ) - (vector-! gp-6 (-> self tpos-curr-adj) (-> self tpos-tgt)) - (let* ((f0-32 (vector-dot gp-6 (-> self local-down))) - (f0-33 (if (< 0.0 f0-32) - (* - f0-32 - (-> - *CAMERA_MASTER-bank* - up-move-to-pitch-ratio-in-air - ) - ) - (* - f0-32 - (-> - *CAMERA_MASTER-bank* - down-move-to-pitch-ratio-in-air - ) - ) - ) - ) - ) - (vector+float*! - (-> self tpos-curr-adj) - (-> self tpos-tgt) - (-> self local-down) - f0-33 - ) - ) - (vector-! - gp-6 - (-> *target* control shadow-pos) - (-> self tpos-curr-adj) - ) - (let* ((f0-35 (vector-dot gp-6 (-> self local-down))) - (f0-36 (* 0.03 f0-35)) - ) - (if (and (< f0-36 0.0) (< f0-36 (-> self upspeed))) - (set! (-> self upspeed) f0-36) - ) - ) - ) - (else - (if *display-cam-los-debug* - (format *stdcon* "ground tracking~%") - ) - (vector-! gp-6 (-> self tpos-curr) (-> self tpos-old)) - (let ((f0-38 (vector-dot gp-6 (-> self local-down)))) - (cond - ((logtest? (-> *target* water flags) 512) - (set! (-> self upspeed) 0.0) - ) - ((< 0.0 f0-38) - (set! (-> self upspeed) 0.0) - ) - (else - (set! (-> self upspeed) f0-38) - ) - ) - ) - (set! (-> self tpos-tgt quad) (-> self tpos-curr quad)) - (vector-! - gp-6 - (-> self tpos-curr-adj) - (-> self tpos-curr) - ) - (let* ((f0-42 (vector-dot gp-6 (-> self local-down))) - (f0-43 (if (< 0.0 f0-42) - (* - f0-42 - (-> - *CAMERA_MASTER-bank* - up-move-to-pitch-on-ground - ) - ) - (* - f0-42 - (-> - *CAMERA_MASTER-bank* - down-move-to-pitch-on-ground - ) - ) - ) - ) - ) - (vector+float*! - (-> self tpos-curr-adj) - (-> self tpos-curr) - (-> self local-down) - f0-43 - ) - ) - ) - ) - ) - (if (zero? (logand (-> self slave-options) 16)) - (reset-follow) - ) - (let ((v1-196 (-> *target* water flags))) - (when (and (logtest? v1-196 512) (logtest? v1-196 6144)) - (let - ((f0-45 - (- - (-> *target* water base-height) - (-> self target-height) - ) - ) - ) - (if (< (-> self tpos-curr-adj y) f0-45) - (set! (-> self tpos-curr-adj y) f0-45) - ) - ) - ) - ) - (vector+! - (-> self pitch-off) - (-> self pitch-off) - (-> self tpos-curr) - ) - (vector-! - (-> self pitch-off) - (-> self pitch-off) - (-> self tpos-old) - ) - (vector-float*! - (-> self pitch-off) - (-> self pitch-off) - (-> *CAMERA_MASTER-bank* pitch-off-blend) - ) - (let ((gp-7 (new 'stack-no-clear 'vector))) - (vector--float*! - gp-7 - (-> self tpos-curr-adj) - (-> self local-down) - (-> self target-height) - ) - (let ((v1-207 (new 'stack-no-clear 'vector))) - 0.0 - (vector-! v1-207 (-> *target* control shadow-pos) gp-7) - (let* ((f0-50 (vector-dot v1-207 (-> self local-down))) - (f0-51 (+ -4096.0 f0-50)) - ) - (if (< f0-51 0.0) - (vector+float*! gp-7 gp-7 (-> self local-down) f0-51) - ) - ) - ) - (TODO-RENAME-17 (-> self target-spline) gp-7 2048.0 0.0 #f) - ) - (the-as - symbol - (TODO-RENAME-22 (-> self target-spline) 40960.0) - ) - ) - (*target* - (logior! (-> self master-options) 2) - (reset-target-tracking) - ) - ((logtest? (-> self master-options) 2) - (let - ((v0-1 (the-as symbol (logand -3 (-> self master-options)))) - ) - (set! (-> self master-options) (the-as uint v0-1)) - v0-1 - ) - ) - ) - ) ) -(defun - in-cam-entity-volume? - ((arg0 vector) (arg1 entity) (arg2 float) (arg3 symbol)) +(defun in-cam-entity-volume? ((arg0 vector) (arg1 entity) (arg2 float) (arg3 symbol)) (local-vars (sv-16 res-tag)) (let ((s2-0 0)) - (while #t - (set! sv-16 (new 'static 'res-tag)) - (let - ((v1-1 - (the-as - object - ((method-of-type res-lump get-property-data) - arg1 - arg3 - 'exact - (the float s2-0) - (the-as pointer #f) - (& sv-16) - *res-static-buf* - ) - ) - ) - ) - (cond - ((not (the-as pointer v1-1)) - (return #f) - ) - (else - (dotimes (a0-2 (the-as int (-> sv-16 elt-count))) - (if - (< - arg2 - (- - (vector-dot arg0 (-> (the-as (inline-array vector) v1-1) a0-2)) - (-> (the-as (inline-array vector) v1-1) a0-2 w) + (while #t + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-1 (the-as object ((method-of-type res-lump get-property-data) + arg1 + arg3 + 'exact + (the float s2-0) + (the-as pointer #f) + (& sv-16) + *res-static-buf* + ) + ) + ) + ) + (cond + ((not (the-as pointer v1-1)) + (return #f) ) + (else + (dotimes (a0-2 (the-as int (-> sv-16 elt-count))) + (if (< arg2 (- (vector-dot arg0 (-> (the-as (inline-array vector) v1-1) a0-2)) + (-> (the-as (inline-array vector) v1-1) a0-2 w) + ) + ) + (goto cfg-12) + ) + ) + (return #t) + ) ) - (goto cfg-12) - ) ) - (return #t) - ) + (label cfg-12) + (+! s2-0 1) ) - ) - (label cfg-12) - (+! s2-0 1) ) - ) (the-as symbol #f) ) (defbehavior master-unset-region camera-master () (when (-> self cam-entity) - (set! (-> self cam-entity) #f) - (set! (-> self master-options) (logand -65 (-> self master-options))) - (set! (-> self stringMinHeight) (-> *CAMERA-bank* default-string-min-y)) - (set! (-> self stringMaxHeight) (-> *CAMERA-bank* default-string-max-y)) - (set! (-> self stringMinLength) (-> *CAMERA-bank* default-string-min-z)) - (set! (-> self stringMaxLength) (-> *CAMERA-bank* default-string-max-z)) - (set! (-> self stringCliffHeight) 163840.0) - (send-event *camera* 'point-of-interest #f) - (set! (-> *camera-combiner* tracking point-of-interest-blend target) 0.0) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 1) - (set! (-> a1-1 message) 'query-state) - (set! (-> a1-1 param 0) (the-as uint *camera-base-mode*)) - (if (not (send-event-function *camera* a1-1)) - (send-event *camera* 'change-state *camera-base-mode* 450) - ) + (set! (-> self cam-entity) #f) + (set! (-> self master-options) (logand -65 (-> self master-options))) + (set! (-> self stringMinHeight) (-> *CAMERA-bank* default-string-min-y)) + (set! (-> self stringMaxHeight) (-> *CAMERA-bank* default-string-max-y)) + (set! (-> self stringMinLength) (-> *CAMERA-bank* default-string-min-z)) + (set! (-> self stringMaxLength) (-> *CAMERA-bank* default-string-max-z)) + (set! (-> self stringCliffHeight) 163840.0) + (send-event *camera* 'point-of-interest #f) + (set! (-> *camera-combiner* tracking point-of-interest-blend target) 0.0) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'query-state) + (set! (-> a1-1 param 0) (the-as uint *camera-base-mode*)) + (if (not (send-event-function *camera* a1-1)) + (send-event *camera* 'change-state *camera-base-mode* 450) + ) + ) + (set! (-> *camera-combiner* tracking tilt-adjust target) (-> *CAMERA-bank* default-tilt-adjust)) + (send-event *camera* 'clear-slave-option #x10000) ) - (set! - (-> *camera-combiner* tracking tilt-adjust target) - (-> *CAMERA-bank* default-tilt-adjust) - ) - (send-event *camera* 'clear-slave-option #x10000) - ) ) (defbehavior master-base-region camera-master ((arg0 entity)) (logior! (-> self master-options) 64) - (set! - (-> self stringMinHeight) - (cam-slave-get-float - arg0 - 'stringMinHeight - (-> *CAMERA-bank* default-string-min-y) - ) - ) - (set! - (-> self stringMaxHeight) - (cam-slave-get-float - arg0 - 'stringMaxHeight - (-> *CAMERA-bank* default-string-max-y) - ) - ) - (set! - (-> self stringMinLength) - (cam-slave-get-float - arg0 - 'stringMinLength - (-> *CAMERA-bank* default-string-min-z) - ) - ) - (set! - (-> self stringMaxLength) - (cam-slave-get-float - arg0 - 'stringMaxLength - (-> *CAMERA-bank* default-string-max-z) - ) - ) + (set! (-> self stringMinHeight) + (cam-slave-get-float arg0 'stringMinHeight (-> *CAMERA-bank* default-string-min-y)) + ) + (set! (-> self stringMaxHeight) + (cam-slave-get-float arg0 'stringMaxHeight (-> *CAMERA-bank* default-string-max-y)) + ) + (set! (-> self stringMinLength) + (cam-slave-get-float arg0 'stringMinLength (-> *CAMERA-bank* default-string-min-z)) + ) + (set! (-> self stringMaxLength) + (cam-slave-get-float arg0 'stringMaxLength (-> *CAMERA-bank* default-string-max-z)) + ) (let ((s5-0 (new 'stack-no-clear 'vector))) - (if - (cam-slave-get-vector-with-offset - (the-as entity-actor arg0) - s5-0 - 'interesting - ) - (send-event *camera* 'point-of-interest s5-0) + (if (cam-slave-get-vector-with-offset (the-as entity-actor arg0) s5-0 'interesting) + (send-event *camera* 'point-of-interest s5-0) + ) ) - ) (if (< 405504.0 (-> self stringMaxLength)) - (set! (-> self stringMaxLength) (-> *CAMERA-bank* default-string-max-z)) - ) - (set! - (-> self stringCliffHeight) - (cam-slave-get-float arg0 'stringCliffHeight 163840.0) - ) - (let ((a1-7 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-7 from) self) - (set! (-> a1-7 num-params) 1) - (set! (-> a1-7 message) 'query-state) - (set! (-> a1-7 param 0) (the-as uint *camera-base-mode*)) - (if (not (send-event-function *camera* a1-7)) - (send-event *camera* 'change-state *camera-base-mode* 450) - ) - ) - (if (logtest? #x10000 (cam-slave-get-flags (-> self cam-entity) 'flags)) - (send-event *camera* 'set-slave-option #x10000) - ) - (let - ((f0-12 - (cam-slave-get-float - arg0 - 'tiltAdjust - (-> *CAMERA-bank* default-tilt-adjust) + (set! (-> self stringMaxLength) (-> *CAMERA-bank* default-string-max-z)) ) - ) + (set! (-> self stringCliffHeight) (cam-slave-get-float arg0 'stringCliffHeight 163840.0)) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 1) + (set! (-> a1-7 message) 'query-state) + (set! (-> a1-7 param 0) (the-as uint *camera-base-mode*)) + (if (not (send-event-function *camera* a1-7)) + (send-event *camera* 'change-state *camera-base-mode* 450) + ) + ) + (if (logtest? #x10000 (cam-slave-get-flags (-> self cam-entity) 'flags)) + (send-event *camera* 'set-slave-option #x10000) + ) + (let ((f0-12 (cam-slave-get-float arg0 'tiltAdjust (-> *CAMERA-bank* default-tilt-adjust)))) + (set! (-> *camera-combiner* tracking tilt-adjust target) f0-12) + f0-12 ) - (set! (-> *camera-combiner* tracking tilt-adjust target) f0-12) - f0-12 - ) ) (defun setup-slave-for-hopefull ((arg0 camera-slave)) (when (= (-> arg0 blend-to-type) 2) - (cam-calc-follow! (-> arg0 tracking) (-> arg0 trans) #f) - (slave-set-rotation! - (-> arg0 tracking) - (-> arg0 trans) - (the-as float (-> arg0 options)) - (-> arg0 fov) - #f + (cam-calc-follow! (-> arg0 tracking) (-> arg0 trans) #f) + (slave-set-rotation! (-> arg0 tracking) (-> arg0 trans) (the-as float (-> arg0 options)) (-> arg0 fov) #f) ) - ) (none) ) -(defbehavior - master-is-hopeful-better? camera-master - ((arg0 camera-slave) (arg1 camera-slave)) +(defbehavior master-is-hopeful-better? camera-master ((arg0 camera-slave) (arg1 camera-slave)) (if (not *camera-combiner*) - #f - (< - (vector-dot - (-> arg0 tracking inv-mat vector 2) - (-> *camera-combiner* inv-camera-rot vector 2) - ) - (vector-dot - (-> arg1 tracking inv-mat vector 2) - (-> *camera-combiner* inv-camera-rot vector 2) - ) - ) - ) + #f + (< (vector-dot (-> arg0 tracking inv-mat vector 2) (-> *camera-combiner* inv-camera-rot vector 2)) + (vector-dot (-> arg1 tracking inv-mat vector 2) (-> *camera-combiner* inv-camera-rot vector 2)) + ) + ) ) -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code?. [OP: 166] -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code?. [OP: 176] -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code?. [OP: 196] -;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code?. [OP: 220] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 166] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 176] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 196] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 220] (defbehavior master-switch-to-entity camera-master ((arg0 entity)) (local-vars - (v0-21 none) - (gp-0 (pointer process)) - (sv-16 res-tag) - (sv-112 process) - (sv-128 string) - (sv-144 string) - ) + (v0-21 none) + (gp-0 (pointer process)) + (sv-16 res-tag) + (sv-112 process) + (sv-128 string) + (sv-144 string) + ) (set! (-> self cam-entity) arg0) 10 (let ((s4-0 (cam-state-from-entity arg0))) - (cond - ((= s4-0 *camera-base-mode*) - (master-base-region arg0) - (return #t) - ) - (s4-0 - (let ((s3-0 (get-process *camera-dead-pool* camera-slave #x4000))) - (set! gp-0 (when s3-0 - (let ((t9-3 (method-of-type camera-slave activate))) - (t9-3 - (the-as camera-slave s3-0) - self - 'camera-slave - (the-as pointer #x70004000) - ) - ) - (run-now-in-process s3-0 cam-slave-init s4-0 arg0) - (-> s3-0 ppointer) - ) + (cond + ((= s4-0 *camera-base-mode*) + (master-base-region arg0) + (return #t) ) + (s4-0 + (let ((s3-0 (get-process *camera-dead-pool* camera-slave #x4000))) + (set! gp-0 (when s3-0 + (let ((t9-3 (method-of-type camera-slave activate))) + (t9-3 (the-as camera-slave s3-0) self 'camera-slave (the-as pointer #x70004000)) + ) + (run-now-in-process s3-0 cam-slave-init s4-0 arg0) + (-> s3-0 ppointer) + ) + ) + ) + (when (not gp-0) + (format 0 "ERROR : primary region activate failed~%") + (return #f) + ) + (setup-slave-for-hopefull (the-as camera-slave (ppointer->process gp-0))) + ) + (else + (format 0 "ERROR : camera region '~S' didn't produce a state~%" (res-lump-struct arg0 'name structure)) + (return #f) + ) ) - (when (not gp-0) - (format 0 "ERROR : primary region activate failed~%") - (return #f) - ) - (setup-slave-for-hopefull (the-as camera-slave (ppointer->process gp-0))) - ) - (else - (format - 0 - "ERROR : camera region '~S' didn't produce a state~%" - (res-lump-struct arg0 'name structure) - ) - (return #f) - ) ) - ) (set! sv-16 (new 'static 'res-tag)) - (let - ((s4-2 (res-lump-data arg0 'alternates (pointer string) :tag-ptr (& sv-16)))) - (when s4-2 - (dotimes (s3-2 (the-as int (-> sv-16 elt-count))) - (let ((s2-0 (entity-by-name (-> s4-2 s3-2)))) - (set! v0-21 (cond - (s2-0 + (let ((s4-2 (res-lump-data arg0 'alternates (pointer string) :tag-ptr (& sv-16)))) + (when s4-2 + (dotimes (s3-2 (the-as int (-> sv-16 elt-count))) + (let ((s2-0 (entity-by-name (-> s4-2 s3-2)))) + (set! v0-21 + (cond + (s2-0 (let ((s0-0 (cam-state-from-entity s2-0))) - (cond - ((= s0-0 *camera-base-mode*) - (deactivate (-> gp-0 0)) - (master-base-region s2-0) - (return #t) - v0-21 - ) - (s0-0 - (set! - sv-112 - (get-process *camera-dead-pool* camera-slave #x4000) - ) - (let ((s1-0 (when sv-112 - (let - ((t9-15 - (method-of-type camera-slave activate) - ) - ) - (t9-15 - (the-as camera-slave sv-112) - self - 'camera-slave - (the-as pointer #x70004000) + (cond + ((= s0-0 *camera-base-mode*) + (deactivate (-> gp-0 0)) + (master-base-region s2-0) + (return #t) + v0-21 + ) + (s0-0 + (set! sv-112 (get-process *camera-dead-pool* camera-slave #x4000)) + (let ((s1-0 (when sv-112 + (let ((t9-15 (method-of-type camera-slave activate))) + (t9-15 (the-as camera-slave sv-112) self 'camera-slave (the-as pointer #x70004000)) + ) + (run-now-in-process sv-112 cam-slave-init s0-0 s2-0) + (-> sv-112 ppointer) + ) ) + ) + (cond + (s1-0 + (setup-slave-for-hopefull (the-as camera-slave (ppointer->process s1-0))) + (cond + ((master-is-hopeful-better? + (the-as camera-slave (ppointer->process gp-0)) + (the-as camera-slave (ppointer->process s1-0)) ) - (run-now-in-process - sv-112 - cam-slave-init - s0-0 - s2-0 - ) - (-> sv-112 ppointer) + (deactivate (-> gp-0 0)) + (set! gp-0 s1-0) + gp-0 + ) + (else + (deactivate (-> s1-0 0)) ) + ) + ) + (else + (format 0 "ERROR : alternate region activate failed~%") + ) ) - ) - (cond - (s1-0 - (setup-slave-for-hopefull - (the-as camera-slave (ppointer->process s1-0)) - ) - (cond - ((master-is-hopeful-better? - (the-as camera-slave (ppointer->process gp-0)) - (the-as camera-slave (ppointer->process s1-0)) - ) - (deactivate (-> gp-0 0)) - (set! gp-0 s1-0) - gp-0 ) - (else - (deactivate (-> s1-0 0)) + ) + (else + (let ((s1-1 format) + (s0-1 0) + ) + (set! sv-128 "ERROR : alternate camera region '~S' didn't produce a state~%") + (let ((a2-10 (res-lump-struct s2-0 'name structure))) + (s1-1 s0-1 sv-128 a2-10) + ) ) - ) ) - (else - (format - 0 - "ERROR : alternate region activate failed~%" - ) - ) - ) ) - ) - (else - (let ((s1-1 format) - (s0-1 0) - ) - (set! - sv-128 - "ERROR : alternate camera region '~S' didn't produce a state~%" - ) - (let ((a2-10 (res-lump-struct s2-0 'name structure))) - (s1-1 s0-1 sv-128 a2-10) - ) - ) - ) ) - ) ) - (else + (else (let ((s2-1 format) (s1-2 0) - (s0-2 - "ERROR : alternate '~S' not found for '~S'~%" - ) + (s0-2 "ERROR : alternate '~S' not found for '~S'~%") ) - (set! sv-144 (-> s4-2 s3-2)) - (let ((a3-8 (res-lump-struct arg0 'name structure))) - (s2-1 s1-2 s0-2 sv-144 a3-8) + (set! sv-144 (-> s4-2 s3-2)) + (let ((a3-8 (res-lump-struct arg0 'name structure))) + (s2-1 s1-2 s0-2 sv-144 a3-8) + ) ) - ) ) - ) - ) - ) - ) - ) - ) - (let - ((v1-48 - (the - int - (* - 300.0 - (cam-slave-get-interp-time - (-> (the-as camera-slave (-> gp-0 0)) cam-entity) + ) + ) + ) ) - ) ) - ) ) - (if (nonzero? (-> self force-blend)) - (set! v1-48 (min v1-48 (the-as int (-> self force-blend-time)))) + (let ((v1-48 (the int (* 300.0 (cam-slave-get-interp-time (-> (the-as camera-slave (-> gp-0 0)) cam-entity)))))) + (if (nonzero? (-> self force-blend)) + (set! v1-48 (min v1-48 (the-as int (-> self force-blend-time)))) + ) + (send-event *camera* 'change-state (ppointer->process gp-0) v1-48) ) - (send-event *camera* 'change-state (ppointer->process gp-0) v1-48) - ) #t ) (defbehavior master-check-regions camera-master () (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) 'query-state) - (set! (-> a1-0 param 0) (the-as uint cam-eye)) - (cond - ((send-event-function *camera* a1-0) - #f - ) - ((or (not *target*) (logtest? (-> self master-options) 1)) - (master-unset-region) - ) - ((and - (logtest? (-> self master-options) 4) - (not (-> self on-ground)) - (or - (not (-> self cam-entity)) - (zero? - (logand #x20000 (cam-slave-get-flags (-> self cam-entity) 'flags)) - ) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'query-state) + (set! (-> a1-0 param 0) (the-as uint cam-eye)) + (cond + ((send-event-function *camera* a1-0) + #f ) - ) - #f - ) - ((and - (-> self cam-entity) - (not - (in-cam-entity-volume? - (target-pos 0) - (-> self cam-entity) - 0.0 - 'cutoutvol - ) + ((or (not *target*) (logtest? (-> self master-options) 1)) + (master-unset-region) ) - (or - (in-cam-entity-volume? (target-pos 0) (-> self cam-entity) 1024.0 'pvol) - (in-cam-entity-volume? (target-pos 0) (-> self cam-entity) 1024.0 'vol) - (and - (not - ((method-of-type res-lump get-property-data) - (-> self cam-entity) - 'pvol - 'exact - 0.0 - (the-as pointer #f) - (the-as (pointer res-tag) #f) - *res-static-buf* - ) + ((and + (logtest? (-> self master-options) 4) + (not (-> self on-ground)) + (or (not (-> self cam-entity)) (zero? (logand #x20000 (cam-slave-get-flags (-> self cam-entity) 'flags)))) ) - (not - ((method-of-type res-lump get-property-data) - (-> self cam-entity) - 'vol - 'exact - 0.0 - (the-as pointer #f) - (the-as (pointer res-tag) #f) - *res-static-buf* - ) - ) - ) + #f ) - ) - #f - ) - (else - (let ((v1-17 (-> *camera-engine* alive-list next0))) - *camera-engine* - (let ((gp-5 (-> v1-17 next0))) - (while (!= v1-17 (-> *camera-engine* alive-list-end)) - (let ((s5-1 (-> (the-as connection v1-17) param1))) - (when - (and - (not - (in-cam-entity-volume? - (target-pos 0) - (the-as entity s5-1) - 1024.0 - 'cutoutvol + ((and + (-> self cam-entity) + (not (in-cam-entity-volume? (target-pos 0) (-> self cam-entity) 0.0 'cutoutvol)) + (or + (in-cam-entity-volume? (target-pos 0) (-> self cam-entity) 1024.0 'pvol) + (in-cam-entity-volume? (target-pos 0) (-> self cam-entity) 1024.0 'vol) + (and + (not ((method-of-type res-lump get-property-data) + (-> self cam-entity) + 'pvol + 'exact + 0.0 + (the-as pointer #f) + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (not ((method-of-type res-lump get-property-data) + (-> self cam-entity) + 'vol + 'exact + 0.0 + (the-as pointer #f) + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) ) - ) - (in-cam-entity-volume? (target-pos 0) (the-as entity s5-1) 0.0 'vol) ) - (if (master-switch-to-entity (the-as entity s5-1)) - (return #t) - ) - ) ) - (set! v1-17 gp-5) - *camera-engine* - (set! gp-5 (-> gp-5 next0)) - ) + #f ) + (else + (let ((v1-17 (-> *camera-engine* alive-list next0))) + *camera-engine* + (let ((gp-5 (-> v1-17 next0))) + (while (!= v1-17 (-> *camera-engine* alive-list-end)) + (let ((s5-1 (-> (the-as connection v1-17) param1))) + (when (and + (not (in-cam-entity-volume? (target-pos 0) (the-as entity s5-1) 1024.0 'cutoutvol)) + (in-cam-entity-volume? (target-pos 0) (the-as entity s5-1) 0.0 'vol) + ) + (if (master-switch-to-entity (the-as entity s5-1)) + (return #t) + ) + ) + ) + (set! v1-17 gp-5) + *camera-engine* + (set! gp-5 (-> gp-5 next0)) + ) + ) + ) + (master-unset-region) + ) ) - (master-unset-region) - ) ) - ) ) (defstate cam-master-active (camera-master) @@ -1268,1153 +887,785 @@ ) ) ((= v1-0 'level-deactivate) - (set! - v0-0 - (the-as - object - (if - (and - (-> self cam-entity) - (= (-> (get-level (-> self cam-entity)) name) (-> arg3 param 0)) + (set! v0-0 (the-as + object + (if (and (-> self cam-entity) (= (-> (get-level (-> self cam-entity)) name) (-> arg3 param 0))) + (master-unset-region) + ) + ) + ) ) - (master-unset-region) - ) - ) - ) - ) - ((= v1-0 'clear-entity) - (set! v0-0 (master-unset-region)) - ) - ((= v1-0 'no-intro) - (set! v0-0 3) - (set! (-> self no-intro) (the-as uint v0-0)) - ) - ((= v1-0 'force-blend) - (set! (-> self force-blend) (the-as uint 3)) - (set! v0-0 (-> arg3 param 0)) - (set! (-> self force-blend-time) (the-as uint v0-0)) - ) - ((= v1-0 'teleport-to-transformq) - (set! v0-0 (the-as object (when (> arg1 0) - (let - ((gp-1 (the-as object (-> arg3 param 0)))) - (send-event - self - 'change-state - cam-free-floating - 0 - ) - (dotimes (s5-1 (-> self num-slaves)) - (set! - (-> self slave s5-1 0 trans quad) - (-> (the-as matrix gp-1) vector 0 quad) - ) - (quaternion->matrix - (the-as - matrix - (-> self slave s5-1 0 tracking) + ((= v1-0 'clear-entity) + (set! v0-0 (master-unset-region)) + ) + ((= v1-0 'no-intro) + (set! v0-0 3) + (set! (-> self no-intro) (the-as uint v0-0)) + ) + ((= v1-0 'force-blend) + (set! (-> self force-blend) (the-as uint 3)) + (set! v0-0 (-> arg3 param 0)) + (set! (-> self force-blend-time) (the-as uint v0-0)) + ) + ((= v1-0 'teleport-to-transformq) + (set! v0-0 + (the-as object (when (> arg1 0) + (let ((gp-1 (the-as object (-> arg3 param 0)))) + (send-event self 'change-state cam-free-floating 0) + (dotimes (s5-1 (-> self num-slaves)) + (set! (-> self slave s5-1 0 trans quad) (-> (the-as matrix gp-1) vector 0 quad)) + (quaternion->matrix + (the-as matrix (-> self slave s5-1 0 tracking)) + (the-as quaternion (+ (the-as uint gp-1) 16)) + ) ) - (the-as - quaternion - (+ (the-as uint gp-1) 16) - ) - ) ) - ) (send-event self 'teleport) ) - ) - ) - ) - ((= v1-0 'teleport-to-other-start-string) - (let ((gp-2 (new 'stack-no-clear 'vector))) - (set! (-> *camera-combiner* trans quad) (-> *camera-other-trans* quad)) - (vector-! gp-2 (-> self tpos-curr-adj) *camera-other-trans*) - (vector-normalize! gp-2 1.0) - (forward-down->inv-matrix - (-> *camera-combiner* inv-camera-rot) - gp-2 - (new 'static 'vector :y -1.0) - ) - ) - (send-event self 'change-state cam-free-floating 0) - (send-event self 'teleport) - (let ((a1-10 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-10 from) self) - (set! (-> a1-10 num-params) 2) - (set! (-> a1-10 message) 'change-state) - (set! (-> a1-10 param 0) (the-as uint *camera-base-mode*)) - (set! (-> a1-10 param 1) (the-as uint 0)) - (set! v0-0 (send-event-function self a1-10)) - ) - ) - ((= v1-0 'teleport-to-vector-start-string) - (set! v0-0 (the-as object (when (> arg1 0) - (let - ((v1-43 (the-as object (-> arg3 param 0))) - (gp-3 (new 'stack-no-clear 'vector)) - ) - (set! - (-> *camera-combiner* trans quad) - (-> (the-as vector v1-43) quad) - ) - (vector-! - gp-3 - (-> self tpos-curr-adj) - (the-as vector v1-43) - ) - (vector-normalize! gp-3 1.0) - (forward-down->inv-matrix - (-> *camera-combiner* inv-camera-rot) - gp-3 - (new 'static 'vector :y -1.0) - ) - ) - (send-event - self - 'change-state - cam-free-floating - 0 - ) - (send-event - self - 'change-state - *camera-base-mode* - 0 - ) - ) - ) - ) - ) - ((= v1-0 'change-pov) - (let ((v1-52 (the-as object (-> arg3 param 0)))) - (cond - ((< arg1 2) - (set! (-> self pov-bone) 0) - 0 - ) - (else - (set! (-> self pov-bone) (the-as int (-> arg3 param 1))) - ) - ) - (set! v0-0 (the-as object (cond - ((not (the-as handle v1-52)) - (set! - (-> self pov-handle) - (the-as handle #f) - ) - #f - ) - (else - (set! - v0-0 - (process->handle (the-as process v1-52)) - ) - (set! - (-> self pov-handle) - (the-as handle v0-0) - ) - v0-0 - ) - ) - ) - ) - ) - ) - ((= v1-0 'change-target-bone) - (set! v0-0 (-> arg3 param 0)) - (set! (-> self which-bone) (the-as int v0-0)) - ) - ((= v1-0 'change-target) - (let ((v1-56 (the-as object (-> arg3 param 0)))) - (cond - ((< arg1 2) - (set! (-> self which-bone) 0) - 0 - ) - (else - (set! (-> self which-bone) (the-as int (-> arg3 param 1))) - ) - ) - (cond - ((not (the-as process v1-56)) - (set! (-> self drawable-target) (the-as handle #f)) - (set! (-> self master-options) (logand -3 (-> self master-options))) - ) - ((= (the-as process v1-56) *target*) - (set! (-> self drawable-target) (the-as handle #f)) - (logior! (-> self master-options) 2) - (reset-target-tracking) - ) - (else - (set! - (-> self drawable-target) - (process->handle (the-as process v1-56)) - ) - (logior! (-> self master-options) 2) - (reset-drawable-tracking) - ) - ) - ) - (set! (-> *camera-combiner* tracking no-follow) #f) - (set! v0-0 #f) - ) - ((= v1-0 'reset-root) - (dotimes (gp-4 (-> self num-slaves)) - (set! (-> self slave gp-4 0 trans quad) (the-as uint128 0)) - (matrix-identity! (the-as matrix (-> self slave gp-4 0 tracking))) - ) - (vector-reset! (-> *camera-combiner* trans)) - (set! - v0-0 - (matrix-identity! (the-as matrix (-> *camera-combiner* tracking))) - ) - ) - ((= v1-0 'set-fov) - (set! (-> *camera-combiner* fov) (the-as float (-> arg3 param 0))) - (dotimes (v1-86 (-> self num-slaves)) - (set! (-> self slave v1-86 0 fov) (the-as float (-> arg3 param 0))) - ) - (set! v0-0 #f) - ) - ((= v1-0 'query-fov) - (set! v0-0 (the-as object (if (> (-> self num-slaves) 0) - (-> self slave 0 0 fov) - 11650.845 - ) - ) - ) - ) - ((= v1-0 'intro-done?) - (set! v0-0 #t) - (dotimes (v1-91 (-> self num-slaves)) - (if (< (-> self slave v1-91 0 intro-t) 1.0) - (set! v0-0 #f) - ) - ) - ) - ((= v1-0 'query-state) - (let ((v1-95 (+ (-> self num-slaves) -1))) - (while - (not - (or - (< v1-95 0) - (= (-> self slave v1-95 0 next-state) (-> arg3 param 0)) - ) - ) - (+! v1-95 -1) - ) - (set! - v0-0 - (the-as - object - (and - (>= v1-95 0) - (= (-> self slave v1-95 0 next-state) (-> arg3 param 0)) - ) - ) - ) - ) - ) - ((= v1-0 'change-to-entity-by-name) - (let ((a0-75 (entity-by-name (the-as string (-> arg3 param 0))))) - (set! v0-0 (the-as object (if a0-75 - (master-switch-to-entity a0-75) - (format - 0 - "ERROR : camera entity '~S' not found for change-to-entity-by-name~%" - (-> arg3 param 0) - ) - ) - ) - ) - ) - ) - ((= v1-0 'change-state) - (let ((s1-0 (the-as uint #f)) - (s2-0 (the-as (pointer process) #f)) - (s5-2 (the-as (pointer camera-slave) #f)) - ) - (let ((s3-0 (the-as object #f)) - (s4-1 (the-as (pointer camera-slave) #f)) - ) - (let ((t9-22 type-type?) - (v1-101 (-> arg3 param 0)) - ) - (cond - ((t9-22 (rtype-of v1-101) state) - (set! s1-0 (-> arg3 param 0)) - ) - ((let ((t9-23 type-type?) - (v1-103 (-> arg3 param 0)) - ) - (t9-23 (rtype-of v1-103) camera-slave) - ) - (set! s2-0 (process->ppointer (the-as process (-> arg3 param 0)))) - ) - (else - (let ((t9-24 format) - (a0-82 0) - (a1-25 - "ERROR : invalid type '~A' to *camera* change-state~%" - ) - (v1-106 (-> arg3 param 0)) - ) - (t9-24 a0-82 a1-25 (rtype-of v1-106)) - ) - ) - ) - ) - (if - (and - (> (-> self num-slaves) 0) - (or - (= (-> self slave 0 0 next-state name) 'cam-stick) - (= (-> self slave 0 0 next-state name) 'cam-string) - ) - ) - (set! - (-> self view-off-param-save) - (-> self slave 0 0 view-off-param) - ) - ) - (set! (-> self changer) (the-as uint (process->ppointer arg0))) - (cond - ((<= (-> self num-slaves) 0) - (cond - (s2-0 - (let ((a1-26 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-26 from) self) - (set! (-> a1-26 num-params) 1) - (set! (-> a1-26 message) 'slave-activated) - (let ((v1-126 s2-0)) - (set! (-> a1-26 param 0) (the-as uint (if v1-126 - (-> - (the-as - camera-slave - (-> v1-126 0) - ) - self - ) - ) - ) - ) - ) - (send-event-function self a1-26) - ) - ) - (else - (let - ((gp-5 - (the-as - camera-slave - (get-process *camera-dead-pool* camera-slave #x4000) + ) ) - ) - ) - (set! s2-0 (when gp-5 - (let ((t9-27 (method-of-type camera-slave activate))) - (t9-27 - gp-5 - self - 'camera-slave - (the-as pointer #x70004000) - ) + ) + ((= v1-0 'teleport-to-other-start-string) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (set! (-> *camera-combiner* trans quad) (-> *camera-other-trans* quad)) + (vector-! gp-2 (-> self tpos-curr-adj) *camera-other-trans*) + (vector-normalize! gp-2 1.0) + (forward-down->inv-matrix (-> *camera-combiner* inv-camera-rot) gp-2 (new 'static 'vector :y -1.0)) + ) + (send-event self 'change-state cam-free-floating 0) + (send-event self 'teleport) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 2) + (set! (-> a1-10 message) 'change-state) + (set! (-> a1-10 param 0) (the-as uint *camera-base-mode*)) + (set! (-> a1-10 param 1) (the-as uint 0)) + (set! v0-0 (send-event-function self a1-10)) + ) + ) + ((= v1-0 'teleport-to-vector-start-string) + (set! v0-0 + (the-as + object + (when (> arg1 0) + (let ((v1-43 (the-as object (-> arg3 param 0))) + (gp-3 (new 'stack-no-clear 'vector)) ) - (run-now-in-process gp-5 cam-slave-init s1-0 #f) - (-> gp-5 ppointer) - ) - ) - ) + (set! (-> *camera-combiner* trans quad) (-> (the-as vector v1-43) quad)) + (vector-! gp-3 (-> self tpos-curr-adj) (the-as vector v1-43)) + (vector-normalize! gp-3 1.0) + (forward-down->inv-matrix (-> *camera-combiner* inv-camera-rot) gp-3 (new 'static 'vector :y -1.0)) + ) + (send-event self 'change-state cam-free-floating 0) + (send-event self 'change-state *camera-base-mode* 0) + ) + ) + ) + ) + ((= v1-0 'change-pov) + (let ((v1-52 (the-as object (-> arg3 param 0)))) (cond - (s2-0 - ) - (else - (format 0 "ERROR : replacement slave failed to activate~%") - ) - ) - ) - ) - (when s2-0 - (send-event *camera-combiner* 'stop-tracking) - (if (= (-> (the-as camera-slave (-> s2-0 0)) blend-to-type) 2) - (send-event *camera-combiner* 'start-tracking (if s2-0 - (-> - (the-as - camera-slave - (-> s2-0 0) - ) - self - ) - ) - ) - ) - ) - ) - ((zero? (-> arg3 param 1)) - (if *math-camera* - (set! (-> *math-camera* reset) 1) - ) - (when (< 1 (-> self num-slaves)) - (if (= (-> self changer) (-> self slave 1)) - (set! s5-2 (-> self slave 1)) - (deactivate (-> self slave 1 0)) - ) - (set! (-> self slave 1) (the-as (pointer camera-slave) #f)) - (+! (-> self num-slaves) -1) - ) - (cond - (s2-0 - (if (= (-> self changer) (-> self slave 0)) - (set! s5-2 (-> self slave 0)) - (deactivate (-> self slave 0 0)) - ) - (set! (-> self slave 0) (the-as (pointer camera-slave) #f)) - (+! (-> self num-slaves) -1) - (let ((a1-33 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-33 from) self) - (set! (-> a1-33 num-params) 1) - (set! (-> a1-33 message) 'slave-activated) - (let ((v1-166 s2-0)) - (set! (-> a1-33 param 0) (the-as uint (if v1-166 - (-> - (the-as - camera-slave - (-> v1-166 0) - ) - self - ) - ) - ) - ) - ) - (send-event-function self a1-33) - ) - ) - ((not - (and - (= (-> self slave 0 0 next-state) *camera-base-mode*) - (= (-> self slave 0 0 next-state) s1-0) - ) - ) - (send-event - (ppointer->process (-> self slave 0)) - 'change-state-no-go - s1-0 - ) - (set! s4-1 (-> self slave 0)) - (set! s3-0 s1-0) - (set! s2-0 (-> self slave 0)) - ) - ) - (when s2-0 - (send-event *camera-combiner* 'stop-tracking) - (when (= (-> (the-as camera-slave (-> s2-0 0)) blend-to-type) 2) - (let ((a1-36 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-36 from) self) - (set! (-> a1-36 num-params) 1) - (set! (-> a1-36 message) 'start-tracking) - (let ((v1-191 s2-0)) - (set! (-> a1-36 param 0) (the-as uint (if v1-191 - (-> - (the-as - camera-slave - (-> v1-191 0) - ) - self - ) - ) - ) - ) - ) - (send-event-function *camera-combiner* a1-36) - ) - ) - ) - ) - (else - (when (< 1 (-> self num-slaves)) - (if (= (-> self changer) (-> self slave 0)) - (set! s5-2 (-> self slave 0)) - (deactivate (-> self slave 0 0)) - ) - (set! (-> self slave 0) (-> self slave 1)) - (set! (-> self slave 1) (the-as (pointer camera-slave) #f)) - (+! (-> self num-slaves) -1) - ) - (when (< 0.0 (-> self slave 0 0 intro-t-step)) - (set! (-> self outro-t) (-> self slave 0 0 intro-t)) - (set! (-> self outro-t-step) (/ -5.0 (the float (-> arg3 param 1)))) - (set! - (-> self outro-exit-value) - (-> self slave 0 0 outro-exit-value) - ) - (curve-copy! (-> self outro-curve) (-> self slave 0 0 intro-curve)) - ) - (if (nonzero? (-> self no-intro)) - (set! (-> self outro-t) 0.0) - ) - (when - (not - (and - (= (-> self slave 0 0 next-state) *camera-base-mode*) - (= (-> self slave 0 0 next-state) s1-0) - ) - ) - (cond - (s2-0 - (let ((a1-38 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-38 from) self) - (set! (-> a1-38 num-params) 1) - (set! (-> a1-38 message) 'slave-activated) - (let ((v1-228 s2-0)) - (set! (-> a1-38 param 0) (the-as uint (if v1-228 - (-> - (the-as - camera-slave - (-> v1-228 0) - ) - self - ) - ) - ) - ) - ) - (send-event-function self a1-38) - ) - ) - (else - (let ((s2-1 (get-process *camera-dead-pool* camera-slave #x4000))) - (set! s2-0 (when s2-1 - (let ((t9-42 (method-of-type camera-slave activate))) - (t9-42 - (the-as camera-slave s2-1) - self - 'camera-slave - (the-as pointer #x70004000) - ) - ) - (run-now-in-process s2-1 cam-slave-init s1-0 #f) - (-> s2-1 ppointer) - ) - ) - ) - (cond - (s2-0 + ((< arg1 2) + (set! (-> self pov-bone) 0) + 0 ) (else - (format #t "ERROR : secondary slave activate failed~%") - ) + (set! (-> self pov-bone) (the-as int (-> arg3 param 1))) + ) ) - ) + (set! v0-0 (the-as object (cond + ((not (the-as process v1-52)) + (set! (-> self pov-handle) (the-as handle #f)) + #f + ) + (else + (set! v0-0 (process->handle (the-as process v1-52))) + (set! (-> self pov-handle) (the-as handle v0-0)) + v0-0 + ) + ) + ) + ) ) - (when s2-0 - (send-event *camera-combiner* 'set-interpolation (-> arg3 param 1)) - (set! s4-1 (-> self slave 0)) + ) + ((= v1-0 'change-target-bone) + (set! v0-0 (-> arg3 param 0)) + (set! (-> self which-bone) (the-as int v0-0)) + ) + ((= v1-0 'change-target) + (let ((v1-56 (the-as object (-> arg3 param 0)))) (cond - ((zero? (-> self slave 0 0 blend-from-type)) - (send-event - (ppointer->process (-> self slave 0)) - 'change-state-no-go - cam-fixed + ((< arg1 2) + (set! (-> self which-bone) 0) + 0 ) - (send-event *camera-combiner* 'stop-tracking) - (set! s3-0 cam-fixed) + (else + (set! (-> self which-bone) (the-as int (-> arg3 param 1))) + ) ) - (else - (send-event - (ppointer->process (-> self slave 0)) - 'change-state-no-go - cam-decel + (cond + ((not (the-as process v1-56)) + (set! (-> self drawable-target) (the-as handle #f)) + (set! (-> self master-options) (logand -3 (-> self master-options))) ) - (set! s3-0 cam-decel) + ((= (the-as process v1-56) *target*) + (set! (-> self drawable-target) (the-as handle #f)) + (logior! (-> self master-options) 2) + (reset-target-tracking) + ) + (else + (set! (-> self drawable-target) (process->handle (the-as process v1-56))) + (logior! (-> self master-options) 2) + (reset-drawable-tracking) + ) ) - ) - (let ((v1-261 (-> *camera-combiner* tracking-status))) - (cond - ((zero? v1-261) - (let - ((v1-263 (-> (the-as camera-slave (-> s2-0 0)) blend-to-type))) - (cond - ((zero? v1-263) - ) - ((= v1-263 1) - ) - ((= v1-263 2) - (if (= (-> self slave 0 0 blend-from-type) 1) - (send-event - *camera-combiner* - 'copy-tracking - (ppointer->process (-> self slave 0)) - ) - (send-event - *camera-combiner* - 'start-tracking - (ppointer->process (-> self slave 0)) - ) - ) - (set! (-> *camera-combiner* tracking-status) (the-as uint 2)) - ) - ) - ) - ) - ((= v1-261 1) - (let - ((v1-280 (-> (the-as camera-slave (-> s2-0 0)) blend-to-type))) - (cond - ((zero? v1-280) - (set! (-> *camera-combiner* tracking-status) (the-as uint 3)) - ) - ((= v1-280 1) - (set! (-> *camera-combiner* tracking-status) (the-as uint 3)) - ) - ((= v1-280 2) - ) - ) - ) - ) - ((= v1-261 2) - (let - ((v1-286 (-> (the-as camera-slave (-> s2-0 0)) blend-to-type))) - (cond - ((zero? v1-286) - (set! (-> *camera-combiner* tracking-status) (the-as uint 0)) - 0 - ) - ((= v1-286 1) - (set! (-> *camera-combiner* tracking-status) (the-as uint 0)) - 0 - ) - ((= v1-286 2) - ) - ) - ) - ) - ((= v1-261 3) - (let - ((v1-295 (-> (the-as camera-slave (-> s2-0 0)) blend-to-type))) - (cond - ((zero? v1-295) - (set! (-> *camera-combiner* tracking-status) (the-as uint 0)) - 0 - ) - ((= v1-295 1) - (set! (-> *camera-combiner* tracking-status) (the-as uint 0)) - 0 - ) - ((= v1-295 2) - (set! (-> *camera-combiner* tracking-status) (the-as uint 2)) - ) - ) - ) - ) - ) - ) ) - ) + (set! (-> *camera-combiner* tracking no-follow) #f) + (set! v0-0 #f) ) - ) - (if s4-1 - (send-event (if s4-1 - (-> (the-as camera-slave (-> s4-1 0)) self) + ((= v1-0 'reset-root) + (dotimes (gp-4 (-> self num-slaves)) + (set! (-> self slave gp-4 0 trans quad) (the-as uint128 0)) + (matrix-identity! (the-as matrix (-> self slave gp-4 0 tracking))) + ) + (vector-reset! (-> *camera-combiner* trans)) + (set! v0-0 (matrix-identity! (the-as matrix (-> *camera-combiner* tracking)))) + ) + ((= v1-0 'set-fov) + (set! (-> *camera-combiner* fov) (the-as float (-> arg3 param 0))) + (dotimes (v1-86 (-> self num-slaves)) + (set! (-> self slave v1-86 0 fov) (the-as float (-> arg3 param 0))) + ) + (set! v0-0 #f) + ) + ((= v1-0 'query-fov) + (set! v0-0 (the-as object (if (> (-> self num-slaves) 0) + (-> self slave 0 0 fov) + 11650.845 + ) + ) + ) + ) + ((= v1-0 'intro-done?) + (set! v0-0 #t) + (dotimes (v1-91 (-> self num-slaves)) + (if (< (-> self slave v1-91 0 intro-t) 1.0) + (set! v0-0 #f) + ) + ) + ) + ((= v1-0 'query-state) + (let ((v1-95 (+ (-> self num-slaves) -1))) + (while (not (or (< v1-95 0) (= (-> self slave v1-95 0 next-state) (-> arg3 param 0)))) + (+! v1-95 -1) + ) + (set! v0-0 (the-as object (and (>= v1-95 0) (= (-> self slave v1-95 0 next-state) (-> arg3 param 0))))) + ) + ) + ((= v1-0 'change-to-entity-by-name) + (let ((a0-75 (entity-by-name (the-as string (-> arg3 param 0))))) + (set! v0-0 + (the-as + object + (if a0-75 + (master-switch-to-entity a0-75) + (format 0 "ERROR : camera entity '~S' not found for change-to-entity-by-name~%" (-> arg3 param 0)) + ) + ) + ) + ) + ) + ((= v1-0 'change-state) + (let ((s1-0 (the-as uint #f)) + (s2-0 (the-as (pointer process) #f)) + (s5-2 (the-as (pointer camera-slave) #f)) + ) + (let ((s3-0 (the-as object #f)) + (s4-1 (the-as (pointer camera-slave) #f)) + ) + (let ((t9-22 type-type?) + (v1-101 (-> arg3 param 0)) + ) + (cond + ((t9-22 (rtype-of v1-101) state) + (set! s1-0 (-> arg3 param 0)) + ) + ((let ((t9-23 type-type?) + (v1-103 (-> arg3 param 0)) + ) + (t9-23 (rtype-of v1-103) camera-slave) + ) + (set! s2-0 (process->ppointer (the-as process (-> arg3 param 0)))) + ) + (else + (let ((t9-24 format) + (a0-82 0) + (a1-25 "ERROR : invalid type '~A' to *camera* change-state~%") + (v1-106 (-> arg3 param 0)) + ) + (t9-24 a0-82 a1-25 (rtype-of v1-106)) ) - 'go - s3-0 - ) - ) - ) - (if s5-2 - (deactivate (-> s5-2 0)) - ) - ) - (set! v0-0 #t) - ) - ((= v1-0 'slave-activated) - (set! v0-0 (the-as object (cond - ((< (-> self num-slaves) 2) - (set! - (-> self slave (-> self num-slaves)) - (the-as - (pointer camera-slave) - (process->ppointer - (the-as process (-> arg3 param 0)) - ) - ) - ) - (+! (-> self num-slaves) 1) - (logior! (-> self master-options) 8) - (let - ((f0-15 - (-> - (the-as projectile (-> arg3 param 0)) - max-turn + ) + ) + ) + (if (and + (> (-> self num-slaves) 0) + (or (= (-> self slave 0 0 next-state name) 'cam-stick) (= (-> self slave 0 0 next-state name) 'cam-string)) + ) + (set! (-> self view-off-param-save) (-> self slave 0 0 view-off-param)) + ) + (set! (-> self changer) (the-as uint (process->ppointer arg0))) + (cond + ((<= (-> self num-slaves) 0) + (cond + (s2-0 + (let ((a1-26 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-26 from) self) + (set! (-> a1-26 num-params) 1) + (set! (-> a1-26 message) 'slave-activated) + (let ((v1-126 s2-0)) + (set! (-> a1-26 param 0) (the-as uint (if v1-126 + (-> (the-as camera-slave (-> v1-126 0)) self) + ) + ) + ) + ) + (send-event-function self a1-26) + ) + ) + (else + (let ((gp-5 (the-as camera-slave (get-process *camera-dead-pool* camera-slave #x4000)))) + (set! s2-0 (when gp-5 + (let ((t9-27 (method-of-type camera-slave activate))) + (t9-27 gp-5 self 'camera-slave (the-as pointer #x70004000)) ) - ) + (run-now-in-process gp-5 cam-slave-init s1-0 #f) + (-> gp-5 ppointer) ) - (set! - (-> - *camera-combiner* - tracking - tilt-adjust - target - ) - f0-15 - ) - f0-15 - ) - ) - (else - (format - 0 - "ERROR: ERROR : Exceeded maximum number of camera slaves!~%" - ) - (the-as - object - (deactivate - (the-as camera-slave (-> arg3 param 0)) - ) - ) - ) - ) - ) - ) - ) - ((= v1-0 'ease-in) - (cond - ((< arg1 1) - (set! (-> self ease-t) 0.0) - (set! (-> self master-options) (logand -33 (-> self master-options))) - ) - ((< arg1 2) - (if (< (the-as float (-> arg3 param 0)) (-> self ease-t)) - (set! (-> self ease-t) (the-as float (-> arg3 param 0))) - ) - (set! (-> self master-options) (logand -33 (-> self master-options))) - ) - (else - (if (< (the-as float (-> arg3 param 0)) (-> self ease-t)) - (set! (-> self ease-t) (the-as float (-> arg3 param 0))) - ) - (set! - (-> self ease-to quad) - (-> (the-as vector (-> arg3 param 1)) quad) - ) - (logior! (-> self master-options) 32) - ) - ) - (set! (-> self ease-step) 0.033333335) - (set! v0-0 (-> self ease-from)) - (set! (-> (the-as vector v0-0) quad) (-> self tpos-curr-adj quad)) - ) - ((= v1-0 'damp-up) - (let ((f0-22 0.0)) - (set! (-> self upspeed) f0-22) - (set! v0-0 f0-22) - ) - ) - ((= v1-0 'reset-follow) - (set! v0-0 (the-as object (if (handle->process (-> self drawable-target)) - (reset-drawable-follow) - (reset-follow) - ) - ) - ) - ) - ((= v1-0 'teleport) - (cond - ((and - (logtest? (-> self master-options) 2) - (handle->process (-> self drawable-target)) - ) - (reset-drawable-tracking) - ) - ((and *target* (logtest? (-> self master-options) 2)) - (reset-target-tracking) - ) - ) - (countdown (gp-6 (-> self num-slaves)) - (send-event (ppointer->process (-> self slave gp-6)) arg2) - ) - (let ((a1-54 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-54 from) self) - (set! (-> a1-54 num-params) 0) - (set! (-> a1-54 message) arg2) - (set! v0-0 (send-event-function *camera-combiner* a1-54)) - ) - ) - ((= v1-0 'toggle-slave-option) - (set! - (-> self slave-options) - (logxor (-> self slave-options) (-> arg3 param 0)) - ) - (let ((a0-193 (-> self slave 0)) - (v1-360 (-> self slave 1)) - ) - (if a0-193 - (set! - (-> a0-193 0 options) - (logxor (-> a0-193 0 options) (-> arg3 param 0)) - ) - ) - (set! v0-0 (the-as object (when v1-360 - (set! - v0-0 - (logxor - (-> v1-360 0 options) - (-> arg3 param 0) - ) - ) - (set! - (-> v1-360 0 options) - (the-as uint v0-0) - ) - v0-0 - ) + ) + ) + (cond + (s2-0 + ) + (else + (format 0 "ERROR : replacement slave failed to activate~%") + ) + ) + ) ) - ) - ) - ) - (else - (set! v0-0 (the-as object (cond - ((= v1-0 'slave-option?) - (the-as - object - (if (nonzero? (-> self num-slaves)) - (logtest? - (-> - self - slave - (+ (-> self num-slaves) -1) - 0 - options - ) - (-> arg3 param 0) - ) - ) + (when s2-0 + (send-event *camera-combiner* 'stop-tracking) + (if (= (-> (the-as camera-slave (-> s2-0 0)) blend-to-type) 2) + (send-event *camera-combiner* 'start-tracking (if s2-0 + (-> (the-as camera-slave (-> s2-0 0)) self) + ) ) + ) + ) + ) + ((zero? (-> arg3 param 1)) + (if *math-camera* + (set! (-> *math-camera* reset) 1) + ) + (when (< 1 (-> self num-slaves)) + (if (= (-> self changer) (-> self slave 1)) + (set! s5-2 (-> self slave 1)) + (deactivate (-> self slave 1 0)) + ) + (set! (-> self slave 1) (the-as (pointer camera-slave) #f)) + (+! (-> self num-slaves) -1) + ) + (cond + (s2-0 + (if (= (-> self changer) (-> self slave 0)) + (set! s5-2 (-> self slave 0)) + (deactivate (-> self slave 0 0)) + ) + (set! (-> self slave 0) (the-as (pointer camera-slave) #f)) + (+! (-> self num-slaves) -1) + (let ((a1-33 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-33 from) self) + (set! (-> a1-33 num-params) 1) + (set! (-> a1-33 message) 'slave-activated) + (let ((v1-166 s2-0)) + (set! (-> a1-33 param 0) (the-as uint (if v1-166 + (-> (the-as camera-slave (-> v1-166 0)) self) + ) + ) + ) + ) + (send-event-function self a1-33) + ) + ) + ((not (and (= (-> self slave 0 0 next-state) *camera-base-mode*) (= (-> self slave 0 0 next-state) s1-0))) + (send-event (ppointer->process (-> self slave 0)) 'change-state-no-go s1-0) + (set! s4-1 (-> self slave 0)) + (set! s3-0 s1-0) + (set! s2-0 (-> self slave 0)) + ) + ) + (when s2-0 + (send-event *camera-combiner* 'stop-tracking) + (when (= (-> (the-as camera-slave (-> s2-0 0)) blend-to-type) 2) + (let ((a1-36 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-36 from) self) + (set! (-> a1-36 num-params) 1) + (set! (-> a1-36 message) 'start-tracking) + (let ((v1-191 s2-0)) + (set! (-> a1-36 param 0) (the-as uint (if v1-191 + (-> (the-as camera-slave (-> v1-191 0)) self) + ) + ) + ) + ) + (send-event-function *camera-combiner* a1-36) + ) + ) + ) + ) + (else + (when (< 1 (-> self num-slaves)) + (if (= (-> self changer) (-> self slave 0)) + (set! s5-2 (-> self slave 0)) + (deactivate (-> self slave 0 0)) + ) + (set! (-> self slave 0) (-> self slave 1)) + (set! (-> self slave 1) (the-as (pointer camera-slave) #f)) + (+! (-> self num-slaves) -1) + ) + (when (< 0.0 (-> self slave 0 0 intro-t-step)) + (set! (-> self outro-t) (-> self slave 0 0 intro-t)) + (set! (-> self outro-t-step) (/ -5.0 (the float (-> arg3 param 1)))) + (set! (-> self outro-exit-value) (-> self slave 0 0 outro-exit-value)) + (curve-copy! (-> self outro-curve) (-> self slave 0 0 intro-curve)) + ) + (if (nonzero? (-> self no-intro)) + (set! (-> self outro-t) 0.0) + ) + (when (not (and (= (-> self slave 0 0 next-state) *camera-base-mode*) (= (-> self slave 0 0 next-state) s1-0))) + (cond + (s2-0 + (let ((a1-38 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-38 from) self) + (set! (-> a1-38 num-params) 1) + (set! (-> a1-38 message) 'slave-activated) + (let ((v1-228 s2-0)) + (set! (-> a1-38 param 0) (the-as uint (if v1-228 + (-> (the-as camera-slave (-> v1-228 0)) self) + ) + ) ) - ((= v1-0 'set-slave-option) - (the-as - object - (when (nonzero? (-> self num-slaves)) - (set! - v0-0 - (logior - (-> - self - slave - (+ (-> self num-slaves) -1) - 0 - options + ) + (send-event-function self a1-38) + ) + ) + (else + (let ((s2-1 (get-process *camera-dead-pool* camera-slave #x4000))) + (set! s2-0 (when s2-1 + (let ((t9-42 (method-of-type camera-slave activate))) + (t9-42 (the-as camera-slave s2-1) self 'camera-slave (the-as pointer #x70004000)) + ) + (run-now-in-process s2-1 cam-slave-init s1-0 #f) + (-> s2-1 ppointer) ) - (-> arg3 param 0) - ) - ) - (set! - (-> - self - slave - (+ (-> self num-slaves) -1) - 0 - options - ) - (the-as uint v0-0) - ) - v0-0 + ) + ) + (cond + (s2-0 + ) + (else + (format #t "ERROR : secondary slave activate failed~%") + ) + ) + ) + ) + (when s2-0 + (send-event *camera-combiner* 'set-interpolation (-> arg3 param 1)) + (set! s4-1 (-> self slave 0)) + (cond + ((zero? (-> self slave 0 0 blend-from-type)) + (send-event (ppointer->process (-> self slave 0)) 'change-state-no-go cam-fixed) + (send-event *camera-combiner* 'stop-tracking) + (set! s3-0 cam-fixed) + ) + (else + (send-event (ppointer->process (-> self slave 0)) 'change-state-no-go cam-decel) + (set! s3-0 cam-decel) + ) + ) + (let ((v1-261 (-> *camera-combiner* tracking-status))) + (cond + ((zero? v1-261) + (let ((v1-263 (-> (the-as camera-slave (-> s2-0 0)) blend-to-type))) + (cond + ((zero? v1-263) + ) + ((= v1-263 1) + ) + ((= v1-263 2) + (if (= (-> self slave 0 0 blend-from-type) 1) + (send-event *camera-combiner* 'copy-tracking (ppointer->process (-> self slave 0))) + (send-event *camera-combiner* 'start-tracking (ppointer->process (-> self slave 0))) ) - ) - ) - ((= v1-0 'clear-slave-option) - (the-as - object - (when (nonzero? (-> self num-slaves)) - (set! - v0-0 - (logclear - (-> - self - slave - (+ (-> self num-slaves) -1) - 0 - options - ) - (-> arg3 param 0) - ) - ) - (set! - (-> - self - slave - (+ (-> self num-slaves) -1) - 0 - options - ) - (the-as uint v0-0) - ) - v0-0 - ) - ) - ) - ((= v1-0 'no-follow) - (when (nonzero? (-> self num-slaves)) - (set! - (-> - self - slave - (+ (-> self num-slaves) -1) - 0 - tracking - no-follow - ) - #t - ) - (vector-reset! - (-> - self - slave - (+ (-> self num-slaves) -1) - 0 - tracking - follow-off - ) - ) - ) - (set! - (-> *camera-combiner* tracking no-follow) - #t - ) - (set! - v0-0 - (-> *camera-combiner* tracking follow-off) - ) - (.svf (&-> (the-as vector v0-0) quad) vf0) - v0-0 - ) - ((= v1-0 'yes-follow) - (if (nonzero? (-> self num-slaves)) - (set! - (-> - self - slave - (+ (-> self num-slaves) -1) - 0 - tracking - no-follow - ) - #f - ) - ) - (set! - (-> *camera-combiner* tracking no-follow) - #f - ) - #f - ) - ((= v1-0 'blend-from-as-fixed) - (the-as - object - (when (nonzero? (-> self num-slaves)) - (set! - (-> - self - slave - (+ (-> self num-slaves) -1) - 0 - blend-from-type - ) - (the-as uint 0) - ) - 0 - ) - ) - ) - ((= v1-0 'point-of-interest) - (when (nonzero? (-> self num-slaves)) - (let - ((a1-60 - (new 'stack-no-clear 'event-message-block - ) - ) - ) - (set! (-> a1-60 from) arg0) - (set! (-> a1-60 num-params) arg1) - (set! (-> a1-60 message) arg2) - (set! (-> a1-60 param 0) (-> arg3 param 0)) - (set! (-> a1-60 param 1) (-> arg3 param 1)) - (set! (-> a1-60 param 2) (-> arg3 param 2)) - (set! (-> a1-60 param 3) (-> arg3 param 3)) - (set! (-> a1-60 param 4) (-> arg3 param 4)) - (set! (-> a1-60 param 5) (-> arg3 param 5)) - (set! (-> a1-60 param 6) (-> arg3 param 6)) - (send-event-function - (ppointer->process - (-> - self - slave - (+ (-> self num-slaves) -1) - ) - ) - a1-60 - ) - ) - ) - (let - ((a1-61 - (new 'stack-no-clear 'event-message-block) - ) - ) - (set! (-> a1-61 from) arg0) - (set! (-> a1-61 num-params) arg1) - (set! (-> a1-61 message) arg2) - (set! (-> a1-61 param 0) (-> arg3 param 0)) - (set! (-> a1-61 param 1) (-> arg3 param 1)) - (set! (-> a1-61 param 2) (-> arg3 param 2)) - (set! (-> a1-61 param 3) (-> arg3 param 3)) - (set! (-> a1-61 param 4) (-> arg3 param 4)) - (set! (-> a1-61 param 5) (-> arg3 param 5)) - (set! (-> a1-61 param 6) (-> arg3 param 6)) - (send-event-function - *camera-combiner* - a1-61 - ) - ) - ) - ((= v1-0 'part-water-drip) - (set! - (-> self water-drip-time) - (the-as - uint - (-> *display* base-frame-counter) - ) - ) - (set! - (-> self water-drip-mult) - (the-as float (-> arg3 param 0)) - ) - (let - ((f0-24 (the-as float (-> arg3 param 1)))) - (set! (-> self water-drip-speed) f0-24) - f0-24 - ) - ) - (else - (countdown (s3-1 (-> self num-slaves)) - (let - ((a1-62 - (new 'stack-no-clear 'event-message-block - ) - ) - ) - (set! (-> a1-62 from) arg0) - (set! (-> a1-62 num-params) arg1) - (set! (-> a1-62 message) arg2) - (set! (-> a1-62 param 0) (-> arg3 param 0)) - (set! (-> a1-62 param 1) (-> arg3 param 1)) - (set! (-> a1-62 param 2) (-> arg3 param 2)) - (set! (-> a1-62 param 3) (-> arg3 param 3)) - (set! (-> a1-62 param 4) (-> arg3 param 4)) - (set! (-> a1-62 param 5) (-> arg3 param 5)) - (set! (-> a1-62 param 6) (-> arg3 param 6)) - (send-event-function - (ppointer->process (-> self slave s3-1)) - a1-62 - ) - ) - ) - #f - ) - ) + (set! (-> *camera-combiner* tracking-status) (the-as uint 2)) + ) + ) + ) + ) + ((= v1-261 1) + (let ((v1-280 (-> (the-as camera-slave (-> s2-0 0)) blend-to-type))) + (cond + ((zero? v1-280) + (set! (-> *camera-combiner* tracking-status) (the-as uint 3)) + ) + ((= v1-280 1) + (set! (-> *camera-combiner* tracking-status) (the-as uint 3)) + ) + ((= v1-280 2) + ) + ) + ) + ) + ((= v1-261 2) + (let ((v1-286 (-> (the-as camera-slave (-> s2-0 0)) blend-to-type))) + (cond + ((zero? v1-286) + (set! (-> *camera-combiner* tracking-status) (the-as uint 0)) + 0 + ) + ((= v1-286 1) + (set! (-> *camera-combiner* tracking-status) (the-as uint 0)) + 0 + ) + ((= v1-286 2) + ) + ) + ) + ) + ((= v1-261 3) + (let ((v1-295 (-> (the-as camera-slave (-> s2-0 0)) blend-to-type))) + (cond + ((zero? v1-295) + (set! (-> *camera-combiner* tracking-status) (the-as uint 0)) + 0 + ) + ((= v1-295 1) + (set! (-> *camera-combiner* tracking-status) (the-as uint 0)) + 0 + ) + ((= v1-295 2) + (set! (-> *camera-combiner* tracking-status) (the-as uint 2)) + ) + ) + ) + ) + ) + ) + ) + ) ) + ) + (if s4-1 + (send-event + (if s4-1 + (-> (the-as camera-slave (-> s4-1 0)) self) + ) + 'go + s3-0 + ) + ) + ) + (if s5-2 + (deactivate (-> s5-2 0)) + ) + ) + (set! v0-0 #t) + ) + ((= v1-0 'slave-activated) + (set! v0-0 (the-as + object + (cond + ((< (-> self num-slaves) 2) + (set! (-> self slave (-> self num-slaves)) + (the-as (pointer camera-slave) (process->ppointer (the-as process (-> arg3 param 0)))) + ) + (+! (-> self num-slaves) 1) + (logior! (-> self master-options) 8) + (let ((f0-15 (-> (the-as projectile (-> arg3 param 0)) max-turn))) + (set! (-> *camera-combiner* tracking tilt-adjust target) f0-15) + f0-15 + ) + ) + (else + (format 0 "ERROR: ERROR : Exceeded maximum number of camera slaves!~%") + (the-as object (deactivate (the-as camera-slave (-> arg3 param 0)))) + ) + ) + ) + ) + ) + ((= v1-0 'ease-in) + (cond + ((< arg1 1) + (set! (-> self ease-t) 0.0) + (set! (-> self master-options) (logand -33 (-> self master-options))) + ) + ((< arg1 2) + (if (< (the-as float (-> arg3 param 0)) (-> self ease-t)) + (set! (-> self ease-t) (the-as float (-> arg3 param 0))) + ) + (set! (-> self master-options) (logand -33 (-> self master-options))) + ) + (else + (if (< (the-as float (-> arg3 param 0)) (-> self ease-t)) + (set! (-> self ease-t) (the-as float (-> arg3 param 0))) + ) + (set! (-> self ease-to quad) (-> (the-as vector (-> arg3 param 1)) quad)) + (logior! (-> self master-options) 32) + ) + ) + (set! (-> self ease-step) 0.033333335) + (set! v0-0 (-> self ease-from)) + (set! (-> (the-as vector v0-0) quad) (-> self tpos-curr-adj quad)) + ) + ((= v1-0 'damp-up) + (let ((f0-22 0.0)) + (set! (-> self upspeed) f0-22) + (set! v0-0 f0-22) + ) + ) + ((= v1-0 'reset-follow) + (set! v0-0 (the-as object (if (handle->process (-> self drawable-target)) + (reset-drawable-follow) + (reset-follow) + ) + ) + ) + ) + ((= v1-0 'teleport) + (cond + ((and (logtest? (-> self master-options) 2) (handle->process (-> self drawable-target))) + (reset-drawable-tracking) + ) + ((and *target* (logtest? (-> self master-options) 2)) + (reset-target-tracking) + ) + ) + (countdown (gp-6 (-> self num-slaves)) + (send-event (ppointer->process (-> self slave gp-6)) arg2) + ) + (let ((a1-54 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-54 from) self) + (set! (-> a1-54 num-params) 0) + (set! (-> a1-54 message) arg2) + (set! v0-0 (send-event-function *camera-combiner* a1-54)) + ) + ) + ((= v1-0 'toggle-slave-option) + (set! (-> self slave-options) (logxor (-> self slave-options) (-> arg3 param 0))) + (let ((a0-193 (-> self slave 0)) + (v1-360 (-> self slave 1)) + ) + (if a0-193 + (set! (-> a0-193 0 options) (logxor (-> a0-193 0 options) (-> arg3 param 0))) + ) + (set! v0-0 (the-as object (when v1-360 + (set! v0-0 (logxor (-> v1-360 0 options) (-> arg3 param 0))) + (set! (-> v1-360 0 options) (the-as uint v0-0)) + v0-0 + ) + ) + ) + ) + ) + (else + (set! v0-0 + (the-as + object + (cond + ((= v1-0 'slave-option?) + (the-as object (if (nonzero? (-> self num-slaves)) + (logtest? (-> self slave (+ (-> self num-slaves) -1) 0 options) (-> arg3 param 0)) + ) + ) + ) + ((= v1-0 'set-slave-option) + (the-as object (when (nonzero? (-> self num-slaves)) + (set! v0-0 (logior (-> self slave (+ (-> self num-slaves) -1) 0 options) (-> arg3 param 0))) + (set! (-> self slave (+ (-> self num-slaves) -1) 0 options) (the-as uint v0-0)) + v0-0 + ) + ) + ) + ((= v1-0 'clear-slave-option) + (the-as + object + (when (nonzero? (-> self num-slaves)) + (set! v0-0 (logclear (-> self slave (+ (-> self num-slaves) -1) 0 options) (-> arg3 param 0))) + (set! (-> self slave (+ (-> self num-slaves) -1) 0 options) (the-as uint v0-0)) + v0-0 + ) + ) + ) + ((= v1-0 'no-follow) + (when (nonzero? (-> self num-slaves)) + (set! (-> self slave (+ (-> self num-slaves) -1) 0 tracking no-follow) #t) + (vector-reset! (-> self slave (+ (-> self num-slaves) -1) 0 tracking follow-off)) + ) + (set! (-> *camera-combiner* tracking no-follow) #t) + (set! v0-0 (-> *camera-combiner* tracking follow-off)) + (.svf (&-> (the-as vector v0-0) quad) vf0) + v0-0 + ) + ((= v1-0 'yes-follow) + (if (nonzero? (-> self num-slaves)) + (set! (-> self slave (+ (-> self num-slaves) -1) 0 tracking no-follow) #f) + ) + (set! (-> *camera-combiner* tracking no-follow) #f) + #f + ) + ((= v1-0 'blend-from-as-fixed) + (the-as object (when (nonzero? (-> self num-slaves)) + (set! (-> self slave (+ (-> self num-slaves) -1) 0 blend-from-type) (the-as uint 0)) + 0 + ) + ) + ) + ((= v1-0 'point-of-interest) + (when (nonzero? (-> self num-slaves)) + (let ((a1-60 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-60 from) arg0) + (set! (-> a1-60 num-params) arg1) + (set! (-> a1-60 message) arg2) + (set! (-> a1-60 param 0) (-> arg3 param 0)) + (set! (-> a1-60 param 1) (-> arg3 param 1)) + (set! (-> a1-60 param 2) (-> arg3 param 2)) + (set! (-> a1-60 param 3) (-> arg3 param 3)) + (set! (-> a1-60 param 4) (-> arg3 param 4)) + (set! (-> a1-60 param 5) (-> arg3 param 5)) + (set! (-> a1-60 param 6) (-> arg3 param 6)) + (send-event-function (ppointer->process (-> self slave (+ (-> self num-slaves) -1))) a1-60) + ) + ) + (let ((a1-61 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-61 from) arg0) + (set! (-> a1-61 num-params) arg1) + (set! (-> a1-61 message) arg2) + (set! (-> a1-61 param 0) (-> arg3 param 0)) + (set! (-> a1-61 param 1) (-> arg3 param 1)) + (set! (-> a1-61 param 2) (-> arg3 param 2)) + (set! (-> a1-61 param 3) (-> arg3 param 3)) + (set! (-> a1-61 param 4) (-> arg3 param 4)) + (set! (-> a1-61 param 5) (-> arg3 param 5)) + (set! (-> a1-61 param 6) (-> arg3 param 6)) + (send-event-function *camera-combiner* a1-61) + ) + ) + ((= v1-0 'part-water-drip) + (set! (-> self water-drip-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self water-drip-mult) (the-as float (-> arg3 param 0))) + (let ((f0-24 (the-as float (-> arg3 param 1)))) + (set! (-> self water-drip-speed) f0-24) + f0-24 + ) + ) + (else + (countdown (s3-1 (-> self num-slaves)) + (let ((a1-62 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-62 from) arg0) + (set! (-> a1-62 num-params) arg1) + (set! (-> a1-62 message) arg2) + (set! (-> a1-62 param 0) (-> arg3 param 0)) + (set! (-> a1-62 param 1) (-> arg3 param 1)) + (set! (-> a1-62 param 2) (-> arg3 param 2)) + (set! (-> a1-62 param 3) (-> arg3 param 3)) + (set! (-> a1-62 param 4) (-> arg3 param 4)) + (set! (-> a1-62 param 5) (-> arg3 param 5)) + (set! (-> a1-62 param 6) (-> arg3 param 6)) + (send-event-function (ppointer->process (-> self slave s3-1)) a1-62) + ) + ) + #f + ) + ) + ) + ) + ) + ) ) - ) + (the-as object v0-0) ) - ) - (the-as object v0-0) ) - ) :enter (behavior () - (if (and (nonzero? camera-master-debug) *debug-segment*) - (add-connection *debug-engine* self camera-master-debug self #f #f) + (if (and (nonzero? camera-master-debug) *debug-segment*) + (add-connection *debug-engine* self camera-master-debug self #f #f) + ) + (none) ) - (none) - ) :trans (behavior () - (when (not (paused?)) - (vector-negate! - (-> self local-down) - (vector-normalize-copy! - (-> self local-down) - (-> *standard-dynamics* gravity) - 1.0 + (when (not (paused?)) + (vector-negate! + (-> self local-down) + (vector-normalize-copy! (-> self local-down) (-> *standard-dynamics* gravity) 1.0) + ) + (cam-master-effect) ) - ) - (cam-master-effect) + (none) ) - (none) - ) :code (behavior () - (while #t - (if (and *dproc* *debug-segment*) - (add-frame - (-> *display* frames (-> *display* on-screen) frame profile-bar 0) - 'camera - (new 'static 'rgba :r #x40 :b #x40 :a #x80) + (while #t + (if (and *dproc* *debug-segment*) + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'camera + (new 'static 'rgba :r #x40 :b #x40 :a #x80) + ) + ) + (set! (-> self string-min target y) (-> self stringMinHeight)) + (set! (-> self string-max target y) (-> self stringMaxHeight)) + (set! (-> self string-min target z) (-> self stringMinLength)) + (set! (-> self string-max target z) (-> self stringMaxLength)) + (set! (-> self string-push-z) (fmax (-> self string-min value z) (-> *CAMERA-bank* default-string-push-z))) + (master-track-target) + (set! (-> last-try-to-look-at-data horz) 0.0) + (set! (-> last-try-to-look-at-data vert) 0.0) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'slave-option?) + (set! (-> a1-1 param 0) (the-as uint #x4000)) + (when (send-event-function *camera* a1-1) + (set! (-> self string-min target y) 18432.0) + (set! (-> self string-max target y) 18432.041) + ) + ) + (when (not (paused?)) + (update! (-> self string-min) (the-as vector #f)) + (update! (-> self string-max) (the-as vector #f)) + (master-check-regions) + ) + (set! (-> self string-min value x) + (fmin (-> self string-min value x) (+ -4.096 (-> self string-max value x))) + ) + (set! (-> self string-min value y) + (fmin (-> self string-min value y) (+ -4.096 (-> self string-max value y))) + ) + (set! (-> self string-min value z) + (fmin (-> self string-min value z) (+ -4.096 (-> self string-max value z))) + ) + (if (nonzero? (-> self no-intro)) + (+! (-> self no-intro) -1) + ) + (if (nonzero? (-> self force-blend)) + (+! (-> self force-blend) -1) + ) + (suspend) ) - ) - (set! (-> self string-min target y) (-> self stringMinHeight)) - (set! (-> self string-max target y) (-> self stringMaxHeight)) - (set! (-> self string-min target z) (-> self stringMinLength)) - (set! (-> self string-max target z) (-> self stringMaxLength)) - (set! - (-> self string-push-z) - (fmax - (-> self string-min value z) - (-> *CAMERA-bank* default-string-push-z) - ) - ) - (master-track-target) - (set! (-> last-try-to-look-at-data horz) 0.0) - (set! (-> last-try-to-look-at-data vert) 0.0) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 1) - (set! (-> a1-1 message) 'slave-option?) - (set! (-> a1-1 param 0) (the-as uint #x4000)) - (when (send-event-function *camera* a1-1) - (set! (-> self string-min target y) 18432.0) - (set! (-> self string-max target y) 18432.041) - ) - ) - (when (not (paused?)) - (update! (-> self string-min) (the-as vector #f)) - (update! (-> self string-max) (the-as vector #f)) - (master-check-regions) - ) - (set! - (-> self string-min value x) - (fmin (-> self string-min value x) (+ -4.096 (-> self string-max value x))) - ) - (set! - (-> self string-min value y) - (fmin (-> self string-min value y) (+ -4.096 (-> self string-max value y))) - ) - (set! - (-> self string-min value z) - (fmin (-> self string-min value z) (+ -4.096 (-> self string-max value z))) - ) - (if (nonzero? (-> self no-intro)) - (+! (-> self no-intro) -1) - ) - (if (nonzero? (-> self force-blend)) - (+! (-> self force-blend) -1) - ) - (suspend) + (none) ) - (none) - ) ) (deftype list-keeper (process) @@ -2430,12 +1681,12 @@ (defstate list-keeper-active (camera-master) :code (behavior () - (while #t - (change-to-last-brother self) - (suspend) + (while #t + (change-to-last-brother self) + (suspend) + ) + (none) ) - (none) - ) ) (defbehavior list-keeper-init camera-master () @@ -2451,8 +1702,8 @@ (set! (-> self master-options) (the-as uint 4)) (set! (-> self num-slaves) 0) (dotimes (v1-5 2) - (set! (-> self slave v1-5) (the-as (pointer camera-slave) #f)) - ) + (set! (-> self slave v1-5) (the-as (pointer camera-slave) #f)) + ) (set! (-> self slave-options) (the-as uint 560)) (set! (-> self view-off-param-save) 1.0) (set! (-> self changer) (the-as uint (process->ppointer self))) @@ -2466,65 +1717,52 @@ (set! (-> self force-blend) (the-as uint 0)) (set! (-> self string-push-z) (-> *CAMERA-bank* default-string-push-z)) (let ((gp-0 (new-stack-vector0))) - (set! (-> gp-0 y) (-> *CAMERA-bank* default-string-min-y)) - (set! (-> gp-0 z) (-> *CAMERA-bank* default-string-min-z)) - (init! (-> self string-min) gp-0 40.96 409.6 0.9) - (set! (-> gp-0 y) (-> *CAMERA-bank* default-string-max-y)) - (set! (-> gp-0 z) (-> *CAMERA-bank* default-string-max-z)) - (init! (-> self string-max) gp-0 40.96 409.6 0.9) - ) + (set! (-> gp-0 y) (-> *CAMERA-bank* default-string-min-y)) + (set! (-> gp-0 z) (-> *CAMERA-bank* default-string-min-z)) + (init! (-> self string-min) gp-0 40.96 409.6 0.9) + (set! (-> gp-0 y) (-> *CAMERA-bank* default-string-max-y)) + (set! (-> gp-0 z) (-> *CAMERA-bank* default-string-max-z)) + (init! (-> self string-max) gp-0 40.96 409.6 0.9) + ) (set! (-> self outro-t-step) 0.0) (set! (-> self drawable-target) (the-as handle #f)) (set! (-> self which-bone) 0) (let ((a1-3 (new-stack-vector0))) - (TODO-RENAME-10 (-> self target-spline) a1-3) - ) + (TODO-RENAME-10 (-> self target-spline) a1-3) + ) (set! (-> self pov-handle) (the-as handle #f)) (set! (-> self pov-bone) 0) (let ((gp-1 (get-process *camera-dead-pool* list-keeper #x4000))) - (cond - ((when gp-1 - (let ((t9-5 (method-of-type list-keeper activate))) - (t9-5 - (the-as list-keeper gp-1) - self - 'list-keeper - (the-as pointer #x70004000) - ) + (cond + ((when gp-1 + (let ((t9-5 (method-of-type list-keeper activate))) + (t9-5 (the-as list-keeper gp-1) self 'list-keeper (the-as pointer #x70004000)) + ) + (run-next-time-in-process gp-1 list-keeper-init) + (-> gp-1 ppointer) + ) ) - (run-next-time-in-process gp-1 list-keeper-init) - (-> gp-1 ppointer) + (else + (format 0 "ERROR : master camera list keeper failed to activate~%") + ) ) - ) - (else - (format 0 "ERROR : master camera list keeper failed to activate~%") - ) ) - ) (let ((gp-2 (get-process *camera-dead-pool* camera-slave #x4000))) - (cond - ((when gp-2 - (let ((t9-9 (method-of-type camera-slave activate))) - (t9-9 - (the-as camera-slave gp-2) - self - 'camera-slave - (the-as pointer #x70004000) - ) + (cond + ((when gp-2 + (let ((t9-9 (method-of-type camera-slave activate))) + (t9-9 (the-as camera-slave gp-2) self 'camera-slave (the-as pointer #x70004000)) + ) + (run-next-time-in-process gp-2 cam-slave-init cam-free-floating #f) + (-> gp-2 ppointer) + ) ) - (run-next-time-in-process gp-2 cam-slave-init cam-free-floating #f) - (-> gp-2 ppointer) + (else + (format 0 "ERROR : first slave failed to activate~%") + ) ) - ) - (else - (format 0 "ERROR : first slave failed to activate~%") - ) ) - ) - (set! - (-> self water-drip) - (create-launch-control group-rain-screend-drop self) - ) + (set! (-> self water-drip) (create-launch-control group-rain-screend-drop self)) (set! (-> self water-drip-time) (the-as uint -18000)) (go cam-master-active) 0 diff --git a/goal_src/engine/camera/cam-states.gc b/goal_src/engine/camera/cam-states.gc index b60faa149e..5418701932 100644 --- a/goal_src/engine/camera/cam-states.gc +++ b/goal_src/engine/camera/cam-states.gc @@ -12,323 +12,254 @@ (defstate cam-fixed (camera-slave) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('teleport) - #f + (case arg2 + (('teleport) + #f + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) ) - (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (when (not (-> self enter-has-run)) - (set! (-> self saved-pt quad) (-> self trans quad)) - (set! (-> self blend-from-type) (the-as uint 1)) - (set! (-> self blend-to-type) (the-as uint 0)) - 0 + (when (not (-> self enter-has-run)) + (set! (-> self saved-pt quad) (-> self trans quad)) + (set! (-> self blend-from-type) (the-as uint 1)) + (set! (-> self blend-to-type) (the-as uint 0)) + 0 + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (when (not (paused?)) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (set! (-> self trans quad) (-> self saved-pt quad)) - (cam-curve-pos (-> self trans) gp-0 (the-as curve #f) #f) - (when (!= (-> gp-0 w) 0.0) - (vector-normalize! gp-0 (the-as float 1.0)) - (forward-down->inv-matrix - (the-as matrix (-> self tracking)) - gp-0 - (-> *camera* local-down) + (while #t + (when (not (paused?)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> self trans quad) (-> self saved-pt quad)) + (cam-curve-pos (-> self trans) gp-0 (the-as curve #f) #f) + (when (!= (-> gp-0 w) 0.0) + (vector-normalize! gp-0 (the-as float 1.0)) + (forward-down->inv-matrix (the-as matrix (-> self tracking)) gp-0 (-> *camera* local-down)) + ) + ) ) - ) + (suspend) ) - ) - (suspend) + (none) ) - (none) - ) ) (defstate cam-fixed-read-entity (camera-slave) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('teleport) - #f + (case arg2 + (('teleport) + #f + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) ) - (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (cond - ((-> self enter-has-run) - ) - ((-> self cam-entity) - (cam-slave-get-vector-with-offset - (the-as entity-actor (-> self cam-entity)) - (-> self trans) - 'trans + (cond + ((-> self enter-has-run) + ) + ((-> self cam-entity) + (cam-slave-get-vector-with-offset (the-as entity-actor (-> self cam-entity)) (-> self trans) 'trans) + (cam-slave-get-rot (the-as entity-actor (-> self cam-entity)) (the-as matrix (-> self tracking))) + (set! (-> self fov) (cam-slave-get-fov (-> self cam-entity))) + (cam-curve-setup (-> self trans)) + ((-> cam-fixed enter)) + ) + (else + (format #t "ERROR : cam-fixed-read-entity enter without entity~%") + ) ) - (cam-slave-get-rot - (the-as entity-actor (-> self cam-entity)) - (the-as matrix (-> self tracking)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (if (cam-slave-get-vector-with-offset (the-as entity-actor (-> self cam-entity)) gp-0 'interesting) + (send-event *camera* 'point-of-interest gp-0) + ) ) - (set! (-> self fov) (cam-slave-get-fov (-> self cam-entity))) - (cam-curve-setup (-> self trans)) - ((-> cam-fixed enter)) - ) - (else - (format #t "ERROR : cam-fixed-read-entity enter without entity~%") - ) + (go cam-fixed) + (none) ) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (if - (cam-slave-get-vector-with-offset - (the-as entity-actor (-> self cam-entity)) - gp-0 - 'interesting - ) - (send-event *camera* 'point-of-interest gp-0) - ) - ) - (go cam-fixed) - (none) - ) :code (behavior () - (while #t - (format *stdcon* "ERROR : stayed in cam-fixed-read-entity~%") - (suspend) + (while #t + (format *stdcon* "ERROR : stayed in cam-fixed-read-entity~%") + (suspend) + ) + (none) ) - (none) - ) ) (defstate cam-pov (camera-slave) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('teleport) - #f + (case arg2 + (('teleport) + #f + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) ) - (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (when (not (-> self enter-has-run)) - (set! (-> self blend-from-type) (the-as uint 1)) - (set! (-> self blend-to-type) (the-as uint 1)) + (when (not (-> self enter-has-run)) + (set! (-> self blend-from-type) (the-as uint 1)) + (set! (-> self blend-to-type) (the-as uint 1)) + ) + (none) ) - (none) - ) :trans (behavior () - (when (not (handle->process (-> *camera* pov-handle))) - (set! (-> self blend-from-type) (the-as uint 0)) - (cam-slave-go cam-fixed) + (when (not (handle->process (-> *camera* pov-handle))) + (set! (-> self blend-from-type) (the-as uint 0)) + (cam-slave-go cam-fixed) + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (when (not (paused?)) - (vector<-cspace! - (-> self trans) - (-> - (the-as pov-camera (-> *camera* pov-handle process 0)) - node-list - data - (-> *camera* pov-bone) - ) + (while #t + (when (not (paused?)) + (vector<-cspace! + (-> self trans) + (-> (the-as pov-camera (-> *camera* pov-handle process 0)) node-list data (-> *camera* pov-bone)) + ) + (let* ((v1-5 (-> self tracking)) + (a3-0 (-> (the-as pov-camera (-> *camera* pov-handle process 0)) + node-list + data + (-> *camera* pov-bone) + bone + transform + ) + ) + (a0-8 (-> a3-0 vector 0 quad)) + (a1-9 (-> a3-0 vector 1 quad)) + (a2-0 (-> a3-0 vector 2 quad)) + (a3-1 (-> a3-0 vector 3 quad)) + ) + (set! (-> v1-5 inv-mat vector 0 quad) a0-8) + (set! (-> v1-5 inv-mat vector 1 quad) a1-9) + (set! (-> v1-5 inv-mat vector 2 quad) a2-0) + (set! (-> v1-5 inv-mat vector 3 quad) a3-1) + ) + (vector-reset! (-> self tracking inv-mat vector 3)) + ) + (suspend) ) - (let* ((v1-5 (-> self tracking)) - (a3-0 - (-> - (the-as pov-camera (-> *camera* pov-handle process 0)) - node-list - data - (-> *camera* pov-bone) - bone - transform - ) - ) - (a0-8 (-> a3-0 vector 0 quad)) - (a1-9 (-> a3-0 vector 1 quad)) - (a2-0 (-> a3-0 vector 2 quad)) - (a3-1 (-> a3-0 vector 3 quad)) - ) - (set! (-> v1-5 inv-mat vector 0 quad) a0-8) - (set! (-> v1-5 inv-mat vector 1 quad) a1-9) - (set! (-> v1-5 inv-mat vector 2 quad) a2-0) - (set! (-> v1-5 inv-mat vector 3 quad) a3-1) - ) - (vector-reset! (-> self tracking inv-mat vector 3)) - ) - (suspend) + (none) ) - (none) - ) ) (defstate cam-pov180 (camera-slave) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('teleport) - #f + (case arg2 + (('teleport) + #f + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) ) - (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (when (not (-> self enter-has-run)) - (set! (-> self blend-from-type) (the-as uint 1)) - (set! (-> self blend-to-type) (the-as uint 1)) + (when (not (-> self enter-has-run)) + (set! (-> self blend-from-type) (the-as uint 1)) + (set! (-> self blend-to-type) (the-as uint 1)) + ) + (none) ) - (none) - ) :trans (behavior () - (when (not (handle->process (-> *camera* pov-handle))) - (set! (-> self blend-from-type) (the-as uint 0)) - (cam-slave-go cam-fixed) + (when (not (handle->process (-> *camera* pov-handle))) + (set! (-> self blend-from-type) (the-as uint 0)) + (cam-slave-go cam-fixed) + ) + (none) ) - (none) - ) :code (behavior () - (let ((gp-0 (new 'stack-no-clear 'vector)) - (s5-0 (new 'stack-no-clear 'vector)) - (s4-0 #t) - ) - (vector<-cspace! - gp-0 - (-> - (the-as pov-camera (-> *camera* pov-handle process 0)) - node-list - data - (-> *camera* pov-bone) - ) - ) - (let - ((v1-11 - (-> - (the-as pov-camera (-> *camera* pov-handle process 0)) - node-list - data - (-> *camera* pov-bone) - bone - transform + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (s4-0 #t) + ) + (vector<-cspace! + gp-0 + (-> (the-as pov-camera (-> *camera* pov-handle process 0)) node-list data (-> *camera* pov-bone)) ) - ) - ) - (vector-normalize-copy! s5-0 (-> v1-11 vector 2) (the-as float 1.0)) - ) - (while #t - (when (not (paused?)) - (let - ((s0-0 - (-> - (the-as pov-camera (-> *camera* pov-handle process 0)) - node-list - data - (-> *camera* pov-bone) - bone - transform - ) - ) - (s1-0 - (-> - (the-as pov-camera (-> *camera* pov-handle process 0)) - node-list - data - (-> *camera* pov-bone) - bone - scale - ) - ) - (s3-0 (new 'stack-no-clear 'vector)) - ) - (let ((s2-0 (new 'stack-no-clear 'vector))) - (vector<-cspace! - s2-0 - (-> - (the-as pov-camera (-> *camera* pov-handle process 0)) - node-list - data - (-> *camera* pov-bone) - ) - ) - (vector-normalize-copy! s3-0 (-> s0-0 vector 2) (the-as float 1.0)) - (set! s4-0 (cond - ((and - (< (vector-vector-distance s2-0 gp-0) 40960.0) - (< (cos (the-as float 3640.889)) (vector-dot s5-0 s3-0)) - ) - (set! (-> self trans quad) (-> s2-0 quad)) - (vector-negate! - (the-as vector (-> self tracking)) - (the-as vector (-> s0-0 vector)) - ) - (set! - (-> self tracking inv-mat vector 1 quad) - (-> s0-0 vector 1 quad) - ) - (vector-negate! - (-> self tracking inv-mat vector 2) - (-> s0-0 vector 2) - ) - (set! - (-> self fov) - (* - 2.0 - (atan - (/ 12.700255 (* 20.3 (-> s1-0 x))) - (the-as float 1.0) - ) + (let ((v1-11 (-> (the-as pov-camera (-> *camera* pov-handle process 0)) + node-list + data + (-> *camera* pov-bone) + bone + transform ) - ) - (vector-float*! - (the-as vector (-> self tracking)) - (the-as vector (-> self tracking)) - (/ 1.0 (-> s1-0 x)) - ) - (vector-reset! (-> self tracking inv-mat vector 3)) - (if s4-0 - (set! s4-0 #f) - ) - s4-0 - ) - (else - #t - ) - ) - ) - (set! (-> gp-0 quad) (-> s2-0 quad)) + ) + ) + (vector-normalize-copy! s5-0 (-> v1-11 vector 2) (the-as float 1.0)) + ) + (while #t + (when (not (paused?)) + (let ((s0-0 + (-> (the-as pov-camera (-> *camera* pov-handle process 0)) + node-list + data + (-> *camera* pov-bone) + bone + transform + ) + ) + (s1-0 + (-> (the-as pov-camera (-> *camera* pov-handle process 0)) node-list data (-> *camera* pov-bone) bone scale) + ) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (let ((s2-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! + s2-0 + (-> (the-as pov-camera (-> *camera* pov-handle process 0)) node-list data (-> *camera* pov-bone)) + ) + (vector-normalize-copy! s3-0 (-> s0-0 vector 2) (the-as float 1.0)) + (set! s4-0 + (cond + ((and (< (vector-vector-distance s2-0 gp-0) 40960.0) (< (cos (the-as float 3640.889)) (vector-dot s5-0 s3-0))) + (set! (-> self trans quad) (-> s2-0 quad)) + (vector-negate! (the-as vector (-> self tracking)) (the-as vector (-> s0-0 vector))) + (set! (-> self tracking inv-mat vector 1 quad) (-> s0-0 vector 1 quad)) + (vector-negate! (-> self tracking inv-mat vector 2) (-> s0-0 vector 2)) + (set! (-> self fov) (* 2.0 (atan (/ 12.700255 (* 20.3 (-> s1-0 x))) (the-as float 1.0)))) + (vector-float*! (the-as vector (-> self tracking)) (the-as vector (-> self tracking)) (/ 1.0 (-> s1-0 x))) + (vector-reset! (-> self tracking inv-mat vector 3)) + (if s4-0 + (set! s4-0 #f) + ) + s4-0 + ) + (else + #t + ) + ) + ) + (set! (-> gp-0 quad) (-> s2-0 quad)) + ) + (set! (-> s5-0 quad) (-> s3-0 quad)) + ) + ) + (suspend) ) - (set! (-> s5-0 quad) (-> s3-0 quad)) - ) ) - (suspend) - ) + (none) ) - (none) - ) ) (defstate cam-pov-track (camera-slave) @@ -336,124 +267,106 @@ cam-standard-event-handler :enter (behavior () - (when (not (-> self enter-has-run)) - (set! (-> self blend-from-type) (the-as uint 2)) - (set! (-> self blend-to-type) (the-as uint 2)) - ) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (if - (cam-slave-get-vector-with-offset - (the-as entity-actor (-> self cam-entity)) - gp-0 - 'interesting + (when (not (-> self enter-has-run)) + (set! (-> self blend-from-type) (the-as uint 2)) + (set! (-> self blend-to-type) (the-as uint 2)) ) - (send-event *camera* 'point-of-interest gp-0) - ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (if (cam-slave-get-vector-with-offset (the-as entity-actor (-> self cam-entity)) gp-0 'interesting) + (send-event *camera* 'point-of-interest gp-0) + ) + ) + (none) ) - (none) - ) :trans (behavior () - (if - (or - (not (handle->process (-> *camera* pov-handle))) - (zero? (logand (-> *camera* master-options) 2)) - ) - (cam-slave-go cam-free-floating) + (if (or (not (handle->process (-> *camera* pov-handle))) (zero? (logand (-> *camera* master-options) 2))) + (cam-slave-go cam-free-floating) + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (if (not (paused?)) - (vector<-cspace! - (-> self trans) - (-> - (the-as pov-camera (-> *camera* pov-handle process 0)) - node-list - data - (-> *camera* pov-bone) - ) + (while #t + (if (not (paused?)) + (vector<-cspace! + (-> self trans) + (-> (the-as pov-camera (-> *camera* pov-handle process 0)) node-list data (-> *camera* pov-bone)) + ) + ) + (suspend) ) - ) - (suspend) + (none) ) - (none) - ) ) (defbehavior cam-standoff-calc-trans camera-slave () (if (-> self tracking no-follow) - (vector+! (-> self trans) (-> *camera* tpos-curr-adj) (-> self pivot-pt)) - (vector+! (-> self trans) (-> self tracking follow-pt) (-> self pivot-pt)) - ) + (vector+! (-> self trans) (-> *camera* tpos-curr-adj) (-> self pivot-pt)) + (vector+! (-> self trans) (-> self tracking follow-pt) (-> self pivot-pt)) + ) ) (defstate cam-standoff (camera-slave) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('set-standoff-dist) - (vector-normalize! (-> self pivot-pt) (the-as float (-> arg3 param 0))) - (cam-standoff-calc-trans) + (case arg2 + (('set-standoff-dist) + (vector-normalize! (-> self pivot-pt) (the-as float (-> arg3 param 0))) + (cam-standoff-calc-trans) + ) + (('set-standoff-height) + (vector-flatten! (-> self pivot-pt) (-> self pivot-pt) (-> *camera* local-down)) + (vector--float*! + (-> self pivot-pt) + (-> self pivot-pt) + (-> *camera* local-down) + (the-as float (-> arg3 param 0)) + ) + (cam-standoff-calc-trans) + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) ) - (('set-standoff-height) - (vector-flatten! - (-> self pivot-pt) - (-> self pivot-pt) - (-> *camera* local-down) - ) - (vector--float*! - (-> self pivot-pt) - (-> self pivot-pt) - (-> *camera* local-down) - (the-as float (-> arg3 param 0)) - ) - (cam-standoff-calc-trans) - ) - (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (when (not (-> self enter-has-run)) - (vector-! (-> self pivot-pt) (-> self trans) (-> *camera* tpos-curr-adj)) - (cond - ((logtest? (-> self options) #x8000) - (set! (-> self blend-from-type) (the-as uint 0)) - (set! (-> self blend-to-type) (the-as uint 0)) - 0 + (when (not (-> self enter-has-run)) + (vector-! (-> self pivot-pt) (-> self trans) (-> *camera* tpos-curr-adj)) + (cond + ((logtest? (-> self options) #x8000) + (set! (-> self blend-from-type) (the-as uint 0)) + (set! (-> self blend-to-type) (the-as uint 0)) + 0 + ) + (else + (set! (-> self blend-from-type) (the-as uint 2)) + (set! (-> self blend-to-type) (the-as uint 2)) + ) + ) ) - (else - (set! (-> self blend-from-type) (the-as uint 2)) - (set! (-> self blend-to-type) (the-as uint 2)) - ) - ) + (cam-calc-follow! (-> self tracking) (-> self trans) #f) + (none) ) - (cam-calc-follow! (-> self tracking) (-> self trans) #f) - (none) - ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) - (cam-slave-go cam-free-floating) + (if (zero? (logand (-> *camera* master-options) 2)) + (cam-slave-go cam-free-floating) + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (when (not (paused?)) - (cam-calc-follow! (-> self tracking) (-> self trans) #t) - (cam-standoff-calc-trans) - ) - (suspend) + (while #t + (when (not (paused?)) + (cam-calc-follow! (-> self tracking) (-> self trans) #t) + (cam-standoff-calc-trans) + ) + (suspend) + ) + (none) ) - (none) - ) ) (defstate cam-standoff-read-entity (camera-slave) @@ -461,72 +374,48 @@ cam-standard-event-handler :enter (behavior () - (cond - ((-> self enter-has-run) - ) - ((-> self cam-entity) - (let ((gp-0 (new-stack-vector0)) - (s5-0 (new-stack-vector0)) + (cond + ((-> self enter-has-run) + ) + ((-> self cam-entity) + (let ((gp-0 (new-stack-vector0)) + (s5-0 (new-stack-vector0)) + ) + (cam-slave-get-vector-with-offset (the-as entity-actor (-> self cam-entity)) gp-0 'trans) + (cam-slave-get-vector-with-offset (the-as entity-actor (-> self cam-entity)) s5-0 'align) + (vector-! (-> self pivot-pt) gp-0 s5-0) + ) + (vector+! (-> self trans) (-> *camera* tpos-curr-adj) (-> self pivot-pt)) + (set! (-> self fov) (cam-slave-get-fov (-> self cam-entity))) + (logior! (-> self options) (cam-slave-get-flags (-> self cam-entity) 'flags)) + (if (logtest? (-> self options) #x8000) + (cam-slave-get-rot (the-as entity-actor (-> self cam-entity)) (the-as matrix (-> self tracking))) + (set! (-> self tracking tilt-adjust target) + (cam-slave-get-float (-> self cam-entity) 'tiltAdjust (-> *CAMERA-bank* default-tilt-adjust)) + ) ) - (cam-slave-get-vector-with-offset - (the-as entity-actor (-> self cam-entity)) - gp-0 - 'trans + ((-> cam-standoff enter)) ) - (cam-slave-get-vector-with-offset - (the-as entity-actor (-> self cam-entity)) - s5-0 - 'align - ) - (vector-! (-> self pivot-pt) gp-0 s5-0) - ) - (vector+! (-> self trans) (-> *camera* tpos-curr-adj) (-> self pivot-pt)) - (set! (-> self fov) (cam-slave-get-fov (-> self cam-entity))) - (logior! - (-> self options) - (cam-slave-get-flags (-> self cam-entity) 'flags) - ) - (if (logtest? (-> self options) #x8000) - (cam-slave-get-rot - (the-as entity-actor (-> self cam-entity)) - (the-as matrix (-> self tracking)) - ) - (set! - (-> self tracking tilt-adjust target) - (cam-slave-get-float - (-> self cam-entity) - 'tiltAdjust - (-> *CAMERA-bank* default-tilt-adjust) + (else + (format #t "ERROR : cam-standoff-read-entity enter without entity~%") ) - ) ) - ((-> cam-standoff enter)) - ) - (else - (format #t "ERROR : cam-standoff-read-entity enter without entity~%") - ) - ) - (let ((gp-2 (new 'stack-no-clear 'vector))) - (if - (cam-slave-get-vector-with-offset - (the-as entity-actor (-> self cam-entity)) - gp-2 - 'interesting + (let ((gp-2 (new 'stack-no-clear 'vector))) + (if (cam-slave-get-vector-with-offset (the-as entity-actor (-> self cam-entity)) gp-2 'interesting) + (send-event *camera* 'point-of-interest gp-2) + ) ) - (send-event *camera* 'point-of-interest gp-2) - ) + (go cam-standoff) + (none) ) - (go cam-standoff) - (none) - ) :code (behavior () - (while #t - (format *stdcon* "ERROR : stayed in cam-standoff-read-entity~%") - (suspend) + (while #t + (format *stdcon* "ERROR : stayed in cam-standoff-read-entity~%") + (suspend) + ) + (none) ) - (none) - ) ) (deftype cam-eye-bank (basic) @@ -543,245 +432,166 @@ (define *CAM_EYE-bank* - (new 'static 'cam-eye-bank - :rot-speed 364.0889 - :max-degrees 12743.111 - :max-fov 11650.845 - :min-fov 6189.511 - ) + (new 'static 'cam-eye-bank :rot-speed 364.0889 :max-degrees 12743.111 :max-fov 11650.845 :min-fov 6189.511) ) (defstate cam-eye (camera-slave) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('teleport) - #f + (case arg2 + (('teleport) + #f + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) ) - (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (when (not (-> self enter-has-run)) - (let - ((v1-3 - (vector-float*! - (new-stack-vector0) - (-> *camera* local-down) - (+ 1024.0 (-> *camera* target-height)) + (when (not (-> self enter-has-run)) + (let ((v1-3 (vector-float*! (new-stack-vector0) (-> *camera* local-down) (+ 1024.0 (-> *camera* target-height))))) + (vector-! (-> self trans) (-> *camera* tpos-curr) v1-3) ) - ) + (set! (-> self blend-from-type) (the-as uint 0)) + (set! (-> self blend-to-type) (the-as uint 0)) + 0 ) - (vector-! (-> self trans) (-> *camera* tpos-curr) v1-3) - ) - (set! (-> self blend-from-type) (the-as uint 0)) - (set! (-> self blend-to-type) (the-as uint 0)) - 0 + (set! (-> self fov) 11650.845) + (none) ) - (set! (-> self fov) 11650.845) - (none) - ) :exit (behavior () - (if - (and - *target* - (logtest? (-> *camera* master-options) 2) - (logtest? (-> *target* state-flags) 512) - ) - (send-event *target* 'end-mode) + (if (and *target* (logtest? (-> *camera* master-options) 2) (logtest? (-> *target* state-flags) 512)) + (send-event *target* 'end-mode) + ) + (none) ) - (none) - ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) - (go cam-free-floating) + (if (zero? (logand (-> *camera* master-options) 2)) + (go cam-free-floating) + ) + (none) ) - (none) - ) :code (behavior () - (let ((gp-0 (-> *display* base-frame-counter))) - (while #t - (when (not (paused?)) - (let ((s4-0 (vector-reset! (new-stack-vector0))) - (s5-0 (new-stack-matrix0)) - ) - (when *camera-read-analog* - (let - ((f30-0 - (analog-input - (the-as - int - (+ - (-> *cpad-list* cpads 0 rightx) - -256 - (-> *cpad-list* cpads 0 leftx) + (let ((gp-0 (-> *display* base-frame-counter))) + (while #t + (when (not (paused?)) + (let ((s4-0 (vector-reset! (new-stack-vector0))) + (s5-0 (new-stack-matrix0)) + ) + (when *camera-read-analog* + (let ((f30-0 (analog-input + (the-as int (+ (-> *cpad-list* cpads 0 rightx) -256 (-> *cpad-list* cpads 0 leftx))) + (the-as float 0.0) + (the-as float 48.0) + (the-as float 110.0) + (the-as float -1.0) + ) + ) + (f0-0 (analog-input + (the-as int (+ (-> *cpad-list* cpads 0 righty) -256 (-> *cpad-list* cpads 0 lefty))) + (the-as float 0.0) + (the-as float 48.0) + (the-as float 110.0) + (the-as float -1.0) + ) + ) + ) + (set! (-> s4-0 y) (- (-> s4-0 y) (* (- f30-0) (-> *CAM_EYE-bank* rot-speed)))) + (set! (-> s4-0 x) (- (-> s4-0 x) (* (- f0-0) (-> *CAM_EYE-bank* rot-speed)))) + ) ) - ) - (the-as float 0.0) - (the-as float 48.0) - (the-as float 110.0) - (the-as float -1.0) - ) - ) - (f0-0 - (analog-input - (the-as - int - (+ - (-> *cpad-list* cpads 0 righty) - -256 - (-> *cpad-list* cpads 0 lefty) + (cond + ((< (-> *CAM_EYE-bank* rot-speed) (-> s4-0 x)) + (set! (-> s4-0 x) (-> *CAM_EYE-bank* rot-speed)) + ) + ((< (-> s4-0 x) (- (-> *CAM_EYE-bank* rot-speed))) + (set! (-> s4-0 x) (- (-> *CAM_EYE-bank* rot-speed))) + ) + ) + (cond + ((< (-> *CAM_EYE-bank* rot-speed) (-> s4-0 y)) + (set! (-> s4-0 y) (-> *CAM_EYE-bank* rot-speed)) + ) + ((< (-> s4-0 y) (- (-> *CAM_EYE-bank* rot-speed))) + (set! (-> s4-0 y) (- (-> *CAM_EYE-bank* rot-speed))) + ) + ) + (cond + ((and (= (-> s4-0 x) 0.0) (= (-> s4-0 y) 0.0)) + (set! gp-0 (-> *display* base-frame-counter)) + ) + (else + (let ((v1-44 (min 10 (max 1 (- (-> *display* base-frame-counter) gp-0))))) + (vector-float*! s4-0 s4-0 (* 0.1 (the float v1-44))) + ) + ) + ) + (matrix-axis-angle! s5-0 (-> *camera* local-down) (-> s4-0 y)) + (matrix*! (the-as matrix (-> self tracking)) (the-as matrix (-> self tracking)) s5-0) + (when (zero? (logand (-> self options) 8)) + (if (< (vector-dot (-> self tracking inv-mat vector 1) (-> *camera* local-down)) 0.0) + (forward-down->inv-matrix + (the-as matrix (-> self tracking)) + (-> self tracking inv-mat vector 2) + (-> *camera* local-down) + ) + (forward-down->inv-matrix + (the-as matrix (-> self tracking)) + (-> self tracking inv-mat vector 2) + (vector-negate! (new-stack-vector0) (-> *camera* local-down)) + ) + ) + ) + (matrix-axis-angle! s5-0 (the-as vector (-> self tracking)) (- (-> s4-0 x))) + (matrix*! (the-as matrix (-> self tracking)) (the-as matrix (-> self tracking)) s5-0) + ) + (when (zero? (logand (-> self options) 8)) + (let ((f30-1 (vector-dot (-> *camera* local-down) (-> self tracking inv-mat vector 2)))) + (set! (-> (new 'stack-no-clear 'vector) quad) (the-as uint128 0)) + (when (< (sin (-> *CAM_EYE-bank* max-degrees)) (fabs f30-1)) + (vector--float*! + (-> self tracking inv-mat vector 2) + (-> self tracking inv-mat vector 2) + (-> *camera* local-down) + f30-1 + ) + (vector-normalize! (-> self tracking inv-mat vector 2) (cos (-> *CAM_EYE-bank* max-degrees))) + (if (< f30-1 0.0) + (vector--float*! + (-> self tracking inv-mat vector 2) + (-> self tracking inv-mat vector 2) + (-> *camera* local-down) + (sin (-> *CAM_EYE-bank* max-degrees)) + ) + (vector+float*! + (-> self tracking inv-mat vector 2) + (-> self tracking inv-mat vector 2) + (-> *camera* local-down) + (sin (-> *CAM_EYE-bank* max-degrees)) + ) + ) + (vector-cross! + (-> self tracking inv-mat vector 1) + (-> self tracking inv-mat vector 2) + (the-as vector (-> self tracking)) + ) + (set! (-> self tracking inv-mat vector 1 w) 0.0) + ) ) - ) - (the-as float 0.0) - (the-as float 48.0) - (the-as float 110.0) - (the-as float -1.0) ) - ) ) - (set! - (-> s4-0 y) - (- (-> s4-0 y) (* (- f30-0) (-> *CAM_EYE-bank* rot-speed))) + (let ((v1-76 (vector-float*! (new-stack-vector0) (-> *camera* local-down) (+ 1024.0 (-> *camera* target-height))))) + (vector-! (-> self trans) (-> *camera* tpos-curr) v1-76) ) - (set! - (-> s4-0 x) - (- (-> s4-0 x) (* (- f0-0) (-> *CAM_EYE-bank* rot-speed))) - ) - ) + (suspend) ) - (cond - ((< (-> *CAM_EYE-bank* rot-speed) (-> s4-0 x)) - (set! (-> s4-0 x) (-> *CAM_EYE-bank* rot-speed)) - ) - ((< (-> s4-0 x) (- (-> *CAM_EYE-bank* rot-speed))) - (set! (-> s4-0 x) (- (-> *CAM_EYE-bank* rot-speed))) - ) - ) - (cond - ((< (-> *CAM_EYE-bank* rot-speed) (-> s4-0 y)) - (set! (-> s4-0 y) (-> *CAM_EYE-bank* rot-speed)) - ) - ((< (-> s4-0 y) (- (-> *CAM_EYE-bank* rot-speed))) - (set! (-> s4-0 y) (- (-> *CAM_EYE-bank* rot-speed))) - ) - ) - (cond - ((and (= (-> s4-0 x) 0.0) (= (-> s4-0 y) 0.0)) - (set! gp-0 (-> *display* base-frame-counter)) - ) - (else - (let - ((v1-44 (min 10 (max 1 (- (-> *display* base-frame-counter) gp-0))))) - (vector-float*! s4-0 s4-0 (* 0.1 (the float v1-44))) - ) - ) - ) - (matrix-axis-angle! s5-0 (-> *camera* local-down) (-> s4-0 y)) - (matrix*! - (the-as matrix (-> self tracking)) - (the-as matrix (-> self tracking)) - s5-0 - ) - (when (zero? (logand (-> self options) 8)) - (if - (< - (vector-dot - (-> self tracking inv-mat vector 1) - (-> *camera* local-down) - ) - 0.0 - ) - (forward-down->inv-matrix - (the-as matrix (-> self tracking)) - (-> self tracking inv-mat vector 2) - (-> *camera* local-down) - ) - (forward-down->inv-matrix - (the-as matrix (-> self tracking)) - (-> self tracking inv-mat vector 2) - (vector-negate! (new-stack-vector0) (-> *camera* local-down)) - ) - ) - ) - (matrix-axis-angle! - s5-0 - (the-as vector (-> self tracking)) - (- (-> s4-0 x)) - ) - (matrix*! - (the-as matrix (-> self tracking)) - (the-as matrix (-> self tracking)) - s5-0 - ) - ) - (when (zero? (logand (-> self options) 8)) - (let - ((f30-1 - (vector-dot - (-> *camera* local-down) - (-> self tracking inv-mat vector 2) - ) - ) - ) - (set! (-> (new 'stack-no-clear 'vector) quad) (the-as uint128 0)) - (when (< (sin (-> *CAM_EYE-bank* max-degrees)) (fabs f30-1)) - (vector--float*! - (-> self tracking inv-mat vector 2) - (-> self tracking inv-mat vector 2) - (-> *camera* local-down) - f30-1 - ) - (vector-normalize! - (-> self tracking inv-mat vector 2) - (cos (-> *CAM_EYE-bank* max-degrees)) - ) - (if (< f30-1 0.0) - (vector--float*! - (-> self tracking inv-mat vector 2) - (-> self tracking inv-mat vector 2) - (-> *camera* local-down) - (sin (-> *CAM_EYE-bank* max-degrees)) - ) - (vector+float*! - (-> self tracking inv-mat vector 2) - (-> self tracking inv-mat vector 2) - (-> *camera* local-down) - (sin (-> *CAM_EYE-bank* max-degrees)) - ) - ) - (vector-cross! - (-> self tracking inv-mat vector 1) - (-> self tracking inv-mat vector 2) - (the-as vector (-> self tracking)) - ) - (set! (-> self tracking inv-mat vector 1 w) 0.0) - ) - ) - ) ) - (let - ((v1-76 - (vector-float*! - (new-stack-vector0) - (-> *camera* local-down) - (+ 1024.0 (-> *camera* target-height)) - ) - ) - ) - (vector-! (-> self trans) (-> *camera* tpos-curr) v1-76) - ) - (suspend) - ) + (none) ) - (none) - ) ) (deftype cam-billy-bank (basic) @@ -794,169 +604,124 @@ ) -(define - *CAM_BILLY-bank* - (new 'static 'cam-billy-bank :rot-speed 364.0889 :tilt-degrees -1820.4445) - ) +(define *CAM_BILLY-bank* (new 'static 'cam-billy-bank :rot-speed 364.0889 :tilt-degrees -1820.4445)) (defstate cam-billy (camera-slave) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('teleport) - #f + (case arg2 + (('teleport) + #f + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) ) - (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (when (not (-> self enter-has-run)) - (let - ((v1-3 - (vector-float*! - (new-stack-vector0) - (-> *camera* local-down) - (-> *camera* target-height) + (when (not (-> self enter-has-run)) + (let ((v1-3 (vector-float*! (new-stack-vector0) (-> *camera* local-down) (-> *camera* target-height)))) + (vector-! (-> self trans) (-> *camera* tpos-curr) v1-3) ) - ) + (set! (-> self blend-from-type) (the-as uint 0)) + (set! (-> self blend-to-type) (the-as uint 0)) + 0 ) - (vector-! (-> self trans) (-> *camera* tpos-curr) v1-3) - ) - (set! (-> self blend-from-type) (the-as uint 0)) - (set! (-> self blend-to-type) (the-as uint 0)) - 0 + (set! (-> self fov) 9830.4) + (matrix-rotate-y! (the-as matrix (-> self tracking)) (the-as float -32768.0)) + (none) ) - (set! (-> self fov) 9830.4) - (matrix-rotate-y! (the-as matrix (-> self tracking)) (the-as float -32768.0)) - (none) - ) :exit - (behavior () - '() - (none) - ) + (behavior () '() (none)) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) - (go cam-free-floating) + (if (zero? (logand (-> *camera* master-options) 2)) + (go cam-free-floating) + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (when (not (paused?)) - (let ((s5-0 (vector-reset! (new-stack-vector0))) - (s4-0 (vector-reset! (new-stack-vector0))) - (s3-0 (vector-reset! (new-stack-vector0))) - (s2-0 (new-stack-vector0)) - (gp-0 (new-stack-matrix0)) - ) - 0.0 - (when *camera-read-analog* - (let - ((f1-0 - (analog-input - (the-as - int - (+ - (-> *cpad-list* cpads 0 rightx) - -256 - (-> *cpad-list* cpads 0 leftx) + (while #t + (when (not (paused?)) + (let ((s5-0 (vector-reset! (new-stack-vector0))) + (s4-0 (vector-reset! (new-stack-vector0))) + (s3-0 (vector-reset! (new-stack-vector0))) + (s2-0 (new-stack-vector0)) + (gp-0 (new-stack-matrix0)) + ) + 0.0 + (when *camera-read-analog* + (let ((f1-0 + (analog-input + (the-as int (+ (-> *cpad-list* cpads 0 rightx) -256 (-> *cpad-list* cpads 0 leftx))) + (the-as float 0.0) + (the-as float 48.0) + (the-as float 110.0) + (the-as float -1.0) + ) + ) + ) + (set! (-> s5-0 y) (- (-> s5-0 y) (* (- f1-0) (-> *CAM_BILLY-bank* rot-speed)))) + ) + ) + (cond + ((< (-> *CAM_BILLY-bank* rot-speed) (-> s5-0 y)) + (set! (-> s5-0 y) (-> *CAM_BILLY-bank* rot-speed)) + ) + ((< (-> s5-0 y) (- (-> *CAM_BILLY-bank* rot-speed))) + (set! (-> s5-0 y) (- (-> *CAM_BILLY-bank* rot-speed))) ) ) - (the-as float 0.0) - (the-as float 48.0) - (the-as float 110.0) - (the-as float -1.0) - ) - ) - ) - (set! - (-> s5-0 y) - (- (-> s5-0 y) (* (- f1-0) (-> *CAM_BILLY-bank* rot-speed))) - ) - ) - ) - (cond - ((< (-> *CAM_BILLY-bank* rot-speed) (-> s5-0 y)) - (set! (-> s5-0 y) (-> *CAM_BILLY-bank* rot-speed)) - ) - ((< (-> s5-0 y) (- (-> *CAM_BILLY-bank* rot-speed))) - (set! (-> s5-0 y) (- (-> *CAM_BILLY-bank* rot-speed))) - ) - ) - (set! (-> s3-0 x) (sin (the-as float 37319.11))) - (set! (-> s3-0 z) (cos (the-as float 37319.11))) - (set! (-> s4-0 x) (-> s3-0 z)) - (set! (-> s4-0 z) (- (-> s3-0 x))) - (vector-flatten! - s2-0 - (-> self tracking inv-mat vector 2) - (-> *camera* local-down) - ) - (vector-normalize! s2-0 (the-as float 1.0)) - (let - ((f0-14 (acos (vector-dot (-> self tracking inv-mat vector 2) s3-0)))) - (if (< (vector-dot (-> self tracking inv-mat vector 2) s4-0) 0.0) - (set! f0-14 (- f0-14)) - ) - (let ((f0-18 (cond - ((and (< 0.0 f0-14) (< 0.0 (-> s5-0 y))) - (fmin (-> s5-0 y) (fmax 0.0 (* 0.5 (- 10922.667 f0-14)))) - ) - ((and (< f0-14 0.0) (< (-> s5-0 y) 0.0)) - (fmax (-> s5-0 y) (fmin 0.0 (* 0.5 (- -10922.667 f0-14)))) - ) - (else - (-> s5-0 y) - ) - ) + (set! (-> s3-0 x) (sin (the-as float 37319.11))) + (set! (-> s3-0 z) (cos (the-as float 37319.11))) + (set! (-> s4-0 x) (-> s3-0 z)) + (set! (-> s4-0 z) (- (-> s3-0 x))) + (vector-flatten! s2-0 (-> self tracking inv-mat vector 2) (-> *camera* local-down)) + (vector-normalize! s2-0 (the-as float 1.0)) + (let ((f0-14 (acos (vector-dot (-> self tracking inv-mat vector 2) s3-0)))) + (if (< (vector-dot (-> self tracking inv-mat vector 2) s4-0) 0.0) + (set! f0-14 (- f0-14)) + ) + (let ((f0-18 (cond + ((and (< 0.0 f0-14) (< 0.0 (-> s5-0 y))) + (fmin (-> s5-0 y) (fmax 0.0 (* 0.5 (- 10922.667 f0-14)))) + ) + ((and (< f0-14 0.0) (< (-> s5-0 y) 0.0)) + (fmax (-> s5-0 y) (fmin 0.0 (* 0.5 (- -10922.667 f0-14)))) + ) + (else + (-> s5-0 y) + ) + ) + ) + ) + (matrix-axis-angle! gp-0 (-> *camera* local-down) f0-18) ) - ) - (matrix-axis-angle! gp-0 (-> *camera* local-down) f0-18) + ) + (vector-matrix*! (-> self tracking inv-mat vector 2) (-> self tracking inv-mat vector 2) gp-0) + ) + (set! (-> self tracking inv-mat vector 2 y) 0.0) + (vector-normalize! (-> self tracking inv-mat vector 2) (cos (-> *CAM_BILLY-bank* tilt-degrees))) + (set! (-> self tracking inv-mat vector 2 y) (sin (-> *CAM_BILLY-bank* tilt-degrees))) + (vector-cross! + (the-as vector (-> self tracking)) + (-> self tracking inv-mat vector 2) + (-> *camera* local-down) + ) + (vector-normalize! (the-as vector (-> self tracking)) (the-as float 1.0)) + (vector-cross! + (-> self tracking inv-mat vector 1) + (-> self tracking inv-mat vector 2) + (the-as vector (-> self tracking)) + ) ) - ) - (vector-matrix*! - (-> self tracking inv-mat vector 2) - (-> self tracking inv-mat vector 2) - gp-0 - ) + (vector--float*! (-> self trans) (-> *camera* tpos-curr) (-> *camera* local-down) (-> *camera* target-height)) + (suspend) ) - (set! (-> self tracking inv-mat vector 2 y) 0.0) - (vector-normalize! - (-> self tracking inv-mat vector 2) - (cos (-> *CAM_BILLY-bank* tilt-degrees)) - ) - (set! - (-> self tracking inv-mat vector 2 y) - (sin (-> *CAM_BILLY-bank* tilt-degrees)) - ) - (vector-cross! - (the-as vector (-> self tracking)) - (-> self tracking inv-mat vector 2) - (-> *camera* local-down) - ) - (vector-normalize! (the-as vector (-> self tracking)) (the-as float 1.0)) - (vector-cross! - (-> self tracking inv-mat vector 1) - (-> self tracking inv-mat vector 2) - (the-as vector (-> self tracking)) - ) - ) - (vector--float*! - (-> self trans) - (-> *camera* tpos-curr) - (-> *camera* local-down) - (-> *camera* target-height) - ) - (suspend) + (none) ) - (none) - ) ) (defstate cam-spline (camera-slave) @@ -964,673 +729,512 @@ cam-standard-event-handler :enter (behavior () - (cond - ((-> self enter-has-run) - ) - ((-> self cam-entity) - (let ((gp-0 (new-stack-vector0))) - (set! (-> self fov) (cam-slave-get-fov (-> self cam-entity))) - (logior! - (-> self options) - (cam-slave-get-flags (-> self cam-entity) 'flags) + (cond + ((-> self enter-has-run) ) - (if (logtest? (-> self options) #x8000) - (cam-slave-get-rot - (the-as entity-actor (-> self cam-entity)) - (the-as matrix (-> self tracking)) - ) - (set! - (-> self tracking tilt-adjust target) - (cam-slave-get-float - (-> self cam-entity) - 'tiltAdjust - (-> *CAMERA-bank* default-tilt-adjust) - ) - ) - ) - (cam-slave-get-vector-with-offset - (the-as entity-actor (-> self cam-entity)) - gp-0 - 'trans - ) - (cam-curve-setup gp-0) - ) - (vector-negate! (-> self saved-pt) (-> self spline-offset)) - (let - ((a0-8 - (res-lump-struct - (-> self cam-entity) - 'spline-offset - structure - :time - (the-as float -1000000000.0) - ) - ) - ) - (if a0-8 - (vector+! - (-> self spline-offset) - (-> self spline-offset) - (the-as vector a0-8) - ) - ) - ) - (set! (-> self trans quad) (-> self saved-pt quad)) - (cam-calc-follow! (-> self tracking) (-> self trans) #f) - (set! - (-> self spline-follow-dist) - (cam-slave-get-float - (-> self cam-entity) - 'spline-follow-dist - (the-as float 0.0) - ) - ) - (cond - ((< 0.0 (-> self spline-follow-dist)) - (let ((s5-1 (new 'stack-no-clear 'vector)) - (gp-1 (new 'stack-no-clear 'vector)) + ((-> self cam-entity) + (let ((gp-0 (new-stack-vector0))) + (set! (-> self fov) (cam-slave-get-fov (-> self cam-entity))) + (logior! (-> self options) (cam-slave-get-flags (-> self cam-entity) 'flags)) + (if (logtest? (-> self options) #x8000) + (cam-slave-get-rot (the-as entity-actor (-> self cam-entity)) (the-as matrix (-> self tracking))) + (set! (-> self tracking tilt-adjust target) + (cam-slave-get-float (-> self cam-entity) 'tiltAdjust (-> *CAMERA-bank* default-tilt-adjust)) + ) ) - (curve-get-pos! s5-1 (the-as float 0.0) (-> self spline-curve)) - (curve-get-pos! gp-1 (the-as float 1.0) (-> self spline-curve)) - (if - (< - (vector-vector-distance-squared s5-1 (-> self tracking follow-pt)) - (vector-vector-distance-squared gp-1 (-> self tracking follow-pt)) + (cam-slave-get-vector-with-offset (the-as entity-actor (-> self cam-entity)) gp-0 'trans) + (cam-curve-setup gp-0) + ) + (vector-negate! (-> self saved-pt) (-> self spline-offset)) + (let ((a0-8 (res-lump-struct (-> self cam-entity) 'spline-offset structure :time (the-as float -1000000000.0)))) + (if a0-8 + (vector+! (-> self spline-offset) (-> self spline-offset) (the-as vector a0-8)) + ) + ) + (set! (-> self trans quad) (-> self saved-pt quad)) + (cam-calc-follow! (-> self tracking) (-> self trans) #f) + (set! (-> self spline-follow-dist) + (cam-slave-get-float (-> self cam-entity) 'spline-follow-dist (the-as float 0.0)) + ) + (cond + ((< 0.0 (-> self spline-follow-dist)) + (let ((s5-1 (new 'stack-no-clear 'vector)) + (gp-1 (new 'stack-no-clear 'vector)) + ) + (curve-get-pos! s5-1 (the-as float 0.0) (-> self spline-curve)) + (curve-get-pos! gp-1 (the-as float 1.0) (-> self spline-curve)) + (if (< (vector-vector-distance-squared s5-1 (-> self tracking follow-pt)) + (vector-vector-distance-squared gp-1 (-> self tracking follow-pt)) + ) + (set! (-> self spline-follow-dist) (- (-> self spline-follow-dist))) + ) + ) + (set! (-> self spline-tt) (curve-closest-point + (-> self spline-curve) + (-> self tracking follow-pt) + (the-as float 0.5) + (the-as float -4096.0) + 10 + (-> self spline-follow-dist) + ) + ) ) - (set! (-> self spline-follow-dist) (- (-> self spline-follow-dist))) + (else + (set! (-> self spline-follow-dist) 0.0) + ) ) - ) - (set! - (-> self spline-tt) - (curve-closest-point - (-> self spline-curve) - (-> self tracking follow-pt) - (the-as float 0.5) - (the-as float -4096.0) - 10 - (-> self spline-follow-dist) + (cam-curve-pos (-> self trans) (the-as vector #f) (the-as curve #f) #t) + (cond + ((logtest? (-> self options) #x8000) + (set! (-> self blend-from-type) (the-as uint 0)) + (set! (-> self blend-to-type) (the-as uint 0)) + 0 + ) + (else + (set! (-> self blend-from-type) (the-as uint 2)) + (set! (-> self blend-to-type) (the-as uint 2)) + ) ) - ) ) (else - (set! (-> self spline-follow-dist) 0.0) - ) + (format #t "ERROR : cam-spline enter without entity~%") + ) ) - (cam-curve-pos (-> self trans) (the-as vector #f) (the-as curve #f) #t) - (cond - ((logtest? (-> self options) #x8000) - (set! (-> self blend-from-type) (the-as uint 0)) - (set! (-> self blend-to-type) (the-as uint 0)) - 0 - ) - (else - (set! (-> self blend-from-type) (the-as uint 2)) - (set! (-> self blend-to-type) (the-as uint 2)) - ) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (if (cam-slave-get-vector-with-offset (the-as entity-actor (-> self cam-entity)) gp-2 'interesting) + (send-event *camera* 'point-of-interest gp-2) + ) ) - ) - (else - (format #t "ERROR : cam-spline enter without entity~%") - ) + (none) ) - (let ((gp-2 (new 'stack-no-clear 'vector))) - (if - (cam-slave-get-vector-with-offset - (the-as entity-actor (-> self cam-entity)) - gp-2 - 'interesting - ) - (send-event *camera* 'point-of-interest gp-2) - ) - ) - (none) - ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) - (cam-slave-go cam-free-floating) + (if (zero? (logand (-> *camera* master-options) 2)) + (cam-slave-go cam-free-floating) + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (when (not (paused?)) - (cam-calc-follow! (-> self tracking) (-> self trans) #t) - (new 'stack 'curve) - (set! (-> self trans quad) (-> self saved-pt quad)) - (cam-curve-pos (-> self trans) (the-as vector #f) (the-as curve #f) #t) - ) - (suspend) + (while #t + (when (not (paused?)) + (cam-calc-follow! (-> self tracking) (-> self trans) #t) + (new 'stack 'curve) + (set! (-> self trans quad) (-> self saved-pt quad)) + (cam-curve-pos (-> self trans) (the-as vector #f) (the-as curve #f) #t) + ) + (suspend) + ) + (none) ) - (none) - ) ) (defstate cam-decel (camera-slave) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('teleport) - #f + (case arg2 + (('teleport) + #f + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) ) - (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (if (not (-> self enter-has-run)) - (set! (-> self saved-pt quad) (-> self trans quad)) + (if (not (-> self enter-has-run)) + (set! (-> self saved-pt quad) (-> self trans quad)) + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (when (not (paused?)) - (let ((s5-0 (new-stack-vector0)) - (gp-0 (new-stack-vector0)) - ) - (when (!= (-> *camera* outro-t-step) 0.0) - (curve-get-pos! - s5-0 - (parameter-ease-sin-clamp (-> *camera* outro-t)) - (-> *camera* outro-curve) - ) - (+! - (-> *camera* outro-t) - (* (-> *camera* outro-t-step) (-> *display* time-adjust-ratio)) - ) - (curve-get-pos! - gp-0 - (parameter-ease-sin-clamp (-> *camera* outro-t)) - (-> *camera* outro-curve) - ) - (vector-! gp-0 gp-0 s5-0) - (cond - ((or - (and - (< (-> *camera* outro-t-step) 0.0) - (>= (-> *camera* outro-exit-value) (-> *camera* outro-t)) - ) - (and - (< 0.0 (-> *camera* outro-t-step)) - (>= (-> *camera* outro-t) (-> *camera* outro-exit-value)) - ) + (while #t + (when (not (paused?)) + (let ((s5-0 (new-stack-vector0)) + (gp-0 (new-stack-vector0)) + ) + (when (!= (-> *camera* outro-t-step) 0.0) + (curve-get-pos! s5-0 (parameter-ease-sin-clamp (-> *camera* outro-t)) (-> *camera* outro-curve)) + (+! (-> *camera* outro-t) (* (-> *camera* outro-t-step) (-> *display* time-adjust-ratio))) + (curve-get-pos! gp-0 (parameter-ease-sin-clamp (-> *camera* outro-t)) (-> *camera* outro-curve)) + (vector-! gp-0 gp-0 s5-0) + (cond + ((or + (and (< (-> *camera* outro-t-step) 0.0) (>= (-> *camera* outro-exit-value) (-> *camera* outro-t))) + (and (< 0.0 (-> *camera* outro-t-step)) (>= (-> *camera* outro-t) (-> *camera* outro-exit-value))) + ) + (set! (-> *camera* outro-t) (-> *camera* outro-exit-value)) + (set! (-> *camera* outro-t-step) 0.0) + (vector+! (-> self velocity) (-> self velocity) gp-0) + (send-event *camera* 'outro-done) + ) + (else + (vector+! (-> self trans) (-> self trans) gp-0) + ) + ) + ) ) - (set! (-> *camera* outro-t) (-> *camera* outro-exit-value)) - (set! (-> *camera* outro-t-step) 0.0) - (vector+! (-> self velocity) (-> self velocity) gp-0) - (send-event *camera* 'outro-done) - ) - (else - (vector+! (-> self trans) (-> self trans) gp-0) - ) + (vector-float*! (-> self velocity) (-> self velocity) 0.9) + (vector+! (-> self trans) (-> self trans) (-> self velocity)) ) - ) + (suspend) ) - (vector-float*! (-> self velocity) (-> self velocity) 0.9) - (vector+! (-> self trans) (-> self trans) (-> self velocity)) - ) - (suspend) + (none) ) - (none) - ) ) (defstate cam-endlessfall (camera-slave) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('teleport) - #f + (case arg2 + (('teleport) + #f + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) ) - (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (when (not (-> self enter-has-run)) - (set! (-> self blend-from-type) (the-as uint 2)) - (set! (-> self blend-to-type) (the-as uint 2)) + (when (not (-> self enter-has-run)) + (set! (-> self blend-from-type) (the-as uint 2)) + (set! (-> self blend-to-type) (the-as uint 2)) + ) + (none) ) - (none) - ) :code (behavior () - (let ((gp-0 (new 'stack-no-clear 'matrix)) - (f30-0 (-> self velocity y)) - ) - (let ((s4-0 (new 'stack-no-clear 'vector)) - (s5-0 (new 'stack-no-clear 'vector)) + (let ((gp-0 (new 'stack-no-clear 'matrix)) + (f30-0 (-> self velocity y)) ) - (set! (-> s4-0 quad) (-> self trans quad)) - (set! (-> s4-0 y) 0.0) - (set! (-> s5-0 quad) (-> self velocity quad)) - (set! (-> s5-0 y) 0.0) - ((method-of-type cam-vector-seeker init!) - (the-as cam-vector-seeker gp-0) - s4-0 - (the-as float 81.92) - (fmax 819.2 (vector-length s5-0)) - (the-as float 0.75) - ) - (set! (-> gp-0 vector 2 quad) (-> s5-0 quad)) - ) - (while #t - (when (not (paused?)) - (set! (-> gp-0 vector 0 x) (-> (target-pos 0) x)) - (set! (-> gp-0 vector 0 z) (-> (target-pos 0) z)) - ((method-of-type cam-vector-seeker update!) - (the-as cam-vector-seeker gp-0) - (the-as vector #f) - ) - (when (< 819.2 (-> gp-0 vector 3 y)) - (set! (-> gp-0 vector 3 y) (* 0.9 (-> gp-0 vector 3 y))) - (if (< (-> gp-0 vector 3 y) 819.2) - (set! (-> gp-0 vector 3 y) 819.2) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s4-0 quad) (-> self trans quad)) + (set! (-> s4-0 y) 0.0) + (set! (-> s5-0 quad) (-> self velocity quad)) + (set! (-> s5-0 y) 0.0) + ((method-of-type cam-vector-seeker init!) + (the-as cam-vector-seeker gp-0) + s4-0 + (the-as float 81.92) + (fmax 819.2 (vector-length s5-0)) + (the-as float 0.75) + ) + (set! (-> gp-0 vector 2 quad) (-> s5-0 quad)) + ) + (while #t + (when (not (paused?)) + (set! (-> gp-0 vector 0 x) (-> (target-pos 0) x)) + (set! (-> gp-0 vector 0 z) (-> (target-pos 0) z)) + ((method-of-type cam-vector-seeker update!) (the-as cam-vector-seeker gp-0) (the-as vector #f)) + (when (< 819.2 (-> gp-0 vector 3 y)) + (set! (-> gp-0 vector 3 y) (* 0.9 (-> gp-0 vector 3 y))) + (if (< (-> gp-0 vector 3 y) 819.2) + (set! (-> gp-0 vector 3 y) 819.2) + ) + ) + (set! f30-0 (* 0.9 f30-0)) + (+! (-> self trans y) f30-0) + (set! (-> self trans x) (-> gp-0 vector 1 x)) + (set! (-> self trans z) (-> gp-0 vector 1 z)) + ) + (suspend) ) - ) - (set! f30-0 (* 0.9 f30-0)) - (+! (-> self trans y) f30-0) - (set! (-> self trans x) (-> gp-0 vector 1 x)) - (set! (-> self trans z) (-> gp-0 vector 1 z)) ) - (suspend) - ) + (none) ) - (none) - ) ) -(defbehavior - cam-circular-position-into-max-angle camera-slave - ((arg0 vector) (arg1 vector) (arg2 float)) +(defbehavior cam-circular-position-into-max-angle camera-slave ((arg0 vector) (arg1 vector) (arg2 float)) (let* ((f30-0 (vector-normalize-ret-len! arg0 (the-as float 1.0))) (f26-0 (vector-normalize-ret-len! arg1 (the-as float 1.0))) (f0-1 (vector-dot arg0 arg1)) (f28-0 (acos f0-1)) (s3-0 (new 'stack-no-clear 'matrix)) ) - (when *camera-read-analog* - (let - ((f24-0 - (analog-input - (the-as int (-> *cpad-list* cpads 0 rightx)) - (the-as float 128.0) - (the-as float 32.0) - (the-as float 110.0) - (* 8192.0 (-> *display* seconds-per-frame)) - ) - ) - (f1-2 - (analog-input - (the-as int (-> *cpad-list* cpads 0 righty)) - (the-as float 128.0) - (the-as float 32.0) - (the-as float 110.0) - (* 8192.0 (-> *display* seconds-per-frame)) - ) - ) - (s2-0 (new-stack-matrix0)) - ) - (let ((v1-20 (new 'stack-no-clear 'vector))) - 0.0 - (if (< (-> self pivot-rad) f30-0) - (set! f24-0 (- f24-0)) - ) - (vector-cross! v1-20 arg1 arg0) - (let ((f0-9 (vector-dot v1-20 (-> *camera* local-down)))) - (if (< f1-2 0.0) - (set! f1-2 (fmax f1-2 (* -0.15 f28-0))) - ) - (if (< f0-9 0.0) - (set! f1-2 (- f1-2)) - ) - (let* ((f1-3 (+ f24-0 f1-2)) - (f1-5 - (fmin - (* 8192.0 (-> *display* seconds-per-frame)) - (fmax (* -8192.0 (-> *display* seconds-per-frame)) f1-3) - ) - ) + (when *camera-read-analog* + (let ((f24-0 (analog-input + (the-as int (-> *cpad-list* cpads 0 rightx)) + (the-as float 128.0) + (the-as float 32.0) + (the-as float 110.0) + (* 8192.0 (-> *display* seconds-per-frame)) + ) + ) + (f1-2 (analog-input + (the-as int (-> *cpad-list* cpads 0 righty)) + (the-as float 128.0) + (the-as float 32.0) + (the-as float 110.0) + (* 8192.0 (-> *display* seconds-per-frame)) + ) + ) + (s2-0 (new-stack-matrix0)) + ) + (let ((v1-20 (new 'stack-no-clear 'vector))) + 0.0 + (if (< (-> self pivot-rad) f30-0) + (set! f24-0 (- f24-0)) ) - (cond - ((and (< 0.0 f1-5) (< 0.0 f0-9) (< (-> self max-angle-curr) f28-0)) - (set! f1-5 0.0) - ) - ((and (< 0.0 f1-5) (< 0.0 f0-9)) - (set! f1-5 (fmin f1-5 (* 0.15 (- (-> self max-angle-curr) f28-0)))) - ) - ((and (< f1-5 0.0) (< f0-9 0.0) (< (-> self max-angle-curr) f28-0)) - (set! f1-5 0.0) - ) - ((and (< f1-5 0.0) (< f0-9 0.0)) - (set! f1-5 (fmax f1-5 (* 0.15 (- f28-0 (-> self max-angle-curr))))) + (vector-cross! v1-20 arg1 arg0) + (let ((f0-9 (vector-dot v1-20 (-> *camera* local-down)))) + (if (< f1-2 0.0) + (set! f1-2 (fmax f1-2 (* -0.15 f28-0))) + ) + (if (< f0-9 0.0) + (set! f1-2 (- f1-2)) + ) + (let* ((f1-3 (+ f24-0 f1-2)) + (f1-5 + (fmin (* 8192.0 (-> *display* seconds-per-frame)) (fmax (* -8192.0 (-> *display* seconds-per-frame)) f1-3)) + ) + ) + (cond + ((and (< 0.0 f1-5) (< 0.0 f0-9) (< (-> self max-angle-curr) f28-0)) + (set! f1-5 0.0) + ) + ((and (< 0.0 f1-5) (< 0.0 f0-9)) + (set! f1-5 (fmin f1-5 (* 0.15 (- (-> self max-angle-curr) f28-0)))) + ) + ((and (< f1-5 0.0) (< f0-9 0.0) (< (-> self max-angle-curr) f28-0)) + (set! f1-5 0.0) + ) + ((and (< f1-5 0.0) (< f0-9 0.0)) + (set! f1-5 (fmax f1-5 (* 0.15 (- f28-0 (-> self max-angle-curr))))) + ) + ) + (matrix-axis-angle! s2-0 (-> *camera* local-down) f1-5) + ) + ) ) + (vector-matrix*! arg1 arg1 s2-0) + ) + (let ((f0-15 (vector-dot arg0 arg1))) + (set! f28-0 (acos f0-15)) + ) + ) + (cond + ((< (-> self max-angle-curr) f28-0) + (matrix-from-two-vectors-max-angle! + s3-0 + arg1 + arg0 + (* (fmin 1.0 (* arg2 (-> *display* time-adjust-ratio))) (- f28-0 (-> self max-angle-curr))) ) - (matrix-axis-angle! s2-0 (-> *camera* local-down) f1-5) - ) + (vector-matrix*! arg0 arg1 s3-0) ) + ((and + (logtest? (-> self options) 2) + (or + (and (>= f26-0 (+ -8192.0 f30-0)) (>= f30-0 (+ -8192.0 (-> self pivot-rad)))) + (and (>= (+ 8192.0 f30-0) f26-0) (>= (+ 8192.0 (-> self pivot-rad)) f30-0)) + ) + ) + (let ((s2-1 (new 'stack-no-clear 'vector))) + (vector-cross! s2-1 arg1 arg0) + (vector-normalize! s2-1 (the-as float 1.0)) + (matrix-axis-angle! + s3-0 + s2-1 + (* (fmin 1.0 (* arg2 (-> *display* time-adjust-ratio))) (- (-> self max-angle-curr) f28-0)) + ) + ) + (vector-matrix*! arg0 arg1 s3-0) + ) + (else + (set! (-> arg0 quad) (-> arg1 quad)) + (if (logtest? (-> self options) 2048) + (set! (-> self max-angle-curr) f28-0) + ) + ) ) - (vector-matrix*! arg1 arg1 s2-0) - ) - (let ((f0-15 (vector-dot arg0 arg1))) - (set! f28-0 (acos f0-15)) - ) ) - (cond - ((< (-> self max-angle-curr) f28-0) - (matrix-from-two-vectors-max-angle! - s3-0 - arg1 - arg0 - (* - (fmin 1.0 (* arg2 (-> *display* time-adjust-ratio))) - (- f28-0 (-> self max-angle-curr)) - ) - ) - (vector-matrix*! arg0 arg1 s3-0) - ) - ((and - (logtest? (-> self options) 2) - (or - (and - (>= f26-0 (+ -8192.0 f30-0)) - (>= f30-0 (+ -8192.0 (-> self pivot-rad))) - ) - (and - (>= (+ 8192.0 f30-0) f26-0) - (>= (+ 8192.0 (-> self pivot-rad)) f30-0) - ) - ) - ) - (let ((s2-1 (new 'stack-no-clear 'vector))) - (vector-cross! s2-1 arg1 arg0) - (vector-normalize! s2-1 (the-as float 1.0)) - (matrix-axis-angle! - s3-0 - s2-1 - (* - (fmin 1.0 (* arg2 (-> *display* time-adjust-ratio))) - (- (-> self max-angle-curr) f28-0) - ) - ) - ) - (vector-matrix*! arg0 arg1 s3-0) - ) - (else - (set! (-> arg0 quad) (-> arg1 quad)) - (if (logtest? (-> self options) 2048) - (set! (-> self max-angle-curr) f28-0) - ) - ) - ) - ) (vector-normalize! arg0 (-> self pivot-rad)) ) (defbehavior cam-circular-position camera-slave ((arg0 symbol)) (let ((gp-0 (new 'stack-no-clear 'vector))) - (let ((s5-0 (new 'stack-no-clear 'vector))) - (if (logtest? (-> self options) 130) - (vector-! gp-0 (-> self circular-follow) (-> self pivot-pt)) - (vector-! gp-0 (-> self pivot-pt) (-> self circular-follow)) - ) - (vector-! s5-0 (-> self trans) (-> self pivot-pt)) - (when (zero? (logand (-> self options) 4)) - (vector-flatten! gp-0 gp-0 (-> *camera* local-down)) - (vector-flatten! s5-0 s5-0 (-> *camera* local-down)) - ) - (cond - ((logtest? (-> self options) 128) - (let ((f0-1 (- (vector-length gp-0) (-> self pivot-rad)))) - (if (>= 0.0 f0-1) - (vector-reset! gp-0) - (vector-normalize! gp-0 f0-1) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (if (logtest? (-> self options) 130) + (vector-! gp-0 (-> self circular-follow) (-> self pivot-pt)) + (vector-! gp-0 (-> self pivot-pt) (-> self circular-follow)) + ) + (vector-! s5-0 (-> self trans) (-> self pivot-pt)) + (when (zero? (logand (-> self options) 4)) + (vector-flatten! gp-0 gp-0 (-> *camera* local-down)) + (vector-flatten! s5-0 s5-0 (-> *camera* local-down)) + ) + (cond + ((logtest? (-> self options) 128) + (let ((f0-1 (- (vector-length gp-0) (-> self pivot-rad)))) + (if (>= 0.0 f0-1) + (vector-reset! gp-0) + (vector-normalize! gp-0 f0-1) + ) + ) + ) + ((not arg0) + (set! (-> self max-angle-curr) (-> self max-angle-offset)) + (cam-circular-position-into-max-angle gp-0 s5-0 (the-as float 1.0)) + ) + (else + (cam-circular-position-into-max-angle gp-0 s5-0 (the-as float 0.05)) + ) ) - ) ) - ((not arg0) - (set! (-> self max-angle-curr) (-> self max-angle-offset)) - (cam-circular-position-into-max-angle gp-0 s5-0 (the-as float 1.0)) - ) - (else - (cam-circular-position-into-max-angle gp-0 s5-0 (the-as float 0.05)) - ) - ) + (vector+! (-> self trans) gp-0 (-> self pivot-pt)) ) - (vector+! (-> self trans) gp-0 (-> self pivot-pt)) - ) ) (defbehavior cam-circular-code camera-slave () (set! (-> self pivot-pt quad) (-> self saved-pt quad)) (cam-curve-pos (-> self pivot-pt) (the-as vector #f) (the-as curve #f) #f) (let ((a2-1 (new-stack-vector0))) - (vector-! a2-1 (-> *camera* tpos-curr-adj) (-> self pivot-pt)) - (vector-! - (-> self circular-follow) - (-> self circular-follow) - (-> self pivot-pt) + (vector-! a2-1 (-> *camera* tpos-curr-adj) (-> self pivot-pt)) + (vector-! (-> self circular-follow) (-> self circular-follow) (-> self pivot-pt)) + (if (logtest? (-> self options) 4) + (v-slrp3! + (-> self circular-follow) + (-> self circular-follow) + a2-1 + (the-as vector #f) + (* 182.04445 (-> *display* time-adjust-ratio)) + ) + (v-slrp3! + (-> self circular-follow) + (-> self circular-follow) + a2-1 + (-> *camera* local-down) + (* 182.04445 (-> *display* time-adjust-ratio)) + ) + ) ) - (if (logtest? (-> self options) 4) - (v-slrp3! - (-> self circular-follow) - (-> self circular-follow) - a2-1 - (the-as vector #f) - (* 182.04445 (-> *display* time-adjust-ratio)) - ) - (v-slrp3! - (-> self circular-follow) - (-> self circular-follow) - a2-1 - (-> *camera* local-down) - (* 182.04445 (-> *display* time-adjust-ratio)) - ) - ) - ) - (vector+! - (-> self circular-follow) - (-> self circular-follow) - (-> self pivot-pt) - ) + (vector+! (-> self circular-follow) (-> self circular-follow) (-> self pivot-pt)) (cam-circular-position #t) (when (!= (-> self fov1) 0.0) - (let - ((f0-7 - (lerp-clamp - (-> self fov0) - (-> self fov1) - (parameter-ease-sin-clamp - (dummy-10 (-> self fov-index) (-> *camera* tpos-curr-adj)) - ) - ) + (let ((f0-7 (lerp-clamp + (-> self fov0) + (-> self fov1) + (parameter-ease-sin-clamp (dummy-10 (-> self fov-index) (-> *camera* tpos-curr-adj))) + ) + ) + ) + (set! (-> self fov) f0-7) + f0-7 ) - ) - (set! (-> self fov) f0-7) - f0-7 ) - ) ) (defstate cam-circular (camera-slave) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('teleport) - #f + (case arg2 + (('teleport) + #f + ) + (('outro-done) + (set! (-> self trans quad) (-> *camera-combiner* trans quad)) + (cam-circular-position #f) + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) ) - (('outro-done) - (set! (-> self trans quad) (-> *camera-combiner* trans quad)) - (cam-circular-position #f) - ) - (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (cond - ((-> self enter-has-run) - ) - (else - (let ((gp-0 (new-stack-vector0))) - (set! (-> (new 'stack-no-clear 'vector) quad) (the-as uint128 0)) - (set! (-> self view-off-param) 1.0) - (set! (-> self circular-follow quad) (-> *camera* tpos-curr-adj quad)) - (set! (-> self max-angle-offset) 0.0) - (cond - ((-> self cam-entity) - (cam-slave-get-vector-with-offset - (the-as entity-actor (-> self cam-entity)) - (-> self saved-pt) - 'pivot - ) - (cam-slave-get-vector-with-offset - (the-as entity-actor (-> self cam-entity)) - gp-0 - 'trans - ) - (set! - (-> self pivot-rad) - (vector-length (vector-! gp-0 gp-0 (-> self saved-pt))) - ) - (logior! - (-> self options) - (cam-slave-get-flags (-> self cam-entity) 'flags) - ) - (set! (-> self fov) (cam-slave-get-fov (-> self cam-entity))) - (set! - (-> self tracking tilt-adjust target) - (cam-slave-get-float - (-> self cam-entity) - 'tiltAdjust - (-> *CAMERA-bank* default-tilt-adjust) - ) - ) - (set! - (-> self max-angle-offset) - (cam-slave-get-float (-> self cam-entity) 'maxAngle (the-as float 0.0)) - ) - (if (< (-> self max-angle-offset) 0.0) - (set! (-> self max-angle-offset) 0.0) - ) - (set! - (-> self fov1) - (cam-slave-get-float - (-> self cam-entity) - 'focalPull - (the-as float 0.0) - ) - ) - (cond - ((and - (!= (-> self fov1) 0.0) - (dummy-9 - (-> self fov-index) - 'focalpull - (-> self cam-entity) - (-> self saved-pt) - (the-as curve #f) - ) - ) - (set! (-> self fov0) (-> self fov)) - (set! - (-> self fov) - (lerp-clamp - (-> self fov0) - (-> self fov1) - (dummy-10 (-> self fov-index) (-> *camera* tpos-curr-adj)) - ) - ) - ) - (else - (set! (-> self fov1) 0.0) - ) - ) - (cam-curve-setup (-> self saved-pt)) - (set! (-> self pivot-pt quad) (-> self saved-pt quad)) - (cam-curve-pos - (-> self pivot-pt) - (the-as vector #f) - (the-as curve #f) - #f - ) - ) - ((logtest? (-> self options) 128) - (vector-! - (-> self pivot-pt) - (-> *camera* tpos-curr-adj) - (-> self trans) - ) - (vector-flatten! - (-> self pivot-pt) - (-> self pivot-pt) - (-> *camera* local-down) - ) - (set! (-> self pivot-rad) (vector-length (-> self pivot-pt))) - (set! (-> self pivot-pt quad) (-> self trans quad)) - (set! (-> self saved-pt quad) (-> self pivot-pt quad)) - ) - (else - (vector-! - (-> self pivot-pt) - (-> *camera* tpos-curr-adj) - (-> self trans) - ) - (vector-float*! (-> self pivot-pt) (-> self pivot-pt) 0.5) - (vector-flatten! - (-> self pivot-pt) - (-> self pivot-pt) - (-> *camera* local-down) - ) - (set! (-> self pivot-rad) (vector-length (-> self pivot-pt))) - (vector+! (-> self pivot-pt) (-> self trans) (-> self pivot-pt)) - (set! (-> self saved-pt quad) (-> self pivot-pt quad)) - ) + (cond + ((-> self enter-has-run) ) + (else + (let ((gp-0 (new-stack-vector0))) + (set! (-> (new 'stack-no-clear 'vector) quad) (the-as uint128 0)) + (set! (-> self view-off-param) 1.0) + (set! (-> self circular-follow quad) (-> *camera* tpos-curr-adj quad)) + (set! (-> self max-angle-offset) 0.0) + (cond + ((-> self cam-entity) + (cam-slave-get-vector-with-offset (the-as entity-actor (-> self cam-entity)) (-> self saved-pt) 'pivot) + (cam-slave-get-vector-with-offset (the-as entity-actor (-> self cam-entity)) gp-0 'trans) + (set! (-> self pivot-rad) (vector-length (vector-! gp-0 gp-0 (-> self saved-pt)))) + (logior! (-> self options) (cam-slave-get-flags (-> self cam-entity) 'flags)) + (set! (-> self fov) (cam-slave-get-fov (-> self cam-entity))) + (set! (-> self tracking tilt-adjust target) + (cam-slave-get-float (-> self cam-entity) 'tiltAdjust (-> *CAMERA-bank* default-tilt-adjust)) + ) + (set! (-> self max-angle-offset) (cam-slave-get-float (-> self cam-entity) 'maxAngle (the-as float 0.0))) + (if (< (-> self max-angle-offset) 0.0) + (set! (-> self max-angle-offset) 0.0) + ) + (set! (-> self fov1) (cam-slave-get-float (-> self cam-entity) 'focalPull (the-as float 0.0))) + (cond + ((and + (!= (-> self fov1) 0.0) + (dummy-9 (-> self fov-index) 'focalpull (-> self cam-entity) (-> self saved-pt) (the-as curve #f)) + ) + (set! (-> self fov0) (-> self fov)) + (set! (-> self fov) + (lerp-clamp (-> self fov0) (-> self fov1) (dummy-10 (-> self fov-index) (-> *camera* tpos-curr-adj))) + ) + ) + (else + (set! (-> self fov1) 0.0) + ) + ) + (cam-curve-setup (-> self saved-pt)) + (set! (-> self pivot-pt quad) (-> self saved-pt quad)) + (cam-curve-pos (-> self pivot-pt) (the-as vector #f) (the-as curve #f) #f) + ) + ((logtest? (-> self options) 128) + (vector-! (-> self pivot-pt) (-> *camera* tpos-curr-adj) (-> self trans)) + (vector-flatten! (-> self pivot-pt) (-> self pivot-pt) (-> *camera* local-down)) + (set! (-> self pivot-rad) (vector-length (-> self pivot-pt))) + (set! (-> self pivot-pt quad) (-> self trans quad)) + (set! (-> self saved-pt quad) (-> self pivot-pt quad)) + ) + (else + (vector-! (-> self pivot-pt) (-> *camera* tpos-curr-adj) (-> self trans)) + (vector-float*! (-> self pivot-pt) (-> self pivot-pt) 0.5) + (vector-flatten! (-> self pivot-pt) (-> self pivot-pt) (-> *camera* local-down)) + (set! (-> self pivot-rad) (vector-length (-> self pivot-pt))) + (vector+! (-> self pivot-pt) (-> self trans) (-> self pivot-pt)) + (set! (-> self saved-pt quad) (-> self pivot-pt quad)) + ) + ) + ) + (cam-circular-position #f) + (set! (-> self blend-from-type) (the-as uint 2)) + (set! (-> self blend-to-type) (the-as uint 2)) + ) ) - (cam-circular-position #f) - (set! (-> self blend-from-type) (the-as uint 2)) - (set! (-> self blend-to-type) (the-as uint 2)) - ) - ) - (let ((gp-3 (new 'stack-no-clear 'vector))) - (if - (cam-slave-get-vector-with-offset - (the-as entity-actor (-> self cam-entity)) - gp-3 - 'interesting + (let ((gp-3 (new 'stack-no-clear 'vector))) + (if (cam-slave-get-vector-with-offset (the-as entity-actor (-> self cam-entity)) gp-3 'interesting) + (send-event *camera* 'point-of-interest gp-3) + ) ) - (send-event *camera* 'point-of-interest gp-3) - ) + (none) ) - (none) - ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) - (cam-slave-go cam-free-floating) + (if (zero? (logand (-> *camera* master-options) 2)) + (cam-slave-go cam-free-floating) + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (if (not (paused?)) - (cam-circular-code) - ) - (suspend) + (while #t + (if (not (paused?)) + (cam-circular-code) + ) + (suspend) + ) + (none) ) - (none) - ) ) (defstate cam-lookat (camera-slave) @@ -1638,26 +1242,26 @@ cam-standard-event-handler :enter (behavior () - (when (not (-> self enter-has-run)) - (set! (-> self blend-from-type) (the-as uint 2)) - (set! (-> self blend-to-type) (the-as uint 2)) + (when (not (-> self enter-has-run)) + (set! (-> self blend-from-type) (the-as uint 2)) + (set! (-> self blend-to-type) (the-as uint 2)) + ) + (none) ) - (none) - ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) - (cam-slave-go cam-free-floating) + (if (zero? (logand (-> *camera* master-options) 2)) + (cam-slave-go cam-free-floating) + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (suspend) + (while #t + (suspend) + ) + (none) ) - (none) - ) ) (deftype cam-string-bank (basic) @@ -1672,83 +1276,57 @@ (define *CAM_STRING-bank* - (new 'static 'cam-string-bank - :los-coll-rad (meters 1.0) - :los-coll-rad2 (meters 0.5) - ) + (new 'static 'cam-string-bank :los-coll-rad (meters 1.0) :los-coll-rad2 (meters 0.5)) ) (defun cam-string-find-position-rel! ((arg0 vector)) (let ((s5-0 (new 'stack-no-clear 'vector)) (s4-0 (new 'stack-no-clear 'vector)) - (s3-0 (new 'stack-no-clear 'bone)) + (s3-0 (new 'stack-no-clear 'collide-tri-result)) (f30-0 0.0) (s2-0 (new 'stack-no-clear 'matrix)) ) - (vector-flatten! - s5-0 - (-> *camera-combiner* inv-camera-rot vector 2) - (-> *camera* local-down) - ) - (if - (= - (vector-normalize-ret-len! - s5-0 - (- (+ 1024.0 (-> *CAMERA-bank* default-string-min-z))) + (vector-flatten! s5-0 (-> *camera-combiner* inv-camera-rot vector 2) (-> *camera* local-down)) + (if (= (vector-normalize-ret-len! s5-0 (- (+ 1024.0 (-> *CAMERA-bank* default-string-min-z)))) 0.0) + (set! (-> s5-0 z) (+ 1024.0 (-> *CAMERA-bank* default-string-min-z))) + ) + (vector--float*! s5-0 s5-0 (-> *camera* local-down) (-> *CAMERA-bank* default-string-min-y)) + (set! (-> arg0 quad) (-> s5-0 quad)) + (while #t + (vector--float*! s4-0 arg0 (-> *camera* local-down) (-> *camera* target-height)) + (if (< (dummy-10 + *collide-cache* + (-> *camera* tpos-curr-adj) + arg0 + (the-as float 409.6) + #x4a09 + (the-as process #f) + s3-0 + 2 + ) + 0.0 + ) + (return #t) + ) + (set! f30-0 (cond + ((>= -32768.0 f30-0) + (format #t "cam-string didn't find a spot~%") + (set! (-> arg0 quad) (-> s5-0 quad)) + (return #f) + f30-0 + ) + ((< 0.0 f30-0) + (- f30-0) + ) + (else + (- 5461.3335 f30-0) + ) + ) + ) + (matrix-axis-angle! s2-0 (-> *camera* local-down) f30-0) + (vector-matrix*! arg0 s5-0 s2-0) ) - 0.0 - ) - (set! (-> s5-0 z) (+ 1024.0 (-> *CAMERA-bank* default-string-min-z))) ) - (vector--float*! - s5-0 - s5-0 - (-> *camera* local-down) - (-> *CAMERA-bank* default-string-min-y) - ) - (set! (-> arg0 quad) (-> s5-0 quad)) - (while #t - (vector--float*! - s4-0 - arg0 - (-> *camera* local-down) - (-> *camera* target-height) - ) - (if - (< - (dummy-10 - *collide-cache* - (-> *camera* tpos-curr-adj) - arg0 - (the-as float 409.6) - #x4a09 - (the-as process #f) - (the-as collide-mesh-cache-tri s3-0) - 2 - ) - 0.0 - ) - (return #t) - ) - (set! f30-0 (cond - ((>= -32768.0 f30-0) - (format #t "cam-string didn't find a spot~%") - (set! (-> arg0 quad) (-> s5-0 quad)) - (return #f) - f30-0 - ) - ((< 0.0 f30-0) - (- f30-0) - ) - (else - (- 5461.3335 f30-0) - ) - ) - ) - (matrix-axis-angle! s2-0 (-> *camera* local-down) f30-0) - (vector-matrix*! arg0 s5-0 s2-0) - ) - ) (the-as symbol #f) ) @@ -1760,9 +1338,9 @@ (TODO-RENAME-10 (-> self position-spline) (-> self desired-pos)) (vector-reset! (-> self velocity)) (let ((v0-3 (logand -4097 (-> self options)))) - (set! (-> self options) v0-3) - (the-as int v0-3) - ) + (set! (-> self options) v0-3) + (the-as int v0-3) + ) ) (defun string-push-help () @@ -1771,20 +1349,20 @@ (defun-debug cam-draw-collide-cache ((arg0 collide-cache)) (let ((gp-0 (-> arg0 tris))) - (countdown (s5-0 (-> arg0 num-tris)) - (let ((t1-0 #x40000080)) - (add-debug-flat-triangle - #t - (bucket-id debug-draw1) - (the-as vector (-> gp-0 0)) - (-> gp-0 0 vertex 1) - (-> gp-0 0 vertex 2) - (the-as rgba t1-0) + (countdown (s5-0 (-> arg0 num-tris)) + (let ((t1-0 #x40000080)) + (add-debug-flat-triangle + #t + (bucket-id debug-draw1) + (the-as vector (-> gp-0 0)) + (-> gp-0 0 vertex 1) + (-> gp-0 0 vertex 2) + (the-as rgba t1-0) + ) + ) + (set! gp-0 (the-as (inline-array collide-cache-tri) (-> gp-0 1))) ) - ) - (set! gp-0 (the-as (inline-array collide-cache-tri) (-> gp-0 1))) ) - ) 0 (none) ) @@ -1831,89 +1409,89 @@ (defun dist-info-append ((arg0 collide-los-dist-info) (arg1 vector)) (cond - ((dist-info-valid? arg0) - (if (< (-> arg1 x) (-> arg0 min-par)) - (set! (-> arg0 min-par) (-> arg1 x)) - ) - (if (< (-> arg0 max-par) (-> arg1 x)) - (set! (-> arg0 max-par) (-> arg1 x)) - ) - (if (< (-> arg1 y) (-> arg0 min-lat)) - (set! (-> arg0 min-lat) (-> arg1 y)) - ) - (if (< (-> arg0 max-lat) (-> arg1 y)) - (set! (-> arg0 max-lat) (-> arg1 y)) - ) - (cond - ((< (-> arg1 y) 0.0) - (if (< (-> arg1 z) (-> arg0 min-vn)) - (set! (-> arg0 min-vn) (-> arg1 z)) - ) - (if (< (-> arg0 max-vn) (-> arg1 z)) - (set! (-> arg0 max-vn) (-> arg1 z)) + ((dist-info-valid? arg0) + (if (< (-> arg1 x) (-> arg0 min-par)) + (set! (-> arg0 min-par) (-> arg1 x)) + ) + (if (< (-> arg0 max-par) (-> arg1 x)) + (set! (-> arg0 max-par) (-> arg1 x)) + ) + (if (< (-> arg1 y) (-> arg0 min-lat)) + (set! (-> arg0 min-lat) (-> arg1 y)) + ) + (if (< (-> arg0 max-lat) (-> arg1 y)) + (set! (-> arg0 max-lat) (-> arg1 y)) + ) + (cond + ((< (-> arg1 y) 0.0) + (if (< (-> arg1 z) (-> arg0 min-vn)) + (set! (-> arg0 min-vn) (-> arg1 z)) + ) + (if (< (-> arg0 max-vn) (-> arg1 z)) + (set! (-> arg0 max-vn) (-> arg1 z)) + ) + ) + (else + (if (< (-> arg1 z) (-> arg0 min-vp)) + (set! (-> arg0 min-vp) (-> arg1 z)) + ) + (if (< (-> arg0 max-vp) (-> arg1 z)) + (set! (-> arg0 max-vp) (-> arg1 z)) + ) + ) ) + ) + (else + (set! (-> arg0 min-par) (-> arg1 x)) + (set! (-> arg0 max-par) (-> arg1 x)) + (set! (-> arg0 min-lat) (-> arg1 y)) + (set! (-> arg0 max-lat) (-> arg1 y)) + (set! (-> arg0 min-vp) 0.0) + (set! (-> arg0 max-vp) 0.0) + (set! (-> arg0 min-vn) 0.0) + (set! (-> arg0 max-vn) 0.0) + (cond + ((< (-> arg1 y) 0.0) + (set! (-> arg0 min-vn) (-> arg1 z)) + (set! (-> arg0 max-vn) (-> arg1 z)) + ) + (else + (set! (-> arg0 min-vp) (-> arg1 z)) + (set! (-> arg0 max-vp) (-> arg1 z)) + ) + ) ) - (else - (if (< (-> arg1 z) (-> arg0 min-vp)) - (set! (-> arg0 min-vp) (-> arg1 z)) - ) - (if (< (-> arg0 max-vp) (-> arg1 z)) - (set! (-> arg0 max-vp) (-> arg1 z)) - ) - ) - ) ) - (else - (set! (-> arg0 min-par) (-> arg1 x)) - (set! (-> arg0 max-par) (-> arg1 x)) - (set! (-> arg0 min-lat) (-> arg1 y)) - (set! (-> arg0 max-lat) (-> arg1 y)) - (set! (-> arg0 min-vp) 0.0) - (set! (-> arg0 max-vp) 0.0) - (set! (-> arg0 min-vn) 0.0) - (set! (-> arg0 max-vn) 0.0) - (cond - ((< (-> arg1 y) 0.0) - (set! (-> arg0 min-vn) (-> arg1 z)) - (set! (-> arg0 max-vn) (-> arg1 z)) - ) - (else - (set! (-> arg0 min-vp) (-> arg1 z)) - (set! (-> arg0 max-vp) (-> arg1 z)) - ) - ) - ) - ) (+! (-> arg0 count) 1) (none) ) (defun dist-info-print ((arg0 collide-los-dist-info) (arg1 string)) (cond - ((dist-info-valid? arg0) - (format - *stdcon* - "~S ~2,D mn ~,,2M mx ~,,2M mnl ~,,2M mxl ~,,2M~%" - arg1 - (-> arg0 count) - (-> arg0 min-par) - (-> arg0 max-par) - (-> arg0 min-lat) - (-> arg0 max-lat) - ) - (format - *stdcon* - " mnvp ~,,2M mxvp ~,,2M mnvn ~,,2M mxvn ~,,2M~%" - (-> arg0 min-vp) - (-> arg0 max-vp) - (-> arg0 min-vn) - (-> arg0 max-vn) + ((dist-info-valid? arg0) + (format + *stdcon* + "~S ~2,D mn ~,,2M mx ~,,2M mnl ~,,2M mxl ~,,2M~%" + arg1 + (-> arg0 count) + (-> arg0 min-par) + (-> arg0 max-par) + (-> arg0 min-lat) + (-> arg0 max-lat) + ) + (format + *stdcon* + " mnvp ~,,2M mxvp ~,,2M mnvn ~,,2M mxvn ~,,2M~%" + (-> arg0 min-vp) + (-> arg0 max-vp) + (-> arg0 min-vn) + (-> arg0 max-vn) + ) ) + (else + (format *stdcon* "~S invalid~%" arg1) + ) ) - (else - (format *stdcon* "~S invalid~%" arg1) - ) - ) ) (deftype collide-los-result (structure) @@ -1931,124 +1509,108 @@ ;; WARN: Stack slot offset 128 signed mismatch ;; WARN: Stack slot offset 128 signed mismatch -(defun - los-cw-ccw - ((arg0 (inline-array collide-cache-tri)) - (arg1 vector) - (arg2 vector) - (arg3 float) - (arg4 clip-travel-vector-to-mesh-return-info) - (arg5 vector) - (arg6 float) - ) - (local-vars - (sv-128 float) - (sv-144 vector) - (sv-160 vector) - (sv-176 vector) - (sv-192 vector) - (sv-208 int) - ) +(defun los-cw-ccw ((arg0 (inline-array collide-cache-tri)) + (arg1 vector) + (arg2 vector) + (arg3 float) + (arg4 clip-travel-vector-to-mesh-return-info) + (arg5 vector) + (arg6 float) + ) + (local-vars (sv-128 float) (sv-144 vector) (sv-160 vector) (sv-176 vector) (sv-192 vector) (sv-208 int)) (with-pp - (set! sv-128 arg3) - (let ((gp-0 arg4)) - (set! sv-144 arg5) - (let ((s4-0 arg6)) - (set! sv-160 (new 'stack-no-clear 'vector)) - (set! sv-176 (new 'stack-no-clear 'vector)) - (let ((s5-0 (new 'stack-no-clear 'matrix))) - (set! sv-192 (new 'stack-no-clear 'vector)) - (let ((f30-0 0.0) - (s0-0 #f) + (set! sv-128 arg3) + (let ((gp-0 arg4)) + (set! sv-144 arg5) + (let ((s4-0 arg6)) + (set! sv-160 (new 'stack-no-clear 'vector)) + (set! sv-176 (new 'stack-no-clear 'vector)) + (let ((s5-0 (new 'stack-no-clear 'matrix))) + (set! sv-192 (new 'stack-no-clear 'vector)) + (let ((f30-0 0.0) + (s0-0 #f) + ) + (set! sv-208 0) + (while (< sv-208 4) + (cond + ((= sv-208 3) + (vector-! sv-160 sv-144 (the-as vector (&-> pp stack 368))) + (set! (-> s5-0 vector sv-208 z) 0.0) + ) + (else + (vector-! sv-160 sv-144 (-> arg0 0 vertex sv-208)) + (set! (-> s5-0 vector sv-208 z) (vector-dot sv-160 (-> *camera* local-down))) + (vector-! sv-160 (-> arg0 0 vertex sv-208) (the-as vector (&-> pp stack 368))) + ) + ) + (vector-flatten! sv-160 sv-160 (-> *camera* local-down)) + (vector-cross! sv-176 sv-160 arg2) + (let ((f28-0 (vector-dot sv-176 (-> *camera* local-down)))) + (cond + ((< (* f28-0 f30-0) 0.0) + (set! s0-0 #t) + ) + ((!= f28-0 0.0) + (set! f30-0 f28-0) + ) + ) + (set! (-> s5-0 vector sv-208 x) (vector-dot sv-160 arg2)) + (cond + ((= sv-208 3) + (vector-! sv-192 sv-144 (the-as vector (&-> pp stack 368))) + (vector-flatten! sv-192 sv-192 arg1) + ) + (else + (vector--float*! sv-192 sv-160 arg2 (-> s5-0 vector sv-208 x)) + ) + ) + (if (< f28-0 0.0) + (set! (-> s5-0 vector sv-208 y) (- (vector-length sv-192))) + (set! (-> s5-0 vector sv-208 y) (vector-length sv-192)) + ) + ) + (set! (-> s5-0 vector sv-208 x) (- sv-128 (-> s5-0 vector sv-208 x))) + (set! sv-208 (+ sv-208 1)) + ) + (cond + ((and s0-0 (!= s4-0 -100000000.0)) + (dotimes (s4-1 4) + (dist-info-append + (the-as collide-los-dist-info (-> gp-0 vert-0)) + (the-as vector (+ (the-as uint s5-0) (* s4-1 16))) + ) + ) + #f + ) + ((< (-> s5-0 vector 3 y) 0.0) + (dotimes (s4-2 4) + (when (>= (-> s5-0 vector 3 y) (-> s5-0 vector s4-2 y)) + (set! (-> s5-0 vector s4-2 y) (- (-> s5-0 vector s4-2 y))) + (dist-info-append + (the-as collide-los-dist-info (-> gp-0 next-normal)) + (the-as vector (+ (the-as uint s5-0) (* s4-2 16))) + ) + ) + ) + #f + ) + (else + (dotimes (s4-3 4) + (if (>= (-> s5-0 vector s4-3 y) (-> s5-0 vector 3 y)) + (dist-info-append + (the-as collide-los-dist-info (-> gp-0 intersection)) + (the-as vector (+ (the-as uint s5-0) (* s4-3 16))) + ) + ) + ) + #f + ) + ) ) - (set! sv-208 0) - (while (< sv-208 4) - (cond - ((= sv-208 3) - (vector-! sv-160 sv-144 (the-as vector (&-> pp stack 368))) - (set! (-> s5-0 vector sv-208 z) 0.0) ) - (else - (vector-! sv-160 sv-144 (-> arg0 0 vertex sv-208)) - (set! - (-> s5-0 vector sv-208 z) - (vector-dot sv-160 (-> *camera* local-down)) - ) - (vector-! - sv-160 - (-> arg0 0 vertex sv-208) - (the-as vector (&-> pp stack 368)) - ) - ) - ) - (vector-flatten! sv-160 sv-160 (-> *camera* local-down)) - (vector-cross! sv-176 sv-160 arg2) - (let ((f28-0 (vector-dot sv-176 (-> *camera* local-down)))) - (cond - ((< (* f28-0 f30-0) 0.0) - (set! s0-0 #t) - ) - ((!= f28-0 0.0) - (set! f30-0 f28-0) - ) - ) - (set! (-> s5-0 vector sv-208 x) (vector-dot sv-160 arg2)) - (cond - ((= sv-208 3) - (vector-! sv-192 sv-144 (the-as vector (&-> pp stack 368))) - (vector-flatten! sv-192 sv-192 arg1) - ) - (else - (vector--float*! sv-192 sv-160 arg2 (-> s5-0 vector sv-208 x)) - ) - ) - (if (< f28-0 0.0) - (set! (-> s5-0 vector sv-208 y) (- (vector-length sv-192))) - (set! (-> s5-0 vector sv-208 y) (vector-length sv-192)) - ) - ) - (set! (-> s5-0 vector sv-208 x) (- sv-128 (-> s5-0 vector sv-208 x))) - (set! sv-208 (+ sv-208 1)) ) - (cond - ((and s0-0 (!= s4-0 -100000000.0)) - (dotimes (s4-1 4) - (dist-info-append - (the-as collide-los-dist-info (-> gp-0 vert-0)) - (the-as vector (+ (the-as uint s5-0) (* s4-1 16))) - ) - ) - #f - ) - ((< (-> s5-0 vector 3 y) 0.0) - (dotimes (s4-2 4) - (when (>= (-> s5-0 vector 3 y) (-> s5-0 vector s4-2 y)) - (set! (-> s5-0 vector s4-2 y) (- (-> s5-0 vector s4-2 y))) - (dist-info-append - (the-as collide-los-dist-info (-> gp-0 next-normal)) - (the-as vector (+ (the-as uint s5-0) (* s4-2 16))) - ) - ) - ) - #f - ) - (else - (dotimes (s4-3 4) - (if (>= (-> s5-0 vector s4-3 y) (-> s5-0 vector 3 y)) - (dist-info-append - (the-as collide-los-dist-info (-> gp-0 intersection)) - (the-as vector (+ (the-as uint s5-0) (* s4-3 16))) - ) - ) - ) - #f - ) - ) - ) ) - ) ) - ) ) (defun cam-los-spline-collide ((arg0 vector) (arg1 vector) (arg2 vector)) @@ -2056,1335 +1618,918 @@ (s4-0 *collide-cache*) (f30-0 2.0) ) - 0.0 - (vector-! s5-0 arg1 arg0) - (dummy-14 - s4-0 - arg0 - s5-0 - (-> *CAM_STRING-bank* los-coll-rad2) - #x4a09 - (the-as process #f) - (the-as int arg2) - ) - (let* ((f0-2 (vector-length s5-0)) - (f28-0 (cond - ((< f0-2 (-> *CAMERA-bank* min-detectable-velocity)) - 0.0 - ) - (else - (let* - ((f0-3 - (/ - (* - 3.0 - (- - (-> *CAM_STRING-bank* los-coll-rad2) - (-> *CAMERA-bank* collide-move-rad) - ) + 0.0 + (vector-! s5-0 arg1 arg0) + (dummy-14 s4-0 arg0 s5-0 (-> *CAM_STRING-bank* los-coll-rad2) #x4a09 (the-as process #f) (the-as int arg2)) + (let* ((f0-2 (vector-length s5-0)) + (f28-0 + (cond + ((< f0-2 (-> *CAMERA-bank* min-detectable-velocity)) + 0.0 + ) + (else + (let* ((f0-3 (/ (* 3.0 (- (-> *CAM_STRING-bank* los-coll-rad2) (-> *CAMERA-bank* collide-move-rad))) f0-2)) + (f0-4 (- 1.0 f0-3)) ) - f0-2 - ) - ) - (f0-4 (- 1.0 f0-3)) - ) - (fmin 1.0 (fmax 0.0 f0-4)) - ) + (fmin 1.0 (fmax 0.0 f0-4)) ) - ) + ) + ) + ) + (s3-0 (-> s4-0 tris)) + (s2-0 (new 'stack-no-clear 'vector)) + (s1-0 (new 'stack-no-clear 'vector)) ) - (s3-0 (-> s4-0 tris)) - (s2-0 (new 'stack-no-clear 'vector)) - (s1-0 (new 'stack-no-clear 'vector)) + (countdown (s4-1 (-> s4-0 num-tris)) + (let ((f0-7 (moving-sphere-triangle-intersect arg0 s5-0 (-> *CAM_STRING-bank* los-coll-rad2) (-> s3-0 0) s2-0 s1-0)) + ) + (cond + ((or (< f0-7 0.0) (< f28-0 f0-7)) + ) + ((< f0-7 f30-0) + (set! f30-0 f0-7) + ) + ) ) - (countdown (s4-1 (-> s4-0 num-tris)) - (let - ((f0-7 - (moving-sphere-triangle-intersect - arg0 - s5-0 - (-> *CAM_STRING-bank* los-coll-rad2) - (-> s3-0 0) - s2-0 - s1-0 - ) + (set! s3-0 (the-as (inline-array collide-cache-tri) (-> s3-0 1))) ) - ) - (cond - ((or (< f0-7 0.0) (< f28-0 f0-7)) - ) - ((< f0-7 f30-0) - (set! f30-0 f0-7) - ) - ) ) - (set! s3-0 (the-as (inline-array collide-cache-tri) (-> s3-0 1))) - ) + (if (= f30-0 2.0) + (set! f30-0 -1.0) + ) + f30-0 ) - (if (= f30-0 2.0) - (set! f30-0 -1.0) - ) - f30-0 - ) ) -(defbehavior - cam-los-setup-lateral camera-slave - ((arg0 clip-travel-vector-to-mesh-return-info) (arg1 vector) (arg2 vector)) +(defbehavior cam-los-setup-lateral camera-slave ((arg0 clip-travel-vector-to-mesh-return-info) (arg1 vector) (arg2 vector)) (cond - ((dist-info-valid? (the-as collide-los-dist-info (-> arg0 vert-0))) - (let ((f30-0 (-> arg0 vert-0 z)) - (f28-0 (-> arg0 vert-0 w)) - ) - (if - (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) - (set! f28-0 (fmax f28-0 (-> arg0 intersection w))) - ) - (if (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) - (set! f30-0 (fmin f30-0 (- (-> arg0 next-normal w)))) - ) - (cond - ((= (-> self los-state) (slave-los-state ccw)) - (if *display-cam-los-debug* - (format *stdcon* "straddle stick ccw~%") - ) - (vector-normalize! arg1 (+ f28-0 (-> *CAM_STRING-bank* los-coll-rad))) - ) - ((= (-> self los-state) (slave-los-state cw)) - (if *display-cam-los-debug* - (format *stdcon* "straddle stick cw~%") - ) - (vector-normalize! arg1 (- f30-0 (-> *CAM_STRING-bank* los-coll-rad))) - ) - ((and - (or - (< 0.01 (-> arg0 vert-1 y)) - (and - (dist-info-valid? - (the-as collide-los-dist-info (-> arg0 next-normal)) + ((dist-info-valid? (the-as collide-los-dist-info (-> arg0 vert-0))) + (let ((f30-0 (-> arg0 vert-0 z)) + (f28-0 (-> arg0 vert-0 w)) ) - (< 0.01 (the-as float (-> arg0 gap-poly))) - ) - ) - (or - (< (-> arg0 vert-1 x) -0.01) - (and - (dist-info-valid? - (the-as collide-los-dist-info (-> arg0 next-normal)) + (if (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) + (set! f28-0 (fmax f28-0 (-> arg0 intersection w))) ) - (< (the-as float (-> arg0 poly)) -0.01) - ) - ) - (and - (dist-info-valid? - (the-as collide-los-dist-info (-> arg0 intersection)) - ) - (or - (< (-> arg0 boundary-normal y) 0.01) - (< -0.01 (-> arg0 boundary-normal x)) - ) - ) - ) - (when - (not - (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) - ) - ) - (if - (not - (dist-info-valid? - (the-as collide-los-dist-info (-> arg0 intersection)) - ) - ) - (format #t "s diag ccw invalid cw~%") - ) - (if *display-cam-los-debug* - (format *stdcon* "straddle diagonal ccw~%") - ) - (set! (-> self los-state) (slave-los-state ccw)) - (vector-normalize! arg1 (+ f28-0 (-> *CAM_STRING-bank* los-coll-rad))) - ) - ((and - (or - (< 0.01 (-> arg0 vert-1 w)) - (and - (dist-info-valid? - (the-as collide-los-dist-info (-> arg0 intersection)) + (if (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) + (set! f30-0 (fmin f30-0 (- (-> arg0 next-normal w)))) ) - (< 0.01 (-> arg0 boundary-normal y)) + (cond + ((= (-> self los-state) (slave-los-state ccw)) + (if *display-cam-los-debug* + (format *stdcon* "straddle stick ccw~%") + ) + (vector-normalize! arg1 (+ f28-0 (-> *CAM_STRING-bank* los-coll-rad))) ) - ) - (or - (< (-> arg0 vert-1 z) -0.01) - (and - (dist-info-valid? - (the-as collide-los-dist-info (-> arg0 intersection)) + ((= (-> self los-state) (slave-los-state cw)) + (if *display-cam-los-debug* + (format *stdcon* "straddle stick cw~%") + ) + (vector-normalize! arg1 (- f30-0 (-> *CAM_STRING-bank* los-coll-rad))) + ) + ((and + (or + (< 0.01 (-> arg0 vert-1 y)) + (and + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) + (< 0.01 (the-as float (-> arg0 gap-poly))) + ) + ) + (or + (< (-> arg0 vert-1 x) -0.01) + (and + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) + (< (the-as float (-> arg0 poly)) -0.01) + ) + ) + (and + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) + (or (< (-> arg0 boundary-normal y) 0.01) (< -0.01 (-> arg0 boundary-normal x))) + ) + ) + (when (not (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal)))) + ) + (if (not (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection)))) + (format #t "s diag ccw invalid cw~%") + ) + (if *display-cam-los-debug* + (format *stdcon* "straddle diagonal ccw~%") + ) + (set! (-> self los-state) (slave-los-state ccw)) + (vector-normalize! arg1 (+ f28-0 (-> *CAM_STRING-bank* los-coll-rad))) + ) + ((and + (or + (< 0.01 (-> arg0 vert-1 w)) + (and + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) + (< 0.01 (-> arg0 boundary-normal y)) + ) + ) + (or + (< (-> arg0 vert-1 z) -0.01) + (and + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) + (< (-> arg0 boundary-normal x) -0.01) + ) + ) + (and + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) + (or (< (the-as float (-> arg0 gap-poly)) 0.01) (< -0.01 (the-as float (-> arg0 poly)))) + ) + ) + (if (not (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal)))) + (format #t "s diag cw invalid ccw~%") + ) + (when (not (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection)))) + ) + (if *display-cam-los-debug* + (format *stdcon* "straddle diagonal cw~%") + ) + (set! (-> self los-state) (slave-los-state cw)) + (vector-normalize! arg1 (- f30-0 (-> *CAM_STRING-bank* los-coll-rad))) + ) + ((< f28-0 (- f30-0)) + (if *display-cam-los-debug* + (format *stdcon* "straddle ccw~%") + ) + (set! (-> self los-state) (slave-los-state ccw)) + (vector-normalize! arg1 (+ f28-0 (-> *CAM_STRING-bank* los-coll-rad))) + ) + (else + (if *display-cam-los-debug* + (format *stdcon* "straddle cw~%") + ) + (set! (-> self los-state) (slave-los-state cw)) + (vector-normalize! arg1 (- f30-0 (-> *CAM_STRING-bank* los-coll-rad))) ) - (< (-> arg0 boundary-normal x) -0.01) - ) ) - (and - (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) - (or - (< (the-as float (-> arg0 gap-poly)) 0.01) - (< -0.01 (the-as float (-> arg0 poly))) - ) - ) - ) - (if - (not - (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) - ) - (format #t "s diag cw invalid ccw~%") - ) - (when - (not - (dist-info-valid? - (the-as collide-los-dist-info (-> arg0 intersection)) - ) - ) - ) - (if *display-cam-los-debug* - (format *stdcon* "straddle diagonal cw~%") - ) - (set! (-> self los-state) (slave-los-state cw)) - (vector-normalize! arg1 (- f30-0 (-> *CAM_STRING-bank* los-coll-rad))) ) - ((< f28-0 (- f30-0)) - (if *display-cam-los-debug* - (format *stdcon* "straddle ccw~%") - ) - (set! (-> self los-state) (slave-los-state ccw)) - (vector-normalize! arg1 (+ f28-0 (-> *CAM_STRING-bank* los-coll-rad))) + ) + ((and + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) + (< 0.01 (the-as float (-> arg0 gap-poly))) + (< (the-as float (-> arg0 poly)) -0.01) + (or (< (-> arg0 boundary-normal y) 0.01) (< -0.01 (-> arg0 boundary-normal x))) ) - (else - (if *display-cam-los-debug* - (format *stdcon* "straddle cw~%") - ) - (set! (-> self los-state) (slave-los-state cw)) - (vector-normalize! arg1 (- f30-0 (-> *CAM_STRING-bank* los-coll-rad))) + (if *display-cam-los-debug* + (format *stdcon* "diagonal ccw~%") + ) + (set! (-> self los-state) (slave-los-state ccw)) + (vector-normalize! arg1 (- (-> *CAM_STRING-bank* los-coll-rad) (-> arg0 next-normal z))) + ) + ((and + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) + (< 0.01 (-> arg0 boundary-normal y)) + (< (-> arg0 boundary-normal x) -0.01) + (or (< (the-as float (-> arg0 gap-poly)) 0.01) (< -0.01 (the-as float (-> arg0 poly)))) ) + (if *display-cam-los-debug* + (format *stdcon* "diagonal cw~%") + ) + (set! (-> self los-state) (slave-los-state cw)) + (vector-normalize! arg1 (- (-> arg0 intersection z) (-> *CAM_STRING-bank* los-coll-rad))) + ) + ((and + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) + (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) + ) + (set! (-> self los-state) (slave-los-state between)) + (vector-normalize! arg1 (the-as float 0.0001)) + ) + ((dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) + (if *display-cam-los-debug* + (format *stdcon* "regular cw~%") + ) + (set! (-> self los-state) (slave-los-state cw)) + (vector-normalize! arg1 (- (-> arg0 intersection z) (-> *CAM_STRING-bank* los-coll-rad))) + ) + ((dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) + (if *display-cam-los-debug* + (format *stdcon* "regular ccw~%") + ) + (set! (-> self los-state) (slave-los-state ccw)) + (vector-normalize! arg1 (- (-> *CAM_STRING-bank* los-coll-rad) (-> arg0 next-normal z))) + ) + (else + (set! (-> self los-state) (slave-los-state none)) + (vector-reset! arg1) ) - ) ) - ((and - (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) - (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) - (< 0.01 (the-as float (-> arg0 gap-poly))) - (< (the-as float (-> arg0 poly)) -0.01) - (or - (< (-> arg0 boundary-normal y) 0.01) - (< -0.01 (-> arg0 boundary-normal x)) - ) - ) - (if *display-cam-los-debug* - (format *stdcon* "diagonal ccw~%") - ) - (set! (-> self los-state) (slave-los-state ccw)) - (vector-normalize! - arg1 - (- (-> *CAM_STRING-bank* los-coll-rad) (-> arg0 next-normal z)) - ) - ) - ((and - (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) - (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) - (< 0.01 (-> arg0 boundary-normal y)) - (< (-> arg0 boundary-normal x) -0.01) - (or - (< (the-as float (-> arg0 gap-poly)) 0.01) - (< -0.01 (the-as float (-> arg0 poly))) - ) - ) - (if *display-cam-los-debug* - (format *stdcon* "diagonal cw~%") - ) - (set! (-> self los-state) (slave-los-state cw)) - (vector-normalize! - arg1 - (- (-> arg0 intersection z) (-> *CAM_STRING-bank* los-coll-rad)) - ) - ) - ((and - (dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) - (dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) - ) - (set! (-> self los-state) (slave-los-state between)) - (vector-normalize! arg1 (the-as float 0.0001)) - ) - ((dist-info-valid? (the-as collide-los-dist-info (-> arg0 intersection))) - (if *display-cam-los-debug* - (format *stdcon* "regular cw~%") - ) - (set! (-> self los-state) (slave-los-state cw)) - (vector-normalize! - arg1 - (- (-> arg0 intersection z) (-> *CAM_STRING-bank* los-coll-rad)) - ) - ) - ((dist-info-valid? (the-as collide-los-dist-info (-> arg0 next-normal))) - (if *display-cam-los-debug* - (format *stdcon* "regular ccw~%") - ) - (set! (-> self los-state) (slave-los-state ccw)) - (vector-normalize! - arg1 - (- (-> *CAM_STRING-bank* los-coll-rad) (-> arg0 next-normal z)) - ) - ) - (else - (set! (-> self los-state) (slave-los-state none)) - (vector-reset! arg1) - ) - ) (cond - ((= (vector-length arg1) 0.0) - (set! (-> arg0 vert-next y) (the-as float #f)) - #f - ) - (else - (vector-! (the-as vector (&-> arg0 found-boundary)) arg1 arg2) - (vector-normalize! - (the-as vector (&-> arg0 found-boundary)) - (the-as float 1.0) - ) - (let ((v0-45 #t)) - (set! (-> arg0 vert-next y) (the-as float v0-45)) - v0-45 + ((= (vector-length arg1) 0.0) + (set! (-> arg0 vert-next y) (the-as float #f)) + #f ) + (else + (vector-! (the-as vector (&-> arg0 found-boundary)) arg1 arg2) + (vector-normalize! (the-as vector (&-> arg0 found-boundary)) (the-as float 1.0)) + (let ((v0-45 #t)) + (set! (-> arg0 vert-next y) (the-as float v0-45)) + v0-45 + ) + ) ) - ) ) ;; WARN: Unsupported inline assembly instruction kind - [mula.s f2, f5] ;; WARN: Unsupported inline assembly instruction kind - [madda.s f3, f6] ;; WARN: Unsupported inline assembly instruction kind - [madd.s f2, f4, f7] -(defbehavior - cam-los-collide camera-slave - ((arg0 vector) - (arg1 vector) - (arg2 clip-travel-vector-to-mesh-return-info) - (arg3 int) - ) - (local-vars - (s1-3 int) - (s2-2 int) - (f2-1 float) - (sv-224 vector) - (sv-240 vector) - ) +(defbehavior cam-los-collide camera-slave ((arg0 vector) (arg1 vector) (arg2 clip-travel-vector-to-mesh-return-info) (arg3 int)) + (local-vars (s1-3 int) (s2-2 int) (f2-1 float) (sv-224 vector) (sv-240 vector)) (dist-info-init (the-as collide-los-dist-info (-> arg2 intersection))) (dist-info-init (the-as collide-los-dist-info (-> arg2 next-normal))) (dist-info-init (the-as collide-los-dist-info (-> arg2 vert-0))) (let ((s4-0 (new 'stack-no-clear 'vector)) (s2-0 (new 'stack-no-clear 'vector)) ) - (vector-normalize-copy! s2-0 arg1 (the-as float 1.0)) - (vector-flatten! s4-0 arg1 (-> *camera* local-down)) - (let ((s0-0 *collide-cache*) - (f26-0 (vector-length arg1)) - (f30-0 (vector-normalize-ret-len! s4-0 (the-as float 1.0))) - ) - (dummy-14 - s0-0 - arg0 - arg1 - (-> *CAM_STRING-bank* los-coll-rad) - #x4a09 - (the-as process #f) - arg3 - ) - (let ((s1-1 (-> s0-0 tris)) - (f28-0 (/ 2048.0 f26-0)) - (f26-1 (/ (+ -8192.0 f26-0) f26-0)) + (vector-normalize-copy! s2-0 arg1 (the-as float 1.0)) + (vector-flatten! s4-0 arg1 (-> *camera* local-down)) + (let ((s0-0 *collide-cache*) + (f26-0 (vector-length arg1)) + (f30-0 (vector-normalize-ret-len! s4-0 (the-as float 1.0))) ) - (if (< f26-1 0.0) - (set! f26-1 0.0) - ) - (if (< 1.0 f28-0) - (set! f28-0 1.0) - ) - (countdown (s0-1 (-> s0-0 num-tris)) - (set! sv-240 (new 'stack-no-clear 'vector)) - (set! sv-224 (new 'stack-no-clear 'vector)) - (let - ((f0-7 - (moving-sphere-triangle-intersect - arg0 - arg1 - (-> *CAM_STRING-bank* los-coll-rad) - (-> s1-1 0) - sv-240 - sv-224 - ) - ) - ) - (cond - ((or (< f0-7 0.0) (< 1.0 f0-7)) - ) - ((let ((f1-2 0.0)) - (let* ((v1-21 arg1) - (f2-0 (-> v1-21 x)) - (f3-0 (-> v1-21 y)) - (f4-0 (-> v1-21 z)) - (f5-0 (-> sv-224 x)) - (f6-0 (-> sv-224 y)) - (f7-0 (-> sv-224 z)) - ) - ; TODO - fix me! - ; (.mula.s f2-0 f5-0) - ; (.madda.s f3-0 f6-0) - ; (.madd.s f2-1 f4-0 f7-0) - ) - (< f1-2 f2-1) - ) - (when (< f28-0 f0-7) - (let* ((t1-2 (new 'stack-no-clear 'vector)) - (t0-2 (new 'stack-no-clear 'vector)) - (f24-0 - (moving-sphere-triangle-intersect - arg0 - arg1 - (-> *CAM_STRING-bank* los-coll-rad2) - (-> s1-1 0) - t0-2 - t1-2 - ) + (dummy-14 s0-0 arg0 arg1 (-> *CAM_STRING-bank* los-coll-rad) #x4a09 (the-as process #f) arg3) + (let ((s1-1 (-> s0-0 tris)) + (f28-0 (/ 2048.0 f26-0)) + (f26-1 (/ (+ -8192.0 f26-0) f26-0)) + ) + (if (< f26-1 0.0) + (set! f26-1 0.0) + ) + (if (< 1.0 f28-0) + (set! f28-0 1.0) + ) + (countdown (s0-1 (-> s0-0 num-tris)) + (set! sv-240 (new 'stack-no-clear 'vector)) + (set! sv-224 (new 'stack-no-clear 'vector)) + (let ((f0-7 + (moving-sphere-triangle-intersect arg0 arg1 (-> *CAM_STRING-bank* los-coll-rad) (-> s1-1 0) sv-240 sv-224) ) - ) - (los-cw-ccw s1-1 s2-0 s4-0 f30-0 arg2 sv-240 f24-0) - (when *debug-segment* + ) (cond - ((= f24-0 -100000000.0) - (let ((t9-11 cam-debug-add-los-tri) - (a0-13 s1-1) - (a2-7 - (new 'static 'vector - :x (the-as float #x80) - :w (the-as float #x80) - ) - ) - ) - (t9-11 a0-13 sv-240 a2-7) + ((or (< f0-7 0.0) (< 1.0 f0-7)) ) - ) - (else - (cam-debug-add-los-tri - s1-1 - sv-240 - (new 'static 'vector - :x (the-as float #x80) - :y (the-as float #x80) - :w (the-as float #x80) - ) - ) - ) - ) - ) - ) - ) - ) - ((< f0-7 f26-1) - (let* ((t1-4 (new 'stack-no-clear 'vector)) - (t0-4 (new 'stack-no-clear 'vector)) - (f24-1 - (moving-sphere-triangle-intersect - arg0 - arg1 - (-> *CAM_STRING-bank* los-coll-rad2) - (-> s1-1 0) - t0-4 - t1-4 - ) + ((let ((f1-2 0.0)) + (let* ((v1-21 arg1) + (f2-0 (-> v1-21 x)) + (f3-0 (-> v1-21 y)) + (f4-0 (-> v1-21 z)) + (f5-0 (-> sv-224 x)) + (f6-0 (-> sv-224 y)) + (f7-0 (-> sv-224 z)) + ) + ; (.mula.s f2-0 f5-0) + ; (.madda.s f3-0 f6-0) + ; (.madd.s f2-1 f4-0 f7-0) TODO - fix me + ) + (< f1-2 f2-1) ) - ) - (los-cw-ccw s1-1 s2-0 s4-0 f30-0 arg2 sv-240 f24-1) - (when *debug-segment* - (if (= f24-1 -100000000.0) - (cam-debug-add-los-tri - s1-1 - sv-240 - (new 'static 'vector :y (the-as float #x80) :w (the-as float #x80)) - ) - (cam-debug-add-los-tri - s1-1 - sv-240 - (new 'static 'vector :z (the-as float #x80) :w (the-as float #x80)) - ) - ) - ) - ) - ) - ) - ) - (set! s1-1 (the-as (inline-array collide-cache-tri) (-> s1-1 1))) - ) - ) - ) - ) - (let ((s4-1 (new 'stack-no-clear 'vector))) - 0.0 - (vector-cross! s4-1 arg1 (-> *camera* local-down)) - (cond - ((!= - (-> self los-tgt-spline-pt-incarnation) - (-> *camera* target-spline point (-> self los-tgt-spline-pt) incarnation) - ) - (when *display-cam-los-debug* - (format *stdcon* "emergency point jump~%") - (format 0 "emergency point jump~%") - ) - (set! (-> self los-tgt-spline-pt) (-> *camera* target-spline used-point)) - (set! - (-> self los-tgt-spline-pt-incarnation) - (-> *camera* target-spline point (-> self los-tgt-spline-pt) incarnation) - ) - (logior! (-> self options) 4096) - (set! - (-> self good-point quad) - (-> - *camera* - target-spline - point - (-> *camera* target-spline used-point) - position - quad - ) - ) - (set! (-> self los-last-pos quad) (-> self good-point quad)) - (when *debug-segment* - (let ((a1-22 (new 'stack-no-clear 'vector))) - (vector-! a1-22 (-> self good-point) (-> self string-trans)) - (cam-collision-record-save (-> self string-trans) a1-22 -3 'jump self) - ) - ) - (set! (-> self desired-pos quad) (-> self good-point quad)) - (set! (-> self string-trans quad) (-> self good-point quad)) - (vector-! - (-> self view-flat) - (-> self string-trans) - (-> *camera* tpos-curr-adj) - ) - (vector-flatten! - (-> self view-flat) - (-> self view-flat) - (-> *camera* local-down) - ) - (vector-reset! (-> self velocity)) - (let ((f0-11 (vector-length (-> self view-flat)))) - (if (< f0-11 (-> self min-z-override)) - (set! (-> self min-z-override) f0-11) - ) - ) - ) - (else - (let - ((f30-1 - (cam-los-spline-collide - (the-as - vector - (+ - (the-as uint (-> *camera* target-spline)) - (* 48 (-> *camera* target-spline end-point)) - ) - ) - arg0 - (the-as vector 4098) - ) - ) - ) - (cond - ((< f30-1 0.0) - (if *display-cam-los-debug* - (format *stdcon* "good ~f~%" f30-1) - ) - (set! (-> self los-tgt-spline-pt) (-> *camera* target-spline end-point)) - (set! - (-> self los-tgt-spline-pt-incarnation) - (-> - *camera* - target-spline - point - (-> self los-tgt-spline-pt) - incarnation - ) - ) - (set! (-> self los-last-pos quad) (-> arg0 quad)) - ) - ((begin - (if *display-cam-los-debug* - (format - *stdcon* - "looking vel ~M u ~f pt ~D" - (vector-length (-> self velocity)) - f30-1 - (-> self los-tgt-spline-pt) - ) - ) - (set! s2-2 (-> self los-tgt-spline-pt)) - (set! s1-3 -134250495) - (while (and (!= s2-2 -134250495) (begin - (set! - f30-1 - (cam-los-spline-collide - (the-as - vector - (+ - (the-as - uint - (-> *camera* target-spline) - ) - (* 48 s2-2) - ) - ) - arg0 - (the-as vector 4098) - ) - ) - (< f30-1 0.0) - ) - ) - (set! s1-3 s2-2) - (set! s2-2 (-> *camera* target-spline point s2-2 next)) - ) - (and - (= s2-2 (-> *camera* target-spline used-point)) - (!= (-> *camera* target-spline point s2-2 next) -134250495) - ) - ) - (when *display-cam-los-debug* - (format 0 "looking at used point~%") - (format *stdcon* " at used point~%") - ) - (set! - (-> self los-tgt-spline-pt) - (-> *camera* target-spline point s2-2 next) - ) - (set! - (-> self los-tgt-spline-pt-incarnation) - (-> - *camera* - target-spline - point - (-> self los-tgt-spline-pt) - incarnation - ) - ) - (logior! (-> self options) 4096) - (set! - (-> self good-point quad) - (-> *camera* target-spline point s2-2 position quad) - ) - (set! (-> self los-last-pos quad) (-> self good-point quad)) - (when *debug-segment* - (let ((a1-38 (new 'stack-no-clear 'vector))) - (vector-! a1-38 (-> self good-point) (-> self string-trans)) - (cam-collision-record-save (-> self string-trans) a1-38 -3 'jump self) - ) - ) - (set! (-> self desired-pos quad) (-> self good-point quad)) - (set! (-> self string-trans quad) (-> self good-point quad)) - (vector-! - (-> self view-flat) - (-> self string-trans) - (-> *camera* tpos-curr-adj) - ) - (vector-flatten! - (-> self view-flat) - (-> self view-flat) - (-> *camera* local-down) - ) - (vector-reset! (-> self velocity)) - (let ((f0-14 (vector-length (-> self view-flat)))) - (if (< f0-14 (-> self min-z-override)) - (set! (-> self min-z-override) f0-14) - ) - ) - ) - ((!= s1-3 -134250495) - (if *display-cam-los-debug* - (format *stdcon* " ok~%") - ) - (set! (-> self los-tgt-spline-pt) s1-3) - (set! - (-> self los-tgt-spline-pt-incarnation) - (-> - *camera* - target-spline - point - (-> self los-tgt-spline-pt) - incarnation - ) - ) - (set! (-> self los-last-pos quad) (-> arg0 quad)) - ) - (else - (if *display-cam-los-debug* - (format - *stdcon* - "~%failed u ~f cur ~D seen ~D tgt-pt ~D~%" - f30-1 - s2-2 - s1-3 - (-> self los-tgt-spline-pt) - ) - ) - (let ((s3-1 (new 'stack-no-clear 'vector))) - 0.0 - (vector-! - s3-1 - (-> self los-last-pos) - (the-as - vector - (+ - (the-as uint (-> *camera* target-spline)) - (* 48 (-> self los-tgt-spline-pt)) - ) - ) - ) - (let ((f28-1 (vector-length s3-1))) - (if (= f28-1 0.0) - (set! f28-1 0.4096) - ) - (let ((f30-2 (cond - ((and - (= (-> self string-vel-dir) 6) - (< - (-> *CAMERA-bank* min-detectable-velocity) - (vector-length (-> self velocity)) - ) + (when (< f28-0 f0-7) + (let* ((t1-2 (new 'stack-no-clear 'vector)) + (t0-2 (new 'stack-no-clear 'vector)) + (f24-0 + (moving-sphere-triangle-intersect arg0 arg1 (-> *CAM_STRING-bank* los-coll-rad2) (-> s1-1 0) t0-2 t1-2) ) - (fmin 1.0 (+ 0.001 f30-1)) + ) + (los-cw-ccw s1-1 s2-0 s4-0 f30-0 arg2 sv-240 f24-0) + (when *debug-segment* + (cond + ((= f24-0 -100000000.0) + (let ((t9-11 cam-debug-add-los-tri) + (a0-13 s1-1) + (a2-7 (new 'static 'vector :x (the-as float #x80) :w (the-as float #x80))) + ) + (t9-11 a0-13 sv-240 a2-7) + ) + ) + (else + (cam-debug-add-los-tri + s1-1 + sv-240 + (new 'static 'vector :x (the-as float #x80) :y (the-as float #x80) :w (the-as float #x80)) + ) ) - ((= (-> self string-vel-dir) 6) - (fmin 0.9999 f30-1) + ) + ) + ) + ) + ) + ((< f0-7 f26-1) + (let* ((t1-4 (new 'stack-no-clear 'vector)) + (t0-4 (new 'stack-no-clear 'vector)) + (f24-1 + (moving-sphere-triangle-intersect arg0 arg1 (-> *CAM_STRING-bank* los-coll-rad2) (-> s1-1 0) t0-4 t1-4) + ) + ) + (los-cw-ccw s1-1 s2-0 s4-0 f30-0 arg2 sv-240 f24-1) + (when *debug-segment* + (if (= f24-1 -100000000.0) + (cam-debug-add-los-tri s1-1 sv-240 (new 'static 'vector :y (the-as float #x80) :w (the-as float #x80))) + (cam-debug-add-los-tri s1-1 sv-240 (new 'static 'vector :z (the-as float #x80) :w (the-as float #x80))) + ) + ) + ) + ) + ) + ) + (set! s1-1 (the-as (inline-array collide-cache-tri) (-> s1-1 1))) + ) + ) + ) + ) + (let ((s4-1 (new 'stack-no-clear 'vector))) + 0.0 + (vector-cross! s4-1 arg1 (-> *camera* local-down)) + (cond + ((!= (-> self los-tgt-spline-pt-incarnation) + (-> *camera* target-spline point (-> self los-tgt-spline-pt) incarnation) + ) + (when *display-cam-los-debug* + (format *stdcon* "emergency point jump~%") + (format 0 "emergency point jump~%") + ) + (set! (-> self los-tgt-spline-pt) (-> *camera* target-spline used-point)) + (set! (-> self los-tgt-spline-pt-incarnation) + (-> *camera* target-spline point (-> self los-tgt-spline-pt) incarnation) + ) + (logior! (-> self options) 4096) + (set! (-> self good-point quad) + (-> *camera* target-spline point (-> *camera* target-spline used-point) position quad) + ) + (set! (-> self los-last-pos quad) (-> self good-point quad)) + (when *debug-segment* + (let ((a1-22 (new 'stack-no-clear 'vector))) + (vector-! a1-22 (-> self good-point) (-> self string-trans)) + (cam-collision-record-save (-> self string-trans) a1-22 -3 'jump self) + ) + ) + (set! (-> self desired-pos quad) (-> self good-point quad)) + (set! (-> self string-trans quad) (-> self good-point quad)) + (vector-! (-> self view-flat) (-> self string-trans) (-> *camera* tpos-curr-adj)) + (vector-flatten! (-> self view-flat) (-> self view-flat) (-> *camera* local-down)) + (vector-reset! (-> self velocity)) + (let ((f0-11 (vector-length (-> self view-flat)))) + (if (< f0-11 (-> self min-z-override)) + (set! (-> self min-z-override) f0-11) + ) + ) + ) + (else + (let ((f30-1 + (cam-los-spline-collide + (the-as vector (+ (the-as uint (-> *camera* target-spline)) (* 48 (-> *camera* target-spline end-point)))) + arg0 + (the-as vector 4098) + ) + ) + ) + (cond + ((< f30-1 0.0) + (if *display-cam-los-debug* + (format *stdcon* "good ~f~%" f30-1) + ) + (set! (-> self los-tgt-spline-pt) (-> *camera* target-spline end-point)) + (set! (-> self los-tgt-spline-pt-incarnation) + (-> *camera* target-spline point (-> self los-tgt-spline-pt) incarnation) + ) + (set! (-> self los-last-pos quad) (-> arg0 quad)) + ) + ((begin + (if *display-cam-los-debug* + (format + *stdcon* + "looking vel ~M u ~f pt ~D" + (vector-length (-> self velocity)) + f30-1 + (-> self los-tgt-spline-pt) + ) + ) + (set! s2-2 (-> self los-tgt-spline-pt)) + (set! s1-3 -134250495) + (while (and + (!= s2-2 -134250495) + (begin + (set! f30-1 + (cam-los-spline-collide + (the-as vector (+ (the-as uint (-> *camera* target-spline)) (* 48 s2-2))) + arg0 + (the-as vector 4098) + ) + ) + (< f30-1 0.0) + ) + ) + (set! s1-3 s2-2) + (set! s2-2 (-> *camera* target-spline point s2-2 next)) + ) + (and + (= s2-2 (-> *camera* target-spline used-point)) + (!= (-> *camera* target-spline point s2-2 next) -134250495) + ) + ) + (when *display-cam-los-debug* + (format 0 "looking at used point~%") + (format *stdcon* " at used point~%") + ) + (set! (-> self los-tgt-spline-pt) (-> *camera* target-spline point s2-2 next)) + (set! (-> self los-tgt-spline-pt-incarnation) + (-> *camera* target-spline point (-> self los-tgt-spline-pt) incarnation) + ) + (logior! (-> self options) 4096) + (set! (-> self good-point quad) (-> *camera* target-spline point s2-2 position quad)) + (set! (-> self los-last-pos quad) (-> self good-point quad)) + (when *debug-segment* + (let ((a1-38 (new 'stack-no-clear 'vector))) + (vector-! a1-38 (-> self good-point) (-> self string-trans)) + (cam-collision-record-save (-> self string-trans) a1-38 -3 'jump self) + ) + ) + (set! (-> self desired-pos quad) (-> self good-point quad)) + (set! (-> self string-trans quad) (-> self good-point quad)) + (vector-! (-> self view-flat) (-> self string-trans) (-> *camera* tpos-curr-adj)) + (vector-flatten! (-> self view-flat) (-> self view-flat) (-> *camera* local-down)) + (vector-reset! (-> self velocity)) + (let ((f0-14 (vector-length (-> self view-flat)))) + (if (< f0-14 (-> self min-z-override)) + (set! (-> self min-z-override) f0-14) + ) + ) + ) + ((!= s1-3 -134250495) + (if *display-cam-los-debug* + (format *stdcon* " ok~%") + ) + (set! (-> self los-tgt-spline-pt) s1-3) + (set! (-> self los-tgt-spline-pt-incarnation) + (-> *camera* target-spline point (-> self los-tgt-spline-pt) incarnation) + ) + (set! (-> self los-last-pos quad) (-> arg0 quad)) + ) + (else + (if *display-cam-los-debug* + (format *stdcon* "~%failed u ~f cur ~D seen ~D tgt-pt ~D~%" f30-1 s2-2 s1-3 (-> self los-tgt-spline-pt)) + ) + (let ((s3-1 (new 'stack-no-clear 'vector))) + 0.0 + (vector-! + s3-1 + (-> self los-last-pos) + (the-as vector (+ (the-as uint (-> *camera* target-spline)) (* 48 (-> self los-tgt-spline-pt)))) + ) + (let ((f28-1 (vector-length s3-1))) + (if (= f28-1 0.0) + (set! f28-1 0.4096) + ) + (let ((f30-2 (cond + ((and + (= (-> self string-vel-dir) 6) + (< (-> *CAMERA-bank* min-detectable-velocity) (vector-length (-> self velocity))) + ) + (fmin 1.0 (+ 0.001 f30-1)) + ) + ((= (-> self string-vel-dir) 6) + (fmin 0.9999 f30-1) + ) + (else + (fmax 0.001 (+ -0.001 f30-1)) + ) + ) + ) + ) + (let ((s2-3 (new 'stack-no-clear 'vector))) + (vector-! + s2-3 + (-> *camera* tpos-curr-adj) + (the-as vector (+ (the-as uint (-> *camera* target-spline)) (* 48 (-> self los-tgt-spline-pt)))) + ) + (vector-flatten! s2-3 s2-3 (-> *camera* local-down)) + (cond + ((and + (< (fabs (- (-> self desired-pos y) (-> self trans y))) 8192.0) + (< f28-1 (+ 1024.0 (-> self string-min-val z))) + (< (vector-length s2-3) 8192.0) + ) + (set! f30-2 0.0) ) - (else - (fmax 0.001 (+ -0.001 f30-1)) + ((< f28-1 (+ 1024.0 (-> self string-min-val z))) + ) + ((< (* f28-1 f30-2) (-> self string-min-val z)) + (set! f30-2 (/ (-> self string-min-val z) f28-1)) ) ) - ) + ) + (when (< 0.0 f30-2) + (vector-! s3-1 (-> *camera* tpos-curr) (-> *camera* tpos-old)) + (vector-! + (-> self good-point) + (-> self los-last-pos) + (the-as vector (+ (the-as uint (-> *camera* target-spline)) (* 48 (-> self los-tgt-spline-pt)))) + ) + (vector-float*! (-> self good-point) (-> self good-point) f30-2) + (vector+! + (-> self good-point) + (-> self good-point) + (the-as vector (+ (the-as uint (-> *camera* target-spline)) (* 48 (-> self los-tgt-spline-pt)))) + ) + (set! (-> self los-last-pos quad) (-> self good-point quad)) + (when *display-cam-los-debug* + (format 0 "going because u(~f) > 0 frame ~D~%" f30-2 (-> *display* base-frame-counter)) + (format *stdcon* " going because u(~f) > 0 frame ~D~%" f30-2 (-> *display* base-frame-counter)) + ) + (logior! (-> self options) 4096) + ) + ) + ) ) - (let ((s2-3 (new 'stack-no-clear 'vector))) - (vector-! - s2-3 - (-> *camera* tpos-curr-adj) - (the-as - vector - (+ - (the-as uint (-> *camera* target-spline)) - (* 48 (-> self los-tgt-spline-pt)) - ) ) - ) - (vector-flatten! s2-3 s2-3 (-> *camera* local-down)) - (cond - ((and - (< (fabs (- (-> self desired-pos y) (-> self trans y))) 8192.0) - (< f28-1 (+ 1024.0 (-> self string-min-val z))) - (< (vector-length s2-3) 8192.0) - ) - (set! f30-2 0.0) - ) - ((< f28-1 (+ 1024.0 (-> self string-min-val z))) - ) - ((< (* f28-1 f30-2) (-> self string-min-val z)) - (set! f30-2 (/ (-> self string-min-val z) f28-1)) - ) - ) ) - (when (< 0.0 f30-2) - (vector-! s3-1 (-> *camera* tpos-curr) (-> *camera* tpos-old)) - (vector-! - (-> self good-point) - (-> self los-last-pos) - (the-as - vector - (+ - (the-as uint (-> *camera* target-spline)) - (* 48 (-> self los-tgt-spline-pt)) - ) - ) - ) - (vector-float*! (-> self good-point) (-> self good-point) f30-2) - (vector+! - (-> self good-point) - (-> self good-point) - (the-as - vector - (+ - (the-as uint (-> *camera* target-spline)) - (* 48 (-> self los-tgt-spline-pt)) - ) - ) - ) - (set! (-> self los-last-pos quad) (-> self good-point quad)) - (when *display-cam-los-debug* - (format - 0 - "going because u(~f) > 0 frame ~D~%" - f30-2 - (-> *display* base-frame-counter) - ) - (format - *stdcon* - " going because u(~f) > 0 frame ~D~%" - f30-2 - (-> *display* base-frame-counter) - ) - ) - (logior! (-> self options) 4096) - ) - ) ) - ) ) - ) ) - ) + (if *display-cam-los-debug* + (format + *stdcon* + "los-last ~M ~M ~M~%" + (-> self los-last-pos x) + (-> self los-last-pos y) + (-> self los-last-pos z) + ) + ) + (cam-los-setup-lateral arg2 s4-1 arg1) ) - (if *display-cam-los-debug* - (format - *stdcon* - "los-last ~M ~M ~M~%" - (-> self los-last-pos x) - (-> self los-last-pos y) - (-> self los-last-pos z) - ) - ) - (cam-los-setup-lateral arg2 s4-1 arg1) - ) (cond - ((zero? (logand (-> self options) 1024)) - ) - ((= (-> self string-vel-dir) 5) - ) - ((and - (= (-> self string-vel-dir) 2) - (= (-> self los-state) (slave-los-state cw)) - ) - ) - ((and - (= (-> self string-vel-dir) 1) - (= (-> self los-state) (slave-los-state ccw)) - ) - ) - ) - (when *display-cam-los-debug* - (format *stdcon* "state ~S" (slave-los-state->string (-> self los-state))) - (cond - ((zero? (-> self string-vel-dir)) - (format *stdcon* " vzero") - ) - ((= (-> self string-vel-dir) 2) - (format *stdcon* " vcw") - ) - ((= (-> self string-vel-dir) 1) - (format *stdcon* " vccw") - ) - ((= (-> self string-vel-dir) 3) - (format *stdcon* " up") - ) - ((= (-> self string-vel-dir) 4) - (format *stdcon* " down") - ) - ((= (-> self string-vel-dir) 6) - (format *stdcon* " long") + ((zero? (logand (-> self options) 1024)) ) ((= (-> self string-vel-dir) 5) - (format *stdcon* " short") + ) + ((and (= (-> self string-vel-dir) 2) (= (-> self los-state) (slave-los-state cw))) + ) + ((and (= (-> self string-vel-dir) 1) (= (-> self los-state) (slave-los-state ccw))) ) ) - (format *stdcon* "~%") - ) + (when *display-cam-los-debug* + (format *stdcon* "state ~S" (slave-los-state->string (-> self los-state))) + (cond + ((zero? (-> self string-vel-dir)) + (format *stdcon* " vzero") + ) + ((= (-> self string-vel-dir) 2) + (format *stdcon* " vcw") + ) + ((= (-> self string-vel-dir) 1) + (format *stdcon* " vccw") + ) + ((= (-> self string-vel-dir) 3) + (format *stdcon* " up") + ) + ((= (-> self string-vel-dir) 4) + (format *stdcon* " down") + ) + ((= (-> self string-vel-dir) 6) + (format *stdcon* " long") + ) + ((= (-> self string-vel-dir) 5) + (format *stdcon* " short") + ) + ) + (format *stdcon* "~%") + ) (when *display-cam-los-info* - (dist-info-print - (the-as collide-los-dist-info (-> arg2 intersection)) - "cw " + (dist-info-print (the-as collide-los-dist-info (-> arg2 intersection)) "cw ") + (dist-info-print (the-as collide-los-dist-info (-> arg2 next-normal)) "ccw ") + (dist-info-print (the-as collide-los-dist-info (-> arg2 vert-0)) "strdl") ) - (dist-info-print - (the-as collide-los-dist-info (-> arg2 next-normal)) - "ccw " - ) - (dist-info-print (the-as collide-los-dist-info (-> arg2 vert-0)) "strdl") - ) (the-as symbol 0) ) (defbehavior cam-string-follow camera-slave () (let ((f30-0 (vector-length (-> self view-flat)))) - (cond - ((logtest? #x10000 (-> self options)) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (let ((s5-0 (new 'stack-no-clear 'vector))) - (vector-cross! s5-0 (-> self view-flat) (-> *camera* local-down)) - (vector-normalize! s5-0 (the-as float 1.0)) - (vector-! gp-0 (-> *camera* tpos-curr-adj) (-> *camera* tpos-old-adj)) - (vector-flatten! gp-0 gp-0 s5-0) - ) - (if (< (vector-dot gp-0 (-> self view-flat)) 0.0) - (vector-! (-> self view-flat) (-> self view-flat) gp-0) - ) - ) - ) - (else - (let ((v1-9 (new 'stack-no-clear 'vector))) - (vector-! v1-9 (-> *camera* tpos-curr-adj) (-> *camera* tpos-old-adj)) - (vector-! (-> self view-flat) (-> self view-flat) v1-9) - ) - ) - ) - (vector-flatten! - (-> self view-flat) - (-> self view-flat) - (-> *camera* local-down) - ) - (let* ((f28-0 (vector-length (-> self view-flat))) - (f0-3 (fmin (-> *camera* string-push-z) (-> self view-off z))) - (f26-0 (-> self view-off z)) - (f0-4 (fmin f0-3 (-> self min-z-override))) - ) (cond - ((logtest? (-> self options) #x4000) - (let ((a0-17 (new-stack-vector0))) - 0.0 - (vector-! a0-17 (-> *camera* tpos-curr-adj) (-> *camera* tpos-old-adj)) - (let ((f0-6 (vector-length a0-17))) - (set! - f0-4 - (lerp-clamp - (the-as float 28672.0) - (the-as float 32768.0) - (parameter-ease-sin-clamp (* 0.00081380206 (+ -409.6 f0-6))) - ) + ((logtest? #x10000 (-> self options)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-cross! s5-0 (-> self view-flat) (-> *camera* local-down)) + (vector-normalize! s5-0 (the-as float 1.0)) + (vector-! gp-0 (-> *camera* tpos-curr-adj) (-> *camera* tpos-old-adj)) + (vector-flatten! gp-0 gp-0 s5-0) + ) + (if (< (vector-dot gp-0 (-> self view-flat)) 0.0) + (vector-! (-> self view-flat) (-> self view-flat) gp-0) + ) ) + ) + (else + (let ((v1-9 (new 'stack-no-clear 'vector))) + (vector-! v1-9 (-> *camera* tpos-curr-adj) (-> *camera* tpos-old-adj)) + (vector-! (-> self view-flat) (-> self view-flat) v1-9) + ) ) - ) - (set! f26-0 f0-4) - (+! - (-> self fov) - (fmax -91.022224 (fmin 91.022224 (* 0.1 (- 17294.223 (-> self fov))))) - ) ) - (else - (+! - (-> self fov) - (fmax -182.04445 (fmin 182.04445 (* 0.1 (- 11650.845 (-> self fov))))) - ) - ) - ) - (cond - ((< f28-0 f0-4) - (vector-normalize! (-> self view-flat) f0-4) - ) - ((and - (< f30-0 f28-0) - (or - (= (-> self los-state) (slave-los-state ccw)) - (= (-> self los-state) (slave-los-state cw)) + (vector-flatten! (-> self view-flat) (-> self view-flat) (-> *camera* local-down)) + (let* ((f28-0 (vector-length (-> self view-flat))) + (f0-3 (fmin (-> *camera* string-push-z) (-> self view-off z))) + (f26-0 (-> self view-off z)) + (f0-4 (fmin f0-3 (-> self min-z-override))) + ) + (cond + ((logtest? (-> self options) #x4000) + (let ((a0-17 (new-stack-vector0))) + 0.0 + (vector-! a0-17 (-> *camera* tpos-curr-adj) (-> *camera* tpos-old-adj)) + (let ((f0-6 (vector-length a0-17))) + (set! f0-4 (lerp-clamp + (the-as float 28672.0) + (the-as float 32768.0) + (parameter-ease-sin-clamp (* 0.00081380206 (+ -409.6 f0-6))) + ) + ) + ) + ) + (set! f26-0 f0-4) + (+! (-> self fov) (fmax -91.022224 (fmin 91.022224 (* 0.1 (- 17294.223 (-> self fov)))))) + ) + (else + (+! (-> self fov) (fmax -182.04445 (fmin 182.04445 (* 0.1 (- 11650.845 (-> self fov)))))) + ) + ) + (cond + ((< f28-0 f0-4) + (vector-normalize! (-> self view-flat) f0-4) + ) + ((and + (< f30-0 f28-0) + (or (= (-> self los-state) (slave-los-state ccw)) (= (-> self los-state) (slave-los-state cw))) + ) + (vector-normalize! (-> self view-flat) f30-0) + ) + ((< f26-0 f28-0) + (vector-normalize! (-> self view-flat) f26-0) + (set! (-> self min-z-override) f26-0) + f26-0 + ) + (else + (set! (-> self min-z-override) f28-0) + f28-0 + ) ) - ) - (vector-normalize! (-> self view-flat) f30-0) ) - ((< f26-0 f28-0) - (vector-normalize! (-> self view-flat) f26-0) - (set! (-> self min-z-override) f26-0) - f26-0 - ) - (else - (set! (-> self min-z-override) f28-0) - f28-0 - ) - ) ) - ) ) (defbehavior cam-string-line-of-sight camera-slave () (let ((gp-0 (new 'stack-no-clear 'clip-travel-vector-to-mesh-return-info)) (s5-0 (new 'stack-no-clear 'vector)) ) - (new 'stack-no-clear 'vector) - (let ((f30-0 (vector-length (-> self view-flat)))) - (vector--float*! - s5-0 - (-> *camera* tpos-curr) - (-> *camera* local-down) - (-> *camera* target-height) - ) - (vector-! s5-0 s5-0 (-> self string-trans)) - (cam-los-collide (-> self string-trans) s5-0 gp-0 4098) - (when (-> gp-0 vert-next y) - (when - (or - (= (-> self los-state) (slave-los-state ccw)) - (= (-> self los-state) (slave-los-state cw)) - ) - (let ((a0-6 (new 'stack-no-clear 'vector))) - (vector-! a0-6 (-> *camera* tpos-curr) (-> *camera* tpos-old)) - (if - (and - (< (-> self string-min-val z) f30-0) - (< (-> *CAMERA-bank* min-detectable-velocity) (vector-length a0-6)) - ) - (set! f30-0 (+ -204.8 f30-0)) - ) - ) - ) - (if (< f30-0 (fmin (-> self string-min-val z) (-> self min-z-override))) - (set! f30-0 (fmin (-> self string-min-val z) (-> self min-z-override))) - ) - (if (< f30-0 (-> self min-z-override)) - (set! (-> self min-z-override) f30-0) - ) - (let ((s4-0 (new 'stack-no-clear 'vector)) - (s5-1 (new 'stack-no-clear 'vector)) - (s3-0 (new 'stack-no-clear 'vector)) - ) - 0.0 - (vector-flatten! - s4-0 - (the-as vector (&-> gp-0 found-boundary)) - (-> *camera* local-down) - ) - (vector-normalize! s4-0 (the-as float 1.0)) - (vector-normalize-copy! s5-1 (-> self view-flat) (the-as float 1.0)) - (let - ((f0-12 - (lerp-clamp - (the-as float 418.7022) - (the-as float 364.0889) - (/ - (- f30-0 (-> self string-min-val z)) - (- (-> self string-max-val z) (-> self string-min-val z)) - ) + (new 'stack-no-clear 'vector) + (let ((f30-0 (vector-length (-> self view-flat)))) + (vector--float*! s5-0 (-> *camera* tpos-curr) (-> *camera* local-down) (-> *camera* target-height)) + (vector-! s5-0 s5-0 (-> self string-trans)) + (cam-los-collide (-> self string-trans) s5-0 gp-0 4098) + (when (-> gp-0 vert-next y) + (when (or (= (-> self los-state) (slave-los-state ccw)) (= (-> self los-state) (slave-los-state cw))) + (let ((a0-6 (new 'stack-no-clear 'vector))) + (vector-! a0-6 (-> *camera* tpos-curr) (-> *camera* tpos-old)) + (if (and (< (-> self string-min-val z) f30-0) (< (-> *CAMERA-bank* min-detectable-velocity) (vector-length a0-6))) + (set! f30-0 (+ -204.8 f30-0)) + ) + ) ) - ) + (if (< f30-0 (fmin (-> self string-min-val z) (-> self min-z-override))) + (set! f30-0 (fmin (-> self string-min-val z) (-> self min-z-override))) + ) + (if (< f30-0 (-> self min-z-override)) + (set! (-> self min-z-override) f30-0) + ) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s5-1 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + 0.0 + (vector-flatten! s4-0 (the-as vector (&-> gp-0 found-boundary)) (-> *camera* local-down)) + (vector-normalize! s4-0 (the-as float 1.0)) + (vector-normalize-copy! s5-1 (-> self view-flat) (the-as float 1.0)) + (let ((f0-12 (lerp-clamp + (the-as float 418.7022) + (the-as float 364.0889) + (/ (- f30-0 (-> self string-min-val z)) (- (-> self string-max-val z) (-> self string-min-val z))) + ) + ) + ) + (matrix-from-two-vectors-max-angle-partial! (the-as matrix s3-0) s5-1 s4-0 f0-12 (the-as float 0.5)) + ) + (vector-matrix*! (-> self view-flat) (-> self view-flat) (the-as matrix s3-0)) + ) + (vector-normalize! (-> self view-flat) f30-0) ) - (matrix-from-two-vectors-max-angle-partial! - (the-as matrix s3-0) - s5-1 - s4-0 - f0-12 - (the-as float 0.5) - ) - ) - (vector-matrix*! - (-> self view-flat) - (-> self view-flat) - (the-as matrix s3-0) - ) ) - (vector-normalize! (-> self view-flat) f30-0) - ) ) - ) ) (defun cam-dist-analog-input ((arg0 int) (arg1 float)) (let ((f0-0 0.0)) - (cond - ((< arg0 28) - (set! f0-0 (- (fmin arg1 (* 0.083333336 (- 28.0 (the float arg0)) arg1)))) - ) - ((< 160 arg0) - (set! f0-0 (fmin arg1 (* 0.0125 (+ -160.0 (the float arg0)) arg1))) - ) + (cond + ((< arg0 28) + (set! f0-0 (- (fmin arg1 (* 0.083333336 (- 28.0 (the float arg0)) arg1)))) + ) + ((< 160 arg0) + (set! f0-0 (fmin arg1 (* 0.0125 (+ -160.0 (the float arg0)) arg1))) + ) + ) + f0-0 ) - f0-0 - ) ) (defbehavior cam-string-joystick camera-slave () (set! (-> self options) (logand -257 (-> self options))) - (let - ((f28-0 - (cam-dist-analog-input - (the-as int (-> *cpad-list* cpads 0 righty)) - (the-as float 0.05) - ) - ) - (f0-2 - (/ - (- (vector-length (-> self view-flat)) (-> self string-min-val z)) - (- (-> self string-max-val z) (-> self string-min-val z)) - ) - ) - (f30-0 (-> self view-off-param)) - ) - (if (-> self have-phony-joystick) - (set! f28-0 (* 0.05 (-> self phony-joystick-y))) - ) - (if - (and - (-> *camera* being-attacked) - (< - (- - (-> *display* base-frame-counter) - (the-as int (-> *camera* attack-start)) - ) - 75 - ) - ) - (set! f28-0 0.05) - ) - (if (!= f28-0 0.0) - (logior! (-> self options) 256) - ) - (let ((f26-0 (fmin 1.0 f0-2))) - (let ((f0-3 f26-0)) - (when (< f26-0 0.0) - (let - ((f0-6 - (/ - (- (-> self string-min-val z) (vector-length (-> self view-flat))) - (* 0.5 (-> self string-min-val z)) - ) - ) + (let ((f28-0 (cam-dist-analog-input (the-as int (-> *cpad-list* cpads 0 righty)) (the-as float 0.05))) + (f0-2 (/ (- (vector-length (-> self view-flat)) (-> self string-min-val z)) + (- (-> self string-max-val z) (-> self string-min-val z)) + ) + ) + (f30-0 (-> self view-off-param)) ) - (set! f0-3 (fmin 0.75 f0-6)) - ) - ) - (let ((f1-10 (-> self string-min-val y)) - (f2-3 (-> self string-max-val y)) - ) - (set! (-> self view-off y) (lerp f1-10 f2-3 f0-3)) - ) - ) - (when (< f26-0 0.0) - (let ((v1-28 (new 'stack-no-clear 'vector))) - (vector-! v1-28 (-> self string-trans) (-> *camera* tpos-curr-adj)) - (let - ((f0-12 - (- - (- (vector-dot v1-28 (-> *camera* local-down))) - (-> *camera* target-height) - ) - ) - ) - (set! - (-> self view-off y) - (fmin (-> *camera* stringCliffHeight) (fmax f0-12 (-> self view-off y))) - ) - ) - ) - ) - (let ((f0-16 (fmax 0.0 f26-0))) - (cond - ((logtest? (-> self options) #x4000) - ) - ((not *camera-read-analog*) - ) - ((and (>= 0.0 f28-0) (>= 0.0 f0-16)) - ) - ((and (>= f28-0 0.0) (>= f0-16 1.0)) - ) - ((and - (< 0.0 f28-0) - (or - (= (-> self los-state) (slave-los-state ccw)) - (= (-> self los-state) (slave-los-state cw)) - ) - ) - ) - ((< (* 0.05 (- 1.0 f0-16)) f28-0) - (let ((f0-17 (+ f0-16 (* 0.05 (- 1.0 f0-16))))) - (set! (-> self view-off-param) (fmax (-> self view-off-param) f0-17)) - (vector-normalize! - (-> self view-flat) - (lerp (-> self string-min-val z) (-> self string-max-val z) f0-17) - ) - ) - ) - ((< f28-0 (* 0.05 (- f0-16))) - (set! (-> self view-off-param) (+ f0-16 (* 0.05 (- f0-16)))) - ) - ((< 0.0 f28-0) - (let ((f0-19 (+ f0-16 (* f28-0 (-> *display* time-adjust-ratio))))) - (set! (-> self view-off-param) (fmax (-> self view-off-param) f0-19)) - (vector-normalize! - (-> self view-flat) - (lerp (-> self string-min-val z) (-> self string-max-val z) f0-19) - ) - ) - ) - ((< f28-0 0.0) - (set! - (-> self view-off-param) - (+ f0-16 (* f28-0 (-> *display* time-adjust-ratio))) - ) - ) - ) - ) - ) - (if (= f28-0 0.0) - (set! (-> self view-off z) (-> self string-max-val z)) - (set! - (-> self view-off z) - (lerp - (-> self string-min-val z) - (-> self string-max-val z) - (-> self view-off-param) - ) - ) - ) - (if (-> *camera* being-attacked) - (set! (-> self view-off-param) f30-0) - ) - ) - (when *camera-read-analog* - (let - ((f0-29 - (analog-input - (the-as int (-> *cpad-list* cpads 0 rightx)) - (the-as float 128.0) - (the-as float 32.0) - (the-as float 110.0) - (* 21845.334 (-> *display* seconds-per-frame)) - ) - ) - (s4-0 (new-stack-matrix0)) - (gp-2 (new-stack-vector0)) - (s5-2 (new-stack-vector0)) - ) (if (-> self have-phony-joystick) - (set! - f0-29 - (* 21845.334 (-> self phony-joystick-x) (-> *display* seconds-per-frame)) - ) - ) - (cond - ((and (= (-> self los-state) (slave-los-state ccw)) (< 0.0 f0-29)) - (let - ((f0-34 - (fmax - (-> self string-min-val z) - (fmin (-> self string-max-val z) (vector-length (-> self view-flat))) + (set! f28-0 (* 0.05 (-> self phony-joystick-y))) + ) + (if (and + (-> *camera* being-attacked) + (< (- (-> *display* base-frame-counter) (the-as int (-> *camera* attack-start))) 75) + ) + (set! f28-0 0.05) + ) + (if (!= f28-0 0.0) + (logior! (-> self options) 256) + ) + (let ((f26-0 (fmin 1.0 f0-2))) + (let ((f0-3 f26-0)) + (when (< f26-0 0.0) + (let ((f0-6 + (/ (- (-> self string-min-val z) (vector-length (-> self view-flat))) (* 0.5 (-> self string-min-val z))) + ) + ) + (set! f0-3 (fmin 0.75 f0-6)) + ) ) - ) - ) - (set! - f0-29 - (* - 21845.334 - (+ 0.1 (/ (-> self string-min-val z) f0-34)) - (-> *display* seconds-per-frame) - ) - ) - ) - ) - ((and (= (-> self los-state) (slave-los-state cw)) (< f0-29 0.0)) - (let - ((f0-40 - (fmax - (-> self string-min-val z) - (fmin (-> self string-max-val z) (vector-length (-> self view-flat))) + (let ((f1-10 (-> self string-min-val y)) + (f2-3 (-> self string-max-val y)) + ) + (set! (-> self view-off y) (lerp f1-10 f2-3 f0-3)) ) - ) ) - (set! - f0-29 - (* - -21845.334 - (+ 0.1 (/ (-> self string-min-val z) f0-40)) - (-> *display* seconds-per-frame) - ) + (when (< f26-0 0.0) + (let ((v1-28 (new 'stack-no-clear 'vector))) + (vector-! v1-28 (-> self string-trans) (-> *camera* tpos-curr-adj)) + (let ((f0-12 (- (- (vector-dot v1-28 (-> *camera* local-down))) (-> *camera* target-height)))) + (set! (-> self view-off y) (fmin (-> *camera* stringCliffHeight) (fmax f0-12 (-> self view-off y)))) + ) + ) ) - ) - ) - ) - (cond - ((!= f0-29 0.0) - (logior! (-> self options) 256) - (matrix-axis-angle! s4-0 (-> *camera* local-down) f0-29) - (vector-matrix*! (-> self view-flat) (-> self view-flat) s4-0) - ) - ((logtest? (-> self options) 1) - (vector-normalize-copy! gp-2 (-> self view-flat) (the-as float 1.0)) - (vector-flatten! - s5-2 - (-> *camera* tgt-rot-mat vector 2) - (-> *camera* local-down) - ) - (vector-normalize! s5-2 (the-as float -1.0)) - (matrix-from-two-vectors-max-angle-partial! - s4-0 - gp-2 - s5-2 - (* 10922.667 (-> *display* seconds-per-frame)) - (the-as float 0.05) - ) - (vector-matrix*! (-> self view-flat) (-> self view-flat) s4-0) - ) - ) - (when (logtest? (-> self options) #x4000) - (vector-normalize-copy! gp-2 (-> self view-flat) (the-as float 1.0)) - (vector-flatten! - s5-2 - (-> *camera* tgt-rot-mat vector 2) - (-> *camera* local-down) - ) - (vector-normalize! s5-2 (the-as float -1.0)) - (let ((f0-47 (acos (vector-dot s5-2 gp-2)))) - (when (and (< 8192.0 f0-47) (< f0-47 32585.955)) - (matrix-from-two-vectors-max-angle! - s4-0 - gp-2 - s5-2 - (fmin 546.13336 (* 0.5 (+ -8192.0 f0-47))) + (let ((f0-16 (fmax 0.0 f26-0))) + (cond + ((logtest? (-> self options) #x4000) + ) + ((not *camera-read-analog*) + ) + ((and (>= 0.0 f28-0) (>= 0.0 f0-16)) + ) + ((and (>= f28-0 0.0) (>= f0-16 1.0)) + ) + ((and + (< 0.0 f28-0) + (or (= (-> self los-state) (slave-los-state ccw)) (= (-> self los-state) (slave-los-state cw))) + ) + ) + ((< (* 0.05 (- 1.0 f0-16)) f28-0) + (let ((f0-17 (+ f0-16 (* 0.05 (- 1.0 f0-16))))) + (set! (-> self view-off-param) (fmax (-> self view-off-param) f0-17)) + (vector-normalize! (-> self view-flat) (lerp (-> self string-min-val z) (-> self string-max-val z) f0-17)) + ) + ) + ((< f28-0 (* 0.05 (- f0-16))) + (set! (-> self view-off-param) (+ f0-16 (* 0.05 (- f0-16)))) + ) + ((< 0.0 f28-0) + (let ((f0-19 (+ f0-16 (* f28-0 (-> *display* time-adjust-ratio))))) + (set! (-> self view-off-param) (fmax (-> self view-off-param) f0-19)) + (vector-normalize! (-> self view-flat) (lerp (-> self string-min-val z) (-> self string-max-val z) f0-19)) + ) + ) + ((< f28-0 0.0) + (set! (-> self view-off-param) (+ f0-16 (* f28-0 (-> *display* time-adjust-ratio)))) + ) + ) + ) + ) + (if (= f28-0 0.0) + (set! (-> self view-off z) (-> self string-max-val z)) + (set! (-> self view-off z) + (lerp (-> self string-min-val z) (-> self string-max-val z) (-> self view-off-param)) + ) + ) + (if (-> *camera* being-attacked) + (set! (-> self view-off-param) f30-0) + ) + ) + (when *camera-read-analog* + (let ((f0-29 (analog-input + (the-as int (-> *cpad-list* cpads 0 rightx)) + (the-as float 128.0) + (the-as float 32.0) + (the-as float 110.0) + (* 21845.334 (-> *display* seconds-per-frame)) + ) + ) + (s4-0 (new-stack-matrix0)) + (gp-2 (new-stack-vector0)) + (s5-2 (new-stack-vector0)) + ) + (if (-> self have-phony-joystick) + (set! f0-29 (* 21845.334 (-> self phony-joystick-x) (-> *display* seconds-per-frame))) + ) + (cond + ((and (= (-> self los-state) (slave-los-state ccw)) (< 0.0 f0-29)) + (let ((f0-34 + (fmax (-> self string-min-val z) (fmin (-> self string-max-val z) (vector-length (-> self view-flat)))) + ) + ) + (set! f0-29 (* 21845.334 (+ 0.1 (/ (-> self string-min-val z) f0-34)) (-> *display* seconds-per-frame))) + ) + ) + ((and (= (-> self los-state) (slave-los-state cw)) (< f0-29 0.0)) + (let ((f0-40 + (fmax (-> self string-min-val z) (fmin (-> self string-max-val z) (vector-length (-> self view-flat)))) + ) + ) + (set! f0-29 (* -21845.334 (+ 0.1 (/ (-> self string-min-val z) f0-40)) (-> *display* seconds-per-frame))) + ) + ) + ) + (cond + ((!= f0-29 0.0) + (logior! (-> self options) 256) + (matrix-axis-angle! s4-0 (-> *camera* local-down) f0-29) + (vector-matrix*! (-> self view-flat) (-> self view-flat) s4-0) + ) + ((logtest? (-> self options) 1) + (vector-normalize-copy! gp-2 (-> self view-flat) (the-as float 1.0)) + (vector-flatten! s5-2 (-> *camera* tgt-rot-mat vector 2) (-> *camera* local-down)) + (vector-normalize! s5-2 (the-as float -1.0)) + (matrix-from-two-vectors-max-angle-partial! + s4-0 + gp-2 + s5-2 + (* 10922.667 (-> *display* seconds-per-frame)) + (the-as float 0.05) + ) + (vector-matrix*! (-> self view-flat) (-> self view-flat) s4-0) + ) + ) + (when (logtest? (-> self options) #x4000) + (vector-normalize-copy! gp-2 (-> self view-flat) (the-as float 1.0)) + (vector-flatten! s5-2 (-> *camera* tgt-rot-mat vector 2) (-> *camera* local-down)) + (vector-normalize! s5-2 (the-as float -1.0)) + (let ((f0-47 (acos (vector-dot s5-2 gp-2)))) + (when (and (< 8192.0 f0-47) (< f0-47 32585.955)) + (matrix-from-two-vectors-max-angle! s4-0 gp-2 s5-2 (fmin 546.13336 (* 0.5 (+ -8192.0 f0-47)))) + (vector-matrix*! (-> self view-flat) (-> self view-flat) s4-0) + ) + ) ) - (vector-matrix*! (-> self view-flat) (-> self view-flat) s4-0) - ) ) - ) ) - ) ) (defbehavior cam-string-find-hidden camera-slave () - (let ((s4-0 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (let ((s4-0 (new 'stack-no-clear 'collide-tri-result)) (s5-0 (new 'stack-no-clear 'vector)) (gp-0 (new 'stack-no-clear 'vector)) ) - (vector--float*! - s5-0 - (-> *camera* tpos-curr-adj) - (-> *camera* local-down) - (-> *camera* target-height) - ) - (vector-! s5-0 s5-0 (-> self string-trans)) - (cond - ((< - (dummy-10 - *collide-cache* - (-> self string-trans) - s5-0 - (the-as float 40.96) - #x4a09 - (the-as process #f) - s4-0 - 2 + (vector--float*! s5-0 (-> *camera* tpos-curr-adj) (-> *camera* local-down) (-> *camera* target-height)) + (vector-! s5-0 s5-0 (-> self string-trans)) + (cond + ((< (dummy-10 *collide-cache* (-> self string-trans) s5-0 (the-as float 40.96) #x4a09 (the-as process #f) s4-0 2) + 0.0 + ) + (set! (-> self time-dist-too-far) (the-as uint 0)) + 0 ) - 0.0 + ((< (-> self time-dist-too-far) (the-as uint 600)) + (+! (-> self time-dist-too-far) 1) + ) + ((cam-string-find-position-rel! gp-0) + (cam-string-set-position-rel! gp-0) + (set! (-> self time-dist-too-far) (the-as uint 0)) + 0 + ) + (else + (format 0 "camera position search failed~%") + (set! (-> self time-dist-too-far) (the-as uint 0)) + 0 + ) ) - (set! (-> self time-dist-too-far) (the-as uint 0)) - 0 - ) - ((< (-> self time-dist-too-far) (the-as uint 600)) - (+! (-> self time-dist-too-far) 1) - ) - ((cam-string-find-position-rel! gp-0) - (cam-string-set-position-rel! gp-0) - (set! (-> self time-dist-too-far) (the-as uint 0)) - 0 - ) - (else - (format 0 "camera position search failed~%") - (set! (-> self time-dist-too-far) (the-as uint 0)) - 0 - ) ) - ) (none) ) @@ -3398,577 +2543,444 @@ (local-vars (sv-240 float) (sv-256 float)) (vector-! (-> self velocity) (-> self desired-pos) (-> self string-trans)) (if *display-cam-los-debug* - (format *stdcon* "vel ~M~%" (vector-length (-> self velocity))) - ) + (format *stdcon* "vel ~M~%" (vector-length (-> self velocity))) + ) (let ((s5-1 (new 'stack-no-clear 'vector)) (s4-1 (new 'stack-no-clear 'vector)) (gp-1 (new 'stack-no-clear 'vector)) (s3-0 (new 'stack-no-clear 'vector)) ) - (vector-! s3-0 (-> *camera* tpos-curr-adj) (-> *camera* tpos-old-adj)) - (vector+float*! s5-1 (-> self velocity) s3-0 (the-as float 0.5)) - (vector-normalize! s5-1 (the-as float 1.0)) - (vector-normalize-copy! s4-1 (-> self view-flat) (the-as float 1.0)) - (vector-cross! gp-1 s4-1 s5-1) - (cond - ((and - (< - (vector-length (-> self velocity)) - (-> *CAMERA-bank* min-detectable-velocity) + (vector-! s3-0 (-> *camera* tpos-curr-adj) (-> *camera* tpos-old-adj)) + (vector+float*! s5-1 (-> self velocity) s3-0 (the-as float 0.5)) + (vector-normalize! s5-1 (the-as float 1.0)) + (vector-normalize-copy! s4-1 (-> self view-flat) (the-as float 1.0)) + (vector-cross! gp-1 s4-1 s5-1) + (cond + ((and + (< (vector-length (-> self velocity)) (-> *CAMERA-bank* min-detectable-velocity)) + (< (vector-length s3-0) (-> *CAMERA-bank* min-detectable-velocity)) + ) + (set! (-> self string-vel-dir) (the-as uint 0)) + 0 ) - (< (vector-length s3-0) (-> *CAMERA-bank* min-detectable-velocity)) + ((< (cos (the-as float 5461.3335)) (vector-dot (-> *camera* local-down) s5-1)) + (set! (-> self string-vel-dir) (the-as uint 4)) + ) + ((< (vector-dot (-> *camera* local-down) s5-1) (- (cos (the-as float 5461.3335)))) + (set! (-> self string-vel-dir) (the-as uint 3)) + ) + ((< (cos (the-as float 5461.3335)) (vector-dot s4-1 s5-1)) + (set! (-> self string-vel-dir) (the-as uint 6)) + ) + ((< (vector-dot s4-1 s5-1) (- (cos (the-as float 5461.3335)))) + (set! (-> self string-vel-dir) (the-as uint 5)) + ) + ((< (vector-dot (-> *camera* local-down) gp-1) 0.0) + (set! (-> self string-vel-dir) (the-as uint 1)) + ) + (else + (set! (-> self string-vel-dir) (the-as uint 2)) + ) ) - (set! (-> self string-vel-dir) (the-as uint 0)) - 0 - ) - ((< - (cos (the-as float 5461.3335)) - (vector-dot (-> *camera* local-down) s5-1) - ) - (set! (-> self string-vel-dir) (the-as uint 4)) - ) - ((< - (vector-dot (-> *camera* local-down) s5-1) - (- (cos (the-as float 5461.3335))) - ) - (set! (-> self string-vel-dir) (the-as uint 3)) - ) - ((< (cos (the-as float 5461.3335)) (vector-dot s4-1 s5-1)) - (set! (-> self string-vel-dir) (the-as uint 6)) - ) - ((< (vector-dot s4-1 s5-1) (- (cos (the-as float 5461.3335)))) - (set! (-> self string-vel-dir) (the-as uint 5)) - ) - ((< (vector-dot (-> *camera* local-down) gp-1) 0.0) - (set! (-> self string-vel-dir) (the-as uint 1)) - ) - (else - (set! (-> self string-vel-dir) (the-as uint 2)) - ) ) - ) 0.0 (let ((f30-2 1.0) (s5-2 (new-stack-vector0)) (gp-2 0) ) - (let ((s4-2 (new 'stack-no-clear 'collide-mesh-cache-tri)) - (s3-1 (new 'stack-no-clear 'vector)) - ) - (when *debug-segment* - (if - (>= - (-> *CAMERA-bank* min-detectable-velocity) - (vector-length (-> self velocity)) - ) - (cam-collision-record-save - (-> self string-trans) - (-> self velocity) - -1 - 'no-hit - self - ) - ) - ) - (while - (and - (< 0.01 f30-2) - (and - (< - (-> *CAMERA-bank* min-detectable-velocity) - (vector-length (-> self velocity)) - ) - (< gp-2 4) - ) - ) - (vector-float*! s5-2 (-> self velocity) f30-2) - (if *debug-segment* - (cam-collision-record-save (-> self string-trans) s5-2 gp-2 'normal self) - ) - (let ((f28-1 (if (logtest? (-> self options) 32) - (dummy-10 - *collide-cache* - (-> self string-trans) - s5-2 - (-> *CAMERA-bank* collide-move-rad) - #x4a09 - (the-as process #f) - s4-2 - 2 - ) - -100000000.0 - ) - ) - ) - (when *display-cam-los-debug* - (let ((s2-0 format) - (s1-0 *stdcon*) - (s0-0 "vp ~f vr ~f r ~f ta ~f~%") - ) - (set! sv-240 (vector-length s5-2)) - (set! sv-256 f30-2) - (let ((t0-3 (/ (vector-length s5-2) f30-2)) - (t1-1 f28-1) - ) - (s2-0 s1-0 s0-0 sv-240 sv-256 t0-3 t1-1) - ) - ) - ) - (cond - ((>= f28-1 0.0) - (let* ((f1-7 (fmax 0.01 (/ 40.96 (vector-length s5-2)))) - (f0-24 (fmax 0.0 (- f28-1 f1-7))) - ) - (vector+float*! - (-> self string-trans) - (-> self string-trans) - s5-2 - f0-24 + (let ((s4-2 (new 'stack-no-clear 'collide-tri-result)) + (s3-1 (new 'stack-no-clear 'vector)) ) - ) - (vector-! s3-1 (-> self string-trans) (-> s4-2 normal)) - (vector-normalize! s3-1 (the-as float 1.0)) - (vector-flatten! (-> self velocity) (-> self velocity) s3-1) - (set! f30-2 (- f30-2 (* f30-2 f28-1))) - (+! gp-2 1) + (when *debug-segment* + (if (>= (-> *CAMERA-bank* min-detectable-velocity) (vector-length (-> self velocity))) + (cam-collision-record-save (-> self string-trans) (-> self velocity) -1 'no-hit self) + ) ) - (else - (vector+! (-> self string-trans) (-> self string-trans) s5-2) - (set! f30-2 0.0) + (while (and + (< 0.01 f30-2) + (and (< (-> *CAMERA-bank* min-detectable-velocity) (vector-length (-> self velocity))) (< gp-2 4)) + ) + (vector-float*! s5-2 (-> self velocity) f30-2) + (if *debug-segment* + (cam-collision-record-save (-> self string-trans) s5-2 gp-2 'normal self) + ) + (let ((f28-1 (if (logtest? (-> self options) 32) + (dummy-10 + *collide-cache* + (-> self string-trans) + s5-2 + (-> *CAMERA-bank* collide-move-rad) + #x4a09 + (the-as process #f) + s4-2 + 2 + ) + -100000000.0 + ) + ) + ) + (when *display-cam-los-debug* + (let ((s2-0 format) + (s1-0 *stdcon*) + (s0-0 "vp ~f vr ~f r ~f ta ~f~%") + ) + (set! sv-240 (vector-length s5-2)) + (set! sv-256 f30-2) + (let ((t0-3 (/ (vector-length s5-2) f30-2)) + (t1-1 f28-1) + ) + (s2-0 s1-0 s0-0 sv-240 sv-256 t0-3 t1-1) + ) + ) + ) + (cond + ((>= f28-1 0.0) + (let* ((f1-7 (fmax 0.01 (/ 40.96 (vector-length s5-2)))) + (f0-24 (fmax 0.0 (- f28-1 f1-7))) + ) + (vector+float*! (-> self string-trans) (-> self string-trans) s5-2 f0-24) + ) + (vector-! s3-1 (-> self string-trans) (-> s4-2 intersect)) + (vector-normalize! s3-1 (the-as float 1.0)) + (vector-flatten! (-> self velocity) (-> self velocity) s3-1) + (set! f30-2 (- f30-2 (* f30-2 f28-1))) + (+! gp-2 1) + ) + (else + (vector+! (-> self string-trans) (-> self string-trans) s5-2) + (set! f30-2 0.0) + ) + ) + ) ) - ) ) - ) - ) - (cond - ((zero? gp-2) - (set! (-> self options) (logand -1025 (-> self options))) - (if *display-cam-los-debug* - (format *stdcon* "not blocked~%") - ) - ) - (else - (logior! (-> self options) 1024) - (if *display-cam-los-debug* - (format *stdcon* "blocked ~D ~f~%" gp-2 f30-2) - ) - (let ((gp-3 (new-stack-vector0)) - (f30-3 (vector-length (-> self view-flat))) + (cond + ((zero? gp-2) + (set! (-> self options) (logand -1025 (-> self options))) + (if *display-cam-los-debug* + (format *stdcon* "not blocked~%") ) - (vector-! gp-3 (-> self string-trans) (-> *camera* tpos-curr-adj)) - (vector-flatten! gp-3 gp-3 (-> *camera* local-down)) - (let ((f28-3 (vector-length gp-3))) - (cond - ((< f28-3 f30-3) - (vector-normalize-copy! (-> self view-flat) gp-3 f28-3) - (set! (-> self min-z-override) f28-3) - f28-3 - ) - (else - (vector-normalize-copy! (-> self view-flat) gp-3 f30-3) - ) - ) ) + (else + (logior! (-> self options) 1024) + (if *display-cam-los-debug* + (format *stdcon* "blocked ~D ~f~%" gp-2 f30-2) + ) + (let ((gp-3 (new-stack-vector0)) + (f30-3 (vector-length (-> self view-flat))) + ) + (vector-! gp-3 (-> self string-trans) (-> *camera* tpos-curr-adj)) + (vector-flatten! gp-3 gp-3 (-> *camera* local-down)) + (let ((f28-3 (vector-length gp-3))) + (cond + ((< f28-3 f30-3) + (vector-normalize-copy! (-> self view-flat) gp-3 f28-3) + (set! (-> self min-z-override) f28-3) + f28-3 + ) + (else + (vector-normalize-copy! (-> self view-flat) gp-3 f30-3) + ) + ) + ) + ) + ) ) - ) ) - ) (when *display-cam-los-debug* - (let ((a0-43 (new-stack-vector0))) - (vector-! a0-43 (-> self desired-pos) (-> self string-trans)) - (format *stdcon* "vel ~M~%" (vector-length a0-43)) + (let ((a0-43 (new-stack-vector0))) + (vector-! a0-43 (-> self desired-pos) (-> self string-trans)) + (format *stdcon* "vel ~M~%" (vector-length a0-43)) + ) ) - ) ) (defbehavior cam-string-code camera-slave () (if *debug-segment* - (cam-debug-reset-coll-tri) - ) + (cam-debug-reset-coll-tri) + ) (cam-string-follow) (if (logtest? (-> self options) 512) - (cam-string-line-of-sight) - ) + (cam-string-line-of-sight) + ) (if (not (paused?)) - (cam-string-joystick) - ) + (cam-string-joystick) + ) (let ((gp-0 (new-stack-vector0))) - (vector--float*! - gp-0 - (-> self view-flat) - (-> *camera* local-down) - (+ (-> *camera* target-height) (-> self view-off y)) + (vector--float*! + gp-0 + (-> self view-flat) + (-> *camera* local-down) + (+ (-> *camera* target-height) (-> self view-off y)) + ) + (vector+! (-> self desired-pos) (-> *camera* tpos-curr-adj) gp-0) ) - (vector+! (-> self desired-pos) (-> *camera* tpos-curr-adj) gp-0) - ) (if (logtest? (-> self options) 64) - (cam-string-find-hidden) - ) + (cam-string-find-hidden) + ) (cond - ((logtest? (-> self options) 4096) - (when *debug-segment* - (let ((a1-1 (new 'stack-no-clear 'vector))) - (vector-! a1-1 (-> self good-point) (-> self string-trans)) - (cam-collision-record-save (-> self string-trans) a1-1 -2 'jump self) + ((logtest? (-> self options) 4096) + (when *debug-segment* + (let ((a1-1 (new 'stack-no-clear 'vector))) + (vector-! a1-1 (-> self good-point) (-> self string-trans)) + (cam-collision-record-save (-> self string-trans) a1-1 -2 'jump self) + ) + ) + (set! (-> self options) (logand -4097 (-> self options))) + (set! (-> self desired-pos quad) (-> self good-point quad)) + (cam-string-move) + (vector-! (-> self view-flat) (-> self string-trans) (-> *camera* tpos-curr-adj)) + (vector-flatten! (-> self view-flat) (-> self view-flat) (-> *camera* local-down)) + (let ((f0-2 (vector-length (-> self view-flat)))) + (if (< f0-2 (-> self min-z-override)) + (set! (-> self min-z-override) f0-2) + ) + ) + ) + (else + (cam-string-move) ) - ) - (set! (-> self options) (logand -4097 (-> self options))) - (set! (-> self desired-pos quad) (-> self good-point quad)) - (cam-string-move) - (vector-! - (-> self view-flat) - (-> self string-trans) - (-> *camera* tpos-curr-adj) - ) - (vector-flatten! - (-> self view-flat) - (-> self view-flat) - (-> *camera* local-down) - ) - (let ((f0-2 (vector-length (-> self view-flat)))) - (if (< f0-2 (-> self min-z-override)) - (set! (-> self min-z-override) f0-2) - ) - ) ) - (else - (cam-string-move) - ) - ) (TODO-RENAME-17 - (-> self position-spline) - (-> self string-trans) - (the-as float 0.04096) - (the-as float 4096.0) - #t - ) + (-> self position-spline) + (-> self string-trans) + (the-as float 0.04096) + (the-as float 4096.0) + #t + ) (cond - ((and (logtest? (-> self options) #x4000) (logtest? (-> self options) 256)) - (TODO-RENAME-21 - (-> self position-spline) - (-> self trans) - (the-as float 102.4) - (the-as float 4096.0) + ((and (logtest? (-> self options) #x4000) (logtest? (-> self options) 256)) + (TODO-RENAME-21 (-> self position-spline) (-> self trans) (the-as float 102.4) (the-as float 4096.0)) ) - ) - ((logtest? (-> self options) #x4000) - (TODO-RENAME-21 - (-> self position-spline) - (-> self trans) - (the-as float 40.96) - (the-as float 4096.0) + ((logtest? (-> self options) #x4000) + (TODO-RENAME-21 (-> self position-spline) (-> self trans) (the-as float 40.96) (the-as float 4096.0)) ) - ) - ((logtest? (-> self options) 256) - (TODO-RENAME-21 - (-> self position-spline) - (-> self trans) - (the-as float 102.4) - (the-as float 2457.6) + ((logtest? (-> self options) 256) + (TODO-RENAME-21 (-> self position-spline) (-> self trans) (the-as float 102.4) (the-as float 2457.6)) ) + (else + (TODO-RENAME-21 (-> self position-spline) (-> self trans) (the-as float 20.48) (the-as float 2457.6)) + ) ) - (else - (TODO-RENAME-21 - (-> self position-spline) - (-> self trans) - (the-as float 20.48) - (the-as float 2457.6) - ) - ) - ) ) (defbehavior set-string-parms camera-slave () (when (not (-> self string-val-locked)) - (set! (-> self string-min-val quad) (-> *camera* string-min value quad)) - (let ((v0-0 (-> self string-max-val))) - (set! (-> v0-0 quad) (-> *camera* string-max value quad)) - v0-0 + (set! (-> self string-min-val quad) (-> *camera* string-min value quad)) + (let ((v0-0 (-> self string-max-val))) + (set! (-> v0-0 quad) (-> *camera* string-max value quad)) + v0-0 + ) ) - ) ) (defstate cam-string (camera-slave) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('teleport) - (let ((gp-0 (new-stack-vector0))) - (cam-string-find-position-rel! gp-0) - (cam-string-set-position-rel! gp-0) + (case arg2 + (('teleport) + (let ((gp-0 (new-stack-vector0))) + (cam-string-find-position-rel! gp-0) + (cam-string-set-position-rel! gp-0) + ) ) - ) - (('joystick) - (set! (-> self phony-joystick-x) (the-as float (-> arg3 param 0))) - (set! (-> self phony-joystick-y) (the-as float (-> arg3 param 1))) - (let ((v0-1 (the-as object #t))) - (set! (-> self have-phony-joystick) (the-as symbol v0-1)) - v0-1 - ) - ) - (('set-dist) - (cond - ((-> arg3 param 0) - (set! (-> self string-val-locked) #t) - (set! - (-> self string-min-val quad) - (-> (the-as vector (-> arg3 param 0)) quad) - ) - (set! - (-> self string-max-val quad) - (-> (the-as vector (-> arg3 param 1)) quad) - ) - (set! - (-> self string-max-val x) - (fmax (-> self string-max-val x) (-> self string-min-val x)) - ) - (set! - (-> self string-max-val y) - (fmax (-> self string-max-val y) (-> self string-min-val y)) - ) - (let - ((f0-7 (fmax (-> self string-max-val z) (-> self string-min-val z)))) - (set! (-> self string-max-val z) f0-7) - f0-7 - ) + (('joystick) + (set! (-> self phony-joystick-x) (the-as float (-> arg3 param 0))) + (set! (-> self phony-joystick-y) (the-as float (-> arg3 param 1))) + (let ((v0-1 (the-as object #t))) + (set! (-> self have-phony-joystick) (the-as symbol v0-1)) + v0-1 + ) ) - (else - (set! (-> self string-val-locked) #f) - #f - ) - ) - ) - (('blocked-side?) - (-> self los-state) - ) - (else - (cam-standard-event-handler arg0 arg1 arg2 arg3) - ) - ) - ) - :enter - (behavior () - (when (not (-> self enter-has-run)) - (set-string-parms) - (set! *camera-base-mode* cam-string) - (set! (-> self string-vel-dir) (the-as uint 0)) - (set! (-> self fov) 11650.845) - (set! (-> self los-tgt-spline-pt) (-> *camera* target-spline end-point)) - (set! - (-> self los-tgt-spline-pt-incarnation) - (-> *camera* target-spline point (-> self los-tgt-spline-pt) incarnation) - ) - (set! (-> self min-z-override) (-> self string-max-val z)) - (if (!= (-> *camera* outro-t-step) 0.0) - (set! (-> self min-z-override) (-> self string-min-val z)) - ) - (let ((gp-0 (new-stack-vector0))) - 0.0 - (set! (-> self view-off-param) (-> *camera* view-off-param-save)) - (set! (-> self view-off x) 0.0) - (let ((f0-7 (-> self string-min-val y)) - (f1-1 (-> self string-max-val y)) - ) - (set! (-> self view-off y) (lerp f0-7 f1-1 (-> self view-off-param))) - ) - (set! - (-> self view-off z) - (lerp - (-> self string-min-val z) - (-> self string-max-val z) - (-> self view-off-param) - ) - ) - (let ((f30-0 (cond - ((!= (-> *camera* outro-t-step) 0.0) - (curve-get-pos! - gp-0 - (-> *camera* outro-exit-value) - (-> *camera* outro-curve) - ) - (vector-! gp-0 gp-0 (-> *camera* tpos-curr-adj)) - (vector-flatten! - (-> self view-flat) - gp-0 - (-> *camera* local-down) - ) - (vector-length (-> self view-flat)) - ) - (else - (vector-flatten! - (-> self view-flat) - (-> self tracking inv-mat vector 2) - (-> *camera* local-down) - ) - (vector-negate! (-> self view-flat) (-> self view-flat)) - 0.0 - ) - ) - ) - ) - (let ((f1-4 (fmin (-> *camera* string-push-z) (-> self min-z-override))) - (f0-17 (-> self view-off z)) - ) + (('set-dist) (cond - ((< f30-0 f1-4) - (set! f30-0 f1-4) - ) - ((< f0-17 f30-0) - (set! f30-0 f0-17) - ) - ) - ) - (vector-normalize! (-> self view-flat) f30-0) - (let - ((f30-1 - (/ - (- f30-0 (-> self string-min-val z)) - (- (-> self string-max-val z) (-> self string-min-val z)) - ) - ) - ) - (if (< 1.0 f30-1) - (set! f30-1 1.0) - ) - (if (< f30-1 0.0) - (set! f30-1 0.0) - ) - (let ((f0-22 (-> self string-min-val y)) - (f1-7 (-> self string-max-val y)) - ) - (set! (-> self view-off y) (lerp f0-22 f1-7 f30-1)) - ) - (set! - (-> self view-off z) - (lerp (-> self string-min-val z) (-> self string-max-val z) f30-1) - ) - ) - ) - ) - (vector--float*! - (-> self desired-pos) - (-> self view-flat) - (-> *camera* local-down) - (+ (-> *camera* target-height) (-> self view-off y)) - ) - (vector+! - (-> self desired-pos) - (-> self desired-pos) - (-> *camera* tpos-curr-adj) - ) - (set! (-> self string-trans quad) (-> self desired-pos quad)) - (vector-reset! (-> self velocity)) - (let ((s4-0 (new 'stack-no-clear 'collide-mesh-cache-tri)) - (s5-0 (new 'stack-no-clear 'vector)) - (gp-1 (new 'stack-no-clear 'vector)) - ) - (vector--float*! - s5-0 - (-> *camera* tpos-curr-adj) - (-> *camera* local-down) - (-> *camera* target-height) - ) - (vector-! gp-1 (-> self string-trans) s5-0) - (let - ((f0-31 - (dummy-10 - *collide-cache* - s5-0 - gp-1 - (-> *CAMERA-bank* collide-move-rad) - #x4a09 - (the-as process #f) - s4-0 - 4098 - ) - ) - ) - (when (and (< 0.0 f0-31) (< f0-31 1.0)) - (vector-float*! gp-1 gp-1 f0-31) - (vector-flatten! (-> self view-flat) gp-1 (-> *camera* local-down)) - (let ((f0-32 (vector-length (-> self view-flat)))) - (cond - ((< f0-32 8192.0) - (let ((gp-2 (new-stack-vector0))) - (cam-string-find-position-rel! gp-2) - (cam-string-set-position-rel! gp-2) - ) + ((-> arg3 param 0) + (set! (-> self string-val-locked) #t) + (set! (-> self string-min-val quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self string-max-val quad) (-> (the-as vector (-> arg3 param 1)) quad)) + (set! (-> self string-max-val x) (fmax (-> self string-max-val x) (-> self string-min-val x))) + (set! (-> self string-max-val y) (fmax (-> self string-max-val y) (-> self string-min-val y))) + (let ((f0-7 (fmax (-> self string-max-val z) (-> self string-min-val z)))) + (set! (-> self string-max-val z) f0-7) + f0-7 + ) ) (else - (if (< f0-32 (-> self min-z-override)) - (set! (-> self min-z-override) f0-32) + (set! (-> self string-val-locked) #f) + #f ) - (let - ((f30-2 - (/ - (- f0-32 (-> self string-min-val z)) - (- (-> self string-max-val z) (-> self string-min-val z)) - ) - ) - ) - (if (< 1.0 f30-2) - (set! f30-2 1.0) - ) - (if (< f30-2 0.0) - (set! f30-2 0.0) - ) - (let ((f0-36 (-> self string-min-val y)) - (f1-16 (-> self string-max-val y)) - ) - (set! (-> self view-off y) (lerp f0-36 f1-16 f30-2)) - ) - (set! - (-> self view-off z) - (lerp (-> self string-min-val z) (-> self string-max-val z) f30-2) - ) - ) - (vector--float*! - (-> self desired-pos) - (-> self view-flat) - (-> *camera* local-down) - (+ (-> *camera* target-height) (-> self view-off y)) - ) - (vector+! - (-> self desired-pos) - (-> self desired-pos) - (-> *camera* tpos-curr-adj) - ) - (set! (-> self string-trans quad) (-> self desired-pos quad)) - (vector-reset! (-> self velocity)) - ) ) - ) ) + (('blocked-side?) + (-> self los-state) + ) + (else + (cam-standard-event-handler arg0 arg1 arg2 arg3) + ) ) - ) - (set! (-> self trans quad) (-> self string-trans quad)) - (set! (-> self los-last-pos quad) (-> self string-trans quad)) - (TODO-RENAME-10 (-> self position-spline) (-> self string-trans)) - (set! (-> self blend-from-type) (the-as uint 2)) - (set! (-> self blend-to-type) (the-as uint 2)) ) - (none) - ) + :enter + (behavior () + (when (not (-> self enter-has-run)) + (set-string-parms) + (set! *camera-base-mode* cam-string) + (set! (-> self string-vel-dir) (the-as uint 0)) + (set! (-> self fov) 11650.845) + (set! (-> self los-tgt-spline-pt) (-> *camera* target-spline end-point)) + (set! (-> self los-tgt-spline-pt-incarnation) + (-> *camera* target-spline point (-> self los-tgt-spline-pt) incarnation) + ) + (set! (-> self min-z-override) (-> self string-max-val z)) + (if (!= (-> *camera* outro-t-step) 0.0) + (set! (-> self min-z-override) (-> self string-min-val z)) + ) + (let ((gp-0 (new-stack-vector0))) + 0.0 + (set! (-> self view-off-param) (-> *camera* view-off-param-save)) + (set! (-> self view-off x) 0.0) + (let ((f0-7 (-> self string-min-val y)) + (f1-1 (-> self string-max-val y)) + ) + (set! (-> self view-off y) (lerp f0-7 f1-1 (-> self view-off-param))) + ) + (set! (-> self view-off z) + (lerp (-> self string-min-val z) (-> self string-max-val z) (-> self view-off-param)) + ) + (let ((f30-0 (cond + ((!= (-> *camera* outro-t-step) 0.0) + (curve-get-pos! gp-0 (-> *camera* outro-exit-value) (-> *camera* outro-curve)) + (vector-! gp-0 gp-0 (-> *camera* tpos-curr-adj)) + (vector-flatten! (-> self view-flat) gp-0 (-> *camera* local-down)) + (vector-length (-> self view-flat)) + ) + (else + (vector-flatten! (-> self view-flat) (-> self tracking inv-mat vector 2) (-> *camera* local-down)) + (vector-negate! (-> self view-flat) (-> self view-flat)) + 0.0 + ) + ) + ) + ) + (let ((f1-4 (fmin (-> *camera* string-push-z) (-> self min-z-override))) + (f0-17 (-> self view-off z)) + ) + (cond + ((< f30-0 f1-4) + (set! f30-0 f1-4) + ) + ((< f0-17 f30-0) + (set! f30-0 f0-17) + ) + ) + ) + (vector-normalize! (-> self view-flat) f30-0) + (let ((f30-1 (/ (- f30-0 (-> self string-min-val z)) (- (-> self string-max-val z) (-> self string-min-val z))))) + (if (< 1.0 f30-1) + (set! f30-1 1.0) + ) + (if (< f30-1 0.0) + (set! f30-1 0.0) + ) + (let ((f0-22 (-> self string-min-val y)) + (f1-7 (-> self string-max-val y)) + ) + (set! (-> self view-off y) (lerp f0-22 f1-7 f30-1)) + ) + (set! (-> self view-off z) (lerp (-> self string-min-val z) (-> self string-max-val z) f30-1)) + ) + ) + ) + (vector--float*! + (-> self desired-pos) + (-> self view-flat) + (-> *camera* local-down) + (+ (-> *camera* target-height) (-> self view-off y)) + ) + (vector+! (-> self desired-pos) (-> self desired-pos) (-> *camera* tpos-curr-adj)) + (set! (-> self string-trans quad) (-> self desired-pos quad)) + (vector-reset! (-> self velocity)) + (let ((s4-0 (new 'stack-no-clear 'collide-tri-result)) + (s5-0 (new 'stack-no-clear 'vector)) + (gp-1 (new 'stack-no-clear 'vector)) + ) + (vector--float*! s5-0 (-> *camera* tpos-curr-adj) (-> *camera* local-down) (-> *camera* target-height)) + (vector-! gp-1 (-> self string-trans) s5-0) + (let ((f0-31 + (dummy-10 *collide-cache* s5-0 gp-1 (-> *CAMERA-bank* collide-move-rad) #x4a09 (the-as process #f) s4-0 4098) + ) + ) + (when (and (< 0.0 f0-31) (< f0-31 1.0)) + (vector-float*! gp-1 gp-1 f0-31) + (vector-flatten! (-> self view-flat) gp-1 (-> *camera* local-down)) + (let ((f0-32 (vector-length (-> self view-flat)))) + (cond + ((< f0-32 8192.0) + (let ((gp-2 (new-stack-vector0))) + (cam-string-find-position-rel! gp-2) + (cam-string-set-position-rel! gp-2) + ) + ) + (else + (if (< f0-32 (-> self min-z-override)) + (set! (-> self min-z-override) f0-32) + ) + (let ((f30-2 (/ (- f0-32 (-> self string-min-val z)) (- (-> self string-max-val z) (-> self string-min-val z))))) + (if (< 1.0 f30-2) + (set! f30-2 1.0) + ) + (if (< f30-2 0.0) + (set! f30-2 0.0) + ) + (let ((f0-36 (-> self string-min-val y)) + (f1-16 (-> self string-max-val y)) + ) + (set! (-> self view-off y) (lerp f0-36 f1-16 f30-2)) + ) + (set! (-> self view-off z) (lerp (-> self string-min-val z) (-> self string-max-val z) f30-2)) + ) + (vector--float*! + (-> self desired-pos) + (-> self view-flat) + (-> *camera* local-down) + (+ (-> *camera* target-height) (-> self view-off y)) + ) + (vector+! (-> self desired-pos) (-> self desired-pos) (-> *camera* tpos-curr-adj)) + (set! (-> self string-trans quad) (-> self desired-pos quad)) + (vector-reset! (-> self velocity)) + ) + ) + ) + ) + ) + ) + (set! (-> self trans quad) (-> self string-trans quad)) + (set! (-> self los-last-pos quad) (-> self string-trans quad)) + (TODO-RENAME-10 (-> self position-spline) (-> self string-trans)) + (set! (-> self blend-from-type) (the-as uint 2)) + (set! (-> self blend-to-type) (the-as uint 2)) + ) + (none) + ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) - (cam-slave-go cam-free-floating) + (if (zero? (logand (-> *camera* master-options) 2)) + (cam-slave-go cam-free-floating) + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (when (not (paused?)) - (set-string-parms) - (cam-string-code) - (TODO-RENAME-9 (-> self position-spline)) - (set! (-> self have-phony-joystick) #f) - ) - (suspend) + (while #t + (when (not (paused?)) + (set-string-parms) + (cam-string-code) + (TODO-RENAME-9 (-> self position-spline)) + (set! (-> self have-phony-joystick) #f) + ) + (suspend) + ) + (none) ) - (none) - ) ) (deftype cam-stick-bank (basic) @@ -3983,43 +2995,33 @@ ) -(define - *CAM_STICK-bank* - (new 'static 'cam-stick-bank - :max-z (meters 30.0) - :min-z (meters 5.0) - :max-y (meters 15.0) - :min-y (meters 2.0) - ) - ) +(define *CAM_STICK-bank* (new 'static 'cam-stick-bank + :max-z (meters 30.0) + :min-z (meters 5.0) + :max-y (meters 15.0) + :min-y (meters 2.0) + ) + ) (defbehavior cam-stick-code camera-slave () (cam-calc-follow! (-> self tracking) (-> self trans) #t) (let ((gp-0 (new-stack-vector0))) - (vector-flatten! - (-> self view-flat) - (-> self view-flat) - (-> *camera* local-down) + (vector-flatten! (-> self view-flat) (-> self view-flat) (-> *camera* local-down)) + (vector-normalize! (-> self view-flat) (-> self view-off z)) + (vector-! gp-0 (-> self view-flat) (vector-float*! gp-0 (-> *camera* local-down) (-> self view-off y))) + (vector+! (-> self desired-pos) (-> self tracking follow-pt) gp-0) ) - (vector-normalize! (-> self view-flat) (-> self view-off z)) - (vector-! - gp-0 - (-> self view-flat) - (vector-float*! gp-0 (-> *camera* local-down) (-> self view-off y)) - ) - (vector+! (-> self desired-pos) (-> self tracking follow-pt) gp-0) - ) (let ((v1-3 (new-stack-vector0)) (gp-1 (new-stack-vector0)) ) - (vector-! v1-3 (-> self desired-pos) (-> self trans)) - (vector-float*! v1-3 v1-3 0.2) - (vector-! gp-1 v1-3 (-> self velocity)) - (if (< 409.6 (vector-length gp-1)) - (vector-normalize! gp-1 (the-as float 409.6)) + (vector-! v1-3 (-> self desired-pos) (-> self trans)) + (vector-float*! v1-3 v1-3 0.2) + (vector-! gp-1 v1-3 (-> self velocity)) + (if (< 409.6 (vector-length gp-1)) + (vector-normalize! gp-1 (the-as float 409.6)) + ) + (vector+! (-> self velocity) (-> self velocity) gp-1) ) - (vector+! (-> self velocity) (-> self velocity) gp-1) - ) 0.0 (let ((f30-1 1.0) (gp-2 (new-stack-vector0)) @@ -4027,92 +3029,76 @@ (s4-0 4) (s2-0 0) ) - (let ((s3-0 (new 'stack-no-clear 'collide-mesh-cache-tri))) - (while - (and - (< 0.01 f30-1) - (and - (< - (-> *CAMERA-bank* min-detectable-velocity) - (vector-length (-> self velocity)) - ) - (> s4-0 0) - ) - ) - (+! s4-0 -1) - (vector-float*! gp-2 (-> self velocity) f30-1) - (let ((f28-0 (if (logtest? (-> self options) 32) - (dummy-10 - *collide-cache* - (-> self trans) - gp-2 - (-> *CAMERA-bank* collide-move-rad) - #x4a09 - (the-as process #f) - s3-0 - 2 - ) - -100000000.0 - ) + (let ((s3-0 (new 'stack-no-clear 'collide-tri-result))) + (while (and + (< 0.01 f30-1) + (and (< (-> *CAMERA-bank* min-detectable-velocity) (vector-length (-> self velocity))) (> s4-0 0)) + ) + (+! s4-0 -1) + (vector-float*! gp-2 (-> self velocity) f30-1) + (let ((f28-0 (if (logtest? (-> self options) 32) + (dummy-10 + *collide-cache* + (-> self trans) + gp-2 + (-> *CAMERA-bank* collide-move-rad) + #x4a09 + (the-as process #f) + s3-0 + 2 + ) + -100000000.0 + ) + ) + ) + (cond + ((>= f28-0 0.0) + (vector+float*! (-> self trans) (-> self trans) gp-2 f28-0) + (set! (-> s5-0 quad) (-> s3-0 normal quad)) + (vector-flatten! (-> self velocity) (-> self velocity) s5-0) + (set! f30-1 (- f30-1 (* f30-1 f28-0))) + (set! s2-0 1) + ) + (else + (vector+! (-> self trans) (-> self trans) gp-2) + (set! f30-1 0.0) + ) ) - ) - (cond - ((>= f28-0 0.0) - (vector+float*! (-> self trans) (-> self trans) gp-2 f28-0) - (set! (-> s5-0 quad) (-> s3-0 bbox4w min quad)) - (vector-flatten! (-> self velocity) (-> self velocity) s5-0) - (set! f30-1 (- f30-1 (* f30-1 f28-0))) - (set! s2-0 1) + ) ) - (else - (vector+! (-> self trans) (-> self trans) gp-2) - (set! f30-1 0.0) - ) - ) ) - ) - ) - (when (nonzero? s2-0) - 0 - (let ((gp-3 (new-stack-vector0))) - 0.0 - (vector-! gp-3 (-> self trans) (-> self tracking follow-pt)) - (vector-flatten! gp-3 gp-3 (-> *camera* local-down)) - (let - ((f0-14 - (/ - (- (vector-length gp-3) (-> *CAM_STICK-bank* min-z)) - (- (-> *CAM_STICK-bank* max-z) (-> *CAM_STICK-bank* min-z)) - ) + (when (nonzero? s2-0) + 0 + (let ((gp-3 (new-stack-vector0))) + 0.0 + (vector-! gp-3 (-> self trans) (-> self tracking follow-pt)) + (vector-flatten! gp-3 gp-3 (-> *camera* local-down)) + (let ((f0-14 (/ (- (vector-length gp-3) (-> *CAM_STICK-bank* min-z)) + (- (-> *CAM_STICK-bank* max-z) (-> *CAM_STICK-bank* min-z)) + ) + ) + ) + (cond + ((< f0-14 0.0) + (set! f0-14 0.0) + ) + ((< 1.0 f0-14) + (set! f0-14 1.0) + ) + ) + (cond + ((< (- f0-14 (-> self view-off-param)) -0.001) + (set! (-> self view-off-param) f0-14) + ) + ((< 0.001 (- f0-14 (-> self view-off-param))) + (vector-normalize-copy! (-> self view-flat) gp-3 (-> self view-off z)) + ) + ) + ) ) - ) - (cond - ((< f0-14 0.0) - (set! f0-14 0.0) - ) - ((< 1.0 f0-14) - (set! f0-14 1.0) - ) - ) - (cond - ((< (- f0-14 (-> self view-off-param)) -0.001) - (set! (-> self view-off-param) f0-14) - ) - ((< 0.001 (- f0-14 (-> self view-off-param))) - (vector-normalize-copy! (-> self view-flat) gp-3 (-> self view-off z)) - ) - ) ) - ) ) - ) - (slave-set-rotation! - (-> self tracking) - (-> self trans) - (the-as float (-> self options)) - (-> self fov) - #t - ) + (slave-set-rotation! (-> self tracking) (-> self trans) (the-as float (-> self options)) (-> self fov) #t) (none) ) @@ -4121,159 +3107,117 @@ cam-standard-event-handler :enter (behavior () - (when (not (-> self enter-has-run)) - (set! (-> self view-off-param) (-> *camera* view-off-param-save)) - (set! (-> self view-off x) 0.0) - (set! - (-> self view-off y) - (lerp - (-> *CAM_STICK-bank* min-y) - (-> *CAM_STICK-bank* max-y) - (-> self view-off-param) + (when (not (-> self enter-has-run)) + (set! (-> self view-off-param) (-> *camera* view-off-param-save)) + (set! (-> self view-off x) 0.0) + (set! (-> self view-off y) + (lerp (-> *CAM_STICK-bank* min-y) (-> *CAM_STICK-bank* max-y) (-> self view-off-param)) + ) + (set! (-> self view-off z) + (lerp (-> *CAM_STICK-bank* min-z) (-> *CAM_STICK-bank* max-z) (-> self view-off-param)) + ) + (cam-calc-follow! (-> self tracking) (-> self trans) #f) + (vector-flatten! (-> self view-flat) (-> self tracking inv-mat vector 2) (-> *camera* local-down)) + (vector-negate! (-> self view-flat) (-> self view-flat)) + (vector-normalize! (-> self view-flat) (-> self view-off z)) + (vector--float*! (-> self desired-pos) (-> self view-flat) (-> *camera* local-down) (-> self view-off y)) + (vector+! (-> self desired-pos) (-> self desired-pos) (-> self tracking follow-pt)) + (set! (-> self trans quad) (-> self desired-pos quad)) + (vector-reset! (-> self velocity)) + (set! (-> self blend-from-type) (the-as uint 2)) + (set! (-> self blend-to-type) (the-as uint 2)) + (slave-set-rotation! (-> self tracking) (-> self trans) (the-as float (-> self options)) (-> self fov) #f) ) - ) - (set! - (-> self view-off z) - (lerp - (-> *CAM_STICK-bank* min-z) - (-> *CAM_STICK-bank* max-z) - (-> self view-off-param) - ) - ) - (cam-calc-follow! (-> self tracking) (-> self trans) #f) - (vector-flatten! - (-> self view-flat) - (-> self tracking inv-mat vector 2) - (-> *camera* local-down) - ) - (vector-negate! (-> self view-flat) (-> self view-flat)) - (vector-normalize! (-> self view-flat) (-> self view-off z)) - (vector--float*! - (-> self desired-pos) - (-> self view-flat) - (-> *camera* local-down) - (-> self view-off y) - ) - (vector+! - (-> self desired-pos) - (-> self desired-pos) - (-> self tracking follow-pt) - ) - (set! (-> self trans quad) (-> self desired-pos quad)) - (vector-reset! (-> self velocity)) - (set! (-> self blend-from-type) (the-as uint 2)) - (set! (-> self blend-to-type) (the-as uint 2)) - (slave-set-rotation! - (-> self tracking) - (-> self trans) - (the-as float (-> self options)) - (-> self fov) - #f - ) + (none) ) - (none) - ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) - (cam-slave-go cam-free-floating) + (if (zero? (logand (-> *camera* master-options) 2)) + (cam-slave-go cam-free-floating) + ) + (when (not (paused?)) + (when *camera-read-analog* + (let ((f0-0 + (analog-input + (the-as int (-> *cpad-list* cpads 0 righty)) + (the-as float 128.0) + (the-as float 32.0) + (the-as float 110.0) + (the-as float 0.05) + ) + ) + ) + (cond + ((< (* 0.05 (- 1.0 (-> self view-off-param))) f0-0) + (+! (-> self view-off-param) (* 0.05 (- 1.0 (-> self view-off-param)))) + ) + ((< f0-0 (* 0.05 (- (-> self view-off-param)))) + (+! (-> self view-off-param) (* 0.05 (- (-> self view-off-param)))) + ) + (else + (+! (-> self view-off-param) f0-0) + ) + ) + ) + ) + (set! (-> self view-off y) + (lerp (-> *CAM_STICK-bank* min-y) (-> *CAM_STICK-bank* max-y) (-> self view-off-param)) + ) + (set! (-> self view-off z) + (lerp (-> *CAM_STICK-bank* min-z) (-> *CAM_STICK-bank* max-z) (-> self view-off-param)) + ) + (when *camera-read-analog* + (let ((f0-16 (analog-input + (the-as int (-> *cpad-list* cpads 0 rightx)) + (the-as float 128.0) + (the-as float 32.0) + (the-as float 110.0) + (* 21845.334 (-> *display* seconds-per-frame)) + ) + ) + (gp-0 (new-stack-matrix0)) + (s3-0 (new-stack-vector0)) + (s5-0 (new-stack-vector0)) + (s4-0 (new-stack-vector0)) + ) + (cond + ((!= f0-16 0.0) + (matrix-axis-angle! gp-0 (-> *camera* local-down) f0-16) + (vector-matrix*! (-> self view-flat) (-> self view-flat) gp-0) + ) + ((logtest? (-> self options) 1) + (set-vector! s5-0 0.0 0.0 1.0 1.0) + (vector-normalize-copy! s5-0 (-> self view-flat) (the-as float 1.0)) + (set! (-> s3-0 quad) (-> *camera* tgt-rot-mat vector 2 quad)) + (vector-flatten! s3-0 s3-0 (-> *camera* local-down)) + (vector-negate! s3-0 s3-0) + (set! (-> s4-0 quad) (-> s5-0 quad)) + (vector-normalize-copy! s4-0 s3-0 (the-as float 1.0)) + (matrix-from-two-vectors-max-angle-partial! + gp-0 + s5-0 + s4-0 + (* 10922.667 (-> *display* seconds-per-frame)) + (the-as float 0.05) + ) + (vector-matrix*! (-> self view-flat) (-> self view-flat) gp-0) + ) + ) + ) + ) + ) + (none) ) - (when (not (paused?)) - (when *camera-read-analog* - (let - ((f0-0 - (analog-input - (the-as int (-> *cpad-list* cpads 0 righty)) - (the-as float 128.0) - (the-as float 32.0) - (the-as float 110.0) - (the-as float 0.05) - ) - ) - ) - (cond - ((< (* 0.05 (- 1.0 (-> self view-off-param))) f0-0) - (+! (-> self view-off-param) (* 0.05 (- 1.0 (-> self view-off-param)))) - ) - ((< f0-0 (* 0.05 (- (-> self view-off-param)))) - (+! (-> self view-off-param) (* 0.05 (- (-> self view-off-param)))) - ) - (else - (+! (-> self view-off-param) f0-0) - ) - ) - ) - ) - (set! - (-> self view-off y) - (lerp - (-> *CAM_STICK-bank* min-y) - (-> *CAM_STICK-bank* max-y) - (-> self view-off-param) - ) - ) - (set! - (-> self view-off z) - (lerp - (-> *CAM_STICK-bank* min-z) - (-> *CAM_STICK-bank* max-z) - (-> self view-off-param) - ) - ) - (when *camera-read-analog* - (let - ((f0-16 - (analog-input - (the-as int (-> *cpad-list* cpads 0 rightx)) - (the-as float 128.0) - (the-as float 32.0) - (the-as float 110.0) - (* 21845.334 (-> *display* seconds-per-frame)) - ) - ) - (gp-0 (new-stack-matrix0)) - (s3-0 (new-stack-vector0)) - (s5-0 (new-stack-vector0)) - (s4-0 (new-stack-vector0)) - ) - (cond - ((!= f0-16 0.0) - (matrix-axis-angle! gp-0 (-> *camera* local-down) f0-16) - (vector-matrix*! (-> self view-flat) (-> self view-flat) gp-0) - ) - ((logtest? (-> self options) 1) - (set-vector! s5-0 0.0 0.0 1.0 1.0) - (vector-normalize-copy! s5-0 (-> self view-flat) (the-as float 1.0)) - (set! (-> s3-0 quad) (-> *camera* tgt-rot-mat vector 2 quad)) - (vector-flatten! s3-0 s3-0 (-> *camera* local-down)) - (vector-negate! s3-0 s3-0) - (set! (-> s4-0 quad) (-> s5-0 quad)) - (vector-normalize-copy! s4-0 s3-0 (the-as float 1.0)) - (matrix-from-two-vectors-max-angle-partial! - gp-0 - s5-0 - s4-0 - (* 10922.667 (-> *display* seconds-per-frame)) - (the-as float 0.05) - ) - (vector-matrix*! (-> self view-flat) (-> self view-flat) gp-0) - ) - ) - ) - ) - ) - (none) - ) :code (behavior () - (while #t - (if (not (paused?)) - (cam-stick-code) - ) - (suspend) + (while #t + (if (not (paused?)) + (cam-stick-code) + ) + (suspend) + ) + (none) ) - (none) - ) ) (deftype cam-bike-bank (basic) @@ -4290,162 +3234,106 @@ (define *CAM_BIKE-bank* - (new 'static 'cam-bike-bank - :max-z (meters 6.0) - :min-z (meters 10.0) - :max-y (meters 3.0) - :min-y (meters 5.0) - ) + (new 'static 'cam-bike-bank :max-z (meters 6.0) :min-z (meters 10.0) :max-y (meters 3.0) :min-y (meters 5.0)) ) -(defbehavior - cam-calc-bike-follow! camera-slave - ((arg0 cam-rotation-tracker) (arg1 vector) (arg2 symbol)) - (vector-float*! - (-> arg0 follow-off) - (-> *camera* tgt-face-mat vector 2) - 155648.0 - ) - (vector+! - (-> arg0 follow-pt) - (-> *camera* tpos-curr-adj) - (-> arg0 follow-off) - ) +(defbehavior cam-calc-bike-follow! camera-slave ((arg0 cam-rotation-tracker) (arg1 vector) (arg2 symbol)) + (vector-float*! (-> arg0 follow-off) (-> *camera* tgt-face-mat vector 2) 155648.0) + (vector+! (-> arg0 follow-pt) (-> *camera* tpos-curr-adj) (-> arg0 follow-off)) (vector--float*! - (-> arg0 follow-pt) - (-> arg0 follow-pt) - (-> *camera* local-down) - (+ 12288.0 (-> *camera* target-height)) - ) + (-> arg0 follow-pt) + (-> arg0 follow-pt) + (-> *camera* local-down) + (+ 12288.0 (-> *camera* target-height)) + ) (-> arg0 follow-pt) ) (defbehavior cam-bike-code camera-slave () (let ((s4-0 (new-stack-matrix0))) - (let ((gp-0 (new-stack-vector0)) - (s5-0 (new-stack-vector0)) - ) - (vector-normalize-copy! gp-0 (-> self view-flat) (the-as float 1.0)) - (vector-flatten! - s5-0 - (-> *camera* tgt-rot-mat vector 2) - (-> *camera* local-down) - ) - (vector-normalize! s5-0 (the-as float -1.0)) - (matrix-from-two-vectors-partial-linear! s4-0 gp-0 s5-0 (the-as float 0.2)) + (let ((gp-0 (new-stack-vector0)) + (s5-0 (new-stack-vector0)) + ) + (vector-normalize-copy! gp-0 (-> self view-flat) (the-as float 1.0)) + (vector-flatten! s5-0 (-> *camera* tgt-rot-mat vector 2) (-> *camera* local-down)) + (vector-normalize! s5-0 (the-as float -1.0)) + (matrix-from-two-vectors-partial-linear! s4-0 gp-0 s5-0 (the-as float 0.2)) + ) + (vector-matrix*! (-> self view-flat) (-> self view-flat) s4-0) ) - (vector-matrix*! (-> self view-flat) (-> self view-flat) s4-0) - ) (let ((gp-1 (new-stack-vector0))) - 0.0 - (vector-! gp-1 (-> *camera* tpos-curr-adj) (-> *camera* tpos-old-adj)) - (let ((f30-0 (vector-length gp-1))) - (set! - (-> self view-off z) - (lerp-clamp - (-> *CAM_BIKE-bank* max-z) - (-> *CAM_BIKE-bank* min-z) - (parameter-ease-sin-clamp (* 0.00081380206 (+ -409.6 f30-0))) + 0.0 + (vector-! gp-1 (-> *camera* tpos-curr-adj) (-> *camera* tpos-old-adj)) + (let ((f30-0 (vector-length gp-1))) + (set! (-> self view-off z) (lerp-clamp + (-> *CAM_BIKE-bank* max-z) + (-> *CAM_BIKE-bank* min-z) + (parameter-ease-sin-clamp (* 0.00081380206 (+ -409.6 f30-0))) + ) + ) + (set! (-> self view-off y) (lerp-clamp + (-> *CAM_BIKE-bank* max-y) + (-> *CAM_BIKE-bank* min-y) + (parameter-ease-sin-clamp (* 0.00081380206 (+ -409.6 f30-0))) + ) + ) ) - ) - (set! - (-> self view-off y) - (lerp-clamp - (-> *CAM_BIKE-bank* max-y) - (-> *CAM_BIKE-bank* min-y) - (parameter-ease-sin-clamp (* 0.00081380206 (+ -409.6 f30-0))) - ) - ) + (vector-flatten! (-> self view-flat) (-> self view-flat) (-> *camera* local-down)) + (vector-normalize! (-> self view-flat) (-> self view-off z)) + (vector-! gp-1 (-> self view-flat) (vector-float*! gp-1 (-> *camera* local-down) (-> self view-off y))) + (vector+! (-> self desired-pos) (-> *camera* tpos-curr-adj) gp-1) ) - (vector-flatten! - (-> self view-flat) - (-> self view-flat) - (-> *camera* local-down) - ) - (vector-normalize! (-> self view-flat) (-> self view-off z)) - (vector-! - gp-1 - (-> self view-flat) - (vector-float*! gp-1 (-> *camera* local-down) (-> self view-off y)) - ) - (vector+! (-> self desired-pos) (-> *camera* tpos-curr-adj) gp-1) - ) (let ((v1-20 (new-stack-vector0)) (gp-2 (new-stack-vector0)) ) - (vector-! v1-20 (-> self desired-pos) (-> self trans)) - (vector-float*! v1-20 v1-20 0.2) - (vector-! gp-2 v1-20 (-> self velocity)) - (if (< 409.6 (vector-length gp-2)) - (vector-normalize! gp-2 (the-as float 409.6)) + (vector-! v1-20 (-> self desired-pos) (-> self trans)) + (vector-float*! v1-20 v1-20 0.2) + (vector-! gp-2 v1-20 (-> self velocity)) + (if (< 409.6 (vector-length gp-2)) + (vector-normalize! gp-2 (the-as float 409.6)) + ) + (vector+! (-> self velocity) (-> self velocity) gp-2) ) - (vector+! (-> self velocity) (-> self velocity) gp-2) - ) 0.0 (let ((f30-2 1.0) (gp-3 (new-stack-vector0)) (s5-3 4) - (s4-3 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (s4-3 (new 'stack-no-clear 'collide-tri-result)) ) - (while - (and - (< 0.01 f30-2) - (and - (< - (-> *CAMERA-bank* min-detectable-velocity) - (vector-length (-> self velocity)) - ) - (> s5-3 0) - ) - ) - (+! s5-3 -1) - (vector-float*! gp-3 (-> self velocity) f30-2) - (let ((f28-0 (if (logtest? (-> self options) 32) - (dummy-10 - *collide-cache* - (-> self trans) - gp-3 - (the-as float 4096.0) - #x4a09 - (the-as process #f) - s4-3 - 2 - ) + (while (and + (< 0.01 f30-2) + (and (< (-> *CAMERA-bank* min-detectable-velocity) (vector-length (-> self velocity))) (> s5-3 0)) + ) + (+! s5-3 -1) + (vector-float*! gp-3 (-> self velocity) f30-2) + (let ((f28-0 + (if (logtest? (-> self options) 32) + (dummy-10 *collide-cache* (-> self trans) gp-3 (the-as float 4096.0) #x4a09 (the-as process #f) s4-3 2) -100000000.0 ) + ) + ) + (cond + ((>= f28-0 0.0) + (vector+float*! (-> self trans) (-> self trans) gp-3 f28-0) + (vector-flatten! (-> self velocity) (-> self velocity) (-> s4-3 normal)) + (set! f30-2 (- f30-2 (* f30-2 f28-0))) + (let ((s3-2 (new-stack-vector0))) + (vector-! s3-2 (-> self trans) (-> *camera* tpos-curr-adj)) + (vector-flatten! s3-2 s3-2 (-> *camera* local-down)) + (vector-normalize-copy! (-> self view-flat) s3-2 (-> self view-off z)) + ) ) + (else + (vector+! (-> self trans) (-> self trans) gp-3) + (set! f30-2 0.0) + ) ) - (cond - ((>= f28-0 0.0) - (vector+float*! (-> self trans) (-> self trans) gp-3 f28-0) - (vector-flatten! - (-> self velocity) - (-> self velocity) - (the-as vector (-> s4-3 bbox4w)) ) - (set! f30-2 (- f30-2 (* f30-2 f28-0))) - (let ((s3-2 (new-stack-vector0))) - (vector-! s3-2 (-> self trans) (-> *camera* tpos-curr-adj)) - (vector-flatten! s3-2 s3-2 (-> *camera* local-down)) - (vector-normalize-copy! (-> self view-flat) s3-2 (-> self view-off z)) - ) - ) - (else - (vector+! (-> self trans) (-> self trans) gp-3) - (set! f30-2 0.0) - ) ) - ) ) - ) (cam-calc-bike-follow! (-> self tracking) (-> self trans) #t) - (slave-set-rotation! - (-> self tracking) - (-> self trans) - (the-as float (-> self options)) - (-> self fov) - #t - ) + (slave-set-rotation! (-> self tracking) (-> self trans) (the-as float (-> self options)) (-> self fov) #t) (none) ) @@ -4454,62 +3342,43 @@ cam-standard-event-handler :enter (behavior () - (when (not (-> self enter-has-run)) - (set! (-> *camera* foot-offset) 4096.0) - (set! (-> *camera* head-offset) 16384.0) - (set! (-> self view-off x) 0.0) - (set! (-> self view-off y) (-> *CAM_BIKE-bank* max-y)) - (set! (-> self view-off z) (-> *CAM_BIKE-bank* max-z)) - (vector-flatten! - (-> self view-flat) - (-> self tracking inv-mat vector 2) - (-> *camera* local-down) - ) - (vector-negate! (-> self view-flat) (-> self view-flat)) - (vector-normalize! (-> self view-flat) (-> self view-off z)) - (vector--float*! - (-> self desired-pos) - (-> self view-flat) - (-> *camera* local-down) - (-> self view-off y) - ) - (vector+! - (-> self desired-pos) - (-> self desired-pos) - (-> *camera* tpos-curr-adj) - ) - (set! (-> self trans quad) (-> self desired-pos quad)) - (vector-reset! (-> self velocity)) - (set! (-> self blend-from-type) (the-as uint 0)) - (set! (-> self blend-to-type) (the-as uint 1)) - (cam-calc-bike-follow! (-> self tracking) (-> self trans) #f) - (slave-set-rotation! - (-> self tracking) - (-> self trans) - (the-as float (-> self options)) - (-> self fov) - #f - ) + (when (not (-> self enter-has-run)) + (set! (-> *camera* foot-offset) 4096.0) + (set! (-> *camera* head-offset) 16384.0) + (set! (-> self view-off x) 0.0) + (set! (-> self view-off y) (-> *CAM_BIKE-bank* max-y)) + (set! (-> self view-off z) (-> *CAM_BIKE-bank* max-z)) + (vector-flatten! (-> self view-flat) (-> self tracking inv-mat vector 2) (-> *camera* local-down)) + (vector-negate! (-> self view-flat) (-> self view-flat)) + (vector-normalize! (-> self view-flat) (-> self view-off z)) + (vector--float*! (-> self desired-pos) (-> self view-flat) (-> *camera* local-down) (-> self view-off y)) + (vector+! (-> self desired-pos) (-> self desired-pos) (-> *camera* tpos-curr-adj)) + (set! (-> self trans quad) (-> self desired-pos quad)) + (vector-reset! (-> self velocity)) + (set! (-> self blend-from-type) (the-as uint 0)) + (set! (-> self blend-to-type) (the-as uint 1)) + (cam-calc-bike-follow! (-> self tracking) (-> self trans) #f) + (slave-set-rotation! (-> self tracking) (-> self trans) (the-as float (-> self options)) (-> self fov) #f) + ) + (none) ) - (none) - ) :trans (behavior () - (if (zero? (logand (-> *camera* master-options) 2)) - (cam-slave-go cam-free-floating) + (if (zero? (logand (-> *camera* master-options) 2)) + (cam-slave-go cam-free-floating) + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (if (not (paused?)) - (cam-bike-code) - ) - (suspend) + (while #t + (if (not (paused?)) + (cam-bike-code) + ) + (suspend) + ) + (none) ) - (none) - ) ) (define *camera-base-mode* cam-string) diff --git a/goal_src/engine/camera/camera-h.gc b/goal_src/engine/camera/camera-h.gc index f28e9ab384..7c2bcb27f5 100644 --- a/goal_src/engine/camera/camera-h.gc +++ b/goal_src/engine/camera/camera-h.gc @@ -416,7 +416,7 @@ (saved-pt vector :inline :offset-assert 2464) (spline-tt float :offset-assert 2480) (spline-follow-dist float :offset-assert 2484) - (change-event-from uint32 :offset-assert 2488) + (change-event-from (pointer process-drawable) :offset-assert 2488) ;; mistycannon (enter-has-run symbol :offset-assert 2492) (blend-from-type uint64 :offset-assert 2496) (blend-to-type uint64 :offset-assert 2504) diff --git a/goal_src/engine/camera/camera.gc b/goal_src/engine/camera/camera.gc index cd0e38b72a..05d525d496 100644 --- a/goal_src/engine/camera/camera.gc +++ b/goal_src/engine/camera/camera.gc @@ -1089,11 +1089,14 @@ (cond (*camera* (set! (-> self options) (-> *camera* slave-options)) - (set! (-> self change-event-from) (-> *camera* changer)) + (set! + (-> self change-event-from) + (the-as (pointer process-drawable) (-> *camera* changer)) + ) ) (else (set! (-> self options) (the-as uint 0)) - (set! (-> self change-event-from) (the-as uint #f)) + (set! (-> self change-event-from) (the-as (pointer process-drawable) #f)) ) ) (cond diff --git a/goal_src/engine/collide/collide-cache-h.gc b/goal_src/engine/collide/collide-cache-h.gc index 2ed1d890f8..cc604df09f 100644 --- a/goal_src/engine/collide/collide-cache-h.gc +++ b/goal_src/engine/collide/collide-cache-h.gc @@ -117,7 +117,7 @@ :flag-assert #x2100008670 (:methods (dummy-9 (_type_) none 9) - (dummy-10 (_type_ vector vector float int process collide-mesh-cache-tri int) float 10) + (dummy-10 (_type_ vector vector float int process collide-tri-result int) float 10) (dummy-11 (_type_ collide-using-spheres-params) none 11) (fill-and-probe-using-y-probe (_type_ vector float uint process collide-tri-result uint) float 12) (dummy-13 (_type_ bounding-box uint process-drawable uint) none 13) diff --git a/goal_src/engine/collide/collide-shape.gc b/goal_src/engine/collide/collide-shape.gc index 48665649b9..7fbff44343 100644 --- a/goal_src/engine/collide/collide-shape.gc +++ b/goal_src/engine/collide/collide-shape.gc @@ -13,10 +13,7 @@ ;; ERROR: function was not converted to expressions. Cannot decompile. (defmethod should-push-away-test collide-shape-prim () - (format - 0 - "ERROR: collide-shape-prim::should-push-away-test was called illegally!~%" - ) + (format 0 "ERROR: collide-shape-prim::should-push-away-test was called illegally!~%") (none) ) @@ -28,76 +25,37 @@ ;; ERROR: function was not converted to expressions. Cannot decompile. -(defmethod - collide-with-collide-cache-prim-mesh - collide-shape-prim - ((obj collide-shape-prim) - (arg0 collide-shape-intersect) - (arg1 collide-cache-prim) - ) - (format - 0 - "ERROR: Unsupported prim type in collide-shape-prim::collide-with-collide-cache-prim-mesh!~%" - ) +(defmethod collide-with-collide-cache-prim-mesh collide-shape-prim ((obj collide-shape-prim) (arg0 collide-shape-intersect) (arg1 collide-cache-prim)) + (format 0 "ERROR: Unsupported prim type in collide-shape-prim::collide-with-collide-cache-prim-mesh!~%") (none) ) ;; ERROR: function was not converted to expressions. Cannot decompile. -(defmethod - collide-with-collide-cache-prim-mesh - collide-shape-prim-mesh - ((obj collide-shape-prim-mesh) - (arg0 collide-shape-intersect) - (arg1 collide-cache-prim) - ) - (format - 0 - "ERROR: collide-shape-prim-mesh vs. collide-cache-prim mesh is not currently supported!~%" - ) +(defmethod collide-with-collide-cache-prim-mesh collide-shape-prim-mesh ((obj collide-shape-prim-mesh) (arg0 collide-shape-intersect) (arg1 collide-cache-prim)) + (format 0 "ERROR: collide-shape-prim-mesh vs. collide-cache-prim mesh is not currently supported!~%") (none) ) -(defmethod - collide-with-collide-cache-prim-mesh - collide-shape-prim-group - ((obj collide-shape-prim-group) - (arg0 collide-shape-intersect) - (arg1 collide-cache-prim) - ) +(defmethod collide-with-collide-cache-prim-mesh collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 collide-shape-intersect) (arg1 collide-cache-prim)) (let ((s3-0 (-> arg1 prim-core collide-as))) - (dotimes (s2-0 (-> obj num-prims)) - (let ((a0-1 (-> obj prims s2-0))) - (if (logtest? (-> a0-1 collide-with) s3-0) - (collide-with-collide-cache-prim-mesh a0-1 arg0 arg1) + (dotimes (s2-0 (-> obj num-prims)) + (let ((a0-1 (-> obj prims s2-0))) + (if (logtest? (-> a0-1 collide-with) s3-0) + (collide-with-collide-cache-prim-mesh a0-1 arg0 arg1) + ) + ) ) - ) ) - ) (none) ) -(defmethod - collide-with-collide-cache-prim-sphere - collide-shape-prim - ((obj collide-shape-prim) - (arg0 collide-shape-intersect) - (arg1 collide-cache-prim) - ) - (format - 0 - "ERROR: Unsupported prim type in collide-shape-prim::collide-with-collide-cache-prim-sphere!~%" - ) +(defmethod collide-with-collide-cache-prim-sphere collide-shape-prim ((obj collide-shape-prim) (arg0 collide-shape-intersect) (arg1 collide-cache-prim)) + (format 0 "ERROR: Unsupported prim type in collide-shape-prim::collide-with-collide-cache-prim-sphere!~%") (none) ) -(defmethod - collide-with-collide-cache-prim-sphere - collide-shape-prim-sphere - ((obj collide-shape-prim-sphere) - (arg0 collide-shape-intersect) - (arg1 collide-cache-prim) - ) +(defmethod collide-with-collide-cache-prim-sphere collide-shape-prim-sphere ((obj collide-shape-prim-sphere) (arg0 collide-shape-intersect) (arg1 collide-cache-prim)) (local-vars (v1-4 int) (a3-2 uint)) (rlet ((vf1 :class vf) (vf2 :class vf) @@ -105,666 +63,527 @@ (vf4 :class vf) (vf5 :class vf) ) - (let* ((s5-0 (new 'stack-no-clear 'collide-mesh-cache-tri)) - (f0-1 - (dummy-10 - arg1 - s5-0 - (-> obj prim-core) - (-> arg0 move-vec) - (-> arg0 best-u) - (the-as int (-> obj prim-core action)) - ) + (let* ((s5-0 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (f0-1 (dummy-10 + arg1 + s5-0 + (-> obj prim-core) + (-> arg0 move-vec) + (-> arg0 best-u) + (the-as int (-> obj prim-core action)) + ) + ) ) - ) - (when (>= f0-1 0.0) - (let ((v1-3 0) - (a1-2 (-> obj prim-core action)) - ) - (nop!) - (let ((a2-2 (-> arg1 prim-core action))) - (nop!) - (let ((a0-2 (-> arg1 prim-core offense)) - (a1-3 (logand a1-2 a2-2)) - (a2-3 (-> arg1 prim)) - ) - (let ((a3-1 (logand a1-3 1)) - (a1-4 (-> obj prim-core offense)) + (when (>= f0-1 0.0) + (let ((v1-3 0) + (a1-2 (-> obj prim-core action)) ) - (b! (zero? a3-1) cfg-5 :delay (set! a3-2 (-> s5-0 bbox4w max data 0))) - (b! (= a0-2 v1-3) cfg-5 :delay (set! v1-4 (- a1-4 a0-2))) - ) - (b! (> v1-4 0) cfg-5 :delay (.lvf vf1 (&-> s5-0 normal quad))) - (.lvf vf2 (&-> s5-0 bbox4w min quad)) - (.lvf vf3 (&-> s5-0 vertex 0 quad)) - (.lvf vf4 (&-> s5-0 vertex 1 quad)) - (.lvf vf5 (&-> s5-0 vertex 2 quad)) - (set! (-> arg0 best-u) f0-1) - (set! (-> arg0 best-to-prim) (the-as collide-shape-prim a2-3)) - (set! (-> arg0 best-from-prim) obj) - (set! (-> arg0 best-tri pat) (the-as pat-surface a3-2)) - (.svf (&-> arg0 best-tri intersect quad) vf1) - (.svf (&-> arg0 best-tri normal quad) vf2) - (.svf (&-> arg0 best-tri vertex 0 quad) vf3) - (.svf (&-> arg0 best-tri vertex 1 quad) vf4) - (.svf (&-> arg0 best-tri vertex 2 quad) vf5) - (label cfg-5) - (dummy-9 - *touching-list* - obj - (the-as collide-shape-prim a2-3) - f0-1 - (the-as collide-shape #f) - s5-0 - ) + (nop!) + (let ((a2-2 (-> arg1 prim-core action))) + (nop!) + (let ((a0-2 (-> arg1 prim-core offense)) + (a1-3 (logand a1-2 a2-2)) + (a2-3 (-> arg1 prim)) + ) + (let ((a3-1 (logand a1-3 1)) + (a1-4 (-> obj prim-core offense)) + ) + (b! (zero? a3-1) cfg-5 :delay (set! a3-2 (-> s5-0 bbox4w max data 0))) + (b! (= a0-2 v1-3) cfg-5 :delay (set! v1-4 (- a1-4 a0-2))) + ) + (b! (> v1-4 0) cfg-5 :delay (.lvf vf1 (&-> s5-0 normal quad))) + (.lvf vf2 (&-> s5-0 bbox4w min quad)) + (.lvf vf3 (&-> s5-0 vertex 0 quad)) + (.lvf vf4 (&-> s5-0 vertex 1 quad)) + (.lvf vf5 (&-> s5-0 vertex 2 quad)) + (set! (-> arg0 best-u) f0-1) + (set! (-> arg0 best-to-prim) (the-as collide-shape-prim a2-3)) + (set! (-> arg0 best-from-prim) obj) + (set! (-> arg0 best-tri pat) (the-as pat-surface a3-2)) + (.svf (&-> arg0 best-tri intersect quad) vf1) + (.svf (&-> arg0 best-tri normal quad) vf2) + (.svf (&-> arg0 best-tri vertex 0 quad) vf3) + (.svf (&-> arg0 best-tri vertex 1 quad) vf4) + (.svf (&-> arg0 best-tri vertex 2 quad) vf5) + (label cfg-5) + (dummy-9 *touching-list* obj (the-as collide-shape-prim a2-3) f0-1 (the-as collide-shape #f) s5-0) + ) + ) + ) ) - ) ) - ) + 0 + (none) ) - 0 - (none) - ) ) -(defmethod - collide-with-collide-cache-prim-sphere - collide-shape-prim-mesh - ((obj collide-shape-prim-mesh) - (arg0 collide-shape-intersect) - (arg1 collide-cache-prim) - ) - (format - 0 - "ERROR: collide-shape-prim-mesh vs. collide-cache-prim sphere is not currently supported!~%" - ) +(defmethod collide-with-collide-cache-prim-sphere collide-shape-prim-mesh ((obj collide-shape-prim-mesh) (arg0 collide-shape-intersect) (arg1 collide-cache-prim)) + (format 0 "ERROR: collide-shape-prim-mesh vs. collide-cache-prim sphere is not currently supported!~%") (none) ) -(defmethod - collide-with-collide-cache-prim-sphere - collide-shape-prim-group - ((obj collide-shape-prim-group) - (arg0 collide-shape-intersect) - (arg1 collide-cache-prim) - ) +(defmethod collide-with-collide-cache-prim-sphere collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 collide-shape-intersect) (arg1 collide-cache-prim)) (let ((s3-0 (-> arg1 prim-core collide-as))) - (dotimes (s2-0 (-> obj num-prims)) - (let ((a0-1 (-> obj prims s2-0))) - (if (logtest? (-> a0-1 collide-with) s3-0) - (collide-with-collide-cache-prim-sphere a0-1 arg0 arg1) + (dotimes (s2-0 (-> obj num-prims)) + (let ((a0-1 (-> obj prims s2-0))) + (if (logtest? (-> a0-1 collide-with) s3-0) + (collide-with-collide-cache-prim-sphere a0-1 arg0 arg1) + ) + ) ) - ) ) - ) (none) ) -(defun - find-ground-point - ((arg0 control-info) (arg1 vector) (arg2 float) (arg3 float)) +(defun find-ground-point ((arg0 control-info) (arg1 vector) (arg2 float) (arg3 float)) (local-vars (sv-176 int) (sv-192 int)) (let ((f30-1 (if (< 819.2 (vector-xz-length (-> arg0 transv))) - (vector-y-angle (-> arg0 transv)) - (y-angle arg0) - ) - ) + (vector-y-angle (-> arg0 transv)) + (y-angle arg0) + ) + ) (s2-0 (-> arg0 trans)) (s1-0 (new 'stack-no-clear 'vector)) (s0-0 (new 'stack-no-clear 'collide-mesh-cache-tri)) ) - (let ((a1-1 (new 'stack-no-clear 'bounding-box))) - (set! (-> arg1 w) 0.0) - (dotimes (v1-1 3) - (set! (-> a1-1 min data v1-1) (- (-> s2-0 data v1-1) arg3)) - (set! (-> a1-1 max data v1-1) (+ (-> s2-0 data v1-1) arg3)) - ) - (set! (-> a1-1 min y) (+ -40960.0 (-> s2-0 y))) - (set! (-> a1-1 max y) (+ 20480.0 (-> s2-0 y))) - (dummy-13 - *collide-cache* - a1-1 - (-> arg0 root-prim collide-with) - (-> arg0 process) - (the-as uint 1) - ) - ) - (set! sv-176 0) - (while (< sv-176 8) - (let ((f28-0 (+ f30-1 (if (zero? (logand sv-176 1)) - (* 8192.0 (the float (/ sv-176 2))) - (* -8192.0 (the float (/ sv-176 2))) - ) - ) - ) - ) - (set! sv-192 0) - (let ((f26-0 arg3)) - (set-vector! s1-0 0.0 0.0 arg3 1.0) - (vector-rotate-y! s1-0 s1-0 f28-0) - (if - (>= - (dummy-18 - *collide-cache* - (vector+! - (new 'stack-no-clear 'vector) - s2-0 - (new 'static 'vector :y 20480.0 :w 1.0) - ) - s1-0 - 2048.0 - (the-as int (-> arg0 root-prim collide-with)) - s0-0 - 1 - ) - 0.0 + (let ((a1-1 (new 'stack-no-clear 'bounding-box))) + (set! (-> arg1 w) 0.0) + (dotimes (v1-1 3) + (set! (-> a1-1 min data v1-1) (- (-> s2-0 data v1-1) arg3)) + (set! (-> a1-1 max data v1-1) (+ (-> s2-0 data v1-1) arg3)) ) - (set! - f26-0 - (+ -6144.0 (vector-vector-xz-distance s2-0 (-> s0-0 normal))) - ) - ) - (let ((f24-0 arg2)) - (while (>= f26-0 f24-0) - (set-vector! s1-0 0.0 0.0 f24-0 1.0) - (vector-rotate-y! s1-0 s1-0 f28-0) - (vector+! s1-0 s2-0 s1-0) - (set! (-> s1-0 y) (+ 20480.0 (-> s2-0 y))) - (when - (>= - (dummy-18 - *collide-cache* - s1-0 - (new 'static 'vector :y -251658240.0 :w 1.0) - 10240.0 - (the-as int (-> arg0 root-prim collide-with)) - s0-0 - 1 - ) - 0.0 - ) - (cond - ((and - (zero? (shr (shl (-> s0-0 bbox4w max data 0) 58) 61)) - (zero? (shr (shl (-> s0-0 bbox4w max data 0) 44) 58)) - (< 0.7 (the-as float (-> s0-0 bbox4w min data 1))) - ) - (set! (-> arg1 quad) (-> s0-0 normal quad)) - (set! sv-192 (+ sv-192 1)) - (if (>= sv-192 2) - (return arg1) - ) - ) - ((and - (= (shr (shl (-> s0-0 bbox4w max data 0) 58) 61) 1) - (< (+ 4096.0 (-> s2-0 y)) (-> s0-0 normal y)) - ) - (goto cfg-35) - ) - ) - ) - (set! f24-0 (+ 4096.0 f24-0)) - ) - ) + (set! (-> a1-1 min y) (+ -40960.0 (-> s2-0 y))) + (set! (-> a1-1 max y) (+ 20480.0 (-> s2-0 y))) + (dummy-13 *collide-cache* a1-1 (-> arg0 root-prim collide-with) (-> arg0 process) (the-as uint 1)) + ) + (set! sv-176 0) + (while (< sv-176 8) + (let ((f28-0 (+ f30-1 (if (zero? (logand sv-176 1)) + (* 8192.0 (the float (/ sv-176 2))) + (* -8192.0 (the float (/ sv-176 2))) + ) + ) + ) + ) + (set! sv-192 0) + (let ((f26-0 arg3)) + (set-vector! s1-0 0.0 0.0 arg3 1.0) + (vector-rotate-y! s1-0 s1-0 f28-0) + (if (>= (dummy-18 + *collide-cache* + (vector+! (new 'stack-no-clear 'vector) s2-0 (new 'static 'vector :y 20480.0 :w 1.0)) + s1-0 + 2048.0 + (the-as int (-> arg0 root-prim collide-with)) + s0-0 + 1 + ) + 0.0 + ) + (set! f26-0 (+ -6144.0 (vector-vector-xz-distance s2-0 (-> s0-0 normal)))) + ) + (let ((f24-0 arg2)) + (while (>= f26-0 f24-0) + (set-vector! s1-0 0.0 0.0 f24-0 1.0) + (vector-rotate-y! s1-0 s1-0 f28-0) + (vector+! s1-0 s2-0 s1-0) + (set! (-> s1-0 y) (+ 20480.0 (-> s2-0 y))) + (when (>= (dummy-18 + *collide-cache* + s1-0 + (new 'static 'vector :y -251658240.0 :w 1.0) + 10240.0 + (the-as int (-> arg0 root-prim collide-with)) + s0-0 + 1 + ) + 0.0 + ) + (cond + ((and + (zero? (shr (shl (-> s0-0 bbox4w max data 0) 58) 61)) + (zero? (shr (shl (-> s0-0 bbox4w max data 0) 44) 58)) + (< 0.7 (the-as float (-> s0-0 bbox4w min data 1))) + ) + (set! (-> arg1 quad) (-> s0-0 normal quad)) + (set! sv-192 (+ sv-192 1)) + (if (>= sv-192 2) + (return arg1) + ) + ) + ((and (= (shr (shl (-> s0-0 bbox4w max data 0) 58) 61) 1) (< (+ 4096.0 (-> s2-0 y)) (-> s0-0 normal y))) + (goto cfg-35) + ) + ) + ) + (set! f24-0 (+ 4096.0 f24-0)) + ) + ) + ) + ) + (label cfg-35) + (set! sv-176 (+ sv-176 1)) ) - ) - (label cfg-35) - (set! sv-176 (+ sv-176 1)) ) - ) (the-as vector #f) ) (defun target-attack-up ((arg0 target) (arg1 symbol) (arg2 symbol)) (with-pp - (let - ((s4-0 - (find-ground-point - (-> arg0 control) - (new 'stack-no-clear 'vector) - 8192.0 - 40960.0 - ) - ) - ) - (set! s4-0 (cond - (s4-0 - (empty) - s4-0 - ) - (else - (-> arg0 control unknown-vector54) - ) - ) - ) - (let* - ((s2-1 - (vector-! (new 'stack-no-clear 'vector) s4-0 (-> arg0 control trans)) - ) - (f30-1 (fmax 8192.0 (fmin 40960.0 (vector-xz-length s2-1)))) - ) - (cond - ((< - (fabs - (vector-dot - (-> arg0 control dynam gravity-normal) - (vector-! (new 'stack-no-clear 'vector) s4-0 (-> arg0 control trans)) - ) - ) - 40960.0 - ) - (vector-xz-normalize! s2-1 f30-1) - (let ((s1-0 (new 'stack-no-clear 'event-message-block))) - (set! (-> s1-0 from) pp) - (set! (-> s1-0 num-params) 2) - (set! (-> s1-0 message) arg1) - (set! (-> s1-0 param 0) (the-as uint #f)) - (let ((s3-1 (new 'static 'attack-info :mask #x8a2))) - (set! (-> s3-1 mode) arg2) - (set! (-> s3-1 vector quad) (-> s2-1 quad)) - (set! - (-> s3-1 shove-up) - (+ - (lerp-scale 4096.0 16384.0 f30-1 4096.0 40960.0) - (fmax 0.0 (- (-> s4-0 y) (-> arg0 control trans y))) + (let ((s4-0 (find-ground-point (-> arg0 control) (new 'stack-no-clear 'vector) 8192.0 40960.0))) + (set! s4-0 (cond + (s4-0 + (empty) + s4-0 + ) + (else + (-> arg0 control unknown-vector54) + ) + ) + ) + (let* ((s2-1 (vector-! (new 'stack-no-clear 'vector) s4-0 (-> arg0 control trans))) + (f30-1 (fmax 8192.0 (fmin 40960.0 (vector-xz-length s2-1)))) + ) + (cond + ((< (fabs (vector-dot + (-> arg0 control dynam gravity-normal) + (vector-! (new 'stack-no-clear 'vector) s4-0 (-> arg0 control trans)) + ) + ) + 40960.0 + ) + (vector-xz-normalize! s2-1 f30-1) + (let ((s1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> s1-0 from) pp) + (set! (-> s1-0 num-params) 2) + (set! (-> s1-0 message) arg1) + (set! (-> s1-0 param 0) (the-as uint #f)) + (let ((s3-1 (new 'static 'attack-info :mask #x8a2))) + (set! (-> s3-1 mode) arg2) + (set! (-> s3-1 vector quad) (-> s2-1 quad)) + (set! (-> s3-1 shove-up) + (+ (lerp-scale 4096.0 16384.0 f30-1 4096.0 40960.0) (fmax 0.0 (- (-> s4-0 y) (-> arg0 control trans y)))) + ) + (set! (-> s3-1 angle) 'up) + (set! (-> s1-0 param 1) (the-as uint s3-1)) + ) + (send-event-function arg0 s1-0) + ) ) + (else + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) pp) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) arg1) + (set! (-> a1-6 param 0) (the-as uint #f)) + (let ((v1-12 (new 'static 'attack-info :mask #xca2))) + (set! (-> v1-12 mode) arg2) + (set! (-> v1-12 vector quad) + (-> (new 'static 'attack-info :trans (new 'static 'vector :y 40960.0 :w 1.0) :speed (the-as float #x1)) + trans + quad + ) + ) + (set! (-> v1-12 shove-up) 40960.0) + (set! (-> v1-12 angle) 'up) + (set! (-> v1-12 control) 1.0) + (set! (-> a1-6 param 1) (the-as uint v1-12)) + ) + (send-event-function arg0 a1-6) + ) + ) ) - (set! (-> s3-1 angle) 'up) - (set! (-> s1-0 param 1) (the-as uint s3-1)) - ) - (send-event-function arg0 s1-0) ) + ) + (none) + ) + ) + +(defmethod dummy-56 collide-shape-moving ((obj collide-shape-moving) (arg0 pat-surface)) + (with-pp + (set! (-> obj cur-pat) arg0) + (set! (-> obj poly-pat) arg0) + (case (-> arg0 material) + (((pat-material ice)) + (set! (-> obj surf) *ice-surface*) + ) + (((pat-material quicksand)) + (set! (-> obj surf) *quicksand-surface*) + ) + (((pat-material tube)) + (set! (-> obj surf) *no-walk-surface*) + ) + (((pat-material rotate)) + (set! (-> obj surf) *rotate-surface*) ) (else - (let ((a1-6 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-6 from) pp) - (set! (-> a1-6 num-params) 2) - (set! (-> a1-6 message) arg1) - (set! (-> a1-6 param 0) (the-as uint #f)) - (let ((v1-12 (new 'static 'attack-info :mask #xca2))) - (set! (-> v1-12 mode) arg2) - (set! - (-> v1-12 vector quad) - (-> - (new 'static 'attack-info - :trans (new 'static 'vector :y 40960.0 :w 1.0) - :speed (the-as float #x1) - ) - trans - quad + (set! (-> obj surf) *standard-ground-surface*) + ) + ) + (if (logtest? (-> obj root-prim prim-core action) 512) + (set! (-> obj surf) *race-track-surface*) + ) + (when (nonzero? (-> arg0 event)) + (case (-> arg0 event) + (((pat-event deadly)) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) pp) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'attack) + (set! (-> a1-3 param 0) (the-as uint #f)) + (let ((v1-19 (new 'static 'attack-info :mask #xa0))) + (set! (-> v1-19 mode) 'deadly) + (set! (-> v1-19 shove-up) 12288.0) + (set! (-> a1-3 param 1) (the-as uint v1-19)) + ) + (send-event-function (-> obj process) a1-3) + ) + ) + (((pat-event burn)) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) pp) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack) + (set! (-> a1-6 param 0) (the-as uint #f)) + (let ((v1-23 (new 'static 'attack-info :mask #xa0))) + (set! (-> v1-23 mode) 'burn) + (set! (-> v1-23 shove-up) 12288.0) + (set! (-> a1-6 param 1) (the-as uint v1-23)) + ) + (send-event-function (-> obj process) a1-6) + ) + ) + (((pat-event deadlyup)) + (target-attack-up (the-as target (-> obj process)) 'attack-or-shove 'deadlyup) + ) + (((pat-event burnup)) + (if (zero? (logand (-> (the-as target (-> obj process)) control root-prim prim-core action) 512)) + (target-attack-up (the-as target (-> obj process)) 'attack-or-shove 'burnup) + ) + ) + (((pat-event melt)) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) pp) + (set! (-> a1-15 num-params) 2) + (set! (-> a1-15 message) 'attack-invinc) + (set! (-> a1-15 param 0) (the-as uint #f)) + (let ((a2-8 (new 'static 'attack-info :mask #x20))) + (set! (-> a2-8 mode) 'melt) + (set! (-> a1-15 param 1) (the-as uint a2-8)) + ) + (send-event-function (-> obj process) a1-15) + ) + ) + (((pat-event endlessfall)) + (let ((a1-17 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-17 from) pp) + (set! (-> a1-17 num-params) 2) + (set! (-> a1-17 message) 'attack-invinc) + (set! (-> a1-17 param 0) (the-as uint #f)) + (let ((a2-9 (new 'static 'attack-info :mask #x20))) + (set! (-> a2-9 mode) 'endlessfall) + (set! (-> a1-17 param 1) (the-as uint a2-9)) + ) + (send-event-function (-> obj process) a1-17) ) - ) - (set! (-> v1-12 shove-up) 40960.0) - (set! (-> v1-12 angle) 'up) - (set! (-> v1-12 control) 1.0) - (set! (-> a1-6 param 1) (the-as uint v1-12)) ) - (send-event-function arg0 a1-6) ) - ) ) - ) + 0 + (none) ) - (none) - ) ) -(defmethod - dummy-56 - collide-shape-moving - ((obj collide-shape-moving) (arg0 pat-surface)) - (with-pp - (set! (-> obj cur-pat) arg0) - (set! (-> obj poly-pat) arg0) - (case (-> arg0 material) - (((pat-material ice)) - (set! (-> obj surf) *ice-surface*) - ) - (((pat-material quicksand)) - (set! (-> obj surf) *quicksand-surface*) - ) - (((pat-material tube)) - (set! (-> obj surf) *no-walk-surface*) - ) - (((pat-material rotate)) - (set! (-> obj surf) *rotate-surface*) - ) - (else - (set! (-> obj surf) *standard-ground-surface*) - ) - ) - (if (logtest? (-> obj root-prim prim-core action) 512) - (set! (-> obj surf) *race-track-surface*) - ) - (when (nonzero? (-> arg0 event)) - (case (-> arg0 event) - (((pat-event deadly)) - (let ((a1-3 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-3 from) pp) - (set! (-> a1-3 num-params) 2) - (set! (-> a1-3 message) 'attack) - (set! (-> a1-3 param 0) (the-as uint #f)) - (let ((v1-19 (new 'static 'attack-info :mask #xa0))) - (set! (-> v1-19 mode) 'deadly) - (set! (-> v1-19 shove-up) 12288.0) - (set! (-> a1-3 param 1) (the-as uint v1-19)) - ) - (send-event-function (-> obj process) a1-3) - ) - ) - (((pat-event burn)) - (let ((a1-6 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-6 from) pp) - (set! (-> a1-6 num-params) 2) - (set! (-> a1-6 message) 'attack) - (set! (-> a1-6 param 0) (the-as uint #f)) - (let ((v1-23 (new 'static 'attack-info :mask #xa0))) - (set! (-> v1-23 mode) 'burn) - (set! (-> v1-23 shove-up) 12288.0) - (set! (-> a1-6 param 1) (the-as uint v1-23)) - ) - (send-event-function (-> obj process) a1-6) - ) - ) - (((pat-event deadlyup)) - (target-attack-up - (the-as target (-> obj process)) - 'attack-or-shove - 'deadlyup - ) - ) - (((pat-event burnup)) - (if - (zero? - (logand - (-> - (the-as target (-> obj process)) - control - root-prim - prim-core - action - ) - 512 - ) - ) - (target-attack-up - (the-as target (-> obj process)) - 'attack-or-shove - 'burnup - ) - ) - ) - (((pat-event melt)) - (let ((a1-15 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-15 from) pp) - (set! (-> a1-15 num-params) 2) - (set! (-> a1-15 message) 'attack-invinc) - (set! (-> a1-15 param 0) (the-as uint #f)) - (let ((a2-8 (new 'static 'attack-info :mask #x20))) - (set! (-> a2-8 mode) 'melt) - (set! (-> a1-15 param 1) (the-as uint a2-8)) - ) - (send-event-function (-> obj process) a1-15) - ) - ) - (((pat-event endlessfall)) - (let ((a1-17 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-17 from) pp) - (set! (-> a1-17 num-params) 2) - (set! (-> a1-17 message) 'attack-invinc) - (set! (-> a1-17 param 0) (the-as uint #f)) - (let ((a2-9 (new 'static 'attack-info :mask #x20))) - (set! (-> a2-9 mode) 'endlessfall) - (set! (-> a1-17 param 1) (the-as uint a2-9)) - ) - (send-event-function (-> obj process) a1-17) - ) - ) - ) - ) - 0 - (none) - ) - ) - -(defun - default-collision-reaction - ((arg0 collide-shape-moving) - (arg1 collide-shape-intersect) - (arg2 vector) - (arg3 vector) - ) - (local-vars - (sv-64 vector) - (sv-68 vector) - (sv-72 vector) - (sv-80 int) - (sv-128 symbol) - ) +(defun default-collision-reaction ((arg0 collide-shape-moving) (arg1 collide-shape-intersect) (arg2 vector) (arg3 vector)) + (local-vars (sv-64 vector) (sv-68 vector) (sv-72 vector) (sv-80 int) (sv-128 symbol)) (set! sv-64 (new-stack-vector0)) (set! sv-68 (new-stack-vector0)) (set! sv-72 (new 'stack-no-clear 'vector)) (set! sv-80 0) (set! (-> sv-72 quad) (-> arg3 quad)) (let ((a1-1 (new 'stack-no-clear 'vector))) - (vector-float*! a1-1 (-> arg1 move-vec) (-> arg1 best-u)) - (TODO-RENAME-28 arg0 a1-1) - ) + (vector-float*! a1-1 (-> arg1 move-vec) (-> arg1 best-u)) + (TODO-RENAME-28 arg0 a1-1) + ) (dummy-56 arg0 (-> arg1 best-tri pat)) - (vector-! - sv-64 - (the-as vector (-> arg1 best-from-prim prim-core)) - (-> arg1 best-tri intersect) - ) + (vector-! sv-64 (the-as vector (-> arg1 best-from-prim prim-core)) (-> arg1 best-tri intersect)) (set! (-> sv-64 w) 1.0) (vector-normalize! sv-64 1.0) (set! (-> arg0 coverage) (vector-dot sv-64 (-> arg1 best-tri normal))) (let ((v1-16 (-> sv-64 quad))) - (set! (-> sv-68 quad) v1-16) - ) + (set! (-> sv-68 quad) v1-16) + ) (if (= (-> arg1 best-u) 0.0) - (TODO-RENAME-28 arg0 sv-68) - ) + (TODO-RENAME-28 arg0 sv-68) + ) (set! (-> arg0 surface-normal quad) (-> sv-68 quad)) (set! (-> arg0 poly-normal quad) (-> arg1 best-tri normal quad)) - (set! - (-> arg0 surface-angle) - (vector-dot sv-68 (-> arg0 dynam gravity-normal)) - ) - (set! - (-> arg0 poly-angle) - (vector-dot (-> arg0 poly-normal) (-> arg0 dynam gravity-normal)) - ) - (set! - (-> arg0 touch-angle) - (vector-dot - sv-68 - (vector-normalize! (vector-negate! (new-stack-vector0) sv-72) 1.0) - ) - ) + (set! (-> arg0 surface-angle) (vector-dot sv-68 (-> arg0 dynam gravity-normal))) + (set! (-> arg0 poly-angle) (vector-dot (-> arg0 poly-normal) (-> arg0 dynam gravity-normal))) + (set! (-> arg0 touch-angle) + (vector-dot sv-68 (vector-normalize! (vector-negate! (new-stack-vector0) sv-72) 1.0)) + ) (if (< (-> arg0 poly-angle) -0.2) - (set! sv-80 (logior sv-80 16)) - ) - (set! - sv-128 - (< - (fabs (-> arg0 surface-angle)) - (-> *pat-mode-info* (-> arg0 cur-pat mode) wall-angle) - ) - ) - (when (zero? (logand (-> arg0 prev-status) 1)) - (set! - (-> arg0 ground-impact-vel) - (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal))) - ) - (when (not sv-128) - (let ((f30-0 (- 1.0 (-> arg0 surf impact-fric)))) - (when (< f30-0 1.0) - (let ((s3-1 (new-stack-vector0)) - (f28-0 (vector-dot (-> arg0 dynam gravity-normal) sv-72)) - ) - 0.0 - (vector-! - s3-1 - sv-72 - (vector-float*! s3-1 (-> arg0 dynam gravity-normal) f28-0) - ) - (let* ((f0-22 (vector-length s3-1)) - (f1-4 f0-22) - ) - (if (< f28-0 0.0) - (set! f28-0 (* f28-0 f30-0)) - ) - (vector+! - sv-72 - (vector-float*! sv-72 (-> arg0 dynam gravity-normal) f28-0) - (vector-float*! s3-1 s3-1 (/ f0-22 f1-4)) - ) - ) - ) + (set! sv-80 (logior sv-80 16)) + ) + (set! sv-128 (< (fabs (-> arg0 surface-angle)) (-> *pat-mode-info* (-> arg0 cur-pat mode) wall-angle))) + (when (zero? (logand (-> arg0 prev-status) 1)) + (set! (-> arg0 ground-impact-vel) (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal)))) + (when (not sv-128) + (let ((f30-0 (- 1.0 (-> arg0 surf impact-fric)))) + (when (< f30-0 1.0) + (let ((s3-1 (new-stack-vector0)) + (f28-0 (vector-dot (-> arg0 dynam gravity-normal) sv-72)) + ) + 0.0 + (vector-! s3-1 sv-72 (vector-float*! s3-1 (-> arg0 dynam gravity-normal) f28-0)) + (let* ((f0-22 (vector-length s3-1)) + (f1-4 f0-22) + ) + (if (< f28-0 0.0) + (set! f28-0 (* f28-0 f30-0)) + ) + (vector+! + sv-72 + (vector-float*! sv-72 (-> arg0 dynam gravity-normal) f28-0) + (vector-float*! s3-1 s3-1 (/ f0-22 f1-4)) + ) + ) + ) + ) + ) ) - ) ) - ) (set! sv-80 (logior sv-80 4)) (if (-> arg1 best-to-prim) - (set! sv-80 (logior sv-80 32)) - ) + (set! sv-80 (logior sv-80 32)) + ) (cond - (sv-128 - (set! sv-80 (logior sv-80 8)) - (set! (-> arg0 cur-pat mode) 1) + (sv-128 + (set! sv-80 (logior sv-80 8)) + (set! (-> arg0 cur-pat mode) 1) + ) + (else + (set! sv-80 (logior sv-80 1)) + (set! (-> arg0 local-normal quad) (-> sv-68 quad)) + ) ) - (else - (set! sv-80 (logior sv-80 1)) - (set! (-> arg0 local-normal quad) (-> sv-68 quad)) - ) - ) (vector-reflect-flat! arg2 sv-72 sv-68) (when (and (not sv-128) (>= (-> arg0 coverage) 0.9)) - (set! sv-80 (logior sv-80 2)) - (set! (-> arg0 ground-poly-normal quad) (-> arg0 poly-normal quad)) - (when (!= (-> arg0 poly-pat mode) (pat-mode wall)) - (set! (-> arg0 ground-pat) (-> arg0 poly-pat)) - (set! (-> arg0 ground-touch-point quad) (-> arg1 best-tri intersect quad)) + (set! sv-80 (logior sv-80 2)) + (set! (-> arg0 ground-poly-normal quad) (-> arg0 poly-normal quad)) + (when (!= (-> arg0 poly-pat mode) (pat-mode wall)) + (set! (-> arg0 ground-pat) (-> arg0 poly-pat)) + (set! (-> arg0 ground-touch-point quad) (-> arg1 best-tri intersect quad)) + ) ) - ) (logior! (-> arg0 status) sv-80) sv-80 (none) ) -(defun - simple-collision-reaction - ((arg0 collide-shape-moving) (arg1 collide-shape-intersect)) +(defun simple-collision-reaction ((arg0 collide-shape-moving) (arg1 collide-shape-intersect)) (let ((s5-0 0)) - (let ((a1-1 (new 'stack-no-clear 'vector))) - (vector-float*! a1-1 (-> arg1 move-vec) (-> arg1 best-u)) - (TODO-RENAME-28 arg0 a1-1) + (let ((a1-1 (new 'stack-no-clear 'vector))) + (vector-float*! a1-1 (-> arg1 move-vec) (-> arg1 best-u)) + (TODO-RENAME-28 arg0 a1-1) + ) + (let ((f0-2 (vector-dot (-> arg0 transv) (-> arg1 best-tri normal))) + (v1-6 (new 'stack-no-clear 'vector)) + ) + (vector-float*! v1-6 (-> arg1 best-tri normal) (* 1.5 f0-2)) + (vector-! (-> arg0 transv) (-> arg0 transv) v1-6) + ) + (let ((v0-1 (logior s5-0 7))) + (logior! (-> arg0 status) v0-1) + ) ) - (let ((f0-2 (vector-dot (-> arg0 transv) (-> arg1 best-tri normal))) - (v1-6 (new 'stack-no-clear 'vector)) - ) - (vector-float*! v1-6 (-> arg1 best-tri normal) (* 1.5 f0-2)) - (vector-! (-> arg0 transv) (-> arg0 transv) v1-6) - ) - (let ((v0-1 (logior s5-0 7))) - (logior! (-> arg0 status) v0-1) - ) - ) (none) ) -(defmethod - dummy-63 - collide-shape-moving - ((obj collide-shape-moving) (arg0 vector) (arg1 vector) (arg2 float)) +(defmethod dummy-63 collide-shape-moving ((obj collide-shape-moving) (arg0 vector) (arg1 vector) (arg2 float)) (local-vars (sv-192 int)) (let ((s5-0 (new 'stack 'collide-shape-intersect)) (s2-0 (new 'stack-no-clear 'vector)) ) - (vector-float*! s2-0 arg1 (* arg2 (-> *display* seconds-per-frame))) - (init! s5-0 s2-0) - (let* ((s1-1 (-> obj root-prim)) - (v1-4 *collide-cache*) - (s0-0 (the-as collide-cache-prim (-> v1-4 prims))) + (vector-float*! s2-0 arg1 (* arg2 (-> *display* seconds-per-frame))) + (init! s5-0 s2-0) + (let* ((s1-1 (-> obj root-prim)) + (v1-4 *collide-cache*) + (s0-0 (the-as collide-cache-prim (-> v1-4 prims))) + ) + (set! sv-192 (-> v1-4 num-prims)) + (while (nonzero? sv-192) + (set! sv-192 (+ sv-192 -1)) + (when (logtest? (-> s1-1 collide-with) (-> s0-0 prim-core collide-as)) + (if (>= (-> s0-0 prim-core prim-type) 0) + (collide-with-collide-cache-prim-mesh s1-1 s5-0 s0-0) + (collide-with-collide-cache-prim-sphere s1-1 s5-0 s0-0) + ) ) - (set! sv-192 (-> v1-4 num-prims)) - (while (nonzero? sv-192) - (set! sv-192 (+ sv-192 -1)) - (when (logtest? (-> s1-1 collide-with) (-> s0-0 prim-core collide-as)) - (if (>= (-> s0-0 prim-core prim-type) 0) - (collide-with-collide-cache-prim-mesh s1-1 s5-0 s0-0) - (collide-with-collide-cache-prim-sphere s1-1 s5-0 s0-0) - ) + (set! s0-0 (-> (the-as (inline-array collide-cache-prim) s0-0) 1)) + ) + ) + (let ((f30-0 (-> s5-0 best-u))) + (cond + ((>= f30-0 0.0) + (let ((s2-1 (new 'stack-no-clear 'vector))) + (if *display-collision-marks* + (set! (-> s2-1 quad) (-> arg1 quad)) + ) + (set! (-> obj prev-status) (the-as uint ((-> obj reaction) obj s5-0 arg0 arg1))) + (when *display-collision-marks* + (let ((t1-0 (-> *pat-mode-info* (-> s5-0 best-tri pat mode) hilite-color))) + (add-debug-outline-triangle + #t + (bucket-id debug-draw1) + (the-as vector (-> s5-0 best-tri)) + (-> s5-0 best-tri vertex 1) + (-> s5-0 best-tri vertex 2) + t1-0 + ) + ) + (add-debug-vector + #t + (bucket-id debug-draw1) + (-> s5-0 best-tri intersect) + s2-1 + (meters 0.00007324219) + (new 'static 'rgba :r #xff :g #xa0 :a #x80) + ) + (add-debug-vector + #t + (bucket-id debug-draw1) + (-> s5-0 best-tri intersect) + arg0 + (meters 0.00007324219) + (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) + ) + (if (= (-> obj process type) target) + (add-debug-vector + #t + (bucket-id debug-draw1) + (-> s5-0 best-tri intersect) + (-> obj surface-normal) + (meters 0.5) + (-> *pat-mode-info* (-> obj cur-pat mode) hilite-color) + ) + ) + ) + ) + (return f30-0) + ) + (else + (set! (-> obj reaction-flag) (the-as uint 0)) + ((-> obj no-reaction) obj s5-0 arg0 arg1) + (set! (-> obj prev-status) (the-as uint 0)) + (TODO-RENAME-28 obj s2-0) + (set! (-> arg0 quad) (-> arg1 quad)) + (return 1.0) + ) + ) ) - (set! s0-0 (-> (the-as (inline-array collide-cache-prim) s0-0) 1)) - ) ) - (let ((f30-0 (-> s5-0 best-u))) - (cond - ((>= f30-0 0.0) - (let ((s2-1 (new 'stack-no-clear 'vector))) - (if *display-collision-marks* - (set! (-> s2-1 quad) (-> arg1 quad)) - ) - (set! - (-> obj prev-status) - (the-as uint ((-> obj reaction) obj s5-0 arg0 arg1)) - ) - (when *display-collision-marks* - (let - ((t1-0 (-> *pat-mode-info* (-> s5-0 best-tri pat mode) hilite-color))) - (add-debug-outline-triangle - #t - (bucket-id debug-draw1) - (the-as vector (-> s5-0 best-tri)) - (-> s5-0 best-tri vertex 1) - (-> s5-0 best-tri vertex 2) - t1-0 - ) - ) - (add-debug-vector - #t - (bucket-id debug-draw1) - (-> s5-0 best-tri intersect) - s2-1 - (meters 0.00007324219) - (new 'static 'rgba :r #xff :g #xa0 :a #x80) - ) - (add-debug-vector - #t - (bucket-id debug-draw1) - (-> s5-0 best-tri intersect) - arg0 - (meters 0.00007324219) - (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) - ) - (if (= (-> obj process type) target) - (add-debug-vector - #t - (bucket-id debug-draw1) - (-> s5-0 best-tri intersect) - (-> obj surface-normal) - (meters 0.5) - (-> *pat-mode-info* (-> obj cur-pat mode) hilite-color) - ) - ) - ) - ) - (return f30-0) - ) - (else - (set! (-> obj reaction-flag) (the-as uint 0)) - ((-> obj no-reaction) obj s5-0 arg0 arg1) - (set! (-> obj prev-status) (the-as uint 0)) - (TODO-RENAME-28 obj s2-0) - (set! (-> arg0 quad) (-> arg1 quad)) - (return 1.0) - ) - ) - ) - ) (the-as none 0) (the-as float 1.0) ) @@ -775,28 +594,25 @@ (vf1 :class vf) (vf2 :class vf) ) - (init-vf0-vector) - (let ((t9-0 (method-of-object obj TODO-RENAME-28)) - (v1-1 (new 'stack-no-clear 'vector)) - ) - (.lvf vf1 (&-> arg0 quad)) - (let ((f0-0 (-> *display* seconds-per-frame))) - (.mov at-0 f0-0) - ) - (.mov vf2 at-0) - (.mov.vf vf1 vf0 :mask #b1000) - (.mul.x.vf vf1 vf1 vf2 :mask #b111) - (.svf (&-> v1-1 quad) vf1) - (t9-0 obj v1-1) + (init-vf0-vector) + (let ((t9-0 (method-of-object obj TODO-RENAME-28)) + (v1-1 (new 'stack-no-clear 'vector)) + ) + (.lvf vf1 (&-> arg0 quad)) + (let ((f0-0 (-> *display* seconds-per-frame))) + (.mov at-0 f0-0) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-1 quad) vf1) + (t9-0 obj v1-1) + ) + (none) ) - (none) - ) ) -(defmethod - dummy-37 - collide-shape-moving - ((obj collide-shape-moving) (arg0 vector)) +(defmethod dummy-37 collide-shape-moving ((obj collide-shape-moving) (arg0 vector)) (dummy-47 obj) (set! (-> obj trans-old 2 quad) (-> obj trans-old 1 quad)) (set! (-> obj trans-old 1 quad) (-> obj trans-old 0 quad)) @@ -811,21 +627,18 @@ (let ((f30-0 1.0) (s4-0 0) ) - (while - (and - (< 0.05 f30-0) - (and - (< s4-0 (the-as int (-> obj max-iteration-count))) - (not (and (= (-> arg0 x) 0.0) (= (-> arg0 y) 0.0) (= (-> arg0 z) 0.0))) + (while (and (< 0.05 f30-0) (and + (< s4-0 (the-as int (-> obj max-iteration-count))) + (not (and (= (-> arg0 x) 0.0) (= (-> arg0 y) 0.0) (= (-> arg0 z) 0.0))) + ) + ) + (let ((f28-0 (dummy-63 obj arg0 arg0 f30-0))) + (dummy-11 *touching-list* f28-0) + (set! f30-0 (- f30-0 (* f28-0 f30-0))) + ) + (+! s4-0 1) ) - ) - (let ((f28-0 (dummy-63 obj arg0 arg0 f30-0))) - (dummy-11 *touching-list* f28-0) - (set! f30-0 (- f30-0 (* f28-0 f30-0))) - ) - (+! s4-0 1) ) - ) 0 (none) ) @@ -833,190 +646,113 @@ (defmethod dummy-37 control-info ((obj control-info) (arg0 vector)) (stopwatch-start (-> *collide-stats* total-target)) (when (< 1638400.0 (vector-length arg0)) - (format - 0 - "WARNING: target vel is ~M m/s, reseting to zero.~%" - (vector-length arg0) + (format 0 "WARNING: target vel is ~M m/s, reseting to zero.~%" (vector-length arg0)) + (vector-reset! arg0) ) - (vector-reset! arg0) - ) (set! (-> obj unknown-vector15 quad) (-> obj unknown-vector14 quad)) - (vector-matrix*! - (-> obj unknown-vector14) - (-> obj unknown-vector13) - (-> obj unknown-matrix02) - ) - (vector-! - (-> obj unknown-vector16) - (-> obj unknown-vector14) - (-> obj unknown-vector15) - ) - (let - ((a1-6 - (vector-! - (new 'stack-no-clear 'vector) - (-> obj unknown-vector11) - (-> obj unknown-vector14) - ) - ) + (vector-matrix*! (-> obj unknown-vector14) (-> obj unknown-vector13) (-> obj unknown-matrix02)) + (vector-! (-> obj unknown-vector16) (-> obj unknown-vector14) (-> obj unknown-vector15)) + (let ((a1-6 (vector-! (new 'stack-no-clear 'vector) (-> obj unknown-vector11) (-> obj unknown-vector14)))) + (vector-seek! (-> obj unknown-vector12) a1-6 (* 16384.0 (-> *display* seconds-per-frame))) ) - (vector-seek! - (-> obj unknown-vector12) - a1-6 - (* 16384.0 (-> *display* seconds-per-frame)) - ) - ) - (let - ((s3-1 - (vector+float*! (new-stack-vector0) arg0 (-> obj unknown-vector16) 60.0) - ) - (s4-1 (new 'stack-no-clear 'vector)) - ) - (set! (-> s4-1 quad) (-> arg0 quad)) - (let ((t9-7 (method-of-type collide-shape-moving dummy-37))) - (t9-7 obj s3-1) - ) - (let ((s1-0 (new-stack-vector0))) - (set! (-> s1-0 quad) (-> s4-1 quad)) - (let ((s2-1 (new-stack-vector0))) - (set! (-> s2-1 quad) (-> s3-1 quad)) - (let ((s0-0 (new-stack-vector0))) - (let ((f0-4 (vector-dot (-> obj dynam gravity-normal) s1-0))) - 0.0 - (vector-! - s0-0 - s1-0 - (vector-float*! s0-0 (-> obj dynam gravity-normal) f0-4) + (let ((s3-1 (vector+float*! (new-stack-vector0) arg0 (-> obj unknown-vector16) 60.0)) + (s4-1 (new 'stack-no-clear 'vector)) ) - ) - (let* ((f0-5 (vector-length s0-0)) - (f1-2 f0-5) - (f2-0 0.0) + (set! (-> s4-1 quad) (-> arg0 quad)) + (let ((t9-7 (method-of-type collide-shape-moving dummy-37))) + (t9-7 obj s3-1) + ) + (let ((s1-0 (new-stack-vector0))) + (set! (-> s1-0 quad) (-> s4-1 quad)) + (let ((s2-1 (new-stack-vector0))) + (set! (-> s2-1 quad) (-> s3-1 quad)) + (let ((s0-0 (new-stack-vector0))) + (let ((f0-4 (vector-dot (-> obj dynam gravity-normal) s1-0))) + 0.0 + (vector-! s0-0 s1-0 (vector-float*! s0-0 (-> obj dynam gravity-normal) f0-4)) + ) + (let* ((f0-5 (vector-length s0-0)) + (f1-2 f0-5) + (f2-0 0.0) + ) + (vector+! + s1-0 + (vector-float*! s1-0 (-> obj dynam gravity-normal) f2-0) + (vector-float*! s0-0 s0-0 (/ f0-5 f1-2)) + ) + ) + ) + (let ((s0-1 (new-stack-vector0))) + (let ((f0-8 (vector-dot (-> obj dynam gravity-normal) s2-1))) + 0.0 + (vector-! s0-1 s2-1 (vector-float*! s0-1 (-> obj dynam gravity-normal) f0-8)) + ) + (let* ((f0-9 (vector-length s0-1)) + (f1-4 f0-9) + (f2-1 0.0) + ) + (vector+! + s2-1 + (vector-float*! s2-1 (-> obj dynam gravity-normal) f2-1) + (vector-float*! s0-1 s0-1 (/ f0-9 f1-4)) + ) + ) + ) + (vector-normalize! s1-0 1.0) + (vector-normalize! s2-1 1.0) + (let ((f30-1 (vector-dot s1-0 s2-1))) + (cond + ((and (!= (vector-length (-> obj unknown-vector01)) 0.0) (if (logtest? (-> obj status) 8) + (< f30-1 0.9999) + (< f30-1 0.95) + ) + ) + (set! (-> obj unknown-float70) (seek (-> obj unknown-float70) 1.0 (* 4.0 (-> *display* seconds-per-frame)))) + (set! (-> obj unknown-float71) (seek + (-> obj unknown-float71) + (if (= (-> obj unknown-surface00 mode) 'air) + 1.0 + 0.0 + ) + (* 4.0 (-> *display* seconds-per-frame)) + ) + ) + (logior! (-> obj status) 512) ) - (vector+! - s1-0 - (vector-float*! s1-0 (-> obj dynam gravity-normal) f2-0) - (vector-float*! s0-0 s0-0 (/ f0-5 f1-2)) - ) - ) - ) - (let ((s0-1 (new-stack-vector0))) - (let ((f0-8 (vector-dot (-> obj dynam gravity-normal) s2-1))) - 0.0 - (vector-! - s0-1 - s2-1 - (vector-float*! s0-1 (-> obj dynam gravity-normal) f0-8) - ) - ) - (let* ((f0-9 (vector-length s0-1)) - (f1-4 f0-9) - (f2-1 0.0) - ) - (vector+! - s2-1 - (vector-float*! s2-1 (-> obj dynam gravity-normal) f2-1) - (vector-float*! s0-1 s0-1 (/ f0-9 f1-4)) - ) - ) - ) - (vector-normalize! s1-0 1.0) - (vector-normalize! s2-1 1.0) - (let ((f30-1 (vector-dot s1-0 s2-1))) - (cond - ((and - (!= (vector-length (-> obj unknown-vector01)) 0.0) - (if (logtest? (-> obj status) 8) - (< f30-1 0.9999) - (< f30-1 0.95) + (else + (set! (-> obj unknown-float70) (seek (-> obj unknown-float70) 0.0 (* 2.0 (-> *display* seconds-per-frame)))) + (set! (-> obj unknown-float71) (seek (-> obj unknown-float71) 0.0 (* 2.0 (-> *display* seconds-per-frame)))) + ) + ) ) - ) - (set! - (-> obj unknown-float70) - (seek - (-> obj unknown-float70) - 1.0 - (* 4.0 (-> *display* seconds-per-frame)) - ) - ) - (set! - (-> obj unknown-float71) - (seek - (-> obj unknown-float71) - (if (= (-> obj unknown-surface00 mode) 'air) - 1.0 - 0.0 - ) - (* 4.0 (-> *display* seconds-per-frame)) - ) - ) - (logior! (-> obj status) 512) ) - (else - (set! - (-> obj unknown-float70) - (seek - (-> obj unknown-float70) - 0.0 - (* 2.0 (-> *display* seconds-per-frame)) - ) - ) - (set! - (-> obj unknown-float71) - (seek - (-> obj unknown-float71) - 0.0 - (* 2.0 (-> *display* seconds-per-frame)) - ) - ) + ) + (if (logtest? (-> obj status) 1) + (set! (-> arg0 quad) (-> s3-1 quad)) + (vector--float*! arg0 s3-1 (-> obj unknown-vector16) 60.0) + ) + (if (and + (logtest? (-> obj status) 1) + (and (zero? (logand (-> obj status) 520)) (< (vector-length (-> obj unknown-vector61)) (vector-length s4-1))) + ) + (set! (-> obj unknown-vector61 quad) (-> s4-1 quad)) ) - ) - ) - ) ) - (if (logtest? (-> obj status) 1) - (set! (-> arg0 quad) (-> s3-1 quad)) - (vector--float*! arg0 s3-1 (-> obj unknown-vector16) 60.0) + (let ((s5-1 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> obj unknown-vector120) 1.0)) + (f0-32 (vector-length (-> obj unknown-vector120))) + ) + (set! (-> obj unknown-float140) (if (= f0-32 0.0) + 0.0 + (fmax 0.0 (/ (vector-dot (-> obj transv) s5-1) f0-32)) + ) + ) ) - (if - (and - (logtest? (-> obj status) 1) - (and - (zero? (logand (-> obj status) 520)) - (< (vector-length (-> obj unknown-vector61)) (vector-length s4-1)) - ) - ) - (set! (-> obj unknown-vector61 quad) (-> s4-1 quad)) - ) - ) - (let - ((s5-1 - (vector-normalize-copy! - (new 'stack-no-clear 'vector) - (the-as vector (-> obj unknown-vector120)) - 1.0 - ) - ) - (f0-32 (vector-length (the-as vector (-> obj unknown-vector120)))) - ) - (set! (-> obj unknown-float140) (if (= f0-32 0.0) - 0.0 - (fmax - 0.0 - (/ (vector-dot (-> obj transv) s5-1) f0-32) - ) - ) - ) - ) (stopwatch-stop (-> *collide-stats* total-target)) 0 (none) ) -(defmethod - TODO-RENAME-61 - collide-shape-moving - ((obj collide-shape-moving) (arg0 vector) (arg1 vector) (arg2 vector)) +(defmethod TODO-RENAME-61 collide-shape-moving ((obj collide-shape-moving) (arg0 vector) (arg1 vector) (arg2 vector)) (TODO-RENAME-30 obj arg0) (set! (-> arg1 y) 0.0) (logior! (-> obj status) 7) @@ -1024,84 +760,72 @@ (set! (-> obj surface-normal quad) (-> arg2 quad)) (set! (-> obj local-normal quad) (-> arg2 quad)) (set! (-> obj ground-poly-normal quad) (-> arg2 quad)) - (set! - (-> obj ground-impact-vel) - (- (vector-dot arg1 (-> obj dynam gravity-normal))) - ) + (set! (-> obj ground-impact-vel) (- (vector-dot arg1 (-> obj dynam gravity-normal)))) (set! (-> obj ground-touch-point quad) (-> arg0 quad)) 0 (none) ) -(defmethod - dummy-57 - collide-shape-moving - ((obj collide-shape-moving) (arg0 vector)) +(defmethod dummy-57 collide-shape-moving ((obj collide-shape-moving) (arg0 vector)) (local-vars (at-0 int)) (rlet ((vf0 :class vf) (vf1 :class vf) (vf2 :class vf) ) - (init-vf0-vector) - (dummy-47 obj) - (set! (-> obj trans-old 2 quad) (-> obj trans-old 1 quad)) - (set! (-> obj trans-old 1 quad) (-> obj trans-old 0 quad)) - (set! (-> obj trans-old 0 quad) (-> obj trans quad)) - (set! (-> obj prev-status) (-> obj status)) - (set! (-> obj status) (logand -16128 (-> obj status))) - (set! (-> obj local-normal quad) (-> obj dynam gravity-normal quad)) - (set! (-> obj surface-normal quad) (-> obj dynam gravity-normal quad)) - (set! (-> obj poly-normal quad) (-> obj dynam gravity-normal quad)) - (set! (-> obj coverage) 0.0) - (set! (-> obj touch-angle) 0.0) - (let* ((a0-12 obj) - (t9-1 (method-of-object a0-12 TODO-RENAME-28)) - (a1-1 (new 'stack-no-clear 'vector)) - ) - (.lvf vf1 (&-> arg0 quad)) - (let ((f0-2 (-> *display* seconds-per-frame))) - (.mov at-0 f0-2) - ) - (.mov vf2 at-0) - (.mov.vf vf1 vf0 :mask #b1000) - (.mul.x.vf vf1 vf1 vf2 :mask #b111) - (.svf (&-> a1-1 quad) vf1) - (t9-1 a0-12 a1-1) + (init-vf0-vector) + (dummy-47 obj) + (set! (-> obj trans-old 2 quad) (-> obj trans-old 1 quad)) + (set! (-> obj trans-old 1 quad) (-> obj trans-old 0 quad)) + (set! (-> obj trans-old 0 quad) (-> obj trans quad)) + (set! (-> obj prev-status) (-> obj status)) + (set! (-> obj status) (logand -16128 (-> obj status))) + (set! (-> obj local-normal quad) (-> obj dynam gravity-normal quad)) + (set! (-> obj surface-normal quad) (-> obj dynam gravity-normal quad)) + (set! (-> obj poly-normal quad) (-> obj dynam gravity-normal quad)) + (set! (-> obj coverage) 0.0) + (set! (-> obj touch-angle) 0.0) + (let* ((a0-12 obj) + (t9-1 (method-of-object a0-12 TODO-RENAME-28)) + (a1-1 (new 'stack-no-clear 'vector)) + ) + (.lvf vf1 (&-> arg0 quad)) + (let ((f0-2 (-> *display* seconds-per-frame))) + (.mov at-0 f0-2) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> a1-1 quad) vf1) + (t9-1 a0-12 a1-1) + ) + (set! (-> obj shadow-pos quad) (-> obj trans quad)) + 0 + (none) ) - (set! (-> obj shadow-pos quad) (-> obj trans quad)) - 0 - (none) - ) ) -(defmethod - dummy-58 - collide-shape-moving - ((obj collide-shape-moving) (arg0 vector)) +(defmethod dummy-58 collide-shape-moving ((obj collide-shape-moving) (arg0 vector)) (dummy-57 obj arg0) (let ((a1-1 (new 'stack-no-clear 'touching-shapes-entry))) - (set! (-> a1-1 cshape1) (the-as collide-shape 1)) - (set! (-> a1-1 cshape2) (the-as collide-shape *touching-list*)) - (when (dummy-40 obj a1-1) - (TODO-RENAME-30 obj (the-as vector (-> obj trans-old))) - (return #t) + (set! (-> a1-1 cshape1) (the-as collide-shape 1)) + (set! (-> a1-1 cshape2) (the-as collide-shape *touching-list*)) + (when (dummy-40 obj a1-1) + (TODO-RENAME-30 obj (the-as vector (-> obj trans-old))) + (return #t) + ) ) - ) #f ) -(defmethod - dummy-64 - collide-shape-moving - ((obj collide-shape-moving) (arg0 collide-tri-result) (arg1 vector)) +(defmethod dummy-64 collide-shape-moving ((obj collide-shape-moving) (arg0 collide-tri-result) (arg1 vector)) (TODO-RENAME-30 obj arg1) (logior! (-> obj status) 7) (let ((v1-4 (-> arg0 normal))) - (set! (-> obj poly-normal quad) (-> v1-4 quad)) - (set! (-> obj surface-normal quad) (-> v1-4 quad)) - (set! (-> obj local-normal quad) (-> v1-4 quad)) - (set! (-> obj ground-poly-normal quad) (-> v1-4 quad)) - ) + (set! (-> obj poly-normal quad) (-> v1-4 quad)) + (set! (-> obj surface-normal quad) (-> v1-4 quad)) + (set! (-> obj local-normal quad) (-> v1-4 quad)) + (set! (-> obj ground-poly-normal quad) (-> v1-4 quad)) + ) (set! (-> obj poly-pat) (-> arg0 pat)) (set! (-> obj cur-pat) (-> arg0 pat)) (set! (-> obj ground-pat) (-> arg0 pat)) @@ -1111,179 +835,143 @@ ) ;; WARN: Stack slot offset 128 signed mismatch -(defmethod - dummy-59 - collide-shape-moving - ((obj collide-shape-moving) - (arg0 vector) - (arg1 uint) - (arg2 float) - (arg3 symbol) - (arg4 symbol) - (arg5 symbol) - ) - (local-vars (sv-128 float) (sv-144 collide-mesh-cache-tri)) +(defmethod dummy-59 collide-shape-moving ((obj collide-shape-moving) (arg0 vector) (arg1 uint) (arg2 float) (arg3 symbol) (arg4 symbol) (arg5 symbol)) + (local-vars (sv-128 float) (sv-144 collide-tri-result)) (set! sv-128 arg2) (let ((s5-0 arg3)) - (let ((s3-0 arg4) - (s1-0 arg5) - ) - (if *debug-segment* - (add-frame - (-> *display* frames (-> *display* on-screen) frame profile-bar 0) - 'draw - (new 'static 'rgba :r #x40 :b #x40 :a #x80) - ) - ) - (dummy-57 obj arg0) - (let ((s0-0 (-> obj shadow-pos))) - (set! (-> s0-0 quad) (-> obj trans quad)) - (set! sv-144 (new 'stack-no-clear 'collide-mesh-cache-tri)) - (+! (-> s0-0 y) sv-128) - 0.0 - (let ((f0-4 (if s1-0 - (misty-ambush-height-probe s0-0 81920.0) - (dummy-10 - *collide-cache* - s0-0 - (new 'static 'vector :y -81920.0 :w 1.0) - 40.96 - (the-as int arg1) - (-> obj process) - sv-144 - 1 - ) - ) - ) - ) - (cond - ((>= f0-4 0.0) - (let ((a2-3 (new 'static 'vector :y -81920.0 :w 1.0))) - (vector+float*! s0-0 s0-0 a2-3 f0-4) - ) - (when (>= (-> s0-0 y) (-> obj trans y)) - (dummy-64 obj (the-as collide-tri-result sv-144) s0-0) - (set! - (-> obj ground-impact-vel) - (- (vector-dot arg0 (-> obj dynam gravity-normal))) + (let ((s3-0 arg4) + (s1-0 arg5) + ) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x40 :b #x40 :a #x80) + ) + ) + (dummy-57 obj arg0) + (let ((s0-0 (-> obj shadow-pos))) + (set! (-> s0-0 quad) (-> obj trans quad)) + (set! sv-144 (new 'stack-no-clear 'collide-tri-result)) + (+! (-> s0-0 y) sv-128) + 0.0 + (let ((f0-4 (if s1-0 + (misty-ambush-height-probe s0-0 81920.0) + (dummy-10 + *collide-cache* + s0-0 + (new 'static 'vector :y -81920.0 :w 1.0) + 40.96 + (the-as int arg1) + (-> obj process) + sv-144 + 1 + ) + ) + ) + ) + (cond + ((>= f0-4 0.0) + (let ((a2-3 (new 'static 'vector :y -81920.0 :w 1.0))) + (vector+float*! s0-0 s0-0 a2-3 f0-4) + ) + (when (>= (-> s0-0 y) (-> obj trans y)) + (dummy-64 obj sv-144 s0-0) + (set! (-> obj ground-impact-vel) (- (vector-dot arg0 (-> obj dynam gravity-normal)))) + (set! (-> arg0 y) 0.0) + ) + ) + (s3-0 + (set! (-> obj trans y) (-> obj trans-old 0 y)) + ) + ) ) - (set! (-> arg0 y) 0.0) - ) ) - (s3-0 - (set! (-> obj trans y) (-> obj trans-old 0 y)) + ) + (when (logtest? (-> obj root-prim collide-with) 30) + (let ((a1-7 (new 'stack-no-clear 'touching-shapes-entry))) + (set! (-> a1-7 cshape1) (the-as collide-shape 1)) + (set! (-> a1-7 cshape2) (the-as collide-shape *touching-list*)) + (when (dummy-40 obj a1-7) + (if s5-0 + (TODO-RENAME-30 obj (the-as vector (-> obj trans-old))) + ) + ) ) - ) ) - ) ) - (when (logtest? (-> obj root-prim collide-with) 30) - (let ((a1-7 (new 'stack-no-clear 'touching-shapes-entry))) - (set! (-> a1-7 cshape1) (the-as collide-shape 1)) - (set! (-> a1-7 cshape2) (the-as collide-shape *touching-list*)) - (when (dummy-40 obj a1-7) - (if s5-0 - (TODO-RENAME-30 obj (the-as vector (-> obj trans-old))) - ) - ) - ) - ) - ) (if *debug-segment* - (add-frame - (-> *display* frames (-> *display* on-screen) frame profile-bar 0) - 'draw - (new 'static 'rgba :g #xff :a #x80) - ) - ) + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :g #xff :a #x80) + ) + ) 0 (none) ) -(defmethod - dummy-60 - collide-shape-moving - ((obj collide-shape-moving) - (arg0 float) - (arg1 float) - (arg2 symbol) - (arg3 uint) - ) +(defmethod dummy-60 collide-shape-moving ((obj collide-shape-moving) (arg0 float) (arg1 float) (arg2 symbol) (arg3 uint)) (if *debug-segment* - (add-frame - (-> *display* frames (-> *display* on-screen) frame profile-bar 0) - 'draw - (new 'static 'rgba :r #x40 :b #x40 :a #x80) - ) - ) + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x40 :b #x40 :a #x80) + ) + ) (let ((s4-0 (new 'stack-no-clear 'vector)) (s3-0 (new 'stack-no-clear 'collide-tri-result)) ) - (let ((f30-0 (+ arg0 arg1))) - (set! (-> s4-0 quad) (-> obj trans quad)) - (+! (-> s4-0 y) arg0) - 0.0 - (let - ((f0-4 - (fill-and-probe-using-y-probe - *collide-cache* - s4-0 - f30-0 - arg3 - (-> obj process) - s3-0 - (the-as uint 1) + (let ((f30-0 (+ arg0 arg1))) + (set! (-> s4-0 quad) (-> obj trans quad)) + (+! (-> s4-0 y) arg0) + 0.0 + (let ((f0-4 (fill-and-probe-using-y-probe *collide-cache* s4-0 f30-0 arg3 (-> obj process) s3-0 (the-as uint 1)))) + (when (< f0-4 0.0) + (if arg2 + (format + 0 + "WARNING: move-to-ground: (~f ~f) failed to locate ground [~S type ~S]~%" + (* 0.00024414062 (-> s4-0 y)) + (* 0.00024414062 f30-0) + (-> obj process name) + (-> obj process type symbol) + ) + ) + (return #f) + ) + (set! (-> s4-0 y) (- (-> s4-0 y) (* f0-4 f30-0))) ) - ) ) - (when (< f0-4 0.0) - (if arg2 - (format - 0 - "WARNING: move-to-ground: (~f ~f) failed to locate ground [~S type ~S]~%" - (* 0.00024414062 (-> s4-0 y)) - (* 0.00024414062 f30-0) - (-> obj process name) - (-> obj process type symbol) - ) - ) - (return #f) - ) - (set! (-> s4-0 y) (- (-> s4-0 y) (* f0-4 f30-0))) - ) + (set! (-> obj shadow-pos quad) (-> s4-0 quad)) + (dummy-64 obj s3-0 s4-0) ) - (set! (-> obj shadow-pos quad) (-> s4-0 quad)) - (dummy-64 obj s3-0 s4-0) - ) (if *debug-segment* - (add-frame - (-> *display* frames (-> *display* on-screen) frame profile-bar 0) - 'draw - (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) - ) - ) + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) + ) + ) #t ) -(defmethod - dummy-62 - collide-shape-moving - ((obj collide-shape-moving) (arg0 vector) (arg1 float)) +(defmethod dummy-62 collide-shape-moving ((obj collide-shape-moving) (arg0 vector) (arg1 float)) (let* ((s4-0 (vector-negate! (new-stack-vector0) (-> obj dynam gravity))) (a2-1 (-> obj local-normal)) (a2-2 (vector-reflect-flat! (new-stack-vector0) s4-0 a2-1)) ) - (vector--float*! arg0 s4-0 a2-2 (cond - ((logtest? (-> obj status) 1) - (empty) - arg1 - ) - (else - 0.0 - ) - ) + (vector--float*! arg0 s4-0 a2-2 (cond + ((logtest? (-> obj status) 1) + (empty) + arg1 + ) + (else + 0.0 + ) + ) + ) ) - ) arg0 ) @@ -1293,96 +981,87 @@ (vf1 :class vf) (vf2 :class vf) ) - (init-vf0-vector) - (let ((a0-1 (new 'stack-no-clear 'vector))) - (let ((v1-0 a0-1)) - (.lvf vf1 (&-> arg0 quad)) - (let ((f0-0 (-> *display* seconds-per-frame))) - (.mov at-0 f0-0) - ) - (.mov vf2 at-0) - (.mov.vf vf1 vf0 :mask #b1000) - (.mul.x.vf vf1 vf1 vf2 :mask #b111) - (.svf (&-> v1-0 quad) vf1) - ) - (let ((f0-2 (+ (vector-length a0-1) (if (= (-> obj process type) target) - 4096.0 - 0.0 - ) - ) - ) + (init-vf0-vector) + (let ((a0-1 (new 'stack-no-clear 'vector))) + (let ((v1-0 a0-1)) + (.lvf vf1 (&-> arg0 quad)) + (let ((f0-0 (-> *display* seconds-per-frame))) + (.mov at-0 f0-0) ) - (dummy-32 obj f0-2 arg1) - ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-0 quad) vf1) + ) + (let ((f0-2 (+ (vector-length a0-1) (if (= (-> obj process type) target) + 4096.0 + 0.0 + ) + ) + ) + ) + (dummy-32 obj f0-2 arg1) + ) + ) + (dummy-37 obj arg0) + (none) ) - (dummy-37 obj arg0) - (none) - ) ) (defmethod dummy-32 collide-shape ((obj collide-shape) (arg0 object) (arg1 uint)) (let ((s5-0 (new 'stack-no-clear 'bounding-box))) - (cond - ((dummy-36 obj s5-0 (the-as float arg0) arg1) - (dummy-13 - *collide-cache* - s5-0 - arg1 - (-> obj process) - (the-as uint (-> obj pat-ignore-mask)) + (cond + ((dummy-36 obj s5-0 (the-as float arg0) arg1) + (dummy-13 *collide-cache* s5-0 arg1 (-> obj process) (the-as uint (-> obj pat-ignore-mask))) + (if (and *display-collide-cache* (= (-> obj process type) target)) + (dummy-9 *collide-cache*) + ) + ) + (else + (initialize *collide-cache*) + ) ) - (if (and *display-collide-cache* (= (-> obj process type) target)) - (dummy-9 *collide-cache*) - ) - ) - (else - (initialize *collide-cache*) - ) ) - ) (none) ) -(defmethod - dummy-36 - collide-shape - ((obj collide-shape) (arg0 bounding-box) (arg1 float) (arg2 uint)) +(defmethod dummy-36 collide-shape ((obj collide-shape) (arg0 bounding-box) (arg1 float) (arg2 uint)) (rlet ((vf0 :class vf) (vf1 :class vf) (vf29 :class vf) (vf30 :class vf) (vf31 :class vf) ) - (init-vf0-vector) - (let ((v1-0 (new 'static 'vector :x 4.096)) - (a0-1 (-> obj root-prim)) - ) - (cond - ((logtest? (-> a0-1 collide-with) arg2) - (.mov vf31 arg1) - (.lvf vf1 (&-> v1-0 quad)) - (.add.x.vf vf31 vf31 vf1 :mask #b1) + (init-vf0-vector) + (let ((v1-0 (new 'static 'vector :x 4.096)) + (a0-1 (-> obj root-prim)) + ) (cond - ((dummy-20 a0-1 arg2) - (.mov.vf vf29 vf0 :mask #b1000) - (.mov.vf vf30 vf0 :mask #b1000) - (.svf (&-> arg0 min quad) vf29) - (.svf (&-> arg0 max quad) vf30) - (return #t) + ((logtest? (-> a0-1 collide-with) arg2) + (.mov vf31 arg1) + (.lvf vf1 (&-> v1-0 quad)) + (.add.x.vf vf31 vf31 vf1 :mask #b1) + (cond + ((dummy-20 a0-1 arg2) + (.mov.vf vf29 vf0 :mask #b1000) + (.mov.vf vf30 vf0 :mask #b1000) + (.svf (&-> arg0 min quad) vf29) + (.svf (&-> arg0 max quad) vf30) + (return #t) + ) + (else + (return #f) + ) + ) + (the-as none 0) + ) + (else + (return #f) + ) ) - (else - (return #f) - ) - ) - (the-as none 0) ) - (else - (return #f) - ) - ) + (the-as symbol 0) ) - (the-as symbol 0) - ) ) ;; WARN: Bad vector register dependency: vf31 @@ -1393,189 +1072,225 @@ (vf30 :class vf) (vf31 :class vf) ) - (.lvf vf1 (&-> obj prim-core world-sphere quad)) - (.add.w.vf vf2 vf31 vf1 :mask #b1) - (.add.x.vf vf30 vf1 vf2 :mask #b111) - (.sub.x.vf vf29 vf1 vf2 :mask #b111) - #t - ) + (.lvf vf1 (&-> obj prim-core world-sphere quad)) + (.add.w.vf vf2 vf31 vf1 :mask #b1) + (.add.x.vf vf30 vf1 vf2 :mask #b111) + (.sub.x.vf vf29 vf1 vf2 :mask #b111) + #t + ) ) ;; ERROR: function was not converted to expressions. Cannot decompile. +;; WARN: Bad vector register dependency: vf29 +;; WARN: Bad vector register dependency: vf30 +;; WARN: Bad vector register dependency: vf31 +;; WARN: Expression building failed: In (method 29 collide-shape-prim-group): Could not match ArrayFieldAccess (stride power of 2) values: (+ v1-0 (the-as int obj)) +; (defmethod dummy-29 collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 uint)) +; (local-vars +; (v0-0 none) +; (v0-1 int) +; (v1-0 int) +; (v1-1 int) +; (v1-2 uint) +; (v1-3 uint) +; (v1-5 type) +; (v1-6 type) +; (v1-8 float) +; (a0-1 collide-shape-prim) +; (a1-1 type) +; (a1-2 uint) +; (s3-0 int) +; (s4-0 int) +; (t9-0 (function collide-shape-prim-group uint none)) +; ) +; (rlet ((vf1 :class vf) +; (vf2 :class vf) +; (vf29 :class vf) +; (vf3 :class vf) +; (vf30 :class vf) +; (vf31 :class vf) +; (vf4 :class vf) +; ) +; (set! s4-0 (-> obj num-prims)) +; (set! s3-0 0) +; (label cfg-1) +; ((b! (= s3-0 s4-0) L214 (set! v1-0 (sll s3-0 2))) (set! v1-0 (sll s3-0 2))) +; (when (begin +; (set! v1-1 (+ v1-0 (the-as int obj))) +; (set! a0-1 (dynamic-array-field-access v1-1 prims PLACEHOLDER)) +; (set! v1-2 (-> a0-1 collide-with)) +; (set! v1-3 (logand v1-2 arg0)) +; (nonzero? v1-3) +; ) +; (cond +; ((begin (set! v1-5 collide-shape-prim-group) (set! a1-1 (-> a0-1 type)) (= a1-1 v1-5)) +; (set! v1-6 (-> (the-as collide-shape-prim-group a0-1) type)) +; (set! t9-0 (method-of-type v1-6 dummy-29)) +; (set! a1-2 arg0) +; (call! a0-1 a1-2) +; (set! v1-7 v0-0) +; ) +; (else +; (.lvf vf1 (&-> a0-1 prim-core world-sphere quad)) +; (.add.w.vf vf2 vf31 vf1 :mask #b1) +; (.add.x.vf vf4 vf1 vf2 :mask #b111) +; (.sub.x.vf vf3 vf1 vf2 :mask #b111) +; (.min.vf vf29 vf29 vf3) +; (.max.vf vf30 vf30 vf4) +; (.mov v1-8 vf30) +; ) +; ) +; ) +; ((b! #t L211 (set! s3-0 (+ s3-0 1))) (set! s3-0 (+ s3-0 1))) +; (label cfg-7) +; (set! v0-1 0) +; (ret-none) +; ) +; ) + (defmethod dummy-34 collide-shape ((obj collide-shape) (arg0 uint)) (dummy-10 (-> obj root-prim) arg0) ) (defmethod dummy-10 collide-shape-prim ((obj collide-shape-prim) (arg0 uint)) (if (= (-> obj prim-id) arg0) - (return obj) - ) + (return obj) + ) (the-as collide-shape-prim #f) ) -(defmethod - dummy-10 - collide-shape-prim-group - ((obj collide-shape-prim-group) (arg0 uint)) +(defmethod dummy-10 collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 uint)) (if (= (-> obj prim-id) arg0) - (return obj) - ) + (return obj) + ) (countdown (s4-0 (-> obj num-prims)) - (let ((a0-1 (-> obj prims s4-0))) - (cond - ((= (-> a0-1 type) collide-shape-prim-group) - (let ((a0-2 (dummy-10 a0-1 arg0))) - (if a0-2 - (return a0-2) + (let ((a0-1 (-> obj prims s4-0))) + (cond + ((= (-> a0-1 type) collide-shape-prim-group) + (let ((a0-2 (dummy-10 a0-1 arg0))) + (if a0-2 + (return a0-2) + ) + ) + ) + (else + (if (= (-> a0-1 prim-id) arg0) + (return a0-1) + ) + ) ) - ) ) - (else - (if (= (-> a0-1 prim-id) arg0) - (return a0-1) - ) - ) - ) ) - ) (the-as collide-shape-prim #f) ) (defun-debug collide-shape-draw-debug-marks () (add-debug-sphere - (or *display-collision-marks* *display-target-marks*) - (bucket-id debug-draw0) - (target-pos 0) - 819.2 - (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) - ) + (or *display-collision-marks* *display-target-marks*) + (bucket-id debug-draw0) + (target-pos 0) + 819.2 + (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) + ) (when *display-collision-marks* - (let ((v1-4 (-> *collide-player-list* alive-list next0))) - *collide-player-list* - (let ((gp-1 (-> v1-4 next0))) - (while (!= v1-4 (-> *collide-player-list* alive-list-end)) - (let ((s5-1 (-> (the-as connection v1-4) param1))) - (if - (or - (and (not *display-actor-anim*) (not *display-process-anim*)) - (or - (= (-> (the-as collide-shape s5-1) process) *target*) - (name= - *display-actor-anim* - (-> (the-as collide-shape s5-1) process name) - ) - (= - (ppointer->process *display-process-anim*) - (-> (the-as collide-shape s5-1) process) - ) - ) - ) - (dummy-31 (the-as collide-shape s5-1)) - ) - ) - (set! v1-4 gp-1) + (let ((v1-4 (-> *collide-player-list* alive-list next0))) *collide-player-list* - (set! gp-1 (-> gp-1 next0)) - ) - ) - ) - (let ((v1-19 (-> *collide-hit-by-player-list* alive-list next0))) - *collide-hit-by-player-list* - (let ((gp-2 (-> v1-19 next0))) - (while (!= v1-19 (-> *collide-hit-by-player-list* alive-list-end)) - (let ((s5-2 (-> (the-as connection v1-19) param1))) - (if - (or - (and (not *display-actor-anim*) (not *display-process-anim*)) - (or - (= (-> (the-as collide-shape s5-2) process) *target*) - (name= - *display-actor-anim* - (-> (the-as collide-shape s5-2) process name) - ) - (= - (ppointer->process *display-process-anim*) - (-> (the-as collide-shape s5-2) process) - ) + (let ((gp-1 (-> v1-4 next0))) + (while (!= v1-4 (-> *collide-player-list* alive-list-end)) + (let ((s5-1 (-> (the-as connection v1-4) param1))) + (if (or + (and (not *display-actor-anim*) (not *display-process-anim*)) + (or + (= (-> (the-as collide-shape s5-1) process) *target*) + (name= *display-actor-anim* (-> (the-as collide-shape s5-1) process name)) + (= (ppointer->process *display-process-anim*) (-> (the-as collide-shape s5-1) process)) + ) + ) + (dummy-31 (the-as collide-shape s5-1)) + ) + ) + (set! v1-4 gp-1) + *collide-player-list* + (set! gp-1 (-> gp-1 next0)) ) - ) - (dummy-31 (the-as collide-shape s5-2)) ) - ) - (set! v1-19 gp-2) + ) + (let ((v1-19 (-> *collide-hit-by-player-list* alive-list next0))) *collide-hit-by-player-list* - (set! gp-2 (-> gp-2 next0)) - ) - ) - ) - (let ((v1-34 (-> *collide-usually-hit-by-player-list* alive-list next0))) - *collide-usually-hit-by-player-list* - (let ((gp-3 (-> v1-34 next0))) - (while (!= v1-34 (-> *collide-usually-hit-by-player-list* alive-list-end)) - (let ((s5-3 (-> (the-as connection v1-34) param1))) - (if - (or - (and (not *display-actor-anim*) (not *display-process-anim*)) - (or - (= (-> (the-as collide-shape s5-3) process) *target*) - (name= - *display-actor-anim* - (-> (the-as collide-shape s5-3) process name) - ) - (= - (ppointer->process *display-process-anim*) - (-> (the-as collide-shape s5-3) process) - ) + (let ((gp-2 (-> v1-19 next0))) + (while (!= v1-19 (-> *collide-hit-by-player-list* alive-list-end)) + (let ((s5-2 (-> (the-as connection v1-19) param1))) + (if (or + (and (not *display-actor-anim*) (not *display-process-anim*)) + (or + (= (-> (the-as collide-shape s5-2) process) *target*) + (name= *display-actor-anim* (-> (the-as collide-shape s5-2) process name)) + (= (ppointer->process *display-process-anim*) (-> (the-as collide-shape s5-2) process)) + ) + ) + (dummy-31 (the-as collide-shape s5-2)) + ) + ) + (set! v1-19 gp-2) + *collide-hit-by-player-list* + (set! gp-2 (-> gp-2 next0)) ) - ) - (dummy-31 (the-as collide-shape s5-3)) ) - ) - (set! v1-34 gp-3) + ) + (let ((v1-34 (-> *collide-usually-hit-by-player-list* alive-list next0))) *collide-usually-hit-by-player-list* - (set! gp-3 (-> gp-3 next0)) - ) - ) - ) - (let ((v1-49 (-> *collide-hit-by-others-list* alive-list next0))) - *collide-hit-by-others-list* - (let ((gp-4 (-> v1-49 next0))) - (while (!= v1-49 (-> *collide-hit-by-others-list* alive-list-end)) - (let ((s5-4 (-> (the-as connection v1-49) param1))) - (if - (or - (and (not *display-actor-anim*) (not *display-process-anim*)) - (or - (= (-> (the-as collide-shape s5-4) process) *target*) - (name= - *display-actor-anim* - (-> (the-as collide-shape s5-4) process name) - ) - (= - (ppointer->process *display-process-anim*) - (-> (the-as collide-shape s5-4) process) - ) + (let ((gp-3 (-> v1-34 next0))) + (while (!= v1-34 (-> *collide-usually-hit-by-player-list* alive-list-end)) + (let ((s5-3 (-> (the-as connection v1-34) param1))) + (if (or + (and (not *display-actor-anim*) (not *display-process-anim*)) + (or + (= (-> (the-as collide-shape s5-3) process) *target*) + (name= *display-actor-anim* (-> (the-as collide-shape s5-3) process name)) + (= (ppointer->process *display-process-anim*) (-> (the-as collide-shape s5-3) process)) + ) + ) + (dummy-31 (the-as collide-shape s5-3)) + ) + ) + (set! v1-34 gp-3) + *collide-usually-hit-by-player-list* + (set! gp-3 (-> gp-3 next0)) + ) + ) + ) + (let ((v1-49 (-> *collide-hit-by-others-list* alive-list next0))) + *collide-hit-by-others-list* + (let ((gp-4 (-> v1-49 next0))) + (while (!= v1-49 (-> *collide-hit-by-others-list* alive-list-end)) + (let ((s5-4 (-> (the-as connection v1-49) param1))) + (if (or + (and (not *display-actor-anim*) (not *display-process-anim*)) + (or + (= (-> (the-as collide-shape s5-4) process) *target*) + (name= *display-actor-anim* (-> (the-as collide-shape s5-4) process name)) + (= (ppointer->process *display-process-anim*) (-> (the-as collide-shape s5-4) process)) + ) + ) + (dummy-31 (the-as collide-shape s5-4)) + ) + ) + (set! v1-49 gp-4) + *collide-hit-by-others-list* + (set! gp-4 (-> gp-4 next0)) ) - ) - (dummy-31 (the-as collide-shape s5-4)) ) - ) - (set! v1-49 gp-4) - *collide-hit-by-others-list* - (set! gp-4 (-> gp-4 next0)) ) - ) ) - ) 0 (none) ) (defmethod dummy-31 collide-shape ((obj collide-shape)) (if (sphere-in-view-frustum? (the-as sphere (-> obj root-prim prim-core))) - (debug-draw-world-sphere (-> obj root-prim)) - ) + (debug-draw-world-sphere (-> obj root-prim)) + ) (none) ) @@ -1587,22 +1302,14 @@ (defun debug-report-col-stats () (when *col-timer-enable* - (stopwatch-end *frame-timer*) - (format *stdcon* "col stats:~%") - (format - *stdcon* - " col ~F ms~%" - (* 1000.0 (stopwatch-elapsed-seconds *col-timer*)) + (stopwatch-end *frame-timer*) + (format *stdcon* "col stats:~%") + (format *stdcon* " col ~F ms~%" (* 1000.0 (stopwatch-elapsed-seconds *col-timer*))) + (format *stdcon* " frame ~F ms~%" (* 1000.0 (stopwatch-elapsed-seconds *frame-timer*))) + (stopwatch-init *col-timer*) + (stopwatch-init *frame-timer*) + (stopwatch-begin *frame-timer*) ) - (format - *stdcon* - " frame ~F ms~%" - (* 1000.0 (stopwatch-elapsed-seconds *frame-timer*)) - ) - (stopwatch-init *col-timer*) - (stopwatch-init *frame-timer*) - (stopwatch-begin *frame-timer*) - ) ) (defmethod dummy-47 collide-shape ((obj collide-shape)) @@ -1610,10 +1317,7 @@ #f ) -(defmethod - dummy-25 - collide-shape-prim - ((obj collide-shape-prim) (arg0 process-drawable)) +(defmethod dummy-25 collide-shape-prim ((obj collide-shape-prim) (arg0 process-drawable)) (local-vars (a0-2 float) (a0-4 float) (a0-6 float)) (rlet ((acc :class vf) (Q :class vf) @@ -1624,60 +1328,60 @@ (vf4 :class vf) (vf5 :class vf) ) - (init-vf0-vector) - (let ((a1-1 (-> arg0 node-list)) - (v1-0 (-> obj cshape)) - (a0-1 (-> obj transform-index)) - ) - (cond - ((nonzero? a1-1) + (init-vf0-vector) + (let ((a1-1 (-> arg0 node-list)) + (v1-0 (-> obj cshape)) + (a0-1 (-> obj transform-index)) + ) (cond - ((>= a0-1 0) - (let ((v1-4 (-> a1-1 data a0-1 bone transform))) - (.lvf vf5 (&-> v1-4 vector 3 quad)) - (.lvf vf1 (&-> obj local-sphere quad)) - (.lvf vf2 (&-> v1-4 vector 0 quad)) - (.mul.w.vf acc vf5 vf0) - (.div.vf Q vf0 vf5 :fsf #b11 :ftf #b11) - (.lvf vf3 (&-> v1-4 vector 1 quad)) - (.add.mul.x.vf acc vf2 vf1 acc) - (.lvf vf4 (&-> v1-4 vector 2 quad)) + ((nonzero? a1-1) + (cond + ((>= a0-1 0) + (let ((v1-4 (-> a1-1 data a0-1 bone transform))) + (.lvf vf5 (&-> v1-4 vector 3 quad)) + (.lvf vf1 (&-> obj local-sphere quad)) + (.lvf vf2 (&-> v1-4 vector 0 quad)) + (.mul.w.vf acc vf5 vf0) + (.div.vf Q vf0 vf5 :fsf #b11 :ftf #b11) + (.lvf vf3 (&-> v1-4 vector 1 quad)) + (.add.mul.x.vf acc vf2 vf1 acc) + (.lvf vf4 (&-> v1-4 vector 2 quad)) + ) + (.add.mul.y.vf acc vf3 vf1 acc) + (.add.mul.z.vf vf1 vf4 vf1 acc :mask #b111) + (.mul.vf vf1 vf1 Q :mask #b111) + (.svf (&-> obj prim-core world-sphere quad) vf1) + (.mov a0-2 vf1) + ) + (else + (when (= a0-1 -2) + (.lvf vf1 (&-> obj local-sphere quad)) + (.lvf vf2 (&-> v1-0 trans quad)) + (.add.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> obj prim-core world-sphere quad) vf1) + (.mov a0-4 vf1) + ) + ) + ) ) - (.add.mul.y.vf acc vf3 vf1 acc) - (.add.mul.z.vf vf1 vf4 vf1 acc :mask #b111) - (.mul.vf vf1 vf1 Q :mask #b111) - (.svf (&-> obj prim-core world-sphere quad) vf1) - (.mov a0-2 vf1) + (else + (when (!= a0-1 -1) + (.lvf vf1 (&-> obj local-sphere quad)) + (.lvf vf2 (&-> v1-0 trans quad)) + (.add.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> obj prim-core world-sphere quad) vf1) + (.mov a0-6 vf1) + ) + ) ) - (else - (when (= a0-1 -2) - (.lvf vf1 (&-> obj local-sphere quad)) - (.lvf vf2 (&-> v1-0 trans quad)) - (.add.vf vf1 vf1 vf2 :mask #b111) - (.svf (&-> obj prim-core world-sphere quad) vf1) - (.mov a0-4 vf1) - ) + ) + (when (= (-> obj type) collide-shape-prim-group) + (countdown (s4-0 (-> (the-as collide-shape-prim-group obj) num-prims)) + (dummy-25 (-> (the-as collide-shape-prim-group obj) prims s4-0) arg0) ) - ) + #f ) - (else - (when (!= a0-1 -1) - (.lvf vf1 (&-> obj local-sphere quad)) - (.lvf vf2 (&-> v1-0 trans quad)) - (.add.vf vf1 vf1 vf2 :mask #b111) - (.svf (&-> obj prim-core world-sphere quad) vf1) - (.mov a0-6 vf1) - ) - ) - ) ) - (when (= (-> obj type) collide-shape-prim-group) - (countdown (s4-0 (-> (the-as collide-shape-prim-group obj) num-prims)) - (dummy-25 (-> (the-as collide-shape-prim-group obj) prims s4-0) arg0) - ) - #f - ) - ) ) (defmethod TODO-RENAME-28 collide-shape ((obj collide-shape) (arg0 vector)) @@ -1687,221 +1391,200 @@ ) (defmethod dummy-9 collide-shape-prim ((obj collide-shape-prim) (arg0 vector)) - (vector+! - (the-as vector (-> obj prim-core)) - (the-as vector (-> obj prim-core)) - arg0 - ) + (vector+! (the-as vector (-> obj prim-core)) (the-as vector (-> obj prim-core)) arg0) (let ((f0-0 (-> obj local-sphere w))) - (set! (-> obj prim-core world-sphere w) f0-0) - (the-as object f0-0) - ) + (set! (-> obj prim-core world-sphere w) f0-0) + (the-as object f0-0) + ) ) -(defmethod - dummy-9 - collide-shape-prim-group - ((obj collide-shape-prim-group) (arg0 vector)) - (vector+! - (the-as vector (-> obj prim-core)) - (the-as vector (-> obj prim-core)) - arg0 - ) +(defmethod dummy-9 collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 vector)) + (vector+! (the-as vector (-> obj prim-core)) (the-as vector (-> obj prim-core)) arg0) (set! (-> obj prim-core world-sphere w) (-> obj local-sphere w)) (countdown (s4-0 (-> obj num-prims)) - (let ((a0-2 (-> obj prims s4-0))) - (cond - ((= (-> a0-2 type) collide-shape-prim-group) - (dummy-9 a0-2 arg0) + (let ((a0-2 (-> obj prims s4-0))) + (cond + ((= (-> a0-2 type) collide-shape-prim-group) + (dummy-9 a0-2 arg0) + ) + (else + (vector+! (the-as vector (-> a0-2 prim-core)) (the-as vector (-> a0-2 prim-core)) arg0) + (set! (-> a0-2 prim-core world-sphere w) (-> a0-2 local-sphere w)) + ) + ) ) - (else - (vector+! - (the-as vector (-> a0-2 prim-core)) - (the-as vector (-> a0-2 prim-core)) - arg0 - ) - (set! (-> a0-2 prim-core world-sphere w) (-> a0-2 local-sphere w)) - ) - ) ) - ) (the-as object #f) ) (defmethod TODO-RENAME-30 collide-shape ((obj collide-shape) (arg0 vector)) (let ((v1-0 (new 'stack-no-clear 'vector))) - (vector-! v1-0 arg0 (-> obj trans)) - (TODO-RENAME-28 obj v1-0) - ) + (vector-! v1-0 arg0 (-> obj trans)) + (TODO-RENAME-28 obj v1-0) + ) (none) ) -(defmethod - set-root-prim! - collide-shape - ((obj collide-shape) (arg0 collide-shape-prim)) +(defmethod set-root-prim! collide-shape ((obj collide-shape) (arg0 collide-shape-prim)) (set! (-> obj root-prim) arg0) arg0 ) -(defmethod - set-collide-with! - collide-shape-prim - ((obj collide-shape-prim) (arg0 handle)) +(defmethod set-collide-with! collide-shape-prim ((obj collide-shape-prim) (arg0 handle)) (set! (-> obj collide-with) (the-as uint arg0)) 0 (none) ) -(defmethod - set-collide-with! - collide-shape-prim-group - ((obj collide-shape-prim-group) (arg0 handle)) +(defmethod set-collide-with! collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 handle)) (set! (-> obj collide-with) (the-as uint arg0)) (dotimes (s4-0 (-> obj num-prims)) - (set-collide-with! (-> obj prims s4-0) arg0) - ) + (set-collide-with! (-> obj prims s4-0) arg0) + ) 0 (none) ) -(defmethod - set-collide-as! - collide-shape-prim - ((obj collide-shape-prim) (arg0 handle)) +(defmethod set-collide-as! collide-shape-prim ((obj collide-shape-prim) (arg0 handle)) (set! (-> obj prim-core collide-as) (the-as uint arg0)) 0 (none) ) -(defmethod - set-collide-as! - collide-shape-prim-group - ((obj collide-shape-prim-group) (arg0 handle)) +(defmethod set-collide-as! collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 handle)) (set! (-> obj prim-core collide-as) (the-as uint arg0)) (dotimes (s4-0 (-> obj num-prims)) - (set-collide-as! (-> obj prims s4-0) arg0) - ) + (set-collide-as! (-> obj prims s4-0) arg0) + ) 0 (none) ) -(defmethod - set-root-prim-collide-with! - collide-shape - ((obj collide-shape) (arg0 handle)) +(defmethod set-root-prim-collide-with! collide-shape ((obj collide-shape) (arg0 handle)) (set-collide-with! (-> obj root-prim) arg0) 0 (none) ) -(defmethod - set-root-prim-collide-as! - collide-shape - ((obj collide-shape) (arg0 handle)) +(defmethod set-root-prim-collide-as! collide-shape ((obj collide-shape) (arg0 handle)) (set-collide-as! (-> obj root-prim) arg0) 0 (none) ) -(defmethod - append-prim - collide-shape-prim-group - ((obj collide-shape-prim-group) (arg0 collide-shape-prim)) +(defmethod append-prim collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 collide-shape-prim)) (let ((v1-0 (-> obj num-prims))) - (cond - ((>= v1-0 (-> obj allocated-prims)) - (format - 0 - "collide-shape-prim-group::append-prim : Exceeded max # of prims!~%" + (cond + ((>= v1-0 (-> obj allocated-prims)) + (format 0 "collide-shape-prim-group::append-prim : Exceeded max # of prims!~%") + ) + (else + (set! (-> obj prims v1-0) arg0) + (set! (-> obj num-prims) (+ v1-0 1)) + ) ) - ) - (else - (set! (-> obj prims v1-0) arg0) - (set! (-> obj num-prims) (+ v1-0 1)) - ) ) - ) (none) ) (defmethod find-collision-meshes collide-shape ((obj collide-shape)) (let ((s5-0 0)) - (let ((v1-1 (-> obj process draw))) - (when (and (nonzero? v1-1) (-> v1-1 jgeo)) - (let - ((a1-1 - (res-lump-struct (-> v1-1 jgeo extra) 'collide-mesh-group structure) + (let ((v1-1 (-> obj process draw))) + (when (and (nonzero? v1-1) (-> v1-1 jgeo)) + (let ((a1-1 (res-lump-struct (-> v1-1 jgeo extra) 'collide-mesh-group structure))) + (if a1-1 + (set! s5-0 (num-mesh (-> obj root-prim) (the-as collide-shape-prim a1-1))) + ) + ) ) - ) - (if a1-1 - (set! - s5-0 - (num-mesh (-> obj root-prim) (the-as collide-shape-prim a1-1)) - ) - ) ) - ) + (if (nonzero? s5-0) + (format 0 "ERROR: Failed to find collision meshes for ~D prim(s) in ~A!~%" s5-0 (-> obj process name)) + ) ) - (if (nonzero? s5-0) - (format - 0 - "ERROR: Failed to find collision meshes for ~D prim(s) in ~A!~%" - s5-0 - (-> obj process name) - ) - ) - ) (dummy-47 obj) ) -(defmethod - num-mesh - collide-shape-prim - ((obj collide-shape-prim) (arg0 collide-shape-prim)) +(defmethod num-mesh collide-shape-prim ((obj collide-shape-prim) (arg0 collide-shape-prim)) (local-vars (v0-0 int)) (return 0) v0-0 ) -(defmethod - num-mesh - collide-shape-prim-mesh - ((obj collide-shape-prim-mesh) (arg0 collide-shape-prim)) +(defmethod num-mesh collide-shape-prim-mesh ((obj collide-shape-prim-mesh) (arg0 collide-shape-prim)) (let ((s4-0 (-> obj mesh-id))) - (cond - ((and (>= s4-0 0) (< s4-0 (length arg0))) - (set! - (-> obj mesh) - (the-as collide-mesh (-> arg0 prim-core world-sphere data s4-0)) + (cond + ((and (>= s4-0 0) (< s4-0 (length arg0))) + (set! (-> obj mesh) (the-as collide-mesh (-> arg0 prim-core world-sphere data s4-0))) + (return 0) + ) + (else + (set! (-> obj mesh) #f) + (return 1) + ) ) - (return 0) - ) - (else - (set! (-> obj mesh) #f) - (return 1) - ) ) - ) (the-as int 0) ) -(defmethod - num-mesh - collide-shape-prim-group - ((obj collide-shape-prim-group) (arg0 collide-shape-prim)) +(defmethod num-mesh collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 collide-shape-prim)) (let ((gp-0 0)) - (countdown (s3-0 (-> obj num-prims)) - (+! gp-0 (num-mesh (-> obj prims s3-0) arg0)) + (countdown (s3-0 (-> obj num-prims)) + (+! gp-0 (num-mesh (-> obj prims s3-0) arg0)) + ) + gp-0 ) - gp-0 - ) ) -(defmethod - init! - collide-shape-intersect - ((obj collide-shape-intersect) (arg0 vector)) +;; WARN: Expression building failed: In (method 28 collide-shape-prim-mesh): Unhandled branch delay in BranchElement::push_to_stack: (bl! (zero? (the-as uint v0-5)) L148 (no-delay!)) +; (defmethod change-mesh collide-shape-prim-mesh ((obj collide-shape-prim-mesh) (arg0 int)) +; (local-vars +; (v0-5 int) +; (v0-6 object) +; (v1-3 draw-control) +; (v1-8 int) +; (v1-9 int) +; (v1-10 uint) +; (v1-11 collide-mesh-cache) +; (a0-6 uint) +; (a0-7 int) +; (a1-2 string) +; (s4-0 structure) +; (t9-2 (function _varargs_ object)) +; ) +; (when (!= (-> obj mesh-id) arg0) +; (when (and (nonzero? v1-3) (-> v1-3 jgeo)) +; (when s4-0 +; (cond +; ((and (>= arg0 0) (< arg0 (length (the-as collide-shape-prim-group s4-0)))) +; (set! v1-8 (* arg0 4)) +; (set! v1-9 (+ (* arg0 4) (the-as int s4-0))) +; (set! v1-10 (l.wu (+ (* arg0 4) (the-as int s4-0) 12))) +; (set! (-> obj mesh) (the-as collide-mesh v1-10)) +; (set! (-> obj mesh-id) arg0) +; (set! v1-11 *collide-mesh-cache*) +; (set! a0-6 (-> v1-11 id)) +; (set! (-> v1-11 used-size) (the-as uint 0)) +; (set! v0-5 (the-as int (+ a0-6 1))) +; (bl! (zero? (the-as uint v0-5)) L148 (no-delay!)) +; (set! v0-5 1) +; (label cfg-12) +; (set! (-> v1-11 id) (the-as uint v0-5)) +; ) +; (else +; (set! t9-2 format) +; (set! a0-7 0) +; (set! a1-2 L402) +; (call! a0-7 a1-2) +; ) +; ) +; ) +; ) +; ) +; (ret-none) +; ) + +(defmethod init! collide-shape-intersect ((obj collide-shape-intersect) (arg0 vector)) (set! (-> obj move-vec quad) (-> arg0 quad)) (set! (-> obj best-u) -100000000.0) (set! (-> obj best-from-prim) #f) @@ -1911,78 +1594,999 @@ (defmethod debug-draw-world-sphere collide-shape-prim ((obj collide-shape-prim)) (add-debug-sphere - #t - (bucket-id debug-draw0) - (the-as vector (-> obj prim-core)) - (-> obj local-sphere w) - (new 'static 'rgba :r #xff :g #xff :b #xff :a #x40) - ) - ) - -(defmethod - debug-draw-world-sphere - collide-shape-prim-sphere - ((obj collide-shape-prim-sphere)) - (add-debug-sphere - #t - (bucket-id debug-draw0) - (the-as vector (-> obj prim-core)) - (-> obj local-sphere w) - (the-as rgba (cond - ((and - (zero? (-> obj prim-core collide-as)) - (zero? (-> obj collide-with)) - ) - #x40808080 - ) - ((logtest? (-> obj prim-core action) 1) - #x4000ffff - ) - (else - #x400080ff - ) - ) + #t + (bucket-id debug-draw0) + (the-as vector (-> obj prim-core)) + (-> obj local-sphere w) + (new 'static 'rgba :r #xff :g #xff :b #xff :a #x40) ) - ) ) -(defmethod - debug-draw-world-sphere - collide-shape-prim-mesh - ((obj collide-shape-prim-mesh)) +(defmethod debug-draw-world-sphere collide-shape-prim-sphere ((obj collide-shape-prim-sphere)) (add-debug-sphere - #t - (bucket-id debug-draw0) - (the-as vector (-> obj prim-core)) - (-> obj local-sphere w) - (new 'static 'rgba :b #xff :a #x40) - ) + #t + (bucket-id debug-draw0) + (the-as vector (-> obj prim-core)) + (-> obj local-sphere w) + (the-as rgba (cond + ((and (zero? (-> obj prim-core collide-as)) (zero? (-> obj collide-with))) + #x40808080 + ) + ((logtest? (-> obj prim-core action) 1) + #x4000ffff + ) + (else + #x400080ff + ) + ) + ) + ) ) -(defmethod - debug-draw-world-sphere - collide-shape-prim-group - ((obj collide-shape-prim-group)) +(defmethod debug-draw-world-sphere collide-shape-prim-mesh ((obj collide-shape-prim-mesh)) (add-debug-sphere - #t - (bucket-id debug-draw0) - (the-as vector (-> obj prim-core)) - (-> obj local-sphere w) - (new 'static 'rgba :g #xff :a #x10) - ) + #t + (bucket-id debug-draw0) + (the-as vector (-> obj prim-core)) + (-> obj local-sphere w) + (new 'static 'rgba :b #xff :a #x40) + ) + ) + +(defmethod debug-draw-world-sphere collide-shape-prim-group ((obj collide-shape-prim-group)) + (add-debug-sphere + #t + (bucket-id debug-draw0) + (the-as vector (-> obj prim-core)) + (-> obj local-sphere w) + (new 'static 'rgba :g #xff :a #x10) + ) (countdown (s5-0 (-> obj num-prims)) - (debug-draw-world-sphere (-> obj prims s5-0)) - ) + (debug-draw-world-sphere (-> obj prims s5-0)) + ) #f ) +;; WARN: Expression building failed: In (method 45 collide-shape): Unhandled branch delay in BranchElement::push_to_stack: (bl! (zero? (the-as uint a0-2)) L93 (no-delay!)) +; (defmethod dummy-45 collide-shape ((obj collide-shape)) +; (local-vars +; (at-0 int) +; (at-1 int) +; (at-2 int) +; (at-3 int) +; (v0-0 none) +; (v0-1 none) +; (v0-2 vector) +; (v0-3 none) +; (v0-4 none) +; (v0-5 symbol) +; (v0-6 none) +; (v0-7 none) +; (v0-8 vector) +; (v0-9 none) +; (v0-10 none) +; (v0-11 none) +; (v0-12 none) +; (v0-13 vector) +; (v0-14 none) +; (v0-15 none) +; (v0-16 none) +; (v0-17 none) +; (v0-18 vector) +; (v0-19 none) +; (v0-20 none) +; (v1-0 collide-mesh-cache) +; (v1-1 collide-shape-prim) +; (v1-2 uint) +; (v1-4 engine) +; (v1-5 connectable) +; (v1-6 collide-shape-prim) +; (v1-7 uint) +; (v1-8 uint) +; (v1-10 process-drawable) +; (v1-12 type) +; (v1-13 none) +; (v1-14 none) +; (v1-16 type) +; (v1-17 collide-shape-prim) +; (v1-19 vector) +; (v1-20 float) +; (v1-21 vector) +; (v1-22 vector) +; (v1-23 vector) +; (v1-24 type) +; (v1-26 symbol) +; (v1-27 type) +; (v1-28 none) +; (v1-30 collide-shape-prim) +; (v1-34 uint) +; (v1-35 uint) +; (v1-37 engine) +; (v1-38 connectable) +; (v1-39 collide-shape-prim) +; (v1-40 uint) +; (v1-41 uint) +; (v1-43 process-drawable) +; (v1-45 type) +; (v1-46 none) +; (v1-47 none) +; (v1-49 type) +; (v1-50 collide-shape-prim) +; (v1-52 vector) +; (v1-53 float) +; (v1-54 vector) +; (v1-55 vector) +; (v1-56 vector) +; (v1-57 type) +; (v1-59 symbol) +; (v1-60 type) +; (v1-61 none) +; (v1-63 collide-shape-prim) +; (v1-67 uint) +; (v1-69 engine) +; (v1-70 connectable) +; (v1-71 collide-shape-prim) +; (v1-72 uint) +; (v1-73 uint) +; (v1-75 process-drawable) +; (v1-77 type) +; (v1-78 none) +; (v1-79 none) +; (v1-81 type) +; (v1-82 collide-shape-prim) +; (v1-84 vector) +; (v1-85 float) +; (v1-86 vector) +; (v1-87 vector) +; (v1-88 vector) +; (v1-89 type) +; (v1-91 symbol) +; (v1-92 type) +; (v1-93 none) +; (v1-95 collide-shape-prim) +; (v1-99 uint) +; (v1-100 engine) +; (v1-101 connectable) +; (v1-102 collide-shape-prim) +; (v1-103 uint) +; (v1-104 uint) +; (v1-106 process-drawable) +; (v1-108 type) +; (v1-109 none) +; (v1-110 none) +; (v1-112 type) +; (v1-113 collide-shape-prim) +; (v1-115 vector) +; (v1-116 float) +; (v1-117 vector) +; (v1-118 vector) +; (v1-119 vector) +; (v1-120 type) +; (v1-122 symbol) +; (v1-123 type) +; (v1-124 none) +; (v1-126 collide-shape-prim) +; (a0-1 uint) +; (a0-2 int) +; (a0-3 engine) +; (a0-4 connectable) +; (a0-5 process-drawable) +; (a0-6 collide-shape) +; (a0-7 collide-shape-moving) +; (a0-8 vector) +; (a0-14 vector) +; (a0-15 vector) +; (a0-16 vector) +; (a0-17 display) +; (a0-18 collide-shape-moving) +; (a0-19 symbol) +; (a0-20 collide-shape) +; (a0-21 engine) +; (a0-22 connectable) +; (a0-23 engine) +; (a0-24 connectable) +; (a0-25 engine) +; (a0-26 connectable) +; (a0-27 process-drawable) +; (a0-28 collide-shape) +; (a0-29 collide-shape-moving) +; (a0-30 vector) +; (a0-36 vector) +; (a0-37 vector) +; (a0-38 vector) +; (a0-39 display) +; (a0-40 collide-shape-moving) +; (a0-41 symbol) +; (a0-42 collide-shape) +; (a0-43 engine) +; (a0-44 connectable) +; (a0-45 engine) +; (a0-46 connectable) +; (a0-47 engine) +; (a0-48 connectable) +; (a0-49 process-drawable) +; (a0-50 collide-shape) +; (a0-51 collide-shape-moving) +; (a0-52 vector) +; (a0-58 vector) +; (a0-59 vector) +; (a0-60 vector) +; (a0-61 display) +; (a0-62 collide-shape-moving) +; (a0-63 symbol) +; (a0-64 collide-shape) +; (a0-65 engine) +; (a0-66 connectable) +; (a0-67 engine) +; (a0-68 connectable) +; (a0-69 engine) +; (a0-70 connectable) +; (a0-71 process-drawable) +; (a0-72 collide-shape) +; (a0-73 collide-shape-moving) +; (a0-74 vector) +; (a0-80 vector) +; (a0-81 vector) +; (a0-82 vector) +; (a0-83 display) +; (a0-84 collide-shape-moving) +; (a0-85 symbol) +; (a0-86 collide-shape) +; (a0-87 engine) +; (a0-88 connectable) +; (a0-89 engine) +; (a0-90 connectable) +; (a1-0 collide-shape-moving) +; (a1-1 float) +; (a1-2 vector) +; (a1-3 uint128) +; (a1-4 float) +; (a1-5 vector) +; (a1-6 collide-shape-moving) +; (a1-7 collide-shape-moving) +; (a1-8 float) +; (a1-9 vector) +; (a1-10 uint128) +; (a1-11 float) +; (a1-12 vector) +; (a1-13 collide-shape-moving) +; (a1-14 collide-shape-moving) +; (a1-15 float) +; (a1-16 vector) +; (a1-17 uint128) +; (a1-18 float) +; (a1-19 vector) +; (a1-20 collide-shape-moving) +; (a1-21 collide-shape-moving) +; (a1-22 float) +; (a1-23 vector) +; (a1-24 uint128) +; (a1-25 float) +; (a1-26 vector) +; (a1-27 collide-shape-moving) +; (a2-0 collide-work) +; (a2-1 uint) +; (a2-2 collide-work) +; (a2-3 collide-work) +; (a2-4 uint) +; (a2-5 collide-work) +; (a2-6 collide-work) +; (a2-7 uint) +; (a2-8 collide-work) +; (a2-9 collide-work) +; (a2-10 uint) +; (a2-11 collide-work) +; (s0-0 uint) +; (s0-1 uint) +; (s0-2 uint) +; (s0-3 uint) +; (s1-0 vector) +; (s1-1 vector) +; (s1-2 vector) +; (s1-3 vector) +; (s2-0 collide-work) +; (s2-1 collide-work) +; (s2-2 collide-work) +; (s2-3 collide-work) +; (s3-0 collide-shape-moving) +; (s3-1 collide-shape-moving) +; (s3-2 collide-shape-moving) +; (s3-3 collide-shape-moving) +; (s4-0 connectable) +; (s4-1 connectable) +; (s4-2 connectable) +; (s4-3 connectable) +; (s5-0 uint) +; (s5-1 int) +; (s5-2 int) +; (s5-3 int) +; (s5-4 int) +; (t9-0 (function collide-shape collide-shape collide-work none)) +; (t9-1 (function collide-shape-moving object uint none)) +; (t9-2 (function vector float vector)) +; (t9-3 (function collide-shape-moving vector none)) +; (t9-4 (function collide-shape collide-shape collide-work none)) +; (t9-5 (function collide-shape collide-shape collide-work none)) +; (t9-6 (function collide-shape-moving object uint none)) +; (t9-7 (function vector float vector)) +; (t9-8 (function collide-shape-moving vector none)) +; (t9-9 (function collide-shape collide-shape collide-work none)) +; (t9-10 (function collide-shape collide-shape collide-work none)) +; (t9-11 (function collide-shape-moving object uint none)) +; (t9-12 (function vector float vector)) +; (t9-13 (function collide-shape-moving vector none)) +; (t9-14 (function collide-shape collide-shape collide-work none)) +; (t9-15 (function collide-shape collide-shape collide-work none)) +; (t9-16 (function collide-shape-moving object uint none)) +; (t9-17 (function vector float vector)) +; (t9-18 (function collide-shape-moving vector none)) +; (t9-19 (function collide-shape collide-shape collide-work none)) +; (f0-0 float) +; (f0-1 float) +; (f0-2 float) +; (f0-3 float) +; (f0-4 float) +; (f0-5 float) +; (f0-6 float) +; (f0-7 float) +; (f0-8 float) +; (f0-9 float) +; (f0-10 float) +; (f0-11 float) +; (f0-12 float) +; (f0-13 float) +; (f0-14 float) +; (f0-15 float) +; (f0-16 float) +; (f0-17 float) +; (f0-18 float) +; (f0-19 float) +; (f0-20 float) +; (f0-21 float) +; (f0-22 float) +; (f0-23 float) +; (f0-24 float) +; (f0-25 float) +; (f0-26 float) +; (f0-27 float) +; (f1-0 float) +; (f1-1 float) +; (f1-2 float) +; (f1-3 float) +; (f1-4 float) +; (f1-5 float) +; (f1-6 float) +; (f1-7 float) +; (f1-8 float) +; (f1-9 float) +; (f1-10 float) +; (f1-11 float) +; (f2-0 float) +; (f2-1 float) +; (f2-2 float) +; (f2-3 float) +; ) +; (rlet ((vf0 :class vf) +; (vf1 :class vf) +; (vf2 :class vf) +; (vf3 :class vf) +; (vf4 :class vf) +; (vf5 :class vf) +; ) +; (init-vf0-vector) +; (when (begin +; (when (begin +; (set! v1-0 *collide-mesh-cache*) +; (set! a0-1 (-> v1-0 id)) +; (set! (-> v1-0 used-size) (the-as uint 0)) +; (set! a0-2 (the-as int (+ a0-1 1))) +; (bl! (zero? (the-as uint a0-2)) L93 (no-delay!)) +; (set! a0-2 1) +; (label cfg-2) +; (set! (-> v1-0 id) (the-as uint a0-2)) +; (set! v1-1 (-> obj root-prim)) +; (set! s5-0 (-> v1-1 collide-with)) +; (set! v1-2 (logand s5-0 16)) +; (nonzero? v1-2) +; ) +; (set! v1-4 *collide-player-list*) +; (set! v1-5 (-> v1-4 alive-list next0)) +; (set! a0-3 *collide-player-list*) +; (set! a0-4 v1-5) +; (set! s4-0 (-> a0-4 next0)) +; (while (begin (set! a0-23 *collide-player-list*) (set! a0-24 (-> a0-23 alive-list-end)) (!= v1-5 a0-24)) +; (when (begin +; (set! s3-0 (the-as collide-shape-moving (-> (the-as connection v1-5) param1))) +; (set! v1-6 (-> s3-0 root-prim)) +; (set! v1-7 (-> v1-6 prim-core collide-as)) +; (set! v1-8 (logand s5-0 v1-7)) +; (nonzero? v1-8) +; ) +; (when (begin (set! v1-10 (-> s3-0 process)) (set! a0-5 (-> obj process)) (!= a0-5 v1-10)) +; (when (begin +; (and +; (begin +; (set! s2-0 (new 'stack-no-clear 'collide-work)) +; (set! a0-6 obj) +; (set! v1-12 (-> a0-6 type)) +; (set! t9-0 (method-of-type v1-12 dummy-42)) +; (set! a1-0 s3-0) +; (set! a2-0 s2-0) +; (set! v0-0 (call! a0-6 a1-0 a2-0)) +; (set! v1-13 v0-0) +; v1-13 +; ) +; (begin +; (set! f0-0 -81.92) +; (set! f1-0 (-> s2-0 collide-sphere-neg-r x)) +; (set! v1-14 (the-as none (>=.s f0-0 f1-0))) +; ) +; ) +; v1-14 +; ) +; (set! a0-7 s3-0) +; (set! v1-16 (-> a0-7 type)) +; (set! t9-1 (method-of-type v1-16 dummy-32)) +; (set! a1-1 8192.0) +; (set! v1-17 (-> s3-0 root-prim)) +; (set! a2-1 (-> v1-17 collide-with)) +; (call! a0-7 a1-1 a2-1) +; (set! v1-18 v0-1) +; (set! s5-1 3) +; (until (begin +; (cond +; ((begin +; (set! s1-0 (new 'stack-no-clear 'vector)) +; (set! v1-19 (new 'stack-no-clear 'vector)) +; (set! a0-8 v1-19) +; (set! a1-2 (-> s3-0 trans)) +; (set! a1-3 (-> a1-2 quad)) +; (set! (-> a0-8 quad) a1-3) +; (set! f0-1 2867.2) +; (set! f1-1 (-> v1-19 y)) +; (set! f1-2 (+.s f0-1 f1-1)) +; (set! f0-2 5734.4) +; (set! f2-0 (+.s f0-2 f1-2)) +; (set! f0-3 (-> s2-0 inv-mat vector 1 y)) +; (<.s f0-3 f1-2) +; ) +; (set! f0-3 f1-2) +; (set! a0-10 (fpr->gpr f0-3)) +; ) +; ((<.s f2-0 f0-3) +; (set! f0-3 f2-0) +; (set! a0-12 (fpr->gpr f0-3)) +; ) +; ) +; (set! (-> v1-19 y) f0-3) +; (set! a0-13 (fpr->gpr f0-3)) +; (.lvf vf4 (&-> v1-19 quad)) +; (.lvf vf3 (&-> s2-0 inv-mat vector 1 quad)) +; (.lvf vf5 (&-> s2-0 inv-mat vector 2 quad)) +; (.sub.vf vf2 vf4 vf3) +; (.mul.vf vf1 vf5 vf2) +; (.add.x.vf vf1 vf1 vf1 :mask #b10) +; (.add.z.vf vf1 vf1 vf1 :mask #b10) +; (.mov v1-20 vf1) +; (bl! (<0.si v1-20) L99 (no-delay!)) +; (.sub.vf vf2 vf0 vf2) +; (or +; (begin +; (label cfg-18) +; (.svf (&-> s1-0 quad) vf2) +; (set! t9-2 vector-normalize!) +; (set! a0-14 s1-0) +; (set! a1-4 1.0) +; (call! a0-14 a1-4) +; (set! v1-21 s1-0) +; (set! a0-15 s1-0) +; (set! f0-4 (-> s2-0 collide-sphere-neg-r x)) +; (set! f0-5 (neg.s f0-4)) +; (set! v1-22 (vector-float*!2 v1-21 a0-15 f0-5)) +; (set! v1-23 s1-0) +; (set! a0-16 s1-0) +; (.lvf vf1 (&-> a0-16 quad)) +; (set! a0-17 *display*) +; (set! f0-6 (-> a0-17 frames-per-second)) +; (.mov at-0 f0-6) +; (.mov vf2 at-0) +; (.mov.vf vf1 vf0 :mask #b1000) +; (.mul.x.vf vf1 vf1 vf2 :mask #b111) +; (.svf (&-> v1-23 quad) vf1) +; (set! s0-0 (-> s3-0 status)) +; (set! a0-18 s3-0) +; (set! v1-24 (-> a0-18 type)) +; (set! t9-3 (method-of-type v1-24 dummy-37)) +; (set! a1-5 s1-0) +; (call! a0-18 a1-5) +; (set! v1-25 v0-3) +; (set! (-> s3-0 status) s0-0) +; (set! s5-1 (+ s5-1 -1)) +; (set! a0-19 (<=0.si s5-1)) +; a0-19 +; ) +; (begin +; (set! a0-20 obj) +; (set! v1-27 (-> a0-20 type)) +; (set! t9-4 (method-of-type v1-27 dummy-42)) +; (set! a1-6 s3-0) +; (set! a2-2 s2-0) +; (set! v0-4 (call! a0-20 a1-6 a2-2)) +; (set! v1-28 v0-4) +; (set! v1-26 (not v1-28)) +; ) +; ) +; v1-26 +; ) +; (empty) +; ) +; (set! v1-30 (-> obj root-prim)) +; (set! s5-0 (-> v1-30 collide-with)) +; (set! v1-31 s5-0) +; ) +; ) +; ) +; (set! v1-5 s4-0) +; (set! a0-21 *collide-player-list*) +; (set! a0-22 (-> s4-0 next0)) +; (set! s4-0 a0-22) +; ) +; ) +; (set! v1-34 (logand s5-0 14)) +; (nonzero? v1-34) +; ) +; (when (begin +; (when (begin +; (when (begin (set! v1-35 (logand s5-0 2)) (nonzero? v1-35)) +; (set! v1-37 *collide-hit-by-player-list*) +; (set! v1-38 (-> v1-37 alive-list next0)) +; (set! a0-25 *collide-hit-by-player-list*) +; (set! a0-26 v1-38) +; (set! s4-1 (-> a0-26 next0)) +; (while (begin (set! a0-45 *collide-hit-by-player-list*) (set! a0-46 (-> a0-45 alive-list-end)) (!= v1-38 a0-46)) +; (when (begin +; (set! s3-1 (the-as collide-shape-moving (-> (the-as connection v1-38) param1))) +; (set! v1-39 (-> s3-1 root-prim)) +; (set! v1-40 (-> v1-39 prim-core collide-as)) +; (set! v1-41 (logand s5-0 v1-40)) +; (nonzero? v1-41) +; ) +; (when (begin (set! v1-43 (-> s3-1 process)) (set! a0-27 (-> obj process)) (!= a0-27 v1-43)) +; (when (begin +; (and +; (begin +; (set! s2-1 (new 'stack-no-clear 'collide-work)) +; (set! a0-28 obj) +; (set! v1-45 (-> a0-28 type)) +; (set! t9-5 (method-of-type v1-45 dummy-42)) +; (set! a1-7 s3-1) +; (set! a2-3 s2-1) +; (set! v0-6 (call! a0-28 a1-7 a2-3)) +; (set! v1-46 v0-6) +; v1-46 +; ) +; (begin +; (set! f0-7 -81.92) +; (set! f1-3 (-> s2-1 collide-sphere-neg-r x)) +; (set! v1-47 (the-as none (>=.s f0-7 f1-3))) +; ) +; ) +; v1-47 +; ) +; (set! a0-29 s3-1) +; (set! v1-49 (-> a0-29 type)) +; (set! t9-6 (method-of-type v1-49 dummy-32)) +; (set! a1-8 8192.0) +; (set! v1-50 (-> s3-1 root-prim)) +; (set! a2-4 (-> v1-50 collide-with)) +; (call! a0-29 a1-8 a2-4) +; (set! v1-51 v0-7) +; (set! s5-2 3) +; (until (begin +; (cond +; ((begin +; (set! s1-1 (new 'stack-no-clear 'vector)) +; (set! v1-52 (new 'stack-no-clear 'vector)) +; (set! a0-30 v1-52) +; (set! a1-9 (-> s3-1 trans)) +; (set! a1-10 (-> a1-9 quad)) +; (set! (-> a0-30 quad) a1-10) +; (set! f0-8 2867.2) +; (set! f1-4 (-> v1-52 y)) +; (set! f1-5 (+.s f0-8 f1-4)) +; (set! f0-9 5734.4) +; (set! f2-1 (+.s f0-9 f1-5)) +; (set! f0-10 (-> s2-1 inv-mat vector 1 y)) +; (<.s f0-10 f1-5) +; ) +; (set! f0-10 f1-5) +; (set! a0-32 (fpr->gpr f0-10)) +; ) +; ((<.s f2-1 f0-10) +; (set! f0-10 f2-1) +; (set! a0-34 (fpr->gpr f0-10)) +; ) +; ) +; (set! (-> v1-52 y) f0-10) +; (set! a0-35 (fpr->gpr f0-10)) +; (.lvf vf4 (&-> v1-52 quad)) +; (.lvf vf3 (&-> s2-1 inv-mat vector 1 quad)) +; (.lvf vf5 (&-> s2-1 inv-mat vector 2 quad)) +; (.sub.vf vf2 vf4 vf3) +; (.mul.vf vf1 vf5 vf2) +; (.add.x.vf vf1 vf1 vf1 :mask #b10) +; (.add.z.vf vf1 vf1 vf1 :mask #b10) +; (.mov v1-53 vf1) +; (bl! (<0.si v1-53) L109 (no-delay!)) +; (.sub.vf vf2 vf0 vf2) +; (or +; (begin +; (label cfg-44) +; (.svf (&-> s1-1 quad) vf2) +; (set! t9-7 vector-normalize!) +; (set! a0-36 s1-1) +; (set! a1-11 1.0) +; (call! a0-36 a1-11) +; (set! v1-54 s1-1) +; (set! a0-37 s1-1) +; (set! f0-11 (-> s2-1 collide-sphere-neg-r x)) +; (set! f0-12 (neg.s f0-11)) +; (set! v1-55 (vector-float*!2 v1-54 a0-37 f0-12)) +; (set! v1-56 s1-1) +; (set! a0-38 s1-1) +; (.lvf vf1 (&-> a0-38 quad)) +; (set! a0-39 *display*) +; (set! f0-13 (-> a0-39 frames-per-second)) +; (.mov at-1 f0-13) +; (.mov vf2 at-1) +; (.mov.vf vf1 vf0 :mask #b1000) +; (.mul.x.vf vf1 vf1 vf2 :mask #b111) +; (.svf (&-> v1-56 quad) vf1) +; (set! s0-1 (-> s3-1 status)) +; (set! a0-40 s3-1) +; (set! v1-57 (-> a0-40 type)) +; (set! t9-8 (method-of-type v1-57 dummy-37)) +; (set! a1-12 s1-1) +; (call! a0-40 a1-12) +; (set! v1-58 v0-9) +; (set! (-> s3-1 status) s0-1) +; (set! s5-2 (+ s5-2 -1)) +; (set! a0-41 (<=0.si s5-2)) +; a0-41 +; ) +; (begin +; (set! a0-42 obj) +; (set! v1-60 (-> a0-42 type)) +; (set! t9-9 (method-of-type v1-60 dummy-42)) +; (set! a1-13 s3-1) +; (set! a2-5 s2-1) +; (set! v0-10 (call! a0-42 a1-13 a2-5)) +; (set! v1-61 v0-10) +; (set! v1-59 (not v1-61)) +; ) +; ) +; v1-59 +; ) +; (empty) +; ) +; (set! v1-63 (-> obj root-prim)) +; (set! s5-0 (-> v1-63 collide-with)) +; (set! v1-64 s5-0) +; ) +; ) +; ) +; (set! v1-38 s4-1) +; (set! a0-43 *collide-hit-by-player-list*) +; (set! a0-44 (-> s4-1 next0)) +; (set! s4-1 a0-44) +; ) +; ) +; (set! v1-67 (logand s5-0 4)) +; (nonzero? v1-67) +; ) +; (set! v1-69 *collide-usually-hit-by-player-list*) +; (set! v1-70 (-> v1-69 alive-list next0)) +; (set! a0-47 *collide-usually-hit-by-player-list*) +; (set! a0-48 v1-70) +; (set! s4-2 (-> a0-48 next0)) +; (while (begin +; (set! a0-67 *collide-usually-hit-by-player-list*) +; (set! a0-68 (-> a0-67 alive-list-end)) +; (!= v1-70 a0-68) +; ) +; (when (begin +; (set! s3-2 (the-as collide-shape-moving (-> (the-as connection v1-70) param1))) +; (set! v1-71 (-> s3-2 root-prim)) +; (set! v1-72 (-> v1-71 prim-core collide-as)) +; (set! v1-73 (logand s5-0 v1-72)) +; (nonzero? v1-73) +; ) +; (when (begin (set! v1-75 (-> s3-2 process)) (set! a0-49 (-> obj process)) (!= a0-49 v1-75)) +; (when (begin +; (and +; (begin +; (set! s2-2 (new 'stack-no-clear 'collide-work)) +; (set! a0-50 obj) +; (set! v1-77 (-> a0-50 type)) +; (set! t9-10 (method-of-type v1-77 dummy-42)) +; (set! a1-14 s3-2) +; (set! a2-6 s2-2) +; (set! v0-11 (call! a0-50 a1-14 a2-6)) +; (set! v1-78 v0-11) +; v1-78 +; ) +; (begin +; (set! f0-14 -81.92) +; (set! f1-6 (-> s2-2 collide-sphere-neg-r x)) +; (set! v1-79 (the-as none (>=.s f0-14 f1-6))) +; ) +; ) +; v1-79 +; ) +; (set! a0-51 s3-2) +; (set! v1-81 (-> a0-51 type)) +; (set! t9-11 (method-of-type v1-81 dummy-32)) +; (set! a1-15 8192.0) +; (set! v1-82 (-> s3-2 root-prim)) +; (set! a2-7 (-> v1-82 collide-with)) +; (call! a0-51 a1-15 a2-7) +; (set! v1-83 v0-12) +; (set! s5-3 3) +; (until (begin +; (cond +; ((begin +; (set! s1-2 (new 'stack-no-clear 'vector)) +; (set! v1-84 (new 'stack-no-clear 'vector)) +; (set! a0-52 v1-84) +; (set! a1-16 (-> s3-2 trans)) +; (set! a1-17 (-> a1-16 quad)) +; (set! (-> a0-52 quad) a1-17) +; (set! f0-15 2867.2) +; (set! f1-7 (-> v1-84 y)) +; (set! f1-8 (+.s f0-15 f1-7)) +; (set! f0-16 5734.4) +; (set! f2-2 (+.s f0-16 f1-8)) +; (set! f0-17 (-> s2-2 inv-mat vector 1 y)) +; (<.s f0-17 f1-8) +; ) +; (set! f0-17 f1-8) +; (set! a0-54 (fpr->gpr f0-17)) +; ) +; ((<.s f2-2 f0-17) +; (set! f0-17 f2-2) +; (set! a0-56 (fpr->gpr f0-17)) +; ) +; ) +; (set! (-> v1-84 y) f0-17) +; (set! a0-57 (fpr->gpr f0-17)) +; (.lvf vf4 (&-> v1-84 quad)) +; (.lvf vf3 (&-> s2-2 inv-mat vector 1 quad)) +; (.lvf vf5 (&-> s2-2 inv-mat vector 2 quad)) +; (.sub.vf vf2 vf4 vf3) +; (.mul.vf vf1 vf5 vf2) +; (.add.x.vf vf1 vf1 vf1 :mask #b10) +; (.add.z.vf vf1 vf1 vf1 :mask #b10) +; (.mov v1-85 vf1) +; (bl! (<0.si v1-85) L119 (no-delay!)) +; (.sub.vf vf2 vf0 vf2) +; (or +; (begin +; (label cfg-69) +; (.svf (&-> s1-2 quad) vf2) +; (set! t9-12 vector-normalize!) +; (set! a0-58 s1-2) +; (set! a1-18 1.0) +; (call! a0-58 a1-18) +; (set! v1-86 s1-2) +; (set! a0-59 s1-2) +; (set! f0-18 (-> s2-2 collide-sphere-neg-r x)) +; (set! f0-19 (neg.s f0-18)) +; (set! v1-87 (vector-float*!2 v1-86 a0-59 f0-19)) +; (set! v1-88 s1-2) +; (set! a0-60 s1-2) +; (.lvf vf1 (&-> a0-60 quad)) +; (set! a0-61 *display*) +; (set! f0-20 (-> a0-61 frames-per-second)) +; (.mov at-2 f0-20) +; (.mov vf2 at-2) +; (.mov.vf vf1 vf0 :mask #b1000) +; (.mul.x.vf vf1 vf1 vf2 :mask #b111) +; (.svf (&-> v1-88 quad) vf1) +; (set! s0-2 (-> s3-2 status)) +; (set! a0-62 s3-2) +; (set! v1-89 (-> a0-62 type)) +; (set! t9-13 (method-of-type v1-89 dummy-37)) +; (set! a1-19 s1-2) +; (call! a0-62 a1-19) +; (set! v1-90 v0-14) +; (set! (-> s3-2 status) s0-2) +; (set! s5-3 (+ s5-3 -1)) +; (set! a0-63 (<=0.si s5-3)) +; a0-63 +; ) +; (begin +; (set! a0-64 obj) +; (set! v1-92 (-> a0-64 type)) +; (set! t9-14 (method-of-type v1-92 dummy-42)) +; (set! a1-20 s3-2) +; (set! a2-8 s2-2) +; (set! v0-15 (call! a0-64 a1-20 a2-8)) +; (set! v1-93 v0-15) +; (set! v1-91 (not v1-93)) +; ) +; ) +; v1-91 +; ) +; (empty) +; ) +; (set! v1-95 (-> obj root-prim)) +; (set! s5-0 (-> v1-95 collide-with)) +; (set! v1-96 s5-0) +; ) +; ) +; ) +; (set! v1-70 s4-2) +; (set! a0-65 *collide-usually-hit-by-player-list*) +; (set! a0-66 (-> s4-2 next0)) +; (set! s4-2 a0-66) +; ) +; ) +; (set! v1-99 (logand s5-0 8)) +; (nonzero? v1-99) +; ) +; (set! v1-100 *collide-hit-by-others-list*) +; (set! v1-101 (-> v1-100 alive-list next0)) +; (set! a0-69 *collide-hit-by-others-list*) +; (set! a0-70 v1-101) +; (set! s4-3 (-> a0-70 next0)) +; (while (begin (set! a0-89 *collide-hit-by-others-list*) (set! a0-90 (-> a0-89 alive-list-end)) (!= v1-101 a0-90)) +; (when (begin +; (set! s3-3 (the-as collide-shape-moving (-> (the-as connection v1-101) param1))) +; (set! v1-102 (-> s3-3 root-prim)) +; (set! v1-103 (-> v1-102 prim-core collide-as)) +; (set! v1-104 (logand s5-0 v1-103)) +; (nonzero? v1-104) +; ) +; (when (begin (set! v1-106 (-> s3-3 process)) (set! a0-71 (-> obj process)) (!= a0-71 v1-106)) +; (when (begin +; (and +; (begin +; (set! s2-3 (new 'stack-no-clear 'collide-work)) +; (set! a0-72 obj) +; (set! v1-108 (-> a0-72 type)) +; (set! t9-15 (method-of-type v1-108 dummy-42)) +; (set! a1-21 s3-3) +; (set! a2-9 s2-3) +; (set! v0-16 (call! a0-72 a1-21 a2-9)) +; (set! v1-109 v0-16) +; v1-109 +; ) +; (begin +; (set! f0-21 -81.92) +; (set! f1-9 (-> s2-3 collide-sphere-neg-r x)) +; (set! v1-110 (the-as none (>=.s f0-21 f1-9))) +; ) +; ) +; v1-110 +; ) +; (set! a0-73 s3-3) +; (set! v1-112 (-> a0-73 type)) +; (set! t9-16 (method-of-type v1-112 dummy-32)) +; (set! a1-22 8192.0) +; (set! v1-113 (-> s3-3 root-prim)) +; (set! a2-10 (-> v1-113 collide-with)) +; (call! a0-73 a1-22 a2-10) +; (set! v1-114 v0-17) +; (set! s5-4 3) +; (until (begin +; (cond +; ((begin +; (set! s1-3 (new 'stack-no-clear 'vector)) +; (set! v1-115 (new 'stack-no-clear 'vector)) +; (set! a0-74 v1-115) +; (set! a1-23 (-> s3-3 trans)) +; (set! a1-24 (-> a1-23 quad)) +; (set! (-> a0-74 quad) a1-24) +; (set! f0-22 2867.2) +; (set! f1-10 (-> v1-115 y)) +; (set! f1-11 (+.s f0-22 f1-10)) +; (set! f0-23 5734.4) +; (set! f2-3 (+.s f0-23 f1-11)) +; (set! f0-24 (-> s2-3 inv-mat vector 1 y)) +; (<.s f0-24 f1-11) +; ) +; (set! f0-24 f1-11) +; (set! a0-76 (fpr->gpr f0-24)) +; ) +; ((<.s f2-3 f0-24) +; (set! f0-24 f2-3) +; (set! a0-78 (fpr->gpr f0-24)) +; ) +; ) +; (set! (-> v1-115 y) f0-24) +; (set! a0-79 (fpr->gpr f0-24)) +; (.lvf vf4 (&-> v1-115 quad)) +; (.lvf vf3 (&-> s2-3 inv-mat vector 1 quad)) +; (.lvf vf5 (&-> s2-3 inv-mat vector 2 quad)) +; (.sub.vf vf2 vf4 vf3) +; (.mul.vf vf1 vf5 vf2) +; (.add.x.vf vf1 vf1 vf1 :mask #b10) +; (.add.z.vf vf1 vf1 vf1 :mask #b10) +; (.mov v1-116 vf1) +; (bl! (<0.si v1-116) L129 (no-delay!)) +; (.sub.vf vf2 vf0 vf2) +; (or +; (begin +; (label cfg-94) +; (.svf (&-> s1-3 quad) vf2) +; (set! t9-17 vector-normalize!) +; (set! a0-80 s1-3) +; (set! a1-25 1.0) +; (call! a0-80 a1-25) +; (set! v1-117 s1-3) +; (set! a0-81 s1-3) +; (set! f0-25 (-> s2-3 collide-sphere-neg-r x)) +; (set! f0-26 (neg.s f0-25)) +; (set! v1-118 (vector-float*!2 v1-117 a0-81 f0-26)) +; (set! v1-119 s1-3) +; (set! a0-82 s1-3) +; (.lvf vf1 (&-> a0-82 quad)) +; (set! a0-83 *display*) +; (set! f0-27 (-> a0-83 frames-per-second)) +; (.mov at-3 f0-27) +; (.mov vf2 at-3) +; (.mov.vf vf1 vf0 :mask #b1000) +; (.mul.x.vf vf1 vf1 vf2 :mask #b111) +; (.svf (&-> v1-119 quad) vf1) +; (set! s0-3 (-> s3-3 status)) +; (set! a0-84 s3-3) +; (set! v1-120 (-> a0-84 type)) +; (set! t9-18 (method-of-type v1-120 dummy-37)) +; (set! a1-26 s1-3) +; (call! a0-84 a1-26) +; (set! v1-121 v0-19) +; (set! (-> s3-3 status) s0-3) +; (set! s5-4 (+ s5-4 -1)) +; (set! a0-85 (<=0.si s5-4)) +; a0-85 +; ) +; (begin +; (set! a0-86 obj) +; (set! v1-123 (-> a0-86 type)) +; (set! t9-19 (method-of-type v1-123 dummy-42)) +; (set! a1-27 s3-3) +; (set! a2-11 s2-3) +; (set! v0-20 (call! a0-86 a1-27 a2-11)) +; (set! v1-124 v0-20) +; (set! v1-122 (not v1-124)) +; ) +; ) +; v1-122 +; ) +; (empty) +; ) +; (set! v1-126 (-> obj root-prim)) +; (set! s5-0 (-> v1-126 collide-with)) +; (set! v1-127 s5-0) +; ) +; ) +; ) +; (set! v1-101 s4-3) +; (set! a0-87 *collide-hit-by-others-list*) +; (set! a0-88 (-> s4-3 next0)) +; (set! s4-3 a0-88) +; ) +; (set! v0-5 #f) +; ) +; ) +; (ret-value v0-5) +; ) +; ) + ;; ERROR: function was not converted to expressions. Cannot decompile. (defmethod overlaps-others-test collide-shape-prim ((obj collide-shape-prim)) - (format - 0 - "ERROR: Unsupported call to collide-shape-prim::overlaps-others-test!~%" - ) + (format 0 "ERROR: Unsupported call to collide-shape-prim::overlaps-others-test!~%") #f ) @@ -2015,188 +2619,109 @@ (none) ) -(defmethod - dummy-53 - collide-shape - ((obj collide-shape) (arg0 int) (arg1 int) (arg2 int)) +(defmethod dummy-53 collide-shape ((obj collide-shape) (arg0 int) (arg1 int) (arg2 int)) (let ((s3-0 (-> obj root-prim))) - (if (logtest? (-> s3-0 prim-id) arg0) - (set! - (-> s3-0 prim-core collide-as) - (logior (logclear (-> s3-0 prim-core collide-as) arg1) arg2) - ) - ) - (let - ((v1-7 - (if - (and - (nonzero? s3-0) - (type-type? (-> s3-0 type) collide-shape-prim-group) + (if (logtest? (-> s3-0 prim-id) arg0) + (set! (-> s3-0 prim-core collide-as) (logior (logclear (-> s3-0 prim-core collide-as) arg1) arg2)) ) - s3-0 - ) - ) - ) - (when v1-7 - (dotimes (a0-4 (-> (the-as collide-shape-prim-group v1-7) num-prims)) - (let - ((a1-4 - (-> - (the-as collide-shape-prim-group (+ (* a0-4 4) (the-as int v1-7))) - prims - 0 + (let ((v1-7 (if (and (nonzero? s3-0) (type-type? (-> s3-0 type) collide-shape-prim-group)) + s3-0 + ) + ) + ) + (when v1-7 + (dotimes (a0-4 (-> (the-as collide-shape-prim-group v1-7) num-prims)) + (let ((a1-4 (-> (the-as collide-shape-prim-group (+ (* a0-4 4) (the-as int v1-7))) prims 0))) + (if (logtest? (-> a1-4 prim-id) arg0) + (set! (-> a1-4 prim-core collide-as) (logior (logclear (-> a1-4 prim-core collide-as) arg1) arg2)) + ) + ) ) - ) ) - (if (logtest? (-> a1-4 prim-id) arg0) - (set! - (-> a1-4 prim-core collide-as) - (logior (logclear (-> a1-4 prim-core collide-as) arg1) arg2) - ) - ) - ) ) - ) ) - ) 0 (none) ) (defmethod dummy-54 collide-shape ((obj collide-shape) (arg0 int) (arg1 int)) (let ((s4-0 (-> obj root-prim))) - (if (logtest? (-> s4-0 prim-id) arg0) - (set! (-> s4-0 prim-core offense) arg1) - ) - (let - ((v1-5 - (if - (and - (nonzero? s4-0) - (type-type? (-> s4-0 type) collide-shape-prim-group) + (if (logtest? (-> s4-0 prim-id) arg0) + (set! (-> s4-0 prim-core offense) arg1) ) - s4-0 - ) - ) - ) - (when v1-5 - (dotimes (a0-3 (-> (the-as collide-shape-prim-group v1-5) num-prims)) - (let - ((a1-4 - (-> - (the-as collide-shape-prim-group (+ (* a0-3 4) (the-as int v1-5))) - prims - 0 + (let ((v1-5 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) collide-shape-prim-group)) + s4-0 + ) + ) + ) + (when v1-5 + (dotimes (a0-3 (-> (the-as collide-shape-prim-group v1-5) num-prims)) + (let ((a1-4 (-> (the-as collide-shape-prim-group (+ (* a0-3 4) (the-as int v1-5))) prims 0))) + (if (logtest? (-> a1-4 prim-id) arg0) + (set! (-> a1-4 prim-core offense) arg1) + ) + ) ) - ) ) - (if (logtest? (-> a1-4 prim-id) arg0) - (set! (-> a1-4 prim-core offense) arg1) - ) - ) ) - ) ) - ) 0 (none) ) -(defmethod - dummy-55 - collide-shape - ((obj collide-shape) - (arg0 process) - (arg1 touching-shapes-entry) - (arg2 float) - (arg3 float) - (arg4 float) - ) +(defmethod dummy-55 collide-shape ((obj collide-shape) (arg0 process) (arg1 touching-shapes-entry) (arg2 float) (arg3 float) (arg4 float)) (local-vars (sv-144 process)) (with-pp - (when arg1 - (let ((s1-0 (-> arg1 head))) - (set! sv-144 arg0) - (let - ((s5-0 - (if - (and (nonzero? sv-144) (type-type? (-> sv-144 type) process-drawable)) - sv-144 - ) - ) - ) - (when (and s1-0 s5-0) - (let - ((s0-1 (get-touched-prim s1-0 obj (the-as touching-prims-entry arg1)))) - (get-touched-prim - s1-0 - (-> (the-as process-drawable s5-0) root) - (the-as touching-prims-entry arg1) - ) - (let* ((v1-8 (dummy-11 s1-0 (new 'stack-no-clear 'vector))) - (s1-2 - (vector-! - (new 'stack-no-clear 'vector) - v1-8 - (the-as vector (-> s0-1 prim-core)) - ) - ) - ) - (vector-normalize! s1-2 1.0) - (when (< arg2 (-> s1-2 y)) - (let ((s2-1 (new 'stack-no-clear 'vector))) - (set! - (-> s2-1 quad) - (-> (the-as process-drawable s5-0) root transv quad) - ) - (let - ((f30-0 - (vector-xz-length (-> (the-as process-drawable s5-0) root transv)) + (when arg1 + (let ((s1-0 (-> arg1 head))) + (set! sv-144 arg0) + (let ((s5-0 (if (and (nonzero? sv-144) (type-type? (-> sv-144 type) process-drawable)) + sv-144 + ) + ) ) - ) - (if (= f30-0 0.0) - (set! - (-> s2-1 quad) - (-> - (vector-z-quaternion! - s2-1 - (-> (the-as process-drawable s5-0) root quat) + (when (and s1-0 s5-0) + (let ((s0-1 (get-touched-prim s1-0 obj (the-as touching-prims-entry arg1)))) + (get-touched-prim s1-0 (-> (the-as process-drawable s5-0) root) (the-as touching-prims-entry arg1)) + (let* ((v1-8 (dummy-11 s1-0 (new 'stack-no-clear 'vector))) + (s1-2 (vector-! (new 'stack-no-clear 'vector) v1-8 (the-as vector (-> s0-1 prim-core)))) + ) + (vector-normalize! s1-2 1.0) + (when (< arg2 (-> s1-2 y)) + (let ((s2-1 (new 'stack-no-clear 'vector))) + (set! (-> s2-1 quad) (-> (the-as process-drawable s5-0) root transv quad)) + (let ((f30-0 (vector-xz-length (-> (the-as process-drawable s5-0) root transv)))) + (if (= f30-0 0.0) + (set! (-> s2-1 quad) (-> (vector-z-quaternion! s2-1 (-> (the-as process-drawable s5-0) root quat)) quad)) + ) + (vector-xz-normalize! s2-1 (fmax f30-0 arg4)) + ) + (set! (-> s2-1 y) arg3) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) pp) + (set! (-> a1-8 num-params) 2) + (set! (-> a1-8 message) 'shove) + (set! (-> a1-8 param 0) (the-as uint arg1)) + (let ((v1-18 (new 'static 'attack-info :mask #x802))) + (set! (-> v1-18 vector quad) (-> s2-1 quad)) + (set! (-> v1-18 angle) 'jump) + (set! (-> a1-8 param 1) (the-as uint v1-18)) + ) + (send-event-function s5-0 a1-8) + ) + ) + ) ) - quad - ) ) - ) - (vector-xz-normalize! s2-1 (fmax f30-0 arg4)) ) - (set! (-> s2-1 y) arg3) - (let ((a1-8 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-8 from) pp) - (set! (-> a1-8 num-params) 2) - (set! (-> a1-8 message) 'shove) - (set! (-> a1-8 param 0) (the-as uint arg1)) - (let ((v1-18 (new 'static 'attack-info :mask #x802))) - (set! (-> v1-18 vector quad) (-> s2-1 quad)) - (set! (-> v1-18 angle) 'jump) - (set! (-> a1-8 param 1) (the-as uint v1-18)) - ) - (send-event-function s5-0 a1-8) - ) - ) ) - ) ) - ) ) - ) + (none) ) - (none) - ) ) -(defmethod - dummy-41 - collide-shape - ((obj collide-shape) (arg0 attack-info) (arg1 float)) +(defmethod dummy-41 collide-shape ((obj collide-shape) (arg0 attack-info) (arg1 float)) (set! (-> arg0 shove-up) arg1) (let* ((s3-0 (-> obj process path)) (s2-0 (-> s3-0 curve num-cverts)) @@ -2204,19 +2729,19 @@ (s1-0 (new 'stack-no-clear 'vector)) (s5-0 (new 'stack-no-clear 'vector)) ) - (let ((f30-0 -1.0)) - (dotimes (s0-0 s2-0) - (eval-path-curve-div! s3-0 s1-0 (the float s0-0) 'interp) - (let ((f0-3 (vector-vector-distance-squared s4-0 s1-0))) - (when (or (< f30-0 0.0) (< f0-3 f30-0)) - (set! f30-0 f0-3) - (set! (-> s5-0 quad) (-> s1-0 quad)) - ) + (let ((f30-0 -1.0)) + (dotimes (s0-0 s2-0) + (eval-path-curve-div! s3-0 s1-0 (the float s0-0) 'interp) + (let ((f0-3 (vector-vector-distance-squared s4-0 s1-0))) + (when (or (< f30-0 0.0) (< f0-3 f30-0)) + (set! f30-0 f0-3) + (set! (-> s5-0 quad) (-> s1-0 quad)) + ) + ) + ) ) - ) + (vector-! (-> arg0 vector) s5-0 s4-0) ) - (vector-! (-> arg0 vector) s5-0 s4-0) - ) ) diff --git a/goal_src/engine/debug/part-tester.gc b/goal_src/engine/debug/part-tester.gc index 8644e4bf12..c915308057 100644 --- a/goal_src/engine/debug/part-tester.gc +++ b/goal_src/engine/debug/part-tester.gc @@ -27,7 +27,7 @@ (deftype part-tester (process) ((root trsqv :offset-assert 112) (part sparticle-launch-control :offset-assert 116) - (old-group basic :offset-assert 120) + (old-group sparticle-launch-group :offset-assert 120) ) :heap-base #x100 :method-count-assert 14 @@ -158,4 +158,4 @@ (none) ) -) \ No newline at end of file +) diff --git a/goal_src/engine/game/generic-obs.gc b/goal_src/engine/game/generic-obs.gc index 11e37e2ea8..8167fd3d05 100644 --- a/goal_src/engine/game/generic-obs.gc +++ b/goal_src/engine/game/generic-obs.gc @@ -16,6 +16,14 @@ (define-extern process-drawable-from-entity! (function process-drawable entity-actor none)) +;; TODO - for citb-plat +(define-extern *particle-quat* quaternion) + +;; TODO - for jungle-mirrors +(define-extern line-in-view-frustum? (function vector vector symbol)) + +;; decomp begins + (declare-type beach-part part-spawner) (define-extern beach-part-grotto-1 (state beach-part)) diff --git a/goal_src/engine/game/projectiles-h.gc b/goal_src/engine/game/projectiles-h.gc index 07a7193df1..07b5866689 100644 --- a/goal_src/engine/game/projectiles-h.gc +++ b/goal_src/engine/game/projectiles-h.gc @@ -8,43 +8,42 @@ (declare-type projectile process-drawable) (define-extern projectile-init-by-other (function entity vector vector uint handle none :behavior projectile)) ;; 4th arg is `options`, 5th is `last-target` -;; decomp begins +;; DECOMP BEGINS (deftype projectile (process-drawable) - ((root-override collide-shape-moving :score 100 :offset 112) - (base-trans vector :inline :offset-assert 176) - (target vector :inline :offset-assert 192) - (target-base vector :inline :offset-assert 208) - (parent-base vector :inline :offset-assert 224) - (parent-quat vector :inline :offset-assert 240) - (base-vector vector :inline :offset-assert 256) - (timeout uint64 :offset-assert 272) - (options uint64 :offset-assert 280) - (last-target handle :offset-assert 288) - (notify-handle handle :offset-assert 296) - (max-speed float :offset-assert 304) - (max-turn float :offset-assert 308) - (old-dist float 16 :offset-assert 312) - (old-dist-count int32 :offset-assert 376) - (hits int32 :offset-assert 380) - (max-hits int32 :offset-assert 384) - (tween float :offset-assert 388) - (attack-mode symbol :offset-assert 392) - (update-velocity (function projectile none) :offset-assert 396) - (counter int32 :offset-assert 400) - (target-count int32 :offset-assert 404) - (sound-id sound-id :offset-assert 408) + ((root-override collide-shape-moving :offset 112) + (base-trans vector :inline :offset-assert 176) + (target vector :inline :offset-assert 192) + (target-base vector :inline :offset-assert 208) + (parent-base vector :inline :offset-assert 224) + (parent-quat vector :inline :offset-assert 240) + (base-vector vector :inline :offset-assert 256) + (timeout uint64 :offset-assert 272) + (options uint64 :offset-assert 280) + (last-target handle :offset-assert 288) + (notify-handle handle :offset-assert 296) + (max-speed float :offset-assert 304) + (max-turn float :offset-assert 308) + (old-dist float 16 :offset-assert 312) + (old-dist-count int32 :offset-assert 376) + (hits int32 :offset-assert 380) + (max-hits int32 :offset-assert 384) + (tween float :offset-assert 388) + (attack-mode symbol :offset-assert 392) + (update-velocity (function projectile none) :offset-assert 396) + (counter int32 :offset-assert 400) + (target-count int32 :offset-assert 404) + (sound-id sound-id :offset-assert 408) ) :heap-base #x130 :method-count-assert 29 :size-assert #x19c :flag-assert #x1d0130019c - ;; inherited inspect of process-drawable (:methods - (projectile-die () _type_ :state 20) ;; state - sound related? - (projectile-dissipate () _type_ :state 21) ;; state - (projectile-impact () _type_ :state 22) ;; state - (projectile-moving () _type_ :state 23) ;; state + (projectile-die () _type_ :state 20) + (projectile-dissipate () _type_ :state 21) + (projectile-impact () _type_ :state 22) + (projectile-moving () _type_ :state 23) (dummy-24 (_type_) none 24) (dummy-25 (_type_) none 25) (dummy-26 (_type_) none 26) @@ -53,6 +52,7 @@ ) ) + (deftype projectile-yellow (projectile) ((mode int32 :offset-assert 412) (angle float :offset-assert 416) @@ -63,6 +63,7 @@ :flag-assert #x1d014001a4 ) + (deftype projectile-blue (projectile) ((mode int32 :offset-assert 412) (joint-num int32 :offset-assert 416) @@ -73,3 +74,9 @@ :flag-assert #x1d014001a4 ) + +0 + + + + diff --git a/goal_src/engine/game/voicebox.gc b/goal_src/engine/game/voicebox.gc index 7fcb694eba..60acc72474 100644 --- a/goal_src/engine/game/voicebox.gc +++ b/goal_src/engine/game/voicebox.gc @@ -5,3 +5,333 @@ ;; name in dgo: voicebox ;; dgos: GAME, ENGINE +(define-extern *voicebox-sg* skeleton-group) + +(define-extern empty-state (state process)) + +;; DECOMP BEGINS + +(deftype camera-voicebox (camera-slave) + () + :heap-base #x9a0 + :method-count-assert 14 + :size-assert #xa04 + :flag-assert #xe09a00a04 + ) + + +(deftype voicebox (process-drawable) + ((parent-override (pointer camera-voicebox) :offset 12) + (base-trans vector :inline :offset-assert 176) + (seeker cam-float-seeker :inline :offset-assert 192) + (blend float :offset-assert 216) + (twist float :offset-assert 220) + (hint handle :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 23 + :size-assert #xe8 + :flag-assert #x17008000e8 + (:methods + (enter () _type_ :state 20) + (idle () _type_ :state 21) + (exit () _type_ :state 22) + ) + ) + + +(defstate empty-state (process) + :code + (the-as (function none :behavior process) nothing) + ) + +(defskelgroup *voicebox-sg* speaker + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +(defbehavior voicebox-track voicebox () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> gp-0 quad) (-> self parent-override 0 trans quad)) + (set! (-> s5-0 quad) (-> (target-pos 68) quad)) + (when *target* + (let + ((a2-0 + (vector-z-quaternion! + (new-stack-vector0) + (-> *target* control unknown-quaternion00) + ) + ) + ) + (vector+float*! s5-0 s5-0 a2-0 (* -16384.0 (- 1.0 (-> self blend)))) + ) + ) + (vector-lerp! (-> self root trans) gp-0 s5-0 (-> self blend)) + ) + (+! + (-> self root trans y) + (* + 1638.4 + (sin (* 54.613335 (the float (mod (-> *display* base-frame-counter) 1200)))) + ) + ) + (let ((gp-1 (new 'stack-no-clear 'quaternion))) + (forward-up->quaternion + gp-1 + (vector-normalize! + (vector-! + (new 'stack-no-clear 'vector) + (target-pos 37) + (-> self root trans) + ) + 1.0 + ) + (new 'static 'vector :y 1.0 :w 1.0) + ) + (rotate-toward-orientation! (-> self root) gp-1 65536.0 5461.3335) + ) + (when *target* + (let* ((gp-2 (-> *target* control)) + (s4-2 (-> self root trans)) + (f0-8 + (deg-diff + (y-angle gp-2) + (vector-y-angle + (vector-! (new 'stack-no-clear 'vector) s4-2 (-> gp-2 trans)) + ) + ) + ) + ) + (if (< 0.0 f0-8) + (set! + (-> self twist) + (seek (-> self twist) -0.4 (* 0.3 (-> *display* seconds-per-frame))) + ) + (set! + (-> self twist) + (seek (-> self twist) 0.4 (* 0.3 (-> *display* seconds-per-frame))) + ) + ) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 0) + (set! (-> a1-9 message) 'blocked-side?) + (case + (send-event-function (ppointer->process (-> self parent-override)) a1-9) + + ((1) + (set! (-> self twist) 0.5) + ) + ((2) + (set! (-> self twist) -0.5) + ) + ((3) + (set! (-> self twist) 0.0) + ) + ) + ) + (send-event + (ppointer->process (-> self parent-override)) + 'joystick + (-> self twist) + -1.0 + ) + ) + (set! (-> self root scale x) (lerp-scale 1.0 0.0 (-> self blend) 0.8 1.0)) + (set! (-> self root scale y) (-> self root scale x)) + (set! (-> self root scale z) (-> self root scale x)) + 0 + (none) + ) + +(defstate enter (voicebox) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('die) + (go-virtual exit) + ) + ) + ) + :trans + (behavior () + (voicebox-track) + (if (< 0.1 (-> self blend)) + (point-toward-point-clear-roll-pitch! (-> self root) (target-pos 0)) + ) + (none) + ) + :code + (behavior () + (set-setting! *setting-control* self 'sound-flava #f 20.0 6) + (if + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) 512) + ) + (send-event + (ppointer->process (-> self parent-override)) + 'set-dist + (new 'static 'vector :z 8192.0 :w 1.0) + (new 'static 'vector :y 20480.0 :z 12288.0 :w 1.0) + ) + (send-event + (ppointer->process (-> self parent-override)) + 'set-dist + (new 'static 'vector :z 16384.0 :w 1.0) + (new 'static 'vector :y 20480.0 :z 40960.0 :w 1.0) + ) + ) + (init-cam-float-seeker (-> self seeker) 1.0 0.01 0.022222223 0.1) + (set! (-> self seeker target) 0.0) + (while (< 0.0001 (-> self blend)) + (update! (-> self seeker) 0.0) + (set! (-> self blend) (-> self seeker value)) + (suspend) + ) + (set! (-> self blend) 0.0) + (go-virtual idle) + (none) + ) + :post + (the-as (function none :behavior voicebox) ja-post) + ) + +(defstate idle (voicebox) + :virtual #t + :event + (-> (method-of-type voicebox enter) event) + :trans + voicebox-track + :code + (behavior () + (while #t + (suspend) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group-eval! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior voicebox) ja-post) + ) + +(defstate exit (voicebox) + :virtual #t + :trans + voicebox-track + :code + (behavior () + (clear-pending-settings-from-process *setting-control* self 'sound-flava) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self seeker target) 1.0) + (while + (and + (< (-> self blend) 0.9999) + (not + (and + (not (handle->process (-> self hint))) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 15) + (-> *setting-control* current hint) + ) + ) + ) + (update! (-> self seeker) 0.0) + (set! (-> self blend) (-> self seeker value)) + (suspend) + ) + (set! (-> self blend) 1.0) + (send-event (ppointer->process (-> self parent-override)) 'go empty-state) + (suspend) + 0 + (none) + ) + :post + (the-as (function none :behavior voicebox) ja-post) + ) + +(defbehavior voicebox-init-by-other voicebox ((arg0 vector) (arg1 handle)) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self hint) arg1) + (set! (-> self root trans quad) (-> arg0 quad)) + (set! (-> self base-trans quad) (-> arg0 quad)) + (initialize-skeleton self *voicebox-sg* '()) + (set! (-> self blend) 1.0) + (go-virtual enter) + (none) + ) + +(defstate cam-voicebox (camera-voicebox) + :event + (-> cam-string event) + :enter + (-> cam-string enter) + :trans + (behavior () + (if (zero? (logand (-> *camera* master-options) 2)) + (deactivate self) + ) + (none) + ) + :code + (-> cam-string code) + ) + +(defun voicebox-spawn ((arg0 process) (arg1 vector)) + (with-pp + (let* ((s3-0 (get-process *camera-dead-pool* camera-voicebox #x4000)) + (s4-0 (when s3-0 + (let ((t9-1 (method-of-type camera-voicebox activate))) + (t9-1 + (the-as camera-voicebox s3-0) + arg0 + 'camera-voicebox + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s3-0 cam-slave-init cam-voicebox #f) + (-> s3-0 ppointer) + ) + ) + ) + (when s4-0 + (let ((s5-1 (get-process *default-dead-pool* voicebox #x4000))) + (when s5-1 + (let ((t9-4 (method-of-type voicebox activate))) + (t9-4 + (the-as voicebox s5-1) + (ppointer->process s4-0) + 'voicebox + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + voicebox-init-by-other + arg1 + (process->handle pp) + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + ) + ) + + + + diff --git a/goal_src/engine/nav/navigate-h.gc b/goal_src/engine/nav/navigate-h.gc index efcfdcd146..a44ddbd0b1 100644 --- a/goal_src/engine/nav/navigate-h.gc +++ b/goal_src/engine/nav/navigate-h.gc @@ -242,7 +242,7 @@ (point-in-bounds? (_type_ vector) symbol 10) (dummy-11 (_type_ vector) none 11) (dummy-12 () none 12) - (dummy-13 () none 13) + (dummy-13 (_type_ vector vector) vector 13) ;; see - puffer::20 (set-current-poly! (_type_ nav-poly) none 14) (set-target-pos! (_type_ vector) none 15) (dummy-16 (_type_ vector) nav-poly 16) ; see - nav-enemy-test-point-in-nav-mesh? @@ -256,7 +256,7 @@ (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) + (dummy-27 (_type_) none 27) (dummy-28 (_type_ int) none 28) (should-display? (_type_) symbol 29) (dummy-30 () none 30) diff --git a/goal_src/engine/sparticle/sparticle-h.gc b/goal_src/engine/sparticle/sparticle-h.gc index a37f98ce5c..70a54850c1 100644 --- a/goal_src/engine/sparticle/sparticle-h.gc +++ b/goal_src/engine/sparticle/sparticle-h.gc @@ -24,6 +24,7 @@ (bit1 1) ;; village1-part (bit2 2) ;; cleared after an aux has its func set to add-to-sprite-aux-lst (bit3 3) + (bit4 4) ;; see - swamp-blimp (ready-to-launch 6) ;; maybe just just death? (bit7 7) (aux-list 8) ;; prevents relaunch, adds to aux diff --git a/goal_src/engine/target/logic-target.gc b/goal_src/engine/target/logic-target.gc index ab1df0ea0c..35b9ee2be0 100644 --- a/goal_src/engine/target/logic-target.gc +++ b/goal_src/engine/target/logic-target.gc @@ -2485,9 +2485,9 @@ (-> self control unknown-vector11) (-> self control unknown-vector14) ) - (let ((a1-3 (new 'stack-no-clear 'collide-edge-hold-list))) - (set! (-> a1-3 num-allocs) (the-as uint 1)) - (set! (-> a1-3 num-attempts) (the-as uint *touching-list*)) + (let ((a1-3 (new 'stack-no-clear 'overlaps-others-params))) + (set! (-> a1-3 options) (the-as uint 1)) + (set! (-> a1-3 tlist) *touching-list*) (dummy-40 (-> self control) a1-3) ) (post-flag-setup) @@ -2609,9 +2609,9 @@ (-> self control unknown-vector11) (-> self control unknown-vector14) ) - (let ((a1-2 (new 'stack-no-clear 'collide-edge-hold-list))) - (set! (-> a1-2 num-allocs) (the-as uint 1)) - (set! (-> a1-2 num-attempts) (the-as uint *touching-list*)) + (let ((a1-2 (new 'stack-no-clear 'overlaps-others-params))) + (set! (-> a1-2 options) (the-as uint 1)) + (set! (-> a1-2 tlist) *touching-list*) (dummy-40 (-> self control) a1-2) ) (target-calc-camera-pos) diff --git a/goal_src/engine/ui/text-h.gc b/goal_src/engine/ui/text-h.gc index 3e0945fbf1..8f03c4634a 100644 --- a/goal_src/engine/ui/text-h.gc +++ b/goal_src/engine/ui/text-h.gc @@ -156,12 +156,18 @@ (jungle-precursorbridge-hint #x25b) (daxter-launcher-no-eco #x25c) + (jungle-mirrors-completion-talk-to-mayor #x25e) + (beach-gimmie #x262) (beach-sentinel #x263) (jungle-canyon-end #x264) (jungle-temple-door #x265) (misty-bike-jump #x266) (misty-eco-challenge #x267) + (beach-seagull-chased-one #x268) + (beach-seagull-chased-two #x26a) + (beach-seagull-chased-three #x26b) + (beach-seagull-chased-four #x26c) (misty-daxter-scared #x26f) @@ -172,33 +178,37 @@ (beach-flutflutegg-hint #x275) (sidekick-hint-fish-powerup #x278) - (misty-racer-hit-the-ballon-lurkers #x27e) - + (misty-daxter-hit-lurkers-not-mines #x27f) (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) (sidekick-speech-hint-crate-steel #x285) - + (beach-collectors-unblocked #x288) + (misty-stopped-lurkers-at-silo #x28a) + (misty-stopped-balloon-lurkers #x28b) (jungleb-eco-vents-opened #x289) - (sidekick-speech-crate-steel-break2 #x28e) (sidekick-speech-hint-crate-darkeco2 #x28f) + + (daxter-screaming-jump #x290) + (daxter-wahoo-jump #x291) (collectables-scout-flies-red-boxes #x295) - (found-all-scout-flies #x296) (yakow-owed-powercell #x297) + (jungle-mirrors-tutorial #x29c) + (jungle-mirrors-break-the-mirror-jak #x29d) + (jungle-mirrors-go-to-the-next-tower #x29f) + (jungle-mirrors-follow-the-beam #x2a0) + (misty-teetertotter-bonk-dax-tutorial #x2a4) (sidekick-hint-misty-get-red-eco #x2a5) + (red-eco-tutorial #x2a6) + (daxter-blue-eco-plat-tutorial #x2a7) (misty-bone-bridge-hint #x2aa) @@ -211,10 +221,9 @@ (missed #x2b5) (lose! #x2b6) - (daxter-screaming-jump #x290) - (daxter-wahoo-jump #x291) + - (red-eco-tutorial #x2a6) + (village2-gambler-money #x300) (village2-geologist-money #x301) @@ -272,16 +281,28 @@ (sunken-take-it-easy-hot-pipes #x34e) (sunken-double-lurker-hint #x347) (sunken-qbert-plat-hint #x34a) + (sunken-bully-dive-hint #x34b) (sunken-blue-eco-charger-all-hint #x34d) + (swamp-tethers-advice-hint #x352) + + (kermit-break-tongue #x357) (swamp-rats-nest-hint #x358) (daxter-you-can-shoot-with-yellow-eco #x359) - (swamp-bats-hint #x364) ;; maybe we can ???? the bats. lol + (kermit-run-away-jak #x35f) + + (swamp-bats-hint #x364) ;; maybe we can duck the bats + (swamp-tethers-three-to-go #x365) + (swamp-tethers-two-to-go #x366) + (swamp-tethers-lefts-find-the-last #x367) (flutflut-reminder #x368) (sage-golfclap-i-have-low-expectations #x36a) ;; where was this said? + + (swamp-tethers-completion-sage-precursor-arm #x36b) + (village2-warp-gate-reminder #x36f) (village2-warp-gate-reminder-annoyed #x370) @@ -334,13 +355,17 @@ (snow-frozen-crate #x42b) ;; task name? (snow-bumpers #x42c) + (dark-crystal-last-one #x432) (daxter-maybe-you-can-shoot-better-goggles #x433) (darkcave-light-crystal-low-light-hint #x437) (darkcave-light-crystal-hint #x438) - + (dark-crystal-run-away #x439) (cave-trap-nest-hint #x440) (snow-fort-reminder #x443) + + + (ram-boss-red-eco-hint #x444) (ice-cube-hint #x448) @@ -352,8 +377,8 @@ (fire-canyon-end #x500) (fire-canyon-buzzer #x501) - (sidekick-speech-hint-firecanyon-crate-darkeco1 #x506) - (sidekick-speech-hint-firecanyon-crate-darkeco2 #x507) + (daxter-maybe-i-should-drive #x506) + (daxter-you-are-trying-to-avoid-dark-eco #x507) (fire-canyon-level-name #x50c) diff --git a/goal_src/kernel-defs.gc b/goal_src/kernel-defs.gc index c1cf5f213a..b2717f664a 100644 --- a/goal_src/kernel-defs.gc +++ b/goal_src/kernel-defs.gc @@ -208,7 +208,7 @@ (define-extern scf-get-inactive-timeout (function int)) ;; dma-to-iop (define-extern kernel-shutdown (function none)) -(define-extern aybabtu (function int int)) +(define-extern aybabtu (function int int)) ;; this is just sceCdMmode ;; *stack-top* ;; *stack-base* ;; *stack-size* diff --git a/goal_src/levels/beach/seagull.gc b/goal_src/levels/beach/seagull.gc index ab35df2334..31edc5c981 100644 --- a/goal_src/levels/beach/seagull.gc +++ b/goal_src/levels/beach/seagull.gc @@ -5,3 +5,1574 @@ ;; name in dgo: seagull ;; dgos: BEA, L1 +(define-extern *seagull-sg* skeleton-group) + +(declare-type seagullflock process) + +;; DECOMP BEGINS + +(set! (-> *part-group-id-table* 160) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :name "group-seagull-takeoff" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 663 :fade-after (meters 20.0))) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +(set! (-> *part-id-table* 665) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-vel-y (meters 0.4)) + (sp-flt spt-accel-y -819.2) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(define + sound-seagull-squall + (new 'static 'sound-spec :num 1.0 :group #x1 :sound-name (static-sound-name "seagulls-2") :volume #x400) + ) + +(deftype seagull (process-drawable) + ((root-override collide-shape-moving :offset 112) + (index int32 :offset-assert 176) + (flock (pointer seagullflock) :offset-assert 180) + (heading float :offset-assert 184) + (tilt float :offset-assert 188) + (max-tilt float :offset-assert 192) + (angletan float :offset-assert 196) + (target-dist float :offset-assert 200) + (scared int32 :offset-assert 204) + (temp-heading float :offset-assert 208) + (temp-heading-time int32 :offset-assert 212) + (part-time uint64 :offset-assert 216) + (thrust float :offset-assert 224) + (teleport symbol :offset-assert 228) + ) + :heap-base #x80 + :method-count-assert 28 + :size-assert #xe8 + :flag-assert #x1c008000e8 + (:methods + (move-vertically! (_type_ symbol) none 20) + (adjust-heading-around-point-slow! (_type_ float) none 21) + (dummy-22 (_type_) none 22) + (adjust-heading-around-point! (_type_ float) none 23) + (dummy-24 (_type_) none 24) + (dummy-25 (_type_ float) none 25) + (dummy-26 (_type_) symbol 26) + (dummy-27 (_type_) none 27) + ) + (:states + seagull-flying + seagull-idle + (seagull-landing float) + seagull-soaring + seagull-takeoff + ) + ) + + +(deftype seagullflock (process) + ((self-override seagullflock :offset 28) + (path path-control :offset-assert 112) + (trans vector :inline :offset-assert 128) + (bird (pointer seagull) 64 :offset-assert 144) + (birds int32 :offset-assert 400) + (link actor-link-info :offset-assert 404) + (bird-at-waterfall uint64 :offset-assert 408) + (birds-at-waterfall int32 :offset-assert 416) + (target vector :inline :offset-assert 432) + (targetnum int32 :offset-assert 448) + (alert-time uint64 :offset-assert 456) + (teleport-frames int32 :offset-assert 464) + (cam-tracker uint64 :offset-assert 472) + (state-time uint64 :offset-assert 480) + (squall ambient-sound :offset-assert 488) + (max-lift float :offset-assert 492) + ) + :heap-base #x180 + :method-count-assert 17 + :size-assert #x1f0 + :flag-assert #x11018001f0 + (:methods + (create-the-flock! (_type_ vector) (pointer process) 14) + (play-hint (_type_ int) none 15) + (dummy-16 (_type_ seagull) float 16) + ) + (:states + seagullflock-at-waterfall + seagullflock-idle + ) + ) + + +(defmethod relocate seagullflock ((obj seagullflock) (arg0 int)) + (if (nonzero? (-> obj path)) + (&+! (-> obj path) arg0) + ) + (if (nonzero? (-> obj link)) + (&+! (-> obj link) arg0) + ) + (if (nonzero? (-> obj squall)) + (&+! (-> obj squall) arg0) + ) + (the-as seagullflock ((method-of-type process relocate) obj arg0)) + ) + +(defmethod deactivate seagullflock ((obj seagullflock)) + (if (nonzero? (-> obj squall)) + (stop! (-> obj squall)) + ) + ((method-of-type process deactivate) obj) + (none) + ) + +(define + *seagull-boxes* + (new 'static 'inline-array air-box 10 + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1146880.0 :y 143360.0 :z -1638400.0 :w -0.6427) + (new 'static 'vector :x 286720.0 :z 716800.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1277952.0 :y 14336.0 :z -1306624.0 :w -0.6427) + (new 'static 'vector :x 675840.0 :z 114688.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1474560.0 :y 10240.0 :z -1024000.0 :w -0.6427) + (new 'static 'vector :x 1228800.0 :z 339968.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1822720.0 :y 27033.6 :z -1961984.0 :w -0.6427) + (new 'static 'vector :x 143360.0 :z 245760.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1589248.0 :y 43417.6 :z -1933312.0 :w -0.6427) + (new 'static 'vector :x 204800.0 :z 184320.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1597440.0 :y 24985.6 :z -1757184.0 :w -0.6427) + (new 'static 'vector :x 133120.0 :z 491520.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1323008.0 :y 44236.8 :z -1771520.0 :w -0.6427) + (new 'static 'vector :x 360448.0 :z 221184.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1441792.0 :y 24985.6 :z -1564672.0 :w -0.6427) + (new 'static 'vector :x 81920.0 :z 421888.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1124352.0 :y 27975.68 :z -1581465.6 :w -0.8533) + (new 'static 'vector :x 204800.0 :z 221184.0 :w -0.5214) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -737280.0 :y 122880.0 :z -1396736.0 :w -0.8533) + (new 'static 'vector :x 475136.0 :z 819200.0 :w -0.5214) + ) + ) + ) + ) + +(defskelgroup *seagull-sg* seagull + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 2) + :longest-edge (meters 0) + ) + +(defmethod dummy-25 seagull ((obj seagull) (arg0 float)) + (let ((f1-1 (the float (sar (shl (the int (- arg0 (-> obj heading))) 48) 48))) + (f0-5 (- (-> obj tilt))) + ) + (let ((f2-0 (-> obj max-tilt))) + (set! f0-5 (cond + ((< f1-1 -364.0889) + (if (< (- f2-0) f0-5) + (set! f0-5 (+ -91.022224 f0-5)) + ) + f0-5 + ) + ((< 364.0889 f1-1) + (if (< f0-5 f2-0) + (set! f0-5 (+ 91.022224 f0-5)) + ) + f0-5 + ) + ((< f0-5 0.0) + (+ 91.022224 f0-5) + ) + (else + (+ -91.022224 f0-5) + ) + ) + ) + ) + (set! (-> obj tilt) (- f0-5)) + (set! (-> obj heading) (the float (sar (shl (the int (+ (-> obj heading) (* 0.05 f0-5))) 48) 48))) + ) + 0 + (none) + ) + +(defmethod dummy-24 seagull ((obj seagull)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-! s5-0 (-> obj flock 0 target) (-> obj root-override trans)) + (when (< (vector-dot s5-0 s5-0) 6710886400.0) + (let ((v1-5 (ash 1 (-> obj index)))) + (when (zero? (logand v1-5 (-> obj flock 0 bird-at-waterfall))) + (logior! (-> obj flock 0 bird-at-waterfall) v1-5) + (+! (-> obj flock 0 birds-at-waterfall) 1) + ) + ) + ) + (cond + ((> (-> obj temp-heading-time) 0) + (+! (-> obj temp-heading-time) -1) + (let* ((v1-15 obj) + (f1-2 (the float (sar (shl (the int (- (-> obj temp-heading) (-> v1-15 heading))) 48) 48))) + (f0-7 (- (-> v1-15 tilt))) + ) + (let ((f2-0 (-> v1-15 max-tilt))) + (set! f0-7 (cond + ((< f1-2 -364.0889) + (if (< (- f2-0) f0-7) + (set! f0-7 (+ -91.022224 f0-7)) + ) + f0-7 + ) + ((< 364.0889 f1-2) + (if (< f0-7 f2-0) + (set! f0-7 (+ 91.022224 f0-7)) + ) + f0-7 + ) + ((< f0-7 0.0) + (+ 91.022224 f0-7) + ) + (else + (+ -91.022224 f0-7) + ) + ) + ) + ) + (set! (-> v1-15 tilt) (- f0-7)) + (set! (-> v1-15 heading) (the float (sar (shl (the int (+ (-> v1-15 heading) (* 0.05 f0-7))) 48) 48))) + ) + 0 + ) + (else + (let* ((f0-15 (atan (-> s5-0 x) (-> s5-0 z))) + (v1-18 obj) + (f1-12 (the float (sar (shl (the int (- f0-15 (-> v1-18 heading))) 48) 48))) + (f0-20 (- (-> v1-18 tilt))) + ) + (let ((f2-2 (-> v1-18 max-tilt))) + (set! f0-20 (cond + ((< f1-12 -364.0889) + (if (< (- f2-2) f0-20) + (set! f0-20 (+ -91.022224 f0-20)) + ) + f0-20 + ) + ((< 364.0889 f1-12) + (if (< f0-20 f2-2) + (set! f0-20 (+ 91.022224 f0-20)) + ) + f0-20 + ) + ((< f0-20 0.0) + (+ 91.022224 f0-20) + ) + (else + (+ -91.022224 f0-20) + ) + ) + ) + ) + (set! (-> v1-18 tilt) (- f0-20)) + (set! (-> v1-18 heading) (the float (sar (shl (the int (+ (-> v1-18 heading) (* 0.05 f0-20))) 48) 48))) + ) + 0 + ) + ) + (let ((f0-28 (+ (* (-> s5-0 x) (-> s5-0 x)) (* (-> s5-0 z) (-> s5-0 z))))) + (set! (-> obj angletan) (/ (- (-> s5-0 y)) (sqrtf f0-28))) + (set! (-> obj target-dist) (sqrtf (+ f0-28 (* (-> s5-0 y) (-> s5-0 y))))) + ) + ) + 0 + (none) + ) + +(defbehavior seagull-post seagull () + (let ((s5-0 (new 'stack-no-clear 'quaternion)) + (gp-0 (new 'stack-no-clear 'quaternion)) + ) + (quaternion-axis-angle! s5-0 0.0 0.0 1.0 (-> self tilt)) + (quaternion-axis-angle! gp-0 0.0 1.0 0.0 (-> self heading)) + (quaternion*! (-> self root-override quat) gp-0 s5-0) + ) + (transform-post) + 0 + (none) + ) + +(defstate seagull-idle (seagull) + :enter + (behavior () + (let* ((v1-0 (-> self flock)) + (f30-0 (dummy-16 + (if v1-0 + (-> v1-0 0 self-override) + ) + self + ) + ) + (f28-0 21845.334) + (f26-0 -0.5) + (v1-5 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-6 (the-as number (logior #x3f800000 v1-5))) + ) + (set! (-> self heading) + (the float (sar (shl (the int (+ f30-0 (* f28-0 (+ f26-0 (+ -1.0 (the-as float v1-6)))))) 48) 48)) + ) + ) + (none) + ) + :trans + (behavior () + (when (nonzero? (-> self scared)) + (+! (-> self scared) -1) + (when (zero? (-> self scared)) + (restore-collide-with-as (-> self root-override)) + (go seagull-takeoff) + ) + ) + (when *target* + (let ((v1-12 (vector-! (new 'stack-no-clear 'vector) (-> *target* control trans) (-> self root-override trans)))) + (when (< (vector-dot v1-12 v1-12) 1677721600.0) + (let ((v1-14 (-> self flock))) + (play-hint + (if v1-14 + (-> v1-14 0 self-override) + ) + (-> self index) + ) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (set! (-> self root-override trans y) (+ 20480.0 (-> self root-override trans y))) + (dummy-60 (-> self root-override) 40960.0 40960.0 #t (the-as uint 1)) + (dummy-47 (-> self root-override)) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) (ja-aframe 0.0 0)) + ) + (while #t + (let* ((f30-0 4.0) + (v1-14 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-15 (the-as number (logior #x3f800000 v1-14))) + (gp-1 (the int (* f30-0 (+ -1.0 (the-as float v1-15))))) + ) + (let* ((f30-1 60.0) + (v1-18 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-19 (the-as number (logior #x3f800000 v1-18))) + (s5-0 (the int (* f30-1 (+ -1.0 (the-as float v1-19))))) + ) + (dotimes (s4-0 s5-0) + (suspend) + ) + ) + (cond + ((zero? gp-1) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> gp-2 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-2 param 1) 1.0) + (set! (-> gp-2 frame-num) (ja-aframe 0.0 0)) + (joint-control-channel-group! gp-2 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-3 param 1) 1.0) + (joint-control-channel-group-eval! gp-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let* ((f30-2 60.0) + (v1-37 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-38 (the-as number (logior #x3f800000 v1-37))) + (gp-4 (the int (* f30-2 (+ -1.0 (the-as float v1-38))))) + ) + (dotimes (s5-1 gp-4) + (suspend) + ) + ) + (let ((gp-5 (-> self skel root-channel 0))) + (set! (-> gp-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> gp-5 param 0) (ja-aframe 10.0 0)) + (set! (-> gp-5 param 1) 1.0) + (set! (-> gp-5 frame-num) (ja-aframe 4.0 0)) + (joint-control-channel-group! gp-5 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-6 (-> self skel root-channel 0))) + (set! (-> gp-6 param 0) (ja-aframe 10.0 0)) + (set! (-> gp-6 param 1) 1.0) + (joint-control-channel-group-eval! gp-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let* ((f30-3 60.0) + (v1-55 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-56 (the-as number (logior #x3f800000 v1-55))) + (gp-7 (the int (* f30-3 (+ -1.0 (the-as float v1-56))))) + ) + (dotimes (s5-2 gp-7) + (suspend) + ) + ) + (let ((gp-8 (-> self skel root-channel 0))) + (set! (-> gp-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> gp-8 param 0) (ja-aframe 14.0 0)) + (set! (-> gp-8 param 1) 1.0) + (set! (-> gp-8 frame-num) (ja-aframe 10.0 0)) + (joint-control-channel-group! gp-8 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-9 (-> self skel root-channel 0))) + (set! (-> gp-9 param 0) (ja-aframe 14.0 0)) + (set! (-> gp-9 param 1) 1.0) + (joint-control-channel-group-eval! gp-9 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((= gp-1 2) + (let ((gp-10 (-> self skel root-channel 0))) + (set! (-> gp-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> gp-10 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-10 param 1) 1.0) + (set! (-> gp-10 frame-num) (ja-aframe 0.0 0)) + (joint-control-channel-group! gp-10 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-11 (-> self skel root-channel 0))) + (set! (-> gp-11 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-11 param 1) 1.0) + (joint-control-channel-group-eval! gp-11 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((= gp-1 3) + (let ((gp-12 (-> self skel root-channel 0))) + (set! (-> gp-12 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> gp-12 param 0) (ja-aframe 8.0 0)) + (set! (-> gp-12 param 1) 1.0) + (set! (-> gp-12 frame-num) (ja-aframe 4.0 0)) + (joint-control-channel-group! gp-12 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-13 (-> self skel root-channel 0))) + (set! (-> gp-13 param 0) (ja-aframe 8.0 0)) + (set! (-> gp-13 param 1) 1.0) + (joint-control-channel-group-eval! gp-13 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((= gp-1 4) + (let ((gp-14 (-> self skel root-channel 0))) + (set! (-> gp-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> gp-14 param 0) (ja-aframe 12.0 0)) + (set! (-> gp-14 param 1) 1.0) + (set! (-> gp-14 frame-num) (ja-aframe 8.0 0)) + (joint-control-channel-group! gp-14 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-15 (-> self skel root-channel 0))) + (set! (-> gp-15 param 0) (ja-aframe 12.0 0)) + (set! (-> gp-15 param 1) 1.0) + (joint-control-channel-group-eval! gp-15 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ) + ) + (none) + ) + :post + seagull-post + ) + +(defmethod move-vertically! seagull ((obj seagull) (arg0 symbol)) + (let ((f0-0 (-> obj root-override transv y))) + (set! f0-0 (cond + (arg0 + (if (< f0-0 (-> obj flock 0 max-lift)) + (set! f0-0 (+ 12288.0 f0-0)) + ) + f0-0 + ) + (else + (+ -4096.0 f0-0) + ) + ) + ) + (set! (-> obj root-override transv y) f0-0) + ) + 0 + (none) + ) + +(defmethod dummy-26 seagull ((obj seagull)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let* ((f30-0 -4096.0) + (f28-0 8192.0) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + ) + (set! (-> s5-0 x) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2))) (-> obj flock 0 target x))) + ) + (let* ((f30-1 -4096.0) + (f28-1 8192.0) + (v1-7 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-8 (the-as number (logior #x3f800000 v1-7))) + ) + (set! (-> s5-0 y) (+ f30-1 (* f28-1 (+ -1.0 (the-as float v1-8))) (-> obj flock 0 target y))) + ) + (let* ((f30-2 -4096.0) + (f28-2 8192.0) + (v1-13 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-14 (the-as number (logior #x3f800000 v1-13))) + ) + (set! (-> s5-0 z) (+ f30-2 (* f28-2 (+ -1.0 (the-as float v1-14))) (-> obj flock 0 target z))) + ) + (vector-! s5-0 s5-0 (-> obj root-override trans)) + (vector-float*! s5-0 s5-0 0.9) + (TODO-RENAME-28 (-> obj root-override) s5-0) + ) + (set! (-> obj teleport) #f) + #f + ) + +(defmethod adjust-heading-around-point-slow! seagull ((obj seagull) (arg0 float)) + (let ((f30-1 (* arg0 (sin (-> obj heading)))) + (f0-4 (* arg0 (cos (-> obj heading)))) + ) + (set! (-> obj root-override transv x) (+ (* 0.8 (-> obj root-override transv x)) (* 0.2 f30-1))) + (set! (-> obj root-override transv z) (+ (* 0.8 (-> obj root-override transv z)) (* 0.2 f0-4))) + ) + 0 + (none) + ) + +(defmethod adjust-heading-around-point! seagull ((obj seagull) (arg0 float)) + (let ((f30-1 (* arg0 (sin (-> obj heading)))) + (f0-4 (* arg0 (cos (-> obj heading)))) + ) + (set! (-> obj root-override transv x) f30-1) + (set! (-> obj root-override transv z) f0-4) + ) + 0 + (none) + ) + +(defmethod dummy-22 seagull ((obj seagull)) + (set! (-> obj root-override transv y) -8192.0) + 0 + (none) + ) + +(defmethod dummy-27 seagull ((obj seagull)) + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (let ((v1-0 (new 'stack-no-clear 'vector)) + (a0-2 (-> obj root-override trans)) + (s5-0 (-> obj root-override transv)) + (a1-1 (new 'stack-no-clear 'vector)) + ) + (let ((a2-0 v1-0)) + (.lvf vf1 (&-> s5-0 quad)) + (let ((f0-0 (-> *display* seconds-per-frame))) + (.mov at-0 f0-0) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> a2-0 quad) vf1) + ) + (vector+! a1-1 a0-2 v1-0) + (if (points-in-air? a0-2 a1-1 *seagull-boxes* 10) + (dummy-57 (-> obj root-override) (-> obj root-override transv)) + (dummy-33 (-> obj root-override) s5-0 (the-as uint 1)) + ) + ) + (none) + ) + ) + +(defstate seagull-takeoff (seagull) + :trans + (behavior () + (when (< (+ (-> *display* base-frame-counter) -600) (the-as int (-> self part-time))) + (-> self part) + (-> self root-override root-prim prim-core) + ) + (none) + ) + :code + (behavior () + (set! (-> self part-time) (the-as uint (-> *display* base-frame-counter))) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> gp-0 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 1.0 0)) + (joint-control-channel-group! gp-0 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) (ja-aframe 2.0 0)) (>= (ja-aframe 3.0 0) (ja-frame-num 0))) + (let* ((v1-13 self) + (a0-7 #t) + (f0-5 (-> v1-13 root-override transv y)) + ) + (set! f0-5 (cond + (a0-7 + (if (< f0-5 (-> v1-13 flock 0 max-lift)) + (set! f0-5 (+ 12288.0 f0-5)) + ) + f0-5 + ) + (else + (+ -4096.0 f0-5) + ) + ) + ) + (set! (-> v1-13 root-override transv y) f0-5) + ) + 0 + (let* ((gp-1 self) + (f28-0 (-> self thrust)) + (f30-2 (* f28-0 (sin (-> gp-1 heading)))) + (f0-10 (* f28-0 (cos (-> gp-1 heading)))) + ) + (set! (-> gp-1 root-override transv x) (+ (* 0.8 (-> gp-1 root-override transv x)) (* 0.2 f30-2))) + (set! (-> gp-1 root-override transv z) (+ (* 0.8 (-> gp-1 root-override transv z)) (* 0.2 f0-10))) + ) + 0 + ) + (dummy-27 self) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-2 param 1) 1.0) + (joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 param 0) (the float (+ (-> a0-19 frame-group data 0 length) -1))) + (set! (-> a0-19 param 1) 1.0) + (joint-control-channel-group! a0-19 (the-as art-joint-anim #f) num-func-seek!) + ) + (ja-channel-push! 1 20) + (go seagull-flying) + (none) + ) + :post + seagull-post + ) + +(defstate seagull-flying (seagull) + :trans + (behavior () + (when (< (+ (-> *display* base-frame-counter) -600) (the-as int (-> self part-time))) + (-> self part) + (-> self root-override root-prim prim-core) + ) + (none) + ) + :code + (behavior () + (set! (-> self max-tilt) 1820.4445) + (let ((gp-0 0)) + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (when (-> self teleport) + (dummy-26 self) + (suspend) + 0 + ) + (let ((s5-0 self) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s4-0 (-> s5-0 flock 0 target) (-> s5-0 root-override trans)) + (when (< (vector-dot s4-0 s4-0) 6710886400.0) + (let ((v1-24 (ash 1 (-> s5-0 index)))) + (when (zero? (logand v1-24 (-> s5-0 flock 0 bird-at-waterfall))) + (logior! (-> s5-0 flock 0 bird-at-waterfall) v1-24) + (+! (-> s5-0 flock 0 birds-at-waterfall) 1) + ) + ) + ) + (cond + ((> (-> s5-0 temp-heading-time) 0) + (+! (-> s5-0 temp-heading-time) -1) + (let* ((v1-34 s5-0) + (f1-2 (the float (sar (shl (the int (- (-> s5-0 temp-heading) (-> v1-34 heading))) 48) 48))) + (f0-12 (- (-> v1-34 tilt))) + ) + (let ((f2-0 (-> v1-34 max-tilt))) + (set! f0-12 (cond + ((< f1-2 -364.0889) + (if (< (- f2-0) f0-12) + (set! f0-12 (+ -91.022224 f0-12)) + ) + f0-12 + ) + ((< 364.0889 f1-2) + (if (< f0-12 f2-0) + (set! f0-12 (+ 91.022224 f0-12)) + ) + f0-12 + ) + ((< f0-12 0.0) + (+ 91.022224 f0-12) + ) + (else + (+ -91.022224 f0-12) + ) + ) + ) + ) + (set! (-> v1-34 tilt) (- f0-12)) + (set! (-> v1-34 heading) (the float (sar (shl (the int (+ (-> v1-34 heading) (* 0.05 f0-12))) 48) 48))) + ) + 0 + ) + (else + (let* ((f0-20 (atan (-> s4-0 x) (-> s4-0 z))) + (v1-37 s5-0) + (f1-12 (the float (sar (shl (the int (- f0-20 (-> v1-37 heading))) 48) 48))) + (f0-25 (- (-> v1-37 tilt))) + ) + (let ((f2-2 (-> v1-37 max-tilt))) + (set! f0-25 (cond + ((< f1-12 -364.0889) + (if (< (- f2-2) f0-25) + (set! f0-25 (+ -91.022224 f0-25)) + ) + f0-25 + ) + ((< 364.0889 f1-12) + (if (< f0-25 f2-2) + (set! f0-25 (+ 91.022224 f0-25)) + ) + f0-25 + ) + ((< f0-25 0.0) + (+ 91.022224 f0-25) + ) + (else + (+ -91.022224 f0-25) + ) + ) + ) + ) + (set! (-> v1-37 tilt) (- f0-25)) + (set! (-> v1-37 heading) (the float (sar (shl (the int (+ (-> v1-37 heading) (* 0.05 f0-25))) 48) 48))) + ) + 0 + ) + ) + (let ((f0-33 (+ (* (-> s4-0 x) (-> s4-0 x)) (* (-> s4-0 z) (-> s4-0 z))))) + (set! (-> s5-0 angletan) (/ (- (-> s4-0 y)) (sqrtf f0-33))) + (set! (-> s5-0 target-dist) (sqrtf (+ f0-33 (* (-> s4-0 y) (-> s4-0 y))))) + ) + ) + 0 + (let ((v1-42 (>= (ja-frame-num 0) (ja-aframe 3.0 0)))) + (cond + ((and v1-42 (>= (ja-aframe 9.0 0) (ja-frame-num 0))) + (let* ((v1-44 self) + (a0-49 #t) + (f0-38 (-> v1-44 root-override transv y)) + ) + (set! f0-38 (cond + (a0-49 + (if (< f0-38 (-> v1-44 flock 0 max-lift)) + (set! f0-38 (+ 12288.0 f0-38)) + ) + f0-38 + ) + (else + (+ -4096.0 f0-38) + ) + ) + ) + (set! (-> v1-44 root-override transv y) f0-38) + ) + 0 + ) + (else + (let* ((v1-48 self) + (a0-55 #f) + (f0-39 (-> v1-48 root-override transv y)) + ) + (set! f0-39 (cond + (a0-55 + (if (< f0-39 (-> v1-48 flock 0 max-lift)) + (set! f0-39 (+ 12288.0 f0-39)) + ) + f0-39 + ) + (else + (+ -4096.0 f0-39) + ) + ) + ) + (set! (-> v1-48 root-override transv y) f0-39) + ) + 0 + ) + ) + ) + (let* ((s5-1 self) + (f28-0 (-> self thrust)) + (f30-2 (* f28-0 (sin (-> s5-1 heading)))) + (f0-44 (* f28-0 (cos (-> s5-1 heading)))) + ) + (set! (-> s5-1 root-override transv x) (+ (* 0.8 (-> s5-1 root-override transv x)) (* 0.2 f30-2))) + (set! (-> s5-1 root-override transv z) (+ (* 0.8 (-> s5-1 root-override transv z)) (* 0.2 f0-44))) + ) + 0 + (dummy-27 self) + (suspend) + (let ((a0-64 (-> self skel root-channel 0))) + (set! (-> a0-64 param 0) (the float (+ (-> a0-64 frame-group data 0 length) -1))) + (set! (-> a0-64 param 1) 1.0) + (joint-control-channel-group-eval! a0-64 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (+! gp-0 1) + (when (>= gp-0 0) + (when (>= (-> self angletan) 0.1) + (if (< 204800.0 (-> self root-override trans y)) + (go seagull-soaring) + ) + (when (< 57344.0 (-> self root-override trans y)) + (let* ((f30-3 0.8) + (v1-77 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-78 (the-as number (logior #x3f800000 v1-77))) + ) + (if (< f30-3 (+ -1.0 (the-as float v1-78))) + (go seagull-soaring) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + :post + seagull-post + ) + +(defstate seagull-soaring (seagull) + :trans + (behavior () + (when (< (+ (-> *display* base-frame-counter) -600) (the-as int (-> self part-time))) + (-> self part) + (-> self root-override root-prim prim-core) + ) + (none) + ) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self max-tilt) 4551.1113) + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 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) + (ja-blend-eval) + (when (-> self teleport) + (dummy-26 self) + (suspend) + 0 + ) + (let ((gp-0 self) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s5-0 (-> gp-0 flock 0 target) (-> gp-0 root-override trans)) + (when (< (vector-dot s5-0 s5-0) 6710886400.0) + (let ((v1-26 (ash 1 (-> gp-0 index)))) + (when (zero? (logand v1-26 (-> gp-0 flock 0 bird-at-waterfall))) + (logior! (-> gp-0 flock 0 bird-at-waterfall) v1-26) + (+! (-> gp-0 flock 0 birds-at-waterfall) 1) + ) + ) + ) + (cond + ((> (-> gp-0 temp-heading-time) 0) + (+! (-> gp-0 temp-heading-time) -1) + (let* ((v1-36 gp-0) + (f1-2 (the float (sar (shl (the int (- (-> gp-0 temp-heading) (-> v1-36 heading))) 48) 48))) + (f0-12 (- (-> v1-36 tilt))) + ) + (let ((f2-0 (-> v1-36 max-tilt))) + (set! f0-12 (cond + ((< f1-2 -364.0889) + (if (< (- f2-0) f0-12) + (set! f0-12 (+ -91.022224 f0-12)) + ) + f0-12 + ) + ((< 364.0889 f1-2) + (if (< f0-12 f2-0) + (set! f0-12 (+ 91.022224 f0-12)) + ) + f0-12 + ) + ((< f0-12 0.0) + (+ 91.022224 f0-12) + ) + (else + (+ -91.022224 f0-12) + ) + ) + ) + ) + (set! (-> v1-36 tilt) (- f0-12)) + (set! (-> v1-36 heading) (the float (sar (shl (the int (+ (-> v1-36 heading) (* 0.05 f0-12))) 48) 48))) + ) + 0 + ) + (else + (let* ((f0-20 (atan (-> s5-0 x) (-> s5-0 z))) + (v1-39 gp-0) + (f1-12 (the float (sar (shl (the int (- f0-20 (-> v1-39 heading))) 48) 48))) + (f0-25 (- (-> v1-39 tilt))) + ) + (let ((f2-2 (-> v1-39 max-tilt))) + (set! f0-25 (cond + ((< f1-12 -364.0889) + (if (< (- f2-2) f0-25) + (set! f0-25 (+ -91.022224 f0-25)) + ) + f0-25 + ) + ((< 364.0889 f1-12) + (if (< f0-25 f2-2) + (set! f0-25 (+ 91.022224 f0-25)) + ) + f0-25 + ) + ((< f0-25 0.0) + (+ 91.022224 f0-25) + ) + (else + (+ -91.022224 f0-25) + ) + ) + ) + ) + (set! (-> v1-39 tilt) (- f0-25)) + (set! (-> v1-39 heading) (the float (sar (shl (the int (+ (-> v1-39 heading) (* 0.05 f0-25))) 48) 48))) + ) + 0 + ) + ) + (let ((f0-33 (+ (* (-> s5-0 x) (-> s5-0 x)) (* (-> s5-0 z) (-> s5-0 z))))) + (set! (-> gp-0 angletan) (/ (- (-> s5-0 y)) (sqrtf f0-33))) + (set! (-> gp-0 target-dist) (sqrtf (+ f0-33 (* (-> s5-0 y) (-> s5-0 y))))) + ) + ) + 0 + (let ((v1-44 self)) + (set! (-> v1-44 root-override transv y) -8192.0) + ) + 0 + (let* ((gp-1 self) + (f28-0 (-> self thrust)) + (f30-0 (* f28-0 (sin (-> gp-1 heading)))) + (f0-41 (* f28-0 (cos (-> gp-1 heading)))) + ) + (set! (-> gp-1 root-override transv x) (+ (* 0.8 (-> gp-1 root-override transv x)) (* 0.2 f30-0))) + (set! (-> gp-1 root-override transv z) (+ (* 0.8 (-> gp-1 root-override transv z)) (* 0.2 f0-41))) + ) + 0 + (dummy-27 self) + (when (< (-> self angletan) 0.2) + (if (< (-> self root-override trans y) 40960.0) + (go seagull-flying) + ) + (when (< (-> self root-override trans y) 204800.0) + (if (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (let* ((f30-1 0.99) + (v1-67 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-68 (the-as number (logior #x3f800000 v1-67))) + ) + (< f30-1 (+ -1.0 (the-as float v1-68))) + ) + ) + (go seagull-flying) + ) + ) + ) + (when (< (-> self target-dist) 81920.0) + (when (< 1.0 (-> self angletan)) + (if (< (-> self target-dist) 20480.0) + (go seagull-flying) + ) + ) + (if (and (< 0.4 (-> self angletan)) (>= 1.0 (-> self angletan))) + (go seagull-landing 10.0) + ) + (if (and (>= (-> self angletan) 0.2) (>= 0.4 (-> self angletan))) + (go seagull-landing 5.0) + ) + ) + (suspend) + (let ((a0-54 (-> self skel root-channel 0))) + (set! (-> a0-54 param 0) (the float (+ (-> a0-54 frame-group data 0 length) -1))) + (set! (-> a0-54 param 1) 1.0) + (joint-control-channel-group-eval! a0-54 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + seagull-post + ) + +(defstate seagull-landing (seagull) + :code + (behavior ((arg0 float)) + (let ((s5-0 (new 'stack 'collide-tri-result))) + 0.0 + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> self root-override transv y) (* 4096.0 (- arg0))) + (set! (-> gp-0 quad) (-> self root-override transv quad)) + (let ((f30-0 (dummy-10 *collide-cache* (-> self root-override trans) gp-0 409.6 1 self s5-0 1))) + (when (or (< f30-0 0.0) (or (< 1.0 f30-0) (nonzero? (-> s5-0 pat mode)))) + (suspend) + (go seagull-soaring) + ) + (vector-float*! gp-0 gp-0 f30-0) + (vector+! gp-0 gp-0 (-> self root-override trans)) + (while (< 0.5 f30-0) + (suspend) + (set! f30-0 (- f30-0 (-> *display* seconds-per-frame))) + (dummy-33 (-> self root-override) (-> self root-override transv) (the-as uint 1)) + (let* ((v1-21 self) + (f1-3 (the float (sar (shl (the int (- (-> self heading) (-> v1-21 heading))) 48) 48))) + (f0-12 (- (-> v1-21 tilt))) + ) + (let ((f2-0 (-> v1-21 max-tilt))) + (set! f0-12 (cond + ((< f1-3 -364.0889) + (if (< (- f2-0) f0-12) + (set! f0-12 (+ -91.022224 f0-12)) + ) + f0-12 + ) + ((< 364.0889 f1-3) + (if (< f0-12 f2-0) + (set! f0-12 (+ 91.022224 f0-12)) + ) + f0-12 + ) + ((< f0-12 0.0) + (+ 91.022224 f0-12) + ) + (else + (+ -91.022224 f0-12) + ) + ) + ) + ) + (set! (-> v1-21 tilt) (- f0-12)) + (set! (-> v1-21 heading) (the float (sar (shl (the int (+ (-> v1-21 heading) (* 0.05 f0-12))) 48) 48))) + ) + 0 + ) + (let ((a0-25 (-> self skel root-channel 0))) + (set! (-> a0-25 param 0) (the float (+ (-> a0-25 frame-group data 0 length) -1))) + (set! (-> a0-25 param 1) 1.0) + (joint-control-channel-group! a0-25 (the-as art-joint-anim #f) num-func-seek!) + ) + (ja-channel-push! 1 40) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-1 frame-num) (ja-aframe 0.0 0)) + ) + (while (< 0.0 f30-0) + (suspend) + (let ((a0-29 (-> self skel root-channel 0))) + (set! (-> a0-29 param 0) (the float (+ (-> a0-29 frame-group data 0 length) -1))) + (set! (-> a0-29 param 1) 1.0) + (joint-control-channel-group-eval! a0-29 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! f30-0 (- f30-0 (-> *display* seconds-per-frame))) + (dummy-33 (-> self root-override) (-> self root-override transv) (the-as uint 1)) + (let* ((v1-48 self) + (f1-13 (the float (sar (shl (the int (- (-> self heading) (-> v1-48 heading))) 48) 48))) + (f0-32 (- (-> v1-48 tilt))) + ) + (let ((f2-2 (-> v1-48 max-tilt))) + (set! f0-32 (cond + ((< f1-13 -364.0889) + (if (< (- f2-2) f0-32) + (set! f0-32 (+ -91.022224 f0-32)) + ) + f0-32 + ) + ((< 364.0889 f1-13) + (if (< f0-32 f2-2) + (set! f0-32 (+ 91.022224 f0-32)) + ) + f0-32 + ) + ((< f0-32 0.0) + (+ 91.022224 f0-32) + ) + (else + (+ -91.022224 f0-32) + ) + ) + ) + ) + (set! (-> v1-48 tilt) (- f0-32)) + (set! (-> v1-48 heading) (the float (sar (shl (the int (+ (-> v1-48 heading) (* 0.05 f0-32))) 48) 48))) + ) + 0 + ) + ) + ) + ) + (while (not (ja-done? 0)) + (suspend) + (let ((a0-43 (-> self skel root-channel 0))) + (set! (-> a0-43 param 0) (the float (+ (-> a0-43 frame-group data 0 length) -1))) + (set! (-> a0-43 param 1) 1.0) + (joint-control-channel-group-eval! a0-43 (the-as art-joint-anim #f) num-func-seek!) + ) + (let* ((v1-59 self) + (f1-23 (the float (sar (shl (the int (- (-> self heading) (-> v1-59 heading))) 48) 48))) + (f0-47 (- (-> v1-59 tilt))) + ) + (let ((f2-4 (-> v1-59 max-tilt))) + (set! f0-47 (cond + ((< f1-23 -364.0889) + (if (< (- f2-4) f0-47) + (set! f0-47 (+ -91.022224 f0-47)) + ) + f0-47 + ) + ((< 364.0889 f1-23) + (if (< f0-47 f2-4) + (set! f0-47 (+ 91.022224 f0-47)) + ) + f0-47 + ) + ((< f0-47 0.0) + (+ 91.022224 f0-47) + ) + (else + (+ -91.022224 f0-47) + ) + ) + ) + ) + (set! (-> v1-59 tilt) (- f0-47)) + (set! (-> v1-59 heading) (the float (sar (shl (the int (+ (-> v1-59 heading) (* 0.05 f0-47))) 48) 48))) + ) + 0 + ) + (go seagull-idle) + (none) + ) + :post + seagull-post + ) + +(defun seagull-reaction ((arg0 collide-shape-moving) (arg1 collide-shape-intersect)) + (let ((s5-0 0)) + (let ((a1-1 (new 'stack-no-clear 'vector))) + (vector-float*! a1-1 (-> arg1 move-vec) (-> arg1 best-u)) + (set! (-> a1-1 y) (-> arg1 move-vec y)) + (TODO-RENAME-28 arg0 a1-1) + ) + (let ((f0-3 (vector-dot (-> arg0 transv) (-> arg1 best-tri normal))) + (v1-6 (new 'stack-no-clear 'vector)) + ) + (vector-float*! v1-6 (-> arg1 best-tri normal) f0-3) + (vector-! (-> arg0 transv) (-> arg0 transv) v1-6) + ) + (let ((v1-7 (-> arg1 best-tri normal)) + (s4-1 (-> arg0 process)) + ) + (set! (-> (the-as seagull s4-1) temp-heading) (atan (-> v1-7 x) (-> v1-7 z))) + (set! (-> (the-as seagull s4-1) temp-heading-time) 300) + ) + (set! (-> arg0 status) (the-as uint (logior s5-0 3))) + ) + (none) + ) + +(defbehavior seagull-init-by-other seagull ((arg0 vector) (arg1 int) (arg2 seagullflock)) + (let ((s3-0 (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player)))) + (set! (-> s3-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s3-0 reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) seagull-reaction) + ) + (set! (-> s3-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s3-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 0)) + (set! (-> s2-0 collide-with) (the-as uint 1)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set-vector! (-> s2-0 local-sphere) 0.0 2048.0 0.0 2048.0) + (set-root-prim! s3-0 s2-0) + ) + (set! (-> s3-0 nav-radius) (* 0.75 (-> s3-0 root-prim local-sphere w))) + (backup-collide-with-as s3-0) + (set! (-> self root-override) s3-0) + ) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (initialize-skeleton self *seagull-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self index) arg1) + (set! (-> self flock) (the-as (pointer seagullflock) (process->ppointer arg2))) + (set! (-> self heading) 0.0) + (set! (-> self tilt) 0.0) + (let* ((f30-0 51200.0) + (f28-0 20480.0) + (v1-23 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-24 (the-as number (logior #x3f800000 v1-23))) + ) + (set! (-> self thrust) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-24))))) + ) + (set! (-> self teleport) #f) + (go seagull-idle) + (none) + ) + +(defmethod play-hint seagullflock ((obj seagullflock) (arg0 int)) + (when (>= (- (-> *display* base-frame-counter) (the-as int (-> obj alert-time))) 1500) + (eval-path-curve-div! (-> obj path) (-> obj target) (the float (-> obj targetnum)) 'interp) + (let ((f0-2 4096.0) + (v1-6 (-> obj targetnum)) + ) + (set! (-> obj max-lift) (* f0-2 (cond + ((= v1-6 1) + 4.0 + ) + ((= v1-6 2) + 4.0 + ) + ((= v1-6 3) + 4.0 + ) + (else + 10.0 + ) + ) + ) + ) + ) + (case (-> obj targetnum) + ((1) + (level-hint-spawn + (game-text-id beach-seagull-chased-one) + "sksp0020" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((2) + (level-hint-spawn + (game-text-id beach-seagull-chased-two) + "sksp0022" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((3) + (level-hint-spawn + (game-text-id beach-seagull-chased-three) + "sksp0023" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((4) + (level-hint-spawn + (game-text-id beach-seagull-chased-four) + "sksp0024" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (let ((v1-16 (-> obj entity extra perm))) + (logior! (-> v1-16 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-16 user-int8 0) (min 2 (-> obj targetnum))) + ) + (+! (-> obj targetnum) 1) + (dotimes (v1-19 (-> obj birds)) + (set! (-> obj bird v1-19 0 scared) (+ (* v1-19 2) 5)) + ) + (set! (-> obj bird arg0 0 scared) 1) + (set! (-> obj bird-at-waterfall) (the-as uint 0)) + (set! (-> obj birds-at-waterfall) 0) + (if (>= (-> obj targetnum) 4) + (set! (-> obj teleport-frames) 1500) + ) + (sound-play-by-name (static-sound-name "seagull-takeoff") (new-sound-id) 1024 0 0 1 #t) + (set! (-> obj alert-time) (the-as uint (-> *display* base-frame-counter))) + ) + (none) + ) + +(defmethod dummy-16 seagullflock ((obj seagullflock) (arg0 seagull)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (eval-path-curve-div! (-> obj path) gp-0 (the float (-> obj targetnum)) 'interp) + (vector-! gp-0 gp-0 (-> arg0 root-override trans)) + (atan (-> gp-0 x) (-> gp-0 z)) + ) + ) + +(defstate seagullflock-at-waterfall (seagullflock) + :code + (behavior () + (local-vars + (a0-2 process) + (a1-0 event-message-block) + (t9-1 (function process-tree event-message-block object)) + ) + (aybabtu 2) + (set! (-> self state-time) (the-as uint (-> *display* base-frame-counter))) + (-> self link next) + (until (t9-1 a0-2 a1-0) + (suspend) + (let ((v1-5 (-> self link next))) + (set! a1-0 (new 'stack-no-clear 'event-message-block)) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'loading) + (set! t9-1 send-event-function) + (set! a0-2 (if v1-5 + (-> v1-5 extra process) + ) + ) + ) + ) + (until (>= (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) (-> self teleport-frames)) + (suspend) + ) + (close-specific-task! (game-task beach-seagull) (task-status need-reminder)) + (dotimes (v1-13 (-> self birds)) + (set! (-> self bird v1-13 0 teleport) #t) + ) + (let ((gp-0 (-> self link next))) + (set-blackout-frames 600) + (suspend) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 0) + (set! (-> a1-6 message) 'trigger) + (let ((t9-4 send-event-function) + (v1-18 gp-0) + ) + (t9-4 + (if v1-18 + (-> v1-18 extra process) + ) + a1-6 + ) + ) + ) + (while (zero? (logand (-> gp-0 extra perm status) (entity-perm-status complete))) + (suspend) + ) + ) + (process-entity-status! self (entity-perm-status dead) #t) + (none) + ) + ) + +(defstate seagullflock-idle (seagullflock) + :code + (behavior () + (while #t + (if (> (-> self teleport-frames) 0) + (go seagullflock-at-waterfall) + ) + (if (and *target* (>= 102400.0 (vector-vector-distance (-> self trans) (-> *target* control trans)))) + (level-hint-spawn (game-text-id zero) (the-as string #f) (-> self entity) *entity-pool* (game-task none)) + ) + (suspend) + ) + (none) + ) + ) + +(defmethod init-from-entity! seagullflock ((obj seagullflock) (arg0 entity-actor)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj targetnum) (+ (-> arg0 extra perm user-int8 0) 1)) + (eval-path-curve-div! (-> obj path) (-> obj trans) (the float (+ (-> obj targetnum) -1)) 'interp) + (set! (-> obj target quad) (-> obj trans quad)) + (set! (-> obj max-lift) 20480.0) + (set! (-> obj birds) 0) + (dotimes (v1-16 64) + (set! (-> obj bird v1-16) (the-as (pointer seagull) #f)) + ) + (create-the-flock! obj (-> obj trans)) + (dotimes (s5-1 20) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (let* ((f30-0 (-> obj trans x)) + (f28-0 4096.0) + (f26-0 10.0) + (v1-22 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-23 (the-as number (logior #x3f800000 v1-22))) + ) + (set! (-> s4-0 x) (+ f30-0 (* f28-0 (* f26-0 (+ -1.0 (the-as float v1-23)))))) + ) + (let* ((f30-1 (-> obj trans z)) + (f28-1 4096.0) + (f26-1 10.0) + (v1-26 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-27 (the-as number (logior #x3f800000 v1-26))) + ) + (set! (-> s4-0 z) (+ f30-1 (* f28-1 (* f26-1 (+ -1.0 (the-as float v1-27)))))) + ) + (set! (-> s4-0 y) (-> obj trans y)) + (set! (-> s4-0 w) 1.0) + (create-the-flock! obj s4-0) + ) + ) + (set! (-> obj squall) (new 'process 'ambient-sound sound-seagull-squall (-> obj trans))) + (set! (-> obj teleport-frames) 0) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (go seagullflock-idle) + (none) + ) + +(defmethod create-the-flock! seagullflock ((obj seagullflock) (arg0 vector)) + (if (= (-> obj birds) 64) + (return (the-as (pointer process) #f)) + ) + (let* ((s4-0 (get-process *default-dead-pool* seagull #x4000)) + (v0-0 (when s4-0 + (let ((t9-1 (method-of-type seagull activate))) + (t9-1 (the-as seagull s4-0) obj 'seagull (the-as pointer #x70004000)) + ) + (run-now-in-process s4-0 seagull-init-by-other arg0 (-> obj birds) obj) + (-> s4-0 ppointer) + ) + ) + ) + (set! (-> obj bird (-> obj birds)) (the-as (pointer seagull) v0-0)) + (+! (-> obj birds) 1) + v0-0 + ) + ) + +(defun-debug beach-rock-trigger () + (let ((gp-0 600)) + (set! (-> (the-as + seagullflock + (search-process-tree *active-pool* (lambda ((arg0 process)) (= (-> arg0 type) seagullflock))) + ) + teleport-frames + ) + gp-0 + ) + gp-0 + ) + ) + + + + diff --git a/goal_src/levels/citadel/citb-plat.gc b/goal_src/levels/citadel/citb-plat.gc index 854177e6ed..fcb3ca61c0 100644 --- a/goal_src/levels/citadel/citb-plat.gc +++ b/goal_src/levels/citadel/citb-plat.gc @@ -5,3 +5,1843 @@ ;; name in dgo: citb-plat ;; dgos: CIT, L1 +(define-extern *citb-exit-plat-sg* skeleton-group) +(define-extern *citb-firehose-sg* skeleton-group) +(define-extern *citb-stopbox-sg* skeleton-group) +(define-extern *citb-donut-sg* skeleton-group) +(define-extern *citb-rotatebox-sg* skeleton-group) +(define-extern *citb-chain-plat-sg* skeleton-group) +(define-extern *plat-citb-sg* skeleton-group) +(define-extern *plat-eco-citb-lit-sg* skeleton-group) +(define-extern *plat-eco-citb-unlit-sg* skeleton-group) + +(declare-type citb-exit-plat plat-button) +(declare-type citb-firehose process-drawable) +(declare-type citb-chain-plat rigid-body-platform) + +(define-extern citb-exit-plat-idle (state citb-exit-plat)) ;; unknown type +(define-extern citb-exit-plat-rise (state citb-exit-plat)) ;; unknown type +(define-extern citb-firehose-idle (state citb-firehose)) ;; unknown type +(define-extern citb-firehose-active (state citb-firehose)) ;; unknown type +(define-extern citb-firehose-blast (state citb-firehose)) ;; unknown type +(define-extern citb-chain-plat-settle (state citb-chain-plat)) ;; unknown type + + +;; DECOMP BEGINS + +(defskelgroup *plat-citb-sg* plat-citb + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +(defskelgroup *plat-eco-citb-unlit-sg* plat-eco-citb + 0 + 8 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +(defskelgroup *plat-eco-citb-lit-sg* plat-eco-citb + 4 + 8 + ((5 (meters 20)) (6 (meters 40)) (7 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +(defskelgroup *citb-chain-plat-sg* citb-chain-plat + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +(deftype citb-base-plat (process-drawable) + ((root-override collide-shape-moving :offset 112) + (idle-distance float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 25 + :size-assert #xb4 + :flag-assert #x19005000b4 + (:methods + (citb-base-plat-idle () _type_ :state 20) + (dummy-21 (_type_) none 21) + (dummy-22 (_type_) none 22) + (citb-base-plat-active () _type_ :state 23) + (dummy-24 (_type_) none 24) + ) + ) + + +(defstate citb-base-plat-idle (citb-base-plat) + :virtual #t + :trans + (behavior () + (if + (and + *target* + (>= + (-> self idle-distance) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go-virtual citb-base-plat-active) + ) + (none) + ) + :code + (the-as (function none :behavior citb-base-plat) anim-loop) + :post + (the-as (function none :behavior citb-base-plat) ja-post) + ) + +(defstate citb-base-plat-active (citb-base-plat) + :virtual #t + :trans + (behavior () + (if + (or + (not *target*) + (< + (+ 8192.0 (-> self idle-distance)) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go-virtual citb-base-plat-idle) + ) + (rider-trans) + (none) + ) + :code + (the-as (function none :behavior citb-base-plat) anim-loop) + :post + (the-as (function none :behavior citb-base-plat) rider-post) + ) + +(defmethod dummy-21 citb-base-plat ((obj citb-base-plat)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! + (-> s5-0 no-reaction) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (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) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 20480.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +(defmethod dummy-22 citb-base-plat ((obj citb-base-plat)) + (initialize-skeleton obj *plat-citb-sg* '()) + 0 + (none) + ) + +(defmethod dummy-24 citb-base-plat ((obj citb-base-plat)) + (go (method-of-object obj citb-base-plat-idle)) + 0 + (none) + ) + +(defmethod + init-from-entity! + citb-base-plat + ((obj citb-base-plat) (arg0 entity-actor)) + (dummy-21 obj) + (process-drawable-from-entity! obj arg0) + (set! (-> obj idle-distance) 245760.0) + (dummy-22 obj) + (logior! (-> obj skel status) 1) + (dummy-24 obj) + (none) + ) + +(deftype citb-plat-eco (plat-eco) + () + :heap-base #x100 + :method-count-assert 33 + :size-assert #x165 + :flag-assert #x2101000165 + ) + + +(defmethod dummy-24 citb-plat-eco ((obj citb-plat-eco)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! + (-> s5-0 no-reaction) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (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) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 12288.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +(defmethod dummy-26 citb-plat-eco ((obj citb-plat-eco)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj notice-dist) 8192.0) + (none) + ) + +(defmethod get-unlit-skel citb-plat-eco ((obj citb-plat-eco)) + *plat-eco-citb-unlit-sg* + ) + +(defmethod get-lit-skel citb-plat-eco ((obj citb-plat-eco)) + *plat-eco-citb-lit-sg* + ) + +(deftype citb-plat (plat) + ((trans-offset vector :inline :offset-assert 272) + ) + :heap-base #xb0 + :method-count-assert 33 + :size-assert #x120 + :flag-assert #x2100b00120 + ) + + +(defstate plat-path-active (citb-plat) + :virtual #t + :trans + (behavior () + (set! + (-> self path-pos) + (if (logtest? (-> self fact options) (fact-options fop3)) + (get-current-phase (-> self sync)) + (get-current-phase-with-mirror (-> self sync)) + ) + ) + (eval-path-curve! + (-> self path) + (-> self basetrans) + (-> self path-pos) + 'interp + ) + (vector+! (-> self basetrans) (-> self basetrans) (-> self trans-offset)) + (if + (< + (vector-vector-distance (-> self root-override trans) (ear-trans)) + 81920.0 + ) + (sound-play-by-name + (static-sound-name "eco-plat-hover") + (-> self sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self root-override trans)) + ) + ) + (plat-trans) + (none) + ) + ) + +(defmethod get-unlit-skel citb-plat ((obj citb-plat)) + *plat-citb-sg* + ) + +(defmethod dummy-24 citb-plat ((obj citb-plat)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! + (-> s5-0 no-reaction) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (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) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 12288.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +(defmethod dummy-26 citb-plat ((obj citb-plat)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! + (-> obj root-override scale quad) + (-> (res-lump-struct (-> obj entity) 'scale vector) quad) + ) + (let ((f0-0 (-> obj root-override scale x))) + (set! + (-> obj root-override root-prim local-sphere w) + (* (-> obj root-override root-prim local-sphere w) f0-0) + ) + (set! (-> obj draw bounds w) (* (-> obj draw bounds w) f0-0)) + ) + (set! + (-> obj trans-offset quad) + (-> + (the-as + vector + ((method-of-type res-lump get-property-struct) + (-> obj entity) + 'trans-offset + 'interp + -1000000000.0 + *null-vector* + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + quad + ) + ) + 0 + (none) + ) + +(deftype citb-stair-plat (citb-base-plat) + ((idle-height float :offset-assert 180) + (rise-height float :offset-assert 184) + (delay uint64 :offset-assert 192) + (rise symbol :offset-assert 200) + ) + :heap-base #x60 + :method-count-assert 25 + :size-assert #xcc + :flag-assert #x19006000cc + ) + + +(defstate citb-base-plat-idle (citb-stair-plat) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'trigger) + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((v0-0 #t)) + (set! (-> self rise) v0-0) + v0-0 + ) + ) + ) + ) + ) + :trans + (the-as (function none :behavior citb-stair-plat) #f) + :code + (behavior () + (logior! (-> self draw status) 2) + (while (not (-> self rise)) + (suspend) + ) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (set-vector! (-> self draw color-mult) 0.0 0.0 0.0 1.0) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while + (< + (- (-> *display* base-frame-counter) (-> self state-time)) + (the-as int (-> self delay)) + ) + (ja-post) + (suspend) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (let + ((f30-0 + (- + 1.0 + (* + 0.0011111111 + (the float (- (-> *display* base-frame-counter) (-> self state-time))) + ) + ) + ) + ) + (when (< f30-0 0.0) + (set! (-> self root-override trans y) (-> self rise-height)) + (go-virtual citb-base-plat-active) + ) + (set! + (-> self root-override trans y) + (lerp (-> self rise-height) (-> self idle-height) (* f30-0 f30-0)) + ) + ) + (let + ((f0-12 + (fmax + 0.0 + (fmin + 1.0 + (* 0.000012207031 (+ 409600.0 (-> self root-override trans y))) + ) + ) + ) + ) + (set! (-> self draw color-mult x) f0-12) + (set! (-> self draw color-mult y) f0-12) + (set! (-> self draw color-mult z) f0-12) + ) + (transform-post) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior citb-stair-plat) #f) + ) + +(defstate citb-base-plat-active (citb-stair-plat) + :virtual #t + :trans + (the-as (function none :behavior citb-stair-plat) #f) + :code + (behavior () + (set! (-> self root-override trans y) (-> self rise-height)) + (suspend) + (dummy-47 (-> self root-override)) + (logior! (-> self mask) (process-mask actor-pause)) + (anim-loop) + (none) + ) + :post + (the-as (function none :behavior citb-stair-plat) ja-post) + ) + +(defmethod dummy-22 citb-stair-plat ((obj citb-stair-plat)) + (initialize-skeleton obj *plat-citb-sg* '()) + (set! (-> obj rise-height) (-> obj root-override trans y)) + (set! (-> obj idle-height) (+ -409600.0 (-> obj rise-height))) + (set! (-> obj root-override trans y) (-> obj idle-height)) + (set! (-> obj rise) #f) + (set! + (-> obj delay) + (the-as + uint + (the int (* 300.0 (res-lump-float (-> obj entity) 'delay :default 1.0))) + ) + ) + (let ((f0-7 1.5)) + (set-vector! (-> obj root-override scale) f0-7 f0-7 f0-7 1.0) + (set! + (-> obj root-override root-prim local-sphere w) + (* (-> obj root-override root-prim local-sphere w) f0-7) + ) + (set! (-> obj draw bounds w) (* (-> obj draw bounds w) f0-7)) + ) + 0 + (none) + ) + +(defmethod dummy-24 citb-stair-plat ((obj citb-stair-plat)) + (if + (and + (task-complete? *game-info* (game-task citadel-sage-blue)) + (task-complete? *game-info* (game-task citadel-sage-red)) + (task-complete? *game-info* (game-task citadel-sage-yellow)) + ) + (go (method-of-object obj citb-base-plat-active)) + (go (method-of-object obj citb-base-plat-idle)) + ) + 0 + (none) + ) + +(define + *citb-chain-plat-constants* + (new 'static 'rigid-body-platform-constants + :drag-factor 2.0 + :buoyancy-factor 2.0 + :max-buoyancy-depth (meters 3.0) + :gravity-factor 1.0 + :gravity (meters 80.0) + :player-weight (meters 35.0) + :player-bonk-factor 1.0 + :player-dive-factor 1.0 + :player-force-distance (meters 1000.0) + :player-force-clamp (meters 1000000.0) + :player-force-timeout #x1e + :explosion-force (meters 1000.0) + :linear-damping 1.0 + :angular-damping 1.0 + :control-point-count 5 + :mass 2.0 + :inertial-tensor-x (meters 10.0) + :inertial-tensor-y (meters 5.0) + :inertial-tensor-z (meters 10.0) + :idle-distance (meters 70.0) + :platform #t + :sound-name "blue-eco-on" + ) + ) + +(deftype citb-chain-plat (rigid-body-platform) + ((orig-trans vector :inline :offset-assert 736) + (orig-quat quaternion :inline :offset-assert 752) + (beam-end vector :inline :offset-assert 768) + (float-offset float :offset-assert 784) + (idle-offset float :offset-assert 788) + ) + :heap-base #x2b0 + :method-count-assert 35 + :size-assert #x318 + :flag-assert #x2302b00318 + ) + + +(defmethod + TODO-RENAME-22 + citb-chain-plat + ((obj citb-chain-plat) (arg0 vector) (arg1 float)) + (+ + 12288.0 + (* + 2048.0 + (fmax 0.0 (fmin 1.0 (* 0.000024414063 (-> obj float-height-offset)))) + (cos + (* 109.22667 (+ (* 60.0 arg1) (* 0.03 (-> arg0 x)) (* 0.03 (-> arg0 z)))) + ) + ) + (-> obj float-height-offset) + (-> obj orig-trans y) + ) + ) + +(defmethod TODO-RENAME-27 citb-chain-plat ((obj citb-chain-plat) (arg0 vector)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector-! gp-0 arg0 (-> obj rbody position)) + (set! (-> gp-0 y) 0.0) + (let* ((f0-1 (vector-length gp-0)) + (f1-1 (* 4.0 (fmax 0.0 (fmin 4096.0 (+ -819.2 f0-1))))) + ) + (when (< 0.0 f1-1) + (vector-float*! gp-0 gp-0 (/ f1-1 f0-1)) + (TODO-RENAME-15 (-> obj rbody) gp-0) + ) + ) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-23 citb-chain-plat ((obj citb-chain-plat) (arg0 float)) + ((the-as + (function rigid-body-platform float none) + (find-parent-method citb-chain-plat 23) + ) + obj + arg0 + ) + (TODO-RENAME-27 obj (-> obj orig-trans)) + 0 + (none) + ) + +(defstate rigid-body-platform-idle (citb-chain-plat) + :virtual #t + :trans + (behavior () + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if + (and + (and + *target* + (>= + (-> self info idle-distance) + (vector-vector-distance + (-> self root-overlay trans) + (-> *target* control trans) + ) + ) + ) + (send-event *target* 'query 'powerup 3) + ) + (go-virtual rigid-body-platform-float) + ) + ) + (none) + ) + :code + (behavior () + (anim-loop) + (none) + ) + :post + (the-as (function none :behavior citb-chain-plat) ja-post) + ) + +(defstate rigid-body-platform-float (citb-chain-plat) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior citb-chain-plat) + rigid-body-platform-event-handler + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :exit + (behavior () + (stop! (-> self sound)) + (none) + ) + :trans + (behavior () + (cond + ((and + (and + *target* + (>= + (-> self info idle-distance) + (vector-vector-distance + (-> self root-overlay trans) + (-> *target* control trans) + ) + ) + ) + (send-event *target* 'query 'powerup 3) + ) + (when (< (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (if (rand-vu-percent? 0.05) + (spawn-projectile-blue *target*) + ) + ) + (set! + (-> self float-height-offset) + (seek + (-> self float-height-offset) + (-> self float-offset) + (* 8192.0 (-> *display* seconds-per-frame)) + ) + ) + (draw-eco-beam (-> self root-overlay trans) (-> self beam-end)) + (update-trans! (-> self sound) (-> self root-overlay trans)) + (update! (-> self sound)) + ) + (else + (set! + (-> self float-height-offset) + (seek + (-> self float-height-offset) + (-> self idle-offset) + (* 16384.0 (-> *display* seconds-per-frame)) + ) + ) + (stop! (-> self sound)) + (if (= (-> self float-height-offset) (-> self idle-offset)) + (go citb-chain-plat-settle) + ) + ) + ) + (none) + ) + :code + (behavior () + (anim-loop) + (none) + ) + :post + (the-as (function none :behavior citb-chain-plat) rigid-body-platform-post) + ) + +(defstate citb-chain-plat-settle (citb-chain-plat) + :trans + (the-as (function none :behavior citb-chain-plat) rider-trans) + :code + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'quaternion)) + ) + (set! (-> gp-0 quad) (-> self root-overlay trans quad)) + (quaternion-copy! s5-0 (-> self root-overlay quat)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while (< (- (-> *display* base-frame-counter) (-> self state-time)) 75) + (let + ((f30-0 + (* + 0.013333334 + (the float (- (-> *display* base-frame-counter) (-> self state-time))) + ) + ) + ) + (quaternion-slerp! + (-> self root-overlay quat) + s5-0 + (-> self orig-quat) + f30-0 + ) + (vector-lerp! + (-> self root-overlay trans) + gp-0 + (-> self orig-trans) + f30-0 + ) + ) + (suspend) + ) + ) + (set! (-> self root-overlay trans quad) (-> self orig-trans quad)) + (quaternion-copy! (-> self root-overlay quat) (-> self orig-quat)) + (TODO-RENAME-22 + (-> self rbody) + (-> self root-overlay trans) + (-> self root-overlay quat) + (-> self info linear-damping) + (-> self info angular-damping) + ) + (suspend) + (go-virtual rigid-body-platform-idle) + (none) + ) + :post + (the-as (function none :behavior citb-chain-plat) rider-post) + ) + +(defmethod TODO-RENAME-30 citb-chain-plat ((obj citb-chain-plat)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! + (-> s5-0 no-reaction) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (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 0.0 0.0 20480.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-overlay) s5-0) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-31 citb-chain-plat ((obj citb-chain-plat)) + (initialize-skeleton obj *citb-chain-plat-sg* '()) + (set! (-> obj orig-trans quad) (-> obj root-overlay trans quad)) + (quaternion-copy! (-> obj orig-quat) (-> obj root-overlay quat)) + (set! (-> obj beam-end quad) (-> obj orig-trans quad)) + (set! (-> obj beam-end y) (+ -49152.0 (-> obj beam-end y))) + (TODO-RENAME-29 obj *citb-chain-plat-constants*) + (set! (-> obj idle-offset) 0.0) + (set! + (-> obj float-offset) + (res-lump-float (-> obj entity) 'height-info :default 4096.0) + ) + (set! (-> obj float-height-offset) (-> obj idle-offset)) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "eco-plat-hover") + :volume #x400 + :fo-max 50 + ) + (-> obj root-overlay trans) + ) + ) + (let ((s5-0 (-> obj info control-point-count))) + (dotimes (s4-0 s5-0) + (let ((s3-0 (-> obj control-point-array data s4-0))) + (let ((f30-0 (* 65536.0 (/ (the float s4-0) (the float s5-0))))) + (set! (-> s3-0 local-pos x) (* 16384.0 (sin f30-0))) + (set! (-> s3-0 local-pos y) 0.0) + (set! (-> s3-0 local-pos z) (* 16384.0 (cos f30-0))) + ) + (set! (-> s3-0 local-pos w) 1.0) + ) + ) + ) + 0 + (none) + ) + +(defskelgroup *citb-rotatebox-sg* citb-rotatebox + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 -5 0 10) + :longest-edge (meters 0) + ) + +(deftype citb-rotatebox (citb-base-plat) + () + :heap-base #x50 + :method-count-assert 25 + :size-assert #xb4 + :flag-assert #x19005000b4 + ) + + +(defstate citb-base-plat-active (citb-rotatebox) + :virtual #t + :trans + (the-as (function none :behavior citb-rotatebox) rider-trans) + :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! + ) + ) + ) + (if + (or + (not *target*) + (< + (+ 8192.0 (-> self idle-distance)) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go-virtual citb-base-plat-idle) + ) + ) + (none) + ) + ) + +(defmethod dummy-21 citb-rotatebox ((obj citb-rotatebox)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! + (-> s5-0 no-reaction) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (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 40960.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +(defmethod dummy-22 citb-rotatebox ((obj citb-rotatebox)) + (initialize-skeleton obj *citb-rotatebox-sg* '()) + 0 + (none) + ) + +(defskelgroup *citb-donut-sg* citb-donut + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +(deftype citb-donut (citb-base-plat) + ((sync sync-info :inline :offset-assert 180) + ) + :heap-base #x50 + :method-count-assert 25 + :size-assert #xbc + :flag-assert #x19005000bc + ) + + +(defstate citb-base-plat-active (citb-donut) + :virtual #t + :post + (behavior () + (update! (-> self sound)) + (quaternion-axis-angle! + (-> self root-override quat) + 0.0 + 1.0 + 0.0 + (* 65536.0 (get-current-phase (-> self sync))) + ) + (rider-post) + (none) + ) + ) + +(defmethod dummy-21 citb-donut ((obj citb-donut)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! + (-> s5-0 no-reaction) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (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) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 40960.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +(defmethod dummy-22 citb-donut ((obj citb-donut)) + (initialize-skeleton obj *citb-donut-sg* '()) + (setup-params! (-> obj sync) (the-as uint 9000) 0.0 0.15 0.15) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "rotate-plat") + :volume #x400 + :fo-max 20 + ) + (-> obj root-override trans) + ) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + 0 + (none) + ) + +(defskelgroup *citb-stopbox-sg* citb-stopbox + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 -2 0 5.5) + :longest-edge (meters 0) + ) + +(deftype citb-stopbox (plat) + () + :heap-base #xa0 + :method-count-assert 33 + :size-assert #x108 + :flag-assert #x2100a00108 + ) + + +(defstate plat-path-active (citb-stopbox) + :virtual #t + :trans + (behavior () + (set! (-> self path-pos) (get-current-phase (-> self sync))) + (eval-path-curve! + (-> self path) + (-> self basetrans) + (-> self path-pos) + 'interp + ) + (if + (< + (vector-vector-distance (-> self root-override trans) (ear-trans)) + 81920.0 + ) + (sound-play-by-name + (static-sound-name "eco-plat-hover") + (-> self sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self root-override trans)) + ) + ) + (plat-trans) + (none) + ) + ) + +(defmethod get-unlit-skel citb-stopbox ((obj citb-stopbox)) + *citb-stopbox-sg* + ) + +(defmethod dummy-24 citb-stopbox ((obj citb-stopbox)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! + (-> s5-0 no-reaction) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (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 19)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 -8192.0 0.0 22528.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +(defmethod dummy-26 citb-stopbox ((obj citb-stopbox)) + (logior! (-> obj fact options) (fact-options fop3)) + (logclear! (-> obj mask) (process-mask actor-pause)) + 0 + (none) + ) + +(deftype citb-firehose (process-drawable) + ((root-override collide-shape :offset 112) + (idle-distance float :offset-assert 176) + (sync sync-info :inline :offset-assert 180) + (last-sync float :offset-assert 188) + (blast-pos vector :inline :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xd0 + :flag-assert #x14006000d0 + ) + + +(defskelgroup *citb-firehose-sg* citb-firehose + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 3 0 15) + :longest-edge (meters 0) + ) + +(defstate citb-firehose-idle (citb-firehose) + :trans + (behavior () + (if + (and + *target* + (>= + (-> self idle-distance) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go citb-firehose-active) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior citb-firehose) ja-post) + ) + +(defstate citb-firehose-active (citb-firehose) + :trans + (behavior () + (if + (or + (not *target*) + (< + (+ 8192.0 (-> self idle-distance)) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go citb-firehose-idle) + ) + (let ((f0-2 (get-current-phase (-> self sync))) + (f1-1 (-> self last-sync)) + ) + (set! (-> self last-sync) f0-2) + (if (< f0-2 f1-1) + (go citb-firehose-blast) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior citb-firehose) ja-post) + ) + +(defbehavior citb-firehose-blast-particles citb-firehose () + (let ((gp-0 (new 'stack-no-clear 'quaternion))) + (quaternion-identity! gp-0) + (quaternion-rotate-local-x! gp-0 gp-0 -16384.0) + (dotimes (s5-0 16) + (quaternion-rotate-local-z! gp-0 gp-0 2048.0) + (quaternion-copy! *particle-quat* gp-0) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2541) + (-> self blast-pos) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (spawn (-> self part) (-> self blast-pos)) + ) + +(defstate citb-firehose-blast (citb-firehose) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (let ((v1-4 (new 'static 'attack-info :mask #xe0))) + (set! (-> v1-4 mode) 'damage) + (set! (-> v1-4 shove-back) 24576.0) + (set! (-> v1-4 shove-up) 12288.0) + (set! (-> a1-2 param 1) (the-as uint v1-4)) + ) + (send-event-function arg0 a1-2) + ) + ) + ) + ) + :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 3)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + 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 3)) + 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! + ) + ) + ) + (ja-channel-push! 1 30) + (restore-collide-with-as (-> self root-override)) + (sound-play-by-name + (static-sound-name "eco-torch") + (new-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self blast-pos)) + ) + (dotimes (gp-1 2) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (set! + (-> self blast-pos quad) + (-> self node-list data 5 bone transform vector 3 quad) + ) + (citb-firehose-blast-particles) + (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! + ) + ) + ) + ) + (clear-collide-with-as (-> self root-override)) + (ja-channel-push! 1 30) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-16 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-16 param 1) 1.0) + (set! (-> a0-16 frame-num) 0.0) + (joint-control-channel-group! + a0-16 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! + (-> a0-17 param 0) + (the float (+ (-> a0-17 frame-group data 0 length) -1)) + ) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! + a0-17 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go citb-firehose-active) + (none) + ) + :post + (the-as (function none :behavior citb-firehose) transform-post) + ) + +(defmethod + init-from-entity! + citb-firehose + ((obj citb-firehose) (arg0 entity-actor)) + (let + ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 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 -61440.0 0.0 36864.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core offense) 2) + (set-vector! (-> s2-0 local-sphere) 0.0 -49152.0 0.0 12288.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core offense) 2) + (set-vector! (-> s2-1 local-sphere) 0.0 -61440.0 0.0 14336.0) + (append-prim s3-0 s2-1) + ) + (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 offense) 2) + (set-vector! (-> s2-2 local-sphere) 0.0 -73728.0 0.0 16384.0) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *citb-firehose-sg* '()) + (load-params! (-> obj sync) obj (the-as uint 900) 0.0 0.15 0.15) + (set! (-> obj idle-distance) 286720.0) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 685) obj) + ) + (clear-collide-with-as (-> obj root-override)) + (go citb-firehose-idle) + (none) + ) + +(defskelgroup *citb-exit-plat-sg* citb-exit-plat + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 30) + :longest-edge (meters 0) + ) + +(deftype citb-exit-plat (plat-button) + ((idle-height float :offset-assert 240) + (rise-height float :offset-assert 244) + (activated symbol :offset-assert 248) + ) + :heap-base #x90 + :method-count-assert 33 + :size-assert #xfc + :flag-assert #x21009000fc + ) + + +(defstate citb-exit-plat-idle (citb-exit-plat) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (let ((v1-3 (-> self entity extra perm))) + (logior! (-> v1-3 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-3 user-int8 0) 1) + ) + (go citb-exit-plat-rise) + ) + ) + ) + :code + (behavior () + (logior! (-> self draw status) 2) + (clear-collide-with-as (-> self root-override)) + (while #t + (suspend) + ) + (none) + ) + ) + +(defstate citb-exit-plat-rise (citb-exit-plat) + :trans + (the-as (function none :behavior citb-exit-plat) rider-trans) + :code + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (restore-collide-with-as (-> self root-override)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (let + ((f30-0 + (- + 1.0 + (* + 0.0016666667 + (the float (- (-> *display* base-frame-counter) (-> self state-time))) + ) + ) + ) + ) + (when (< f30-0 0.0) + (set! (-> self root-override trans y) (-> self rise-height)) + (go-virtual plat-button-idle) + ) + (set! + (-> self root-override trans y) + (lerp (-> self rise-height) (-> self idle-height) (* f30-0 f30-0)) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior citb-exit-plat) rider-post) + ) + +(defbehavior citb-exit-plat-move-player citb-exit-plat ((arg0 vector)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-! gp-0 (-> self root-override trans) arg0) + (vector-! s5-0 (-> *target* control trans) (-> self root-override trans)) + (set! (-> s5-0 y) 0.0) + (let ((f30-0 (vector-length s5-0))) + (when (< 122880.0 f30-0) + (vector-normalize! s5-0 1.0) + (vector+*! gp-0 gp-0 s5-0 (- 122880.0 f30-0)) + ) + ) + ) + (TODO-RENAME-28 (-> *target* control) gp-0) + ) + (send-event *target* 'reset-height) + 0 + (none) + ) + +(defstate plat-button-move-downward (citb-exit-plat) + :virtual #t + :trans + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (let + ((t9-1 + (-> + (the-as (state plat-button) (find-parent-method citb-exit-plat 23)) + trans + ) + ) + ) + (if t9-1 + (t9-1) + ) + ) + (citb-exit-plat-move-player gp-0) + ) + (none) + ) + :post + (the-as (function none :behavior citb-exit-plat) transform-post) + ) + +(defstate plat-button-move-upward (citb-exit-plat) + :virtual #t + :trans + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (let + ((t9-1 + (-> + (the-as (state plat-button) (find-parent-method citb-exit-plat 24)) + trans + ) + ) + ) + (if t9-1 + (t9-1) + ) + ) + (citb-exit-plat-move-player gp-0) + ) + (none) + ) + :post + (the-as (function none :behavior citb-exit-plat) transform-post) + ) + +(defmethod can-activate? citb-exit-plat ((obj citb-exit-plat)) + (not (movie?)) + ) + +(defmethod TODO-RENAME-31 citb-exit-plat ((obj citb-exit-plat)) + (initialize-skeleton obj *citb-exit-plat-sg* '()) + (none) + ) + +(defmethod TODO-RENAME-32 citb-exit-plat ((obj citb-exit-plat)) + (if (-> obj activated) + (go (method-of-object obj plat-button-idle)) + (go citb-exit-plat-idle) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-28 citb-exit-plat ((obj citb-exit-plat)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! + (-> s5-0 no-reaction) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (dummy-29 s5-0 1) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 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 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 122880.0) + (set-root-prim! s5-0 s4-0) + (let + ((s3-0 + (new + 'process + 'collide-shape-prim-mesh + s5-0 + (the-as uint 0) + (the-as uint 1) + ) + ) + ) + (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 -2867.2 0.0 7372.8) + (append-prim s4-0 s3-0) + ) + (let + ((s3-1 + (new + 'process + 'collide-shape-prim-mesh + s5-0 + (the-as uint 1) + (the-as uint 2) + ) + ) + ) + (set! (-> s3-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core action) (the-as uint 3)) + (set! (-> s3-1 prim-core offense) 4) + (set! (-> s3-1 transform-index) 3) + (set-vector! (-> s3-1 local-sphere) 0.0 0.0 0.0 122880.0) + (append-prim s4-0 s3-1) + ) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + s5-0 + ) + ) + +(defmethod can-target-move? citb-exit-plat ((obj citb-exit-plat)) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj draw light-index) (the-as uint 255)) + (let ((a0-5 (entity-actor-lookup (-> obj entity) 'state-actor 0))) + (set! + (-> obj activated) + (logtest? (-> a0-5 extra perm status) (entity-perm-status complete)) + ) + ) + (cond + ((= (-> *game-info* current-continue level) 'finalboss) + (let ((v1-8 (-> obj entity extra perm))) + (logior! (-> v1-8 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-8 user-int8 0) 1) + ) + (set! (-> obj activated) #t) + (set! (-> obj path-pos) 0.0) + ) + (else + (set! (-> obj path-pos) 1.0) + ) + ) + (let ((s5-0 (-> obj root-override trans))) + (eval-path-curve! (-> obj path) s5-0 (-> obj path-pos) 'interp) + (vector+! s5-0 s5-0 (-> obj trans-off)) + ) + (set! (-> obj rise-height) (-> obj root-override trans y)) + (set! (-> obj idle-height) (+ -286720.0 (-> obj rise-height))) + (if (-> obj activated) + (set! (-> obj root-override trans y) (-> obj rise-height)) + (set! (-> obj root-override trans y) (-> obj idle-height)) + ) + (set! (-> obj allow-auto-kill) #f) + (process-entity-status! obj (entity-perm-status bit-3) #t) + (the-as symbol 0) + ) + + + + diff --git a/goal_src/levels/common/baseplat.gc b/goal_src/levels/common/baseplat.gc index 669d2f8954..5eb29c5d7d 100644 --- a/goal_src/levels/common/baseplat.gc +++ b/goal_src/levels/common/baseplat.gc @@ -370,7 +370,7 @@ eco-door-event-handler (let ((gp-0 (new 'stack 'overlaps-others-params))) (set! (-> gp-0 options) (the-as uint 1)) (set! (-> gp-0 tlist) #f) - (while (dummy-40 (-> self root-override) gp-0) + (while (dummy-40 (-> self root-override) (the-as vector2w gp-0)) (suspend) ) ) diff --git a/goal_src/levels/common/launcherdoor.gc b/goal_src/levels/common/launcherdoor.gc index 7fc3c7bc35..3adb8b7d2f 100644 --- a/goal_src/levels/common/launcherdoor.gc +++ b/goal_src/levels/common/launcherdoor.gc @@ -5,3 +5,307 @@ ;; name in dgo: launcherdoor ;; dgos: JUN, JUNGLE, L1, MAI, MAINCAVE, SUN, SUNKEN +(define-extern *launcherdoor-maincave-sg* skeleton-group) +(define-extern *launcherdoor-sg* skeleton-group) + +(declare-type launcherdoor process-drawable) + +(define-extern launcherdoor-open (state symbol launcherdoor)) ;; unknown type +(define-extern launcherdoor-closed (state symbol launcherdoor)) ;; unknown type + +;; DECOMP BEGINS + +(deftype launcherdoor (process-drawable) + ((root-override collide-shape :offset 112) + (notify-player-passed-thru? symbol :offset-assert 176) + (thresh-y float :offset-assert 180) + (open-speed float :offset-assert 184) + (close-speed float :offset-assert 188) + (load-mode symbol :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xc4 + :flag-assert #x14006000c4 + ) + + +(defskelgroup *launcherdoor-sg* launcherdoor + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +(defskelgroup *launcherdoor-maincave-sg* launcherdoor-maincave + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +(defstate launcherdoor-closed (launcherdoor) + :code + (behavior ((arg0 symbol)) + (if (not arg0) + (sound-play-by-name + (static-sound-name "ldoor-close") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + ) + (when *target* + (case (-> *target* current-level name) + (('jungle 'jungleb) + (send-event *target* 'no-load-wait 6000) + ) + ) + ) + (restore-collide-with-as (-> self root-override)) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) 0.0) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (when arg0 + (let ((v1-22 (-> self skel root-channel 0))) + (set! (-> v1-22 num-func) num-func-identity) + (set! (-> v1-22 frame-num) 0.0) + ) + (set! (-> self draw force-lod) 1) + ) + (suspend) + (while #t + (if + (and + *target* + (= (-> *target* control unknown-surface00 name) 'launch-jump) + (< (-> *target* control trans y) (-> self thresh-y)) + ) + (go launcherdoor-open #f) + ) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) 0.0) + (set! (-> a0-13 param 1) (-> self close-speed)) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (suspend) + (when (ja-done? 0) + (set! (-> self draw force-lod) 1) + (when (-> self notify-player-passed-thru?) + (set! (-> self notify-player-passed-thru?) #f) + (let* ((gp-1 (-> self entity)) + (s5-1 (entity-actor-count gp-1 'alt-actor)) + ) + (dotimes (s4-1 s5-1) + (let ((v1-43 (entity-actor-lookup gp-1 'alt-actor s4-1))) + (if v1-43 + (send-event (if v1-43 + (-> v1-43 extra process) + ) + 'notify + ) + ) + ) + ) + ) + (case (-> self load-mode) + (('jungle) + (load-state-want-levels 'village1 'jungle) + (load-state-want-display-level 'village1 'display) + ) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior launcherdoor) ja-post) + ) + +(defstate launcherdoor-open (launcherdoor) + :code + (behavior ((arg0 symbol)) + (if (not arg0) + (sound-play-by-name + (static-sound-name "ldoor-open") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + ) + (set! (-> self draw force-lod) 0) + (clear-collide-with-as (-> self root-override)) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (when arg0 + (let ((v1-16 (-> self skel root-channel 0))) + (set! (-> v1-16 num-func) num-func-identity) + (set! + (-> v1-16 frame-num) + (the float (+ (-> v1-16 frame-group data 0 length) -1)) + ) + ) + ) + (while #t + (when + (or + (not *target*) + (!= (-> *target* control unknown-surface00 name) 'launch-jump) + (< + (+ 4096.0 (-> self root-override trans y)) + (-> *target* control trans y) + ) + ) + (when (and *target* (< (-> self thresh-y) (-> *target* control trans y))) + (let ((a1-3 (res-lump-struct (-> self entity) 'continue-name structure))) + (when a1-3 + (let ((v1-36 (set-continue! *game-info* (the-as basic a1-3)))) + (load-commands-set! *level* (-> v1-36 load-commands)) + ) + ) + ) + (set! (-> self notify-player-passed-thru?) #t) + ) + (go launcherdoor-closed #f) + ) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) (-> self open-speed)) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior launcherdoor) ja-post) + ) + +(defmethod + init-from-entity! + launcherdoor + ((obj launcherdoor) (arg0 entity-actor)) + (set! (-> obj notify-player-passed-thru?) #f) + (set! (-> obj open-speed) 4.0) + (set! (-> obj close-speed) 2.0) + (let + ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let + ((s3-0 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 14336.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (cond + ((= (-> (if (-> obj entity) + (-> obj entity extra level) + (-> *level* level-default) + ) + name + ) + 'maincave + ) + (set! (-> obj close-speed) 4.0) + (initialize-skeleton obj *launcherdoor-maincave-sg* '()) + (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 3)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + ) + (else + (initialize-skeleton obj *launcherdoor-sg* '()) + (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) + ) + ) + ) + (transform-post) + (case (-> obj entity extra level name) + (('jungle) + (set! (-> obj draw shadow-mask) (the-as uint 28)) + ) + ) + (set! (-> obj load-mode) (-> (if (-> obj entity) + (-> obj entity extra level) + (-> *level* level-default) + ) + name + ) + ) + (set! (-> obj thresh-y) (+ -81920.0 (-> obj root-override trans y))) + (if + (and *target* (= (-> *target* control unknown-surface00 name) 'launch-jump)) + (go launcherdoor-open #t) + (go launcherdoor-closed #t) + ) + (none) + ) + + + + diff --git a/goal_src/levels/common/mistycannon.gc b/goal_src/levels/common/mistycannon.gc index 0d581266bd..d3ac513676 100644 --- a/goal_src/levels/common/mistycannon.gc +++ b/goal_src/levels/common/mistycannon.gc @@ -17,33 +17,35 @@ :flag-assert #x900000010 ) (deftype mistycannon (process-drawable) - ((rotate angle-tracker :inline :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (rotate angle-tracker :inline :offset-assert 176) + (fact-info-override fact-info-enemy :score 100 :offset 144) (tilt angle-tracker :inline :offset-assert 192) (front-wheel float :offset-assert 208) (rear-wheel float :offset-assert 212) (last-known-rotation float :offset-assert 216) (part-timer uint64 :offset-assert 224) (hellmouth vector :inline :offset-assert 240) - (postbindinfo-ok basic :offset-assert 256) + (postbindinfo-ok symbol :offset-assert 256) (launch-origin vector :inline :offset-assert 272) (goggles vector :inline :offset-assert 288) - (avoid-entity basic :offset-assert 304) + (avoid-entity entity-actor :offset-assert 304) (center-point vector :inline :offset-assert 320) (at-point vector :inline :offset-assert 336) (accuracy-range float :offset-assert 352) (target-theta float :offset-assert 356) (sound-id sound-id :offset-assert 360) (aim-sound-id sound-id :offset-assert 364) - (player-touching-grips? basic :offset-assert 368) + (player-touching-grips? symbol :offset-assert 368) ) :method-count-assert 24 :size-assert #x174 :heap-base #x110 :flag-assert #x1801100174 (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) - (dummy-23 () none 23) + (rotate! (_type_ float) none 20) + (tilt! (_type_ float) none 21) + (dummy-22 (_type_ float float float) none 22) + (dummy-23 (_type_) none 23) ) ) diff --git a/goal_src/levels/common/plat-eco.gc b/goal_src/levels/common/plat-eco.gc index 15b7a7533a..52fec9cbc3 100644 --- a/goal_src/levels/common/plat-eco.gc +++ b/goal_src/levels/common/plat-eco.gc @@ -5,3 +5,18 @@ ;; name in dgo: plat-eco ;; dgos: GAME, COMMON, L1 +;; TODO - for citb-plat +(deftype plat-eco (plat) + ((notice-dist float :offset-assert 264) + (sync-offset-dest float :offset-assert 268) + (sync-offset-faux float :offset-assert 272) + (sync-linear-val float :offset-assert 276) + (target handle :offset-assert 280) + (unlit-look lod-set :inline :offset-assert 288) + (lit-look lod-set :inline :offset-assert 324) + ) + :method-count-assert 33 + :size-assert #x165 + :heap-base #x100 + :flag-assert #x2101000165 + ) diff --git a/goal_src/levels/finalboss/robotboss.gc b/goal_src/levels/finalboss/robotboss.gc index 157b848d95..6516006479 100644 --- a/goal_src/levels/finalboss/robotboss.gc +++ b/goal_src/levels/finalboss/robotboss.gc @@ -40,8 +40,8 @@ (defbehavior robotboss-cut-cam-exit robotboss () (set! (-> self valid-frames) 0) (if (and *target* (logtest? (-> *target* state-flags) 256)) - (process-release? *target*) - ) + (process-release? *target*) + ) (set! (-> self skel status) (logand -2 (-> self skel status))) (set! (-> self skip-cut) #f) (none) @@ -49,67 +49,61 @@ (defbehavior robotboss-cut-cam robotboss ((arg0 float) (arg1 float) (arg2 int)) (let ((f0-0 (ja-aframe-num 0))) - (cond - ((or (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - arg2 - ) - ) - (< f0-0 arg0) (< arg1 f0-0) - ) - (robotboss-cut-cam-exit) - ) - ((or - (and - (logtest? (-> *target* control unknown-surface00 flags) 2048) - (zero? (logand (-> *target* control status) 1)) + (cond + ((or + (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + arg2 + ) + ) + (< f0-0 arg0) + (< arg1 f0-0) + ) + (robotboss-cut-cam-exit) ) - (-> self skip-cut) - ) - (set! (-> self skip-cut) #t) - ) - (else - (logior! (-> self skel status) 1) - (process-grab? *target*) - (set! (-> *camera-other-root* quad) (-> self root-override trans quad)) - (let ((s5-1 (-> self node-list data 88 bone transform)) - (gp-1 (-> self node-list data 88 bone scale)) + ((or + (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) ) - (let ((s4-1 (new 'stack-no-clear 'vector))) - (vector<-cspace! s4-1 (-> self node-list data 88)) - (set! (-> *camera-other-trans* quad) (-> s4-1 quad)) + (-> self skip-cut) + ) + (set! (-> self skip-cut) #t) ) - (vector-normalize-copy! - (the-as vector (-> *camera-other-matrix* vector)) - (the-as vector (-> s5-1 vector)) - (the-as float -1.0) - ) - (set! (-> *camera-other-matrix* vector 0 w) 0.0) - (vector-normalize-copy! - (-> *camera-other-matrix* vector 1) - (-> s5-1 vector 1) - (the-as float 1.0) - ) - (set! (-> *camera-other-matrix* vector 1 w) 0.0) - (vector-normalize-copy! - (-> *camera-other-matrix* vector 2) - (-> s5-1 vector 2) - (the-as float -1.0) - ) - (set! (-> *camera-other-matrix* vector 2 w) 0.0) - (vector-reset! (-> *camera-other-matrix* vector 3)) - (othercam-calc (-> gp-1 x)) + (else + (logior! (-> self skel status) 1) + (process-grab? *target*) + (set! (-> *camera-other-root* quad) (-> self root-override trans quad)) + (let ((s5-1 (-> self node-list data 88 bone transform)) + (gp-1 (-> self node-list data 88 bone scale)) + ) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector<-cspace! s4-1 (-> self node-list data 88)) + (set! (-> *camera-other-trans* quad) (-> s4-1 quad)) + ) + (vector-normalize-copy! + (the-as vector (-> *camera-other-matrix* vector)) + (the-as vector (-> s5-1 vector)) + (the-as float -1.0) + ) + (set! (-> *camera-other-matrix* vector 0 w) 0.0) + (vector-normalize-copy! (-> *camera-other-matrix* vector 1) (-> s5-1 vector 1) (the-as float 1.0)) + (set! (-> *camera-other-matrix* vector 1 w) 0.0) + (vector-normalize-copy! (-> *camera-other-matrix* vector 2) (-> s5-1 vector 2) (the-as float -1.0)) + (set! (-> *camera-other-matrix* vector 2 w) 0.0) + (vector-reset! (-> *camera-other-matrix* vector 3)) + (othercam-calc (-> gp-1 x)) + ) + (hide-hud-quick) + (set! *camera-look-through-other* 2) + (when (< (-> self valid-frames) 2) + (set-blackout-frames 10) + (+! (-> self valid-frames) 1) + ) + ) ) - (hide-hud-quick) - (set! *camera-look-through-other* 2) - (when (< (-> self valid-frames) 2) - (set-blackout-frames 10) - (+! (-> self valid-frames) 1) - ) - ) ) - ) (none) ) @@ -117,9 +111,9 @@ (defbehavior robotboss-shooting-trans robotboss ((arg0 int)) (let ((gp-0 (new 'stack-no-clear 'vector))) - (vector<-cspace! gp-0 (-> self node-list data arg0)) - (send-event (handle->process (-> self shot-attractor)) 'trans gp-0) - ) + (vector<-cspace! gp-0 (-> self node-list data arg0)) + (send-event (handle->process (-> self shot-attractor)) 'trans gp-0) + ) (none) ) @@ -128,45 +122,21 @@ (set! (-> self hits-to-go) arg1) (set! (-> self vulnerable) arg0) (let ((gp-0 (new 'stack 'sphere))) - (set! (-> gp-0 w) 4096.0) - (let ((s5-0 (get-process *default-dead-pool* manipy #x4000))) - (set! (-> self shot-attractor) (ppointer->handle (when s5-0 - (let - ((t9-2 - (method-of-type - manipy - activate - ) - ) - ) - (t9-2 - (the-as manipy s5-0) - self - 'manipy - (the-as - pointer - #x70004000 - ) - ) - ) - (run-now-in-process - s5-0 - manipy-init - (-> - self - root-override - trans - ) - (-> self entity) - *redring-sg* - gp-0 - ) - (-> s5-0 ppointer) - ) - ) - ) + (set! (-> gp-0 w) 4096.0) + (let ((s5-0 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> self shot-attractor) + (ppointer->handle + (when s5-0 + (let ((t9-2 (method-of-type manipy activate))) + (t9-2 (the-as manipy s5-0) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 manipy-init (-> self root-override trans) (-> self entity) *redring-sg* gp-0) + (-> s5-0 ppointer) + ) + ) + ) + ) ) - ) (send-event (handle->process (-> self shot-attractor)) 'attackable #t) (send-event (handle->process (-> self shot-attractor)) 'draw #f) ) @@ -175,66 +145,50 @@ (logior! (-> self alts 7 extra perm status) (entity-perm-status bit-9)) (logior! (-> self alts 8 extra perm status) (entity-perm-status bit-9)) (logior! (-> self alts 9 extra perm status) (entity-perm-status bit-9)) - (let - ((v0-0 - (logior (-> self alts 10 extra perm status) (entity-perm-status bit-9)) - ) + (let ((v0-0 (logior (-> self alts 10 extra perm status) (entity-perm-status bit-9)))) + (set! (-> self alts 10 extra perm status) v0-0) + v0-0 ) - (set! (-> self alts 10 extra perm status) v0-0) - v0-0 - ) ) (defbehavior robotboss-yellow-eco-on robotboss () (logclear! (-> self alts 7 extra perm status) (entity-perm-status bit-9)) (logclear! (-> self alts 8 extra perm status) (entity-perm-status bit-9)) (logclear! (-> self alts 9 extra perm status) (entity-perm-status bit-9)) - (let - ((v0-0 - (logclear (-> self alts 10 extra perm status) (entity-perm-status bit-9)) - ) + (let ((v0-0 (logclear (-> self alts 10 extra perm status) (entity-perm-status bit-9)))) + (set! (-> self alts 10 extra perm status) v0-0) + v0-0 ) - (set! (-> self alts 10 extra perm status) v0-0) - v0-0 - ) ) (defbehavior robotboss-anim-blend-loop robotboss ((arg0 art-joint-anim)) (let ((s5-0 (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) + (-> self skel root-channel 0 frame-group) + ) + ) ) - (ja-channel-push! 2 0) - (let ((s4-0 (-> self skel root-channel 0))) - (joint-control-channel-group-eval! s4-0 arg0 num-func-identity) - (set! (-> s4-0 frame-num) 0.0) + (ja-channel-push! 2 0) + (let ((s4-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! s4-0 arg0 num-func-identity) + (set! (-> s4-0 frame-num) 0.0) + ) + (let ((gp-1 (-> self skel root-channel 1))) + (joint-control-channel-group-eval! gp-1 s5-0 num-func-identity) + (set! (-> gp-1 frame-num) 0.0) + ) ) - (let ((gp-1 (-> self skel root-channel 1))) - (joint-control-channel-group-eval! gp-1 s5-0 num-func-identity) - (set! (-> gp-1 frame-num) 0.0) - ) - ) (while #t - (let ((a0-4 (-> self skel root-channel 0))) - (set! (-> a0-4 param 0) 1.0) - (joint-control-channel-group-eval! - a0-4 - (the-as art-joint-anim #f) - num-func-loop! - ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) 1.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-loop!) + ) + (let ((gp-2 (-> self skel root-channel 1))) + (set! (-> gp-2 frame-interp) (- 1.0 (ease-loc-t self))) + (set! (-> gp-2 param 0) 0.0) + (joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-chan) + ) + (suspend) ) - (let ((gp-2 (-> self skel root-channel 1))) - (set! (-> gp-2 frame-interp) (- 1.0 (ease-loc-t self))) - (set! (-> gp-2 param 0) 0.0) - (joint-control-channel-group-eval! - gp-2 - (the-as art-joint-anim #f) - num-func-chan - ) - ) - (suspend) - ) (none) ) @@ -242,656 +196,506 @@ (let ((s5-0 (-> self entity extra trans)) (gp-0 (new 'stack-no-clear 'vector)) ) - (let ((s4-0 (new 'stack-no-clear 'matrix))) - (set! - (-> self loc-t) - (/ - (the float (- (-> *display* game-frame-counter) (-> self loc-t-start))) - (the float (-> self loc-t-duration)) + (let ((s4-0 (new 'stack-no-clear 'matrix))) + (set! (-> self loc-t) (/ (the float (- (-> *display* game-frame-counter) (-> self loc-t-start))) + (the float (-> self loc-t-duration)) + ) + ) + (set! (-> self loc-t) (fmin 1.0 (-> self loc-t))) + (vector-lerp! gp-0 (-> self old-loc) (-> self desired-loc) (ease-loc-t self)) + (matrix-rotate-y! s4-0 (-> gp-0 x)) + (set! (-> gp-0 x) 0.0) + (vector-matrix*! gp-0 gp-0 s4-0) + (vector+! (-> self root-override trans) gp-0 (-> self entity extra trans)) + (vector-negate! (the-as vector (-> s4-0 vector)) (the-as vector (-> s4-0 vector))) + (vector-negate! (-> s4-0 vector 2) (-> s4-0 vector 2)) + (matrix->quaternion (-> self root-override quat) s4-0) ) - ) - (set! (-> self loc-t) (fmin 1.0 (-> self loc-t))) - (vector-lerp! - gp-0 - (-> self old-loc) - (-> self desired-loc) - (ease-loc-t self) - ) - (matrix-rotate-y! s4-0 (-> gp-0 x)) - (set! (-> gp-0 x) 0.0) - (vector-matrix*! gp-0 gp-0 s4-0) - (vector+! (-> self root-override trans) gp-0 (-> self entity extra trans)) - (vector-negate! - (the-as vector (-> s4-0 vector)) - (the-as vector (-> s4-0 vector)) - ) - (vector-negate! (-> s4-0 vector 2) (-> s4-0 vector 2)) - (matrix->quaternion (-> self root-override quat) s4-0) + (vector-! gp-0 s5-0 (-> self root-override trans)) + (set! (-> gp-0 y) 0.0) + (vector-normalize! gp-0 (the-as float 204800.0)) + (set! (-> gp-0 y) 32768.0) + (vector+! gp-0 gp-0 s5-0) + (send-event *camera* 'set-pivot gp-0) ) - (vector-! gp-0 s5-0 (-> self root-override trans)) - (set! (-> gp-0 y) 0.0) - (vector-normalize! gp-0 (the-as float 204800.0)) - (set! (-> gp-0 y) 32768.0) - (vector+! gp-0 gp-0 s5-0) - (send-event *camera* 'set-pivot gp-0) - ) (when (-> self alts 6) - (let ((a0-16 (-> self alts 6 extra process)) - (f0-10 (+ (-> self entity extra trans y) (-> self desired-pool-y))) - ) - (when a0-16 - (let ((v1-23 (new 'stack-no-clear 'vector))) - (set! - (-> v1-23 quad) - (-> (the-as process-drawable a0-16) root trans quad) - ) - (cond - ((< (-> v1-23 y) (+ -204.8 f0-10)) - (set! (-> v1-23 y) (+ 20.48 (-> v1-23 y))) + (let ((a0-16 (-> self alts 6 extra process)) + (f0-10 (+ (-> self entity extra trans y) (-> self desired-pool-y))) + ) + (when a0-16 + (let ((v1-23 (new 'stack-no-clear 'vector))) + (set! (-> v1-23 quad) (-> (the-as process-drawable a0-16) root trans quad)) + (cond + ((< (-> v1-23 y) (+ -204.8 f0-10)) + (set! (-> v1-23 y) (+ 20.48 (-> v1-23 y))) + ) + ((< (+ 204.8 f0-10) (-> v1-23 y)) + (set! (-> v1-23 y) (+ -20.48 (-> v1-23 y))) + ) + ) + (send-event a0-16 'move-to v1-23) + ) ) - ((< (+ 204.8 f0-10) (-> v1-23 y)) - (set! (-> v1-23 y) (+ -20.48 (-> v1-23 y))) - ) - ) - (send-event a0-16 'move-to v1-23) ) - ) ) - ) ) (defbehavior robotboss-darkecobomb robotboss ((arg0 vector) (arg1 float)) (+! (-> self children-spawned) 1) (let ((gp-0 (new 'stack-no-clear 'vector))) - (let ((s4-0 (new 'stack-no-clear 'vector))) - (vector<-cspace! gp-0 (-> self node-list data 60)) - (set! (-> s4-0 quad) (-> self entity extra trans quad)) - (vector+! s4-0 s4-0 arg0) - (let ((s3-1 (get-process *default-dead-pool* darkecobomb #x4000))) - (when s3-1 - (let ((t9-2 (method-of-type darkecobomb activate))) - (t9-2 - (the-as darkecobomb s3-1) - self - 'darkecobomb - (the-as pointer #x70004000) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 60)) + (set! (-> s4-0 quad) (-> self entity extra trans quad)) + (vector+! s4-0 s4-0 arg0) + (let ((s3-1 (get-process *default-dead-pool* darkecobomb #x4000))) + (when s3-1 + (let ((t9-2 (method-of-type darkecobomb activate))) + (t9-2 (the-as darkecobomb s3-1) self 'darkecobomb (the-as pointer #x70004000)) + ) + (run-now-in-process s3-1 darkecobomb-init-by-other gp-0 s4-0 61440.0 300 arg1) + (-> s3-1 ppointer) + ) + ) + ) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-5 (method-of-type part-tracker activate))) + (t9-5 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 part-tracker-init (-> *part-group-id-table* 638) 300 #f #f #f gp-0) + (-> s5-1 ppointer) ) - ) - (run-now-in-process - s3-1 - darkecobomb-init-by-other - gp-0 - s4-0 - 61440.0 - 300 - arg1 - ) - (-> s3-1 ppointer) ) - ) ) - (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) - (when s5-1 - (let ((t9-5 (method-of-type part-tracker activate))) - (t9-5 - (the-as part-tracker s5-1) - *entity-pool* - 'part-tracker - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-1 - part-tracker-init - (-> *part-group-id-table* 638) - 300 - #f - #f - #f - gp-0 - ) - (-> s5-1 ppointer) - ) - ) - ) ) -(defbehavior - robotboss-bomb-handler robotboss - ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) +(defbehavior robotboss-bomb-handler robotboss ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (local-vars (v0-0 object)) - (case arg2 - (('flash) + (case arg2 + (('flash) (let ((f0-1 (* 0.0078125 (the-as float (-> arg3 param 0))))) - (set! (-> self palette-val) f0-1) - f0-1 - ) - ) - (('bomb-done) - (set! (-> self des-cam-entity) #f) - (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) 'hide) - (let ((t9-0 send-event-function) - (v1-4 (-> self alts 11)) - ) - (t9-0 (if v1-4 - (-> v1-4 extra process) - ) - a1-1 + (set! (-> self palette-val) f0-1) + f0-1 ) - ) ) - (set! v0-0 (+ (-> self children-spawned) -2)) - (set! (-> self children-spawned) (the-as int v0-0)) - v0-0 + (('bomb-done) + (set! (-> self des-cam-entity) #f) + (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) 'hide) + (let ((t9-0 send-event-function) + (v1-4 (-> self alts 11)) + ) + (t9-0 + (if v1-4 + (-> v1-4 extra process) + ) + a1-1 + ) + ) + ) + (set! v0-0 (+ (-> self children-spawned) -2)) + (set! (-> self children-spawned) (the-as int v0-0)) + v0-0 + ) + (('bomb-going) + (set! (-> self des-cam-entity) #f) + (set! v0-0 #t) + (set! (-> self ignore-camera) (the-as symbol v0-0)) + v0-0 + ) ) - (('bomb-going) - (set! (-> self des-cam-entity) #f) - (set! v0-0 #t) - (set! (-> self ignore-camera) (the-as symbol v0-0)) - v0-0 - ) - ) ) -(defbehavior - robotboss-handler robotboss - ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) +(defbehavior robotboss-handler robotboss ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'flash) - (let ((f0-1 (* 0.0078125 (the-as float (-> arg3 param 0))))) - (set! (-> self palette-val) f0-1) - f0-1 - ) - ) - ((= v1-0 'attack) - (when (>= arg1 2) - (case (-> arg3 param 1) - (('eco-yellow) - (let ((a0-5 (-> arg3 param 0))) - (when - (and - a0-5 - ((method-of-type - touching-shapes-entry - prims-touching? + (the-as object (cond + ((= v1-0 'flash) + (let ((f0-1 (* 0.0078125 (the-as float (-> arg3 param 0))))) + (set! (-> self palette-val) f0-1) + f0-1 + ) + ) + ((= v1-0 'attack) + (when (>= arg1 2) + (case (-> arg3 param 1) + (('eco-yellow) + (let ((a0-5 (-> arg3 param 0))) + (when (and a0-5 ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry a0-5) + (-> self root-override) + (the-as uint (-> self vulnerable)) + ) + ) + (when (> (-> self hits-to-go) 0) + (set! (-> self took-hit) #t) + (let ((v0-0 (the-as number (+ (-> self hits-to-go) -1)))) + (set! (-> self hits-to-go) (the-as int v0-0)) + v0-0 + ) + ) + ) ) - (the-as touching-shapes-entry a0-5) - (-> self root-override) - (the-as uint (-> self vulnerable)) - ) - ) - (when (> (-> self hits-to-go) 0) - (set! (-> self took-hit) #t) - (let - ((v0-0 (the-as number (+ (-> self hits-to-go) -1)))) - (set! (-> self hits-to-go) (the-as int v0-0)) - v0-0 - ) ) ) - ) ) ) ) - ) - ) + ) ) - ) ) (defstate robotboss-yellow-dark-bomb-wait (robotboss) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'white-eco-picked-up) - (close-specific-task! - (game-task finalboss-movies) - (task-status unknown) - ) - (entity-birth-no-kill (-> self alts 5)) - (let ((a1-2 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 0) - (set! (-> a1-2 message) 'play-anim) - (let ((t9-2 send-event-function) - (v1-2 (-> self alts 5)) - ) - (t9-2 (if v1-2 - (-> v1-2 extra process) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'white-eco-picked-up) + (close-specific-task! (game-task finalboss-movies) (task-status unknown)) + (entity-birth-no-kill (-> self alts 5)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'play-anim) + (let ((t9-2 send-event-function) + (v1-2 (-> self alts 5)) + ) + (t9-2 + (if v1-2 + (-> v1-2 extra process) + ) + a1-2 ) - a1-2 + ) + ) + (dummy-18 self) + (deactivate self) ) + (else + (robotboss-bomb-handler arg0 arg1 arg2 arg3) + ) ) - ) - (dummy-18 self) - (deactivate self) - ) - (else - (robotboss-bomb-handler arg0 arg1 arg2 arg3) - ) - ) - ) + ) + ) ) - ) :enter (behavior () - (set! (-> self state-time) (-> *display* game-frame-counter)) - (set! (-> self children-spawned) 0) - 0 - (none) - ) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self children-spawned) 0) + 0 + (none) + ) :exit (behavior () - (set! (-> self des-cam-entity) #f) - (let ((a1-0 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-0 from) self) - (set! (-> a1-0 num-params) 0) - (set! (-> a1-0 message) 'beam-off) - (let ((t9-0 send-event-function) - (v1-1 (-> self alts 3)) - ) - (t9-0 (if v1-1 - (-> v1-1 extra process) + (set! (-> self des-cam-entity) #f) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'beam-off) + (let ((t9-0 send-event-function) + (v1-1 (-> self alts 3)) ) - a1-0 - ) - ) - ) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 0) - (set! (-> a1-1 message) 'beam-off) - (let ((t9-1 send-event-function) - (v1-5 (-> self alts 2)) + (t9-0 + (if v1-1 + (-> v1-1 extra process) + ) + a1-0 ) - (t9-1 (if v1-5 - (-> v1-5 extra process) - ) - a1-1 + ) ) - ) - ) - (let ((a1-2 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 0) - (set! (-> a1-2 message) 'beam-off) - (let ((t9-2 send-event-function) - (v1-9 (-> self alts 1)) + (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) 'beam-off) + (let ((t9-1 send-event-function) + (v1-5 (-> self alts 2)) + ) + (t9-1 + (if v1-5 + (-> v1-5 extra process) + ) + a1-1 ) - (t9-2 (if v1-9 - (-> v1-9 extra process) - ) - a1-2 + ) ) - ) - ) - (let ((a1-3 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-3 from) self) - (set! (-> a1-3 num-params) 0) - (set! (-> a1-3 message) 'beam-off) - (let ((t9-3 send-event-function) - (v1-13 (-> self alts 4)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'beam-off) + (let ((t9-2 send-event-function) + (v1-9 (-> self alts 1)) + ) + (t9-2 + (if v1-9 + (-> v1-9 extra process) + ) + a1-2 ) - (t9-3 (if v1-13 - (-> v1-13 extra process) - ) - a1-3 + ) ) - ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'beam-off) + (let ((t9-3 send-event-function) + (v1-13 (-> self alts 4)) + ) + (t9-3 + (if v1-13 + (-> v1-13 extra process) + ) + a1-3 + ) + ) + ) + (send-event (handle->process (-> self white-eco)) 'beam-off) + (none) ) - (send-event (handle->process (-> self white-eco)) 'beam-off) - (none) - ) :trans (behavior () - (robotboss-always-trans (the-as state #f)) - (spool-push - *art-control* - "green-sagecage-outro-beat-boss-a" - 0 - self - (the-as float -1.0) + (robotboss-always-trans (the-as state #f)) + (spool-push *art-control* "green-sagecage-outro-beat-boss-a" 0 self (the-as float -1.0)) + (robotboss-position) + (none) ) - (robotboss-position) - (none) - ) :code (behavior () - (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 param 0) - (the float (+ (-> a0-0 frame-group data 0 length) -1)) - ) - (set! (-> a0-0 param 1) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (while (not (ja-done? 0)) - (suspend) - (ja-eval) - ) - (ja-channel-push! 1 30) - (let ((v1-11 (-> self skel root-channel 0))) - (set! - (-> v1-11 frame-group) - (the-as art-joint-anim (-> self draw art-group data 32)) - ) - ) - (let ((a0-6 (-> self skel root-channel 0))) - (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-6 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) (the float (+ (-> a0-0 frame-group data 0 length) -1))) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) ) - ) - (set! (-> a0-6 param 1) 1.0) - (set! (-> a0-6 frame-num) 0.0) - (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) - (robotboss-darkecobomb - (new 'static 'vector :y 40960.0 :z 81920.0) - (-> self dda yellow-bomb-time) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) ) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM20" - #t - (the-as vector #f) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! (-> v1-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 32))) ) - ) - (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! - ) - ) - ) - (ja-channel-push! 1 30) - (let ((v1-52 (-> self skel root-channel 0))) - (set! - (-> v1-52 frame-group) - (the-as art-joint-anim (-> self draw art-group data 32)) - ) - ) - (let ((a0-16 (-> self skel root-channel 0))) - (set! (-> a0-16 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-16 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-16 param 1) 1.0) - (set! (-> a0-16 frame-num) 0.0) - (joint-control-channel-group! a0-16 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (if (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 2)) - (robotboss-darkecobomb - (new 'static 'vector :y 40960.0 :z -81920.0) - (+ -150.0 (-> self dda yellow-bomb-time)) - ) - ) - (suspend) - (let ((a0-19 (-> self skel root-channel 0))) - (set! - (-> a0-19 param 0) - (the float (+ (-> a0-19 frame-group data 0 length) -1)) - ) - (set! (-> a0-19 param 1) 1.0) - (joint-control-channel-group-eval! - a0-19 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (ja-channel-push! 1 30) - (let ((v1-93 (-> self skel root-channel 0))) - (set! - (-> v1-93 frame-group) - (the-as art-joint-anim (-> self draw art-group data 32)) - ) - ) - (let ((a0-25 (-> self skel root-channel 0))) - (set! (-> a0-25 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-25 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-25 param 1) 1.0) - (set! (-> a0-25 frame-num) 0.0) - (joint-control-channel-group! a0-25 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (if (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 3)) - (robotboss-darkecobomb - (new 'static 'vector :x 81920.0 :y 40960.0) - (+ -300.0 (-> self dda yellow-bomb-time)) - ) - ) - (suspend) - (let ((a0-28 (-> self skel root-channel 0))) - (set! - (-> a0-28 param 0) - (the float (+ (-> a0-28 frame-group data 0 length) -1)) - ) - (set! (-> a0-28 param 1) 1.0) - (joint-control-channel-group-eval! - a0-28 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (ja-channel-push! 1 30) - (let ((v1-134 (-> self skel root-channel 0))) - (set! - (-> v1-134 frame-group) - (the-as art-joint-anim (-> self draw art-group data 32)) - ) - ) - (let ((a0-34 (-> self skel root-channel 0))) - (set! (-> a0-34 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-34 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-34 param 1) 1.0) - (set! (-> a0-34 frame-num) 0.0) - (joint-control-channel-group! a0-34 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 4)) - (robotboss-darkecobomb - (new 'static 'vector :x -81920.0 :y 40960.0) - (+ -450.0 (-> self dda yellow-bomb-time)) - ) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM03" - #t - (the-as vector #f) - ) - (set! (-> self des-cam-entity) "camera-365") - ) - (suspend) - (let ((a0-38 (-> self skel root-channel 0))) - (set! - (-> a0-38 param 0) - (the float (+ (-> a0-38 frame-group data 0 length) -1)) - ) - (set! (-> a0-38 param 1) 1.0) - (joint-control-channel-group-eval! - a0-38 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (while #t - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 30) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-183 (-> self skel root-channel 0))) - (set! - (-> v1-183 frame-group) - (the-as art-joint-anim (-> self draw art-group data 30)) - ) - ) - ) - (let ((a0-48 (-> self skel root-channel 0))) - (set! (-> a0-48 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-6 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) ) - (set! - (-> a0-48 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb (new 'static 'vector :y 40960.0 :z 81920.0) (-> self dda yellow-bomb-time)) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM20" + #t + (the-as vector #f) + ) + ) + (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!) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-52 (-> self skel root-channel 0))) + (set! (-> v1-52 frame-group) (the-as art-joint-anim (-> self draw art-group data 32))) + ) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-16 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-16 param 1) 1.0) + (set! (-> a0-16 frame-num) 0.0) + (joint-control-channel-group! + a0-16 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 2)) + (robotboss-darkecobomb (new 'static 'vector :y 40960.0 :z -81920.0) (+ -150.0 (-> self dda yellow-bomb-time))) + ) + (suspend) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 param 0) (the float (+ (-> a0-19 frame-group data 0 length) -1))) + (set! (-> a0-19 param 1) 1.0) + (joint-control-channel-group-eval! a0-19 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-93 (-> self skel root-channel 0))) + (set! (-> v1-93 frame-group) (the-as art-joint-anim (-> self draw art-group data 32))) + ) + (let ((a0-25 (-> self skel root-channel 0))) + (set! (-> a0-25 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-25 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-25 param 1) 1.0) + (set! (-> a0-25 frame-num) 0.0) + (joint-control-channel-group! + a0-25 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 3)) + (robotboss-darkecobomb (new 'static 'vector :x 81920.0 :y 40960.0) (+ -300.0 (-> self dda yellow-bomb-time))) + ) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! (-> a0-28 param 0) (the float (+ (-> a0-28 frame-group data 0 length) -1))) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! a0-28 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-134 (-> self skel root-channel 0))) + (set! (-> v1-134 frame-group) (the-as art-joint-anim (-> self draw art-group data 32))) + ) + (let ((a0-34 (-> self skel root-channel 0))) + (set! (-> a0-34 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-34 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-34 param 1) 1.0) + (set! (-> a0-34 frame-num) 0.0) + (joint-control-channel-group! + a0-34 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 4)) + (robotboss-darkecobomb (new 'static 'vector :x -81920.0 :y 40960.0) (+ -450.0 (-> self dda yellow-bomb-time))) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + (set! (-> self des-cam-entity) "camera-365") + ) + (suspend) + (let ((a0-38 (-> self skel root-channel 0))) + (set! (-> a0-38 param 0) (the float (+ (-> a0-38 frame-group data 0 length) -1))) + (set! (-> a0-38 param 1) 1.0) + (joint-control-channel-group-eval! a0-38 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) ) - data - 0 - length - ) - -1 - ) - ) + (-> self draw art-group data 30) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-183 (-> self skel root-channel 0))) + (set! (-> v1-183 frame-group) (the-as art-joint-anim (-> self draw art-group data 30))) + ) + ) + (let ((a0-48 (-> self skel root-channel 0))) + (set! (-> a0-48 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-48 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-48 param 1) 1.0) + (set! (-> a0-48 frame-num) 0.0) + (joint-control-channel-group! + a0-48 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-49 (-> self skel root-channel 0))) + (set! (-> a0-49 param 0) (the float (+ (-> a0-49 frame-group data 0 length) -1))) + (set! (-> a0-49 param 1) 1.0) + (joint-control-channel-group-eval! a0-49 (the-as art-joint-anim #f) num-func-seek!) + ) + ) ) - (set! (-> a0-48 param 1) 1.0) - (set! (-> a0-48 frame-num) 0.0) - (joint-control-channel-group! - a0-48 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-49 (-> self skel root-channel 0))) - (set! - (-> a0-49 param 0) - (the float (+ (-> a0-49 frame-group data 0 length) -1)) - ) - (set! (-> a0-49 param 1) 1.0) - (joint-control-channel-group-eval! - a0-49 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -899,426 +703,357 @@ (defstate robotboss-daxter-sacrifice-movie (robotboss) :code (behavior () - (set-blackout-frames #x7530) - (entity-birth-no-kill (-> self alts 5)) - (let ((a1-0 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-0 from) self) - (set! (-> a1-0 num-params) 0) - (set! (-> a1-0 message) 'play-anim) - (let ((t9-2 send-event-function) - (v1-1 (-> self alts 5)) - ) - (t9-2 (if v1-1 - (-> v1-1 extra process) + (set-blackout-frames #x7530) + (entity-birth-no-kill (-> self alts 5)) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'play-anim) + (let ((t9-2 send-event-function) + (v1-1 (-> self alts 5)) ) - a1-0 + (t9-2 + (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) ) - ) - ) - (suspend) - (while (movie?) (suspend) + (while (movie?) + (suspend) + ) + (set-blackout-frames 0) + (go robotboss-yellow-dark-bomb-wait) + (none) ) - (set-blackout-frames 0) - (go robotboss-yellow-dark-bomb-wait) - (none) - ) ) (defstate robotboss-white-eco-movie (robotboss) :enter (behavior () - (logior! (-> self draw status) 2) - (set! (-> self children-spawned) 0) - (set! (-> self state-time) (-> *display* base-frame-counter)) - (ja-post) - (none) - ) + (logior! (-> self draw status) 2) + (set! (-> self children-spawned) 0) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (ja-post) + (none) + ) :exit - (behavior () - (set! (-> self draw status) (logand -3 (-> self draw status))) - (none) - ) + (behavior () (set! (-> self draw status) (logand -3 (-> self draw status))) (none)) :trans (behavior () - (spool-push - *art-control* - "green-sagecage-daxter-sacrifice" - 0 - self - (the-as float -1.0) - ) - (when - (and - (< (-> self children-spawned) 1) - (>= (- (-> *display* base-frame-counter) (-> self state-time)) 285) - ) - (+! (-> self children-spawned) 1) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (set! (-> gp-0 quad) (-> self entity extra trans quad)) - (set! (-> gp-0 y) (+ 81920.0 (-> gp-0 y))) - (let ((s5-0 (get-process *default-dead-pool* light-eco-mother #x4000))) - (set! (-> self white-eco) (ppointer->handle (when s5-0 - (let - ((t9-2 - (method-of-type - light-eco-mother - activate - ) - ) - ) - (t9-2 - (the-as - light-eco-mother - s5-0 - ) - self - 'light-eco-mother - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-0 - light-eco-mother-init-by-other - (-> self entity) - gp-0 - ) - (-> s5-0 ppointer) - ) - ) - ) + (spool-push *art-control* "green-sagecage-daxter-sacrifice" 0 self (the-as float -1.0)) + (when (and (< (-> self children-spawned) 1) (>= (- (-> *display* base-frame-counter) (-> self state-time)) 285)) + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self entity extra trans quad)) + (set! (-> gp-0 y) (+ 81920.0 (-> gp-0 y))) + (let ((s5-0 (get-process *default-dead-pool* light-eco-mother #x4000))) + (set! (-> self white-eco) + (ppointer->handle + (when s5-0 + (let ((t9-2 (method-of-type light-eco-mother activate))) + (t9-2 (the-as light-eco-mother s5-0) self 'light-eco-mother (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 light-eco-mother-init-by-other (-> self entity) gp-0) + (-> s5-0 ppointer) + ) + ) + ) + ) + ) ) - ) + (none) ) - (none) - ) :code (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) 'open) - (set! (-> a1-0 param 0) (the-as uint (-> *part-group-id-table* 674))) - (let ((t9-0 send-event-function) - (v1-4 (-> self alts 3)) - ) - (t9-0 (if v1-4 - (-> v1-4 extra process) + (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) 'open) + (set! (-> a1-0 param 0) (the-as uint (-> *part-group-id-table* 674))) + (let ((t9-0 send-event-function) + (v1-4 (-> self alts 3)) ) - a1-0 - ) - ) - ) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 1) - (set! (-> a1-1 message) 'open) - (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 675))) - (let ((t9-1 send-event-function) - (v1-11 (-> self alts 2)) + (t9-0 + (if v1-4 + (-> v1-4 extra process) + ) + a1-0 ) - (t9-1 (if v1-11 - (-> v1-11 extra process) - ) - a1-1 + ) ) - ) - ) - (let ((a1-2 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 1) - (set! (-> a1-2 message) 'open) - (set! (-> a1-2 param 0) (the-as uint (-> *part-group-id-table* 676))) - (let ((t9-2 send-event-function) - (v1-18 (-> self alts 1)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 675))) + (let ((t9-1 send-event-function) + (v1-11 (-> self alts 2)) + ) + (t9-1 + (if v1-11 + (-> v1-11 extra process) + ) + a1-1 ) - (t9-2 (if v1-18 - (-> v1-18 extra process) - ) - a1-2 + ) ) - ) - ) - (let ((a1-3 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-3 from) self) - (set! (-> a1-3 num-params) 1) - (set! (-> a1-3 message) 'open) - (set! (-> a1-3 param 0) (the-as uint (-> *part-group-id-table* 677))) - (let ((t9-3 send-event-function) - (v1-25 (-> self alts 4)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint (-> *part-group-id-table* 676))) + (let ((t9-2 send-event-function) + (v1-18 (-> self alts 1)) + ) + (t9-2 + (if v1-18 + (-> v1-18 extra process) + ) + a1-2 ) - (t9-3 (if v1-25 - (-> v1-25 extra process) - ) - a1-3 + ) ) - ) - ) - (let ((a1-4 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-4 from) self) - (set! (-> a1-4 num-params) 3) - (set! (-> a1-4 message) 'beam-on) - (set! (-> a1-4 param 0) (the-as uint (-> *part-group-id-table* 666))) - (set! (-> a1-4 param 1) (the-as uint (-> *part-group-id-table* 666))) - (set! (-> a1-4 param 2) (the-as uint (-> self entity extra trans))) - (let ((t9-4 send-event-function) - (v1-37 (-> self alts 3)) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'open) + (set! (-> a1-3 param 0) (the-as uint (-> *part-group-id-table* 677))) + (let ((t9-3 send-event-function) + (v1-25 (-> self alts 4)) + ) + (t9-3 + (if v1-25 + (-> v1-25 extra process) + ) + a1-3 ) - (t9-4 (if v1-37 - (-> v1-37 extra process) - ) - a1-4 + ) ) - ) - ) - (let ((a1-5 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-5 from) self) - (set! (-> a1-5 num-params) 3) - (set! (-> a1-5 message) 'beam-on) - (set! (-> a1-5 param 0) (the-as uint (-> *part-group-id-table* 672))) - (set! (-> a1-5 param 1) (the-as uint (-> *part-group-id-table* 672))) - (set! (-> a1-5 param 2) (the-as uint (-> self entity extra trans))) - (let ((t9-5 send-event-function) - (v1-49 (-> self alts 2)) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 3) + (set! (-> a1-4 message) 'beam-on) + (set! (-> a1-4 param 0) (the-as uint (-> *part-group-id-table* 666))) + (set! (-> a1-4 param 1) (the-as uint (-> *part-group-id-table* 666))) + (set! (-> a1-4 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-4 send-event-function) + (v1-37 (-> self alts 3)) + ) + (t9-4 + (if v1-37 + (-> v1-37 extra process) + ) + a1-4 ) - (t9-5 (if v1-49 - (-> v1-49 extra process) - ) - a1-5 + ) ) - ) - ) - (let ((a1-6 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-6 from) self) - (set! (-> a1-6 num-params) 3) - (set! (-> a1-6 message) 'beam-on) - (set! (-> a1-6 param 0) (the-as uint (-> *part-group-id-table* 668))) - (set! (-> a1-6 param 1) (the-as uint (-> *part-group-id-table* 668))) - (set! (-> a1-6 param 2) (the-as uint (-> self entity extra trans))) - (let ((t9-6 send-event-function) - (v1-61 (-> self alts 1)) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 3) + (set! (-> a1-5 message) 'beam-on) + (set! (-> a1-5 param 0) (the-as uint (-> *part-group-id-table* 672))) + (set! (-> a1-5 param 1) (the-as uint (-> *part-group-id-table* 672))) + (set! (-> a1-5 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-5 send-event-function) + (v1-49 (-> self alts 2)) + ) + (t9-5 + (if v1-49 + (-> v1-49 extra process) + ) + a1-5 ) - (t9-6 (if v1-61 - (-> v1-61 extra process) - ) - a1-6 + ) ) - ) - ) - (let ((a1-7 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-7 from) self) - (set! (-> a1-7 num-params) 3) - (set! (-> a1-7 message) 'beam-on) - (set! (-> a1-7 param 0) (the-as uint (-> *part-group-id-table* 670))) - (set! (-> a1-7 param 1) (the-as uint (-> *part-group-id-table* 670))) - (set! (-> a1-7 param 2) (the-as uint (-> self entity extra trans))) - (let ((t9-7 send-event-function) - (v1-73 (-> self alts 4)) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 3) + (set! (-> a1-6 message) 'beam-on) + (set! (-> a1-6 param 0) (the-as uint (-> *part-group-id-table* 668))) + (set! (-> a1-6 param 1) (the-as uint (-> *part-group-id-table* 668))) + (set! (-> a1-6 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-6 send-event-function) + (v1-61 (-> self alts 1)) + ) + (t9-6 + (if v1-61 + (-> v1-61 extra process) + ) + a1-6 ) - (t9-7 (if v1-73 - (-> v1-73 extra process) - ) - a1-7 + ) ) - ) - ) - (let* ((gp-0 (get-process *default-dead-pool* finalbosscam #x4000)) - (gp-1 (ppointer->handle (when gp-0 - (let - ((t9-9 - (method-of-type finalbosscam activate) - ) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 3) + (set! (-> a1-7 message) 'beam-on) + (set! (-> a1-7 param 0) (the-as uint (-> *part-group-id-table* 670))) + (set! (-> a1-7 param 1) (the-as uint (-> *part-group-id-table* 670))) + (set! (-> a1-7 param 2) (the-as uint (-> self entity extra trans))) + (let ((t9-7 send-event-function) + (v1-73 (-> self alts 4)) + ) + (t9-7 + (if v1-73 + (-> v1-73 extra process) + ) + a1-7 + ) + ) + ) + (let* ((gp-0 (get-process *default-dead-pool* finalbosscam #x4000)) + (gp-1 (ppointer->handle (when gp-0 + (let ((t9-9 (method-of-type finalbosscam activate))) + (t9-9 (the-as finalbosscam gp-0) self 'finalbosscam (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 finalbosscam-init-by-other (-> self entity)) + (-> gp-0 ppointer) ) - (t9-9 - (the-as finalbosscam gp-0) - self - 'finalbosscam - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - gp-0 - finalbosscam-init-by-other - (-> self entity) - ) - (-> gp-0 ppointer) ) ) ) - ) - (send-event (handle->process gp-1) 'play-anim) - (suspend) - (while (movie?) - (suspend) - ) - (let ((a0-18 (handle->process gp-1))) - (if a0-18 - (deactivate a0-18) + (send-event (handle->process gp-1) 'play-anim) + (suspend) + (while (movie?) + (suspend) + ) + (let ((a0-18 (handle->process gp-1))) + (if a0-18 + (deactivate a0-18) + ) + ) ) - ) - ) - (case (get-task-status (game-task finalboss-movies)) - (((task-status unknown)) - (go robotboss-daxter-sacrifice-movie) + (case (get-task-status (game-task finalboss-movies)) + (((task-status unknown)) + (go robotboss-daxter-sacrifice-movie) + ) + (else + (go robotboss-yellow-dark-bomb-wait) + ) ) - (else - (go robotboss-yellow-dark-bomb-wait) - ) + (none) ) - (none) - ) ) (defstate robotboss-yellow-dark-bomb (robotboss) :enter (behavior () - (set! (-> self old-loc quad) (-> self desired-loc quad)) - (set-vector! (-> self desired-loc) 16384.0 -81920.0 716800.0 1.0) - (set! (-> self loc-t) 0.0) - (set! (-> self loc-t-start) (-> *display* game-frame-counter)) - (set! (-> self loc-t-duration) 1200) - (set! (-> self desired-pool-y) -16384.0) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM01" - #t - (the-as vector #f) + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 16384.0 -81920.0 716800.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 1200) + (set! (-> self desired-pool-y) -16384.0) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM01" + #t + (the-as vector #f) + ) + (none) ) - (none) - ) :trans (behavior () - (robotboss-always-trans (the-as state #f)) - (spool-push - *art-control* - "finalbosscam-white-eco" - 0 - self - (the-as float -1.0) + (robotboss-always-trans (the-as state #f)) + (spool-push *art-control* "finalbosscam-white-eco" 0 self (the-as float -1.0)) + (if (>= (-> self loc-t) 1.0) + (go robotboss-white-eco-movie) + ) + (robotboss-position) + (none) ) - (if (>= (-> self loc-t) 1.0) - (go robotboss-white-eco-movie) - ) - (robotboss-position) - (none) - ) :code (behavior () - (ja-channel-push! 1 60) - (let ((v1-2 (-> self skel root-channel 0))) - (set! - (-> v1-2 frame-group) - (the-as art-joint-anim (-> self draw art-group data 31)) - ) - ) - (let ((a0-4 (-> self skel root-channel 0))) - (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-4 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-4 param 1) 1.0) - (set! (-> a0-4 frame-num) 0.0) - (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-5 (-> self skel root-channel 0))) - (set! - (-> a0-5 param 0) - (the float (+ (-> a0-5 frame-group data 0 length) -1)) - ) - (set! (-> a0-5 param 1) 1.0) - (joint-control-channel-group-eval! - a0-5 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 30) - ) - ) (ja-channel-push! 1 60) - (let ((v1-41 (-> self skel root-channel 0))) - (set! - (-> v1-41 frame-group) - (the-as art-joint-anim (-> self draw art-group data 30)) + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 31))) ) - ) - ) - (while #t - (let ((a0-15 (-> self skel root-channel 0))) - (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-4 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) ) - (set! - (-> a0-15 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-15 param 1) 1.0) - (set! (-> a0-15 frame-num) 0.0) - (joint-control-channel-group! - a0-15 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) (until (ja-done? 0) - (suspend) - (let ((a0-16 (-> self skel root-channel 0))) - (set! - (-> a0-16 param 0) - (the float (+ (-> a0-16 frame-group data 0 length) -1)) - ) - (set! (-> a0-16 param 1) 1.0) - (joint-control-channel-group-eval! - a0-16 - (the-as art-joint-anim #f) - num-func-seek! - ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1))) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) ) - ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 30) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! (-> v1-41 frame-group) (the-as art-joint-anim (-> self draw art-group data 30))) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-15 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 param 0) (the float (+ (-> a0-16 frame-group data 0 length) -1))) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! a0-16 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -1326,759 +1061,591 @@ (defbehavior robotboss-yellowshot robotboss () (+! (-> self children-spawned) 1) (let ((gp-0 (new 'stack-no-clear 'vector))) - (let ((s5-0 (new 'stack-no-clear 'vector))) - (vector<-cspace! gp-0 (-> self node-list data 21)) - (set! (-> gp-0 y) 1972633.6) - (if *target* - (set! (-> s5-0 quad) (-> (target-pos 0) quad)) - (set! (-> s5-0 quad) (-> self entity extra trans quad)) - ) - (set! (-> s5-0 y) (+ 8192.0 (-> self entity extra trans y))) - (vector-! s5-0 s5-0 gp-0) - (vector-normalize! s5-0 (the-as float 819200.0)) - (vector+! s5-0 s5-0 gp-0) - (let ((s4-1 (get-process *default-dead-pool* yellowshot #x4000))) - (when s4-1 - (let ((t9-4 (method-of-type yellowshot activate))) - (t9-4 - (the-as yellowshot s4-1) - self - 'yellowshot - (the-as pointer #x70004000) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 21)) + (set! (-> gp-0 y) 1972633.6) + (if *target* + (set! (-> s5-0 quad) (-> (target-pos 0) quad)) + (set! (-> s5-0 quad) (-> self entity extra trans quad)) + ) + (set! (-> s5-0 y) (+ 8192.0 (-> self entity extra trans y))) + (vector-! s5-0 s5-0 gp-0) + (vector-normalize! s5-0 (the-as float 819200.0)) + (vector+! s5-0 s5-0 gp-0) + (let ((s4-1 (get-process *default-dead-pool* yellowshot #x4000))) + (when s4-1 + (let ((t9-4 (method-of-type yellowshot activate))) + (t9-4 (the-as yellowshot s4-1) self 'yellowshot (the-as pointer #x70004000)) + ) + (run-now-in-process s4-1 yellowshot-init-by-other gp-0 s5-0 0.0 750) + (-> s4-1 ppointer) + ) + ) + ) + (send-event self 'flash 255.0) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-8 (method-of-type part-tracker activate))) + (t9-8 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 part-tracker-init (-> *part-group-id-table* 642) 300 #f #f #f gp-0) + (-> s5-1 ppointer) ) - ) - (run-now-in-process s4-1 yellowshot-init-by-other gp-0 s5-0 0.0 750) - (-> s4-1 ppointer) ) - ) ) - (send-event self 'flash 255.0) - (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) - (when s5-1 - (let ((t9-8 (method-of-type part-tracker activate))) - (t9-8 - (the-as part-tracker s5-1) - *entity-pool* - 'part-tracker - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-1 - part-tracker-init - (-> *part-group-id-table* 642) - 300 - #f - #f - #f - gp-0 - ) - (-> s5-1 ppointer) - ) - ) - ) - (sound-play-by-name - (static-sound-name "bfg-fire") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) + (sound-play-by-name (static-sound-name "bfg-fire") (new-sound-id) 1024 0 0 1 #t) (none) ) (defbehavior robotboss-is-yellow-hit robotboss () - (or (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) + (or + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) (-> self draw art-group data 28) ) - (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 35) ) - (-> self draw art-group data 35) ) - ) ) (defbehavior robotboss-time-to-shoot-yellow robotboss () - (>= - (- (-> *display* game-frame-counter) (-> self state-time)) - (+ (-> self till-next-shot) 750) - ) + (>= (- (-> *display* game-frame-counter) (-> self state-time)) (+ (-> self till-next-shot) 750)) ) (defstate robotboss-yellow-wait (robotboss) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('hit-jak) - (let* ((v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-3 (the-as number (logior #x3f800000 v1-2))) - (f0-2 (+ -1.0 (the-as float v1-3))) + (case arg2 + (('hit-jak) + (let* ((v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-3 (the-as number (logior #x3f800000 v1-2))) + (f0-2 (+ -1.0 (the-as float v1-3))) + ) + (cond + ((< 0.75 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) ) - (cond - ((< 0.75 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM10" - #t - (the-as vector #f) - ) - ) - ((< 0.5 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM12" - #t - (the-as vector #f) - ) - ) - ((< 0.25 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM15" - #t - (the-as vector #f) - ) - ) - (else - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM03" - #t - (the-as vector #f) - ) - ) - ) - ) - ) - (('missed-jak) - (let* ((v1-13 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-14 (the-as number (logior #x3f800000 v1-13))) - (f0-5 (+ -1.0 (the-as float v1-14))) ) - (if (< 0.5 f0-5) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM14" - #t - (the-as vector #f) - ) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM02" - #t - (the-as vector #f) - ) + ((< 0.5 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM12" + #t + (the-as vector #f) + ) + ) + ((< 0.25 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM15" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + ) + ) ) + (('missed-jak) + (let* ((v1-13 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-14 (the-as number (logior #x3f800000 v1-13))) + (f0-5 (+ -1.0 (the-as float v1-14))) + ) + (if (< 0.5 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM14" + #t + (the-as vector #f) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + (else + (robotboss-handler arg0 arg1 arg2 arg3) + ) ) - ) - (else - (robotboss-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (set! (-> self hits-to-go) -1) - (set! (-> self state-time) (-> *display* game-frame-counter)) - (set! (-> self till-next-shot) 300) - (set! (-> self use-interesting) #t) - (set! (-> self keep-charging) #f) - (none) - ) + (set! (-> self hits-to-go) -1) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self till-next-shot) 300) + (set! (-> self use-interesting) #t) + (set! (-> self keep-charging) #f) + (none) + ) :exit (behavior () - (let ((a0-1 (handle->process (-> self shot-attractor)))) - (if a0-1 - (deactivate a0-1) - ) - ) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 1) - (set! (-> a1-1 message) 'open) - (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 677))) - (let ((t9-1 send-event-function) - (v1-10 (-> self alts 4)) + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) ) - (t9-1 (if v1-10 - (-> v1-10 extra process) - ) - a1-1 ) - ) - ) - (let ((a1-2 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 1) - (set! (-> a1-2 message) 'open) - (set! (-> a1-2 param 0) (the-as uint 0.4)) - (let ((t9-2 send-event-function) - (v1-17 (-> self alts 0)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 677))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 4)) + ) + (t9-1 + (if v1-10 + (-> v1-10 extra process) + ) + a1-1 ) - (t9-2 (if v1-17 - (-> v1-17 extra process) - ) - a1-2 + ) ) - ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.4)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 + (if v1-17 + (-> v1-17 extra process) + ) + a1-2 + ) + ) + ) + (set! (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 3 collide-with) + (the-as uint 0) + ) + (set! (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 3 prim-core collide-as) + (the-as uint 0) + ) + (set! (-> self use-interesting) #f) + (send-event *camera* 'point-of-interest #f) + (if (nonzero? (-> self yellow-gun)) + (set-mode! (-> self yellow-gun) (joint-mod-handler-mode flex-blend)) + ) + (robotboss-yellow-eco-off) + (robotboss-cut-cam-exit) + (stop! (-> self looping-sound 3)) + (none) ) - (set! - (-> - (the-as collide-shape-prim-group (-> self root-override root-prim)) - prims - 3 - collide-with - ) - (the-as uint 0) - ) - (set! - (-> - (the-as collide-shape-prim-group (-> self root-override root-prim)) - prims - 3 - prim-core - collide-as - ) - (the-as uint 0) - ) - (set! (-> self use-interesting) #f) - (send-event *camera* 'point-of-interest #f) - (if (nonzero? (-> self yellow-gun)) - (set-mode! (-> self yellow-gun) (joint-mod-handler-mode flex-blend)) - ) - (robotboss-yellow-eco-off) - (robotboss-cut-cam-exit) - (stop! (-> self looping-sound 3)) - (none) - ) :trans (behavior () - (robotboss-always-trans robotboss-yellow-dark-bomb) - (robotboss-shooting-trans 21) - (cond - ((zero? (-> self hits-to-go)) - (set! (-> self keep-charging) #f) - (stop! (-> self looping-sound 3)) - (robotboss-yellow-eco-off) - (set! (-> self took-hit) #f) - (+! (-> self hits-to-go) -1) - (ja-channel-push! 1 30) - (let ((v1-8 (-> self skel root-channel 0))) - (set! - (-> v1-8 frame-group) - (the-as art-joint-anim (-> self draw art-group data 35)) - ) - ) - (set! (-> self yellow-smoke) #t) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (vector<-cspace! gp-0 (-> self node-list data 27)) - (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) - (when s5-0 - (let ((t9-7 (method-of-type part-tracker activate))) - (t9-7 - (the-as part-tracker s5-0) - *entity-pool* - 'part-tracker - (the-as pointer #x70004000) - ) + (robotboss-always-trans robotboss-yellow-dark-bomb) + (robotboss-shooting-trans 21) + (cond + ((zero? (-> self hits-to-go)) + (set! (-> self keep-charging) #f) + (stop! (-> self looping-sound 3)) + (robotboss-yellow-eco-off) + (set! (-> self took-hit) #f) + (+! (-> self hits-to-go) -1) + (ja-channel-push! 1 30) + (let ((v1-8 (-> self skel root-channel 0))) + (set! (-> v1-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 35))) ) - (run-now-in-process - s5-0 - part-tracker-init - (-> *part-group-id-table* 653) - 300 - #f - #f - #f - gp-0 - ) - (-> s5-0 ppointer) - ) - ) - ) - (let* ((s5-1 (get-process *default-dead-pool* manipy #x4000)) - (gp-1 (when s5-1 - (let ((t9-10 (method-of-type manipy activate))) - (t9-10 - (the-as manipy s5-1) - self - 'manipy - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-1 - manipy-init - (-> self root-override trans) - (-> self entity) - *robotboss-yelloweco-sg* - #f - ) - (-> s5-1 ppointer) - ) + (set! (-> self yellow-smoke) #t) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 27)) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 (the-as part-tracker s5-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 part-tracker-init (-> *part-group-id-table* 653) 300 #f #f #f gp-0) + (-> s5-0 ppointer) ) + ) + ) + (let* ((s5-1 (get-process *default-dead-pool* manipy #x4000)) + (gp-1 (when s5-1 + (let ((t9-10 (method-of-type manipy activate))) + (t9-10 (the-as manipy s5-1) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-1 + manipy-init + (-> self root-override trans) + (-> self entity) + *robotboss-yelloweco-sg* + #f + ) + (-> s5-1 ppointer) + ) + ) + ) + (send-event (ppointer->process (-> self parent)) 'flash 255.0) + (send-event (ppointer->process gp-1) 'anim-mode 'play1) + (send-event (ppointer->process gp-1) 'rot-quat (-> self root-override quat)) + (send-event (ppointer->process gp-1) 'art-joint-anim "robotboss-yelloweco-yellow-last-hit") + ) + ) + ((and (> (-> self hits-to-go) 0) (-> self took-hit)) + (if (not + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM17" + #t + (the-as vector #f) + ) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM06" + #t + (the-as vector #f) ) - (send-event (ppointer->process (-> self parent)) 'flash 255.0) - (send-event (ppointer->process gp-1) 'anim-mode 'play1) - (send-event - (ppointer->process gp-1) - 'rot-quat - (-> self root-override quat) - ) - (send-event - (ppointer->process gp-1) - 'art-joint-anim - "robotboss-yelloweco-yellow-last-hit" + ) + (set! (-> self took-hit) #f) + (ja-channel-push! 1 30) + (let ((v1-54 (-> self skel root-channel 0))) + (set! (-> v1-54 frame-group) (the-as art-joint-anim (-> self draw art-group data 28))) + ) ) ) - ) - ((and (> (-> self hits-to-go) 0) (-> self took-hit)) - (if - (not - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM17" - #t - (the-as vector #f) + (robotboss-position) + (robotboss-cut-cam (the-as float 5.0) (the-as float 50.0) (the-as int (-> self draw art-group data 29))) + (when (and + (-> self keep-charging) + (>= (- (-> *display* game-frame-counter) (-> self state-time)) (-> self till-next-shot)) + ) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (update! (-> self looping-sound 3)) + (vector<-cspace! gp-2 (-> self node-list data 21)) + (spawn (-> self particle 6) gp-2) ) - ) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM06" - #t - (the-as vector #f) - ) ) - (set! (-> self took-hit) #f) - (ja-channel-push! 1 30) - (let ((v1-54 (-> self skel root-channel 0))) - (set! - (-> v1-54 frame-group) - (the-as art-joint-anim (-> self draw art-group data 28)) - ) - ) - ) + (none) ) - (robotboss-position) - (robotboss-cut-cam - (the-as float 5.0) - (the-as float 50.0) - (the-as int (-> self draw art-group data 29)) - ) - (when - (and - (-> self keep-charging) - (>= - (- (-> *display* game-frame-counter) (-> self state-time)) - (-> self till-next-shot) - ) - ) - (let ((gp-2 (new 'stack-no-clear 'vector))) - (update! (-> self looping-sound 3)) - (vector<-cspace! gp-2 (-> self node-list data 21)) - (spawn (-> self particle 6) gp-2) - ) - ) - (none) - ) :code (behavior () - (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 param 0) - (the float (+ (-> a0-0 frame-group data 0 length) -1)) - ) - (set! (-> a0-0 param 1) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (while (not (ja-done? 0)) - (suspend) - (ja-eval) - ) - (robotboss-setup-for-hits 8 (-> self dda yellow-gun-hits)) - (if (nonzero? (-> self yellow-gun)) - (set-mode! (-> self yellow-gun) (joint-mod-handler-mode look-at)) - ) - (while #t - (when (not (robotboss-time-to-shoot-yellow)) - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 26) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-23 (-> self skel root-channel 0))) - (set! - (-> v1-23 frame-group) - (the-as art-joint-anim (-> self draw art-group data 26)) - ) - ) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) (the float (+ (-> a0-0 frame-group data 0 length) -1))) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) ) - (when - (>= - (- (-> *display* game-frame-counter) (-> self state-time)) - (-> self till-next-shot) - ) - (let ((v1-30 (-> self skel root-channel 0))) - (set! (-> v1-30 num-func) num-func-identity) - (set! (-> v1-30 frame-num) 15.0) - ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) ) - (while - (not - (or - (>= - (- (-> *display* game-frame-counter) (-> self state-time)) - (-> self till-next-shot) - ) - (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 35) - ) + (robotboss-setup-for-hits 8 (-> self dda yellow-gun-hits)) + (if (nonzero? (-> self yellow-gun)) + (set-mode! (-> self yellow-gun) (joint-mod-handler-mode look-at)) ) - ) - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 26) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-40 (-> self skel root-channel 0))) - (set! - (-> v1-40 frame-group) - (the-as art-joint-anim (-> self draw art-group data 26)) - ) - ) - ) - (let ((a0-24 (-> self skel root-channel 0))) - (set! (-> a0-24 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-24 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) + (while #t + (when (not (robotboss-time-to-shoot-yellow)) + (when (not (= (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-24 param 1) 1.0) - (set! (-> a0-24 frame-num) 0.0) - (joint-control-channel-group! - a0-24 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (if (robotboss-is-yellow-hit) - (goto cfg-36) - ) - (suspend) - (let ((a0-25 (-> self skel root-channel 0))) - (set! - (-> a0-25 param 0) - (the float (+ (-> a0-25 frame-group data 0 length) -1)) - ) - (set! (-> a0-25 param 1) 1.0) - (joint-control-channel-group-eval! - a0-25 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - ) - (label cfg-36) - (when (not (robotboss-is-yellow-hit)) - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 26) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-93 (-> self skel root-channel 0))) - (set! - (-> v1-93 frame-group) - (the-as art-joint-anim (-> self draw art-group data 26)) - ) - ) - ) - (let ((a0-41 (-> self skel root-channel 0))) - (set! (-> a0-41 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-41 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-41 param 1) 1.0) - (set! (-> a0-41 frame-num) 0.0) - (joint-control-channel-group! - a0-41 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (if (robotboss-is-yellow-hit) - (goto cfg-55) - ) - (if (< 15.0 (ja-aframe-num 0)) - (set! (-> self keep-charging) #t) - ) - (suspend) - (let ((a0-43 (-> self skel root-channel 0))) - (set! - (-> a0-43 param 0) - (the float (+ (-> a0-43 frame-group data 0 length) -1)) - ) - (set! (-> a0-43 param 1) 1.0) - (joint-control-channel-group-eval! - a0-43 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - ) - ) - (label cfg-55) - (when (and (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 35) - ) - ) - (or - (robotboss-time-to-shoot-yellow) - (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 28) - ) - ) + (-> self draw art-group data 26) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-23 (-> self skel root-channel 0))) + (set! (-> v1-23 frame-group) (the-as art-joint-anim (-> self draw art-group data 26))) ) - ) - (set! (-> self state-time) (-> *display* game-frame-counter)) - (let* ((f30-1 (-> self dda yellow-shot-time-min)) - (f28-0 (-> self dda yellow-shot-time-rnd)) - (v1-147 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-148 (the-as number (logior #x3f800000 v1-147))) + ) + (when (>= (- (-> *display* game-frame-counter) (-> self state-time)) (-> self till-next-shot)) + (let ((v1-30 (-> self skel root-channel 0))) + (set! (-> v1-30 num-func) num-func-identity) + (set! (-> v1-30 frame-num) 15.0) ) - (set! - (-> self till-next-shot) - (the - int - (+ f30-1 (the float (the int (* f28-0 (+ -1.0 (the-as float v1-148)))))) - ) - ) - ) - (stop! (-> self looping-sound 3)) - (robotboss-yellowshot) - (robotboss-yellow-eco-on) - (let* ((v1-154 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-155 (the-as number (logior #x3f800000 v1-154))) - (f0-29 (+ -1.0 (the-as float v1-155))) - ) - (cond - ((< 0.8333333 f0-29) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM04" - #t - (the-as vector #f) - ) - ) - ((< 0.6666667 f0-29) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM09" - #t - (the-as vector #f) - ) - ) - ((< 0.5 f0-29) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM08" - #t - (the-as vector #f) - ) - ) - ((< 0.33333334 f0-29) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM10" - #t - (the-as vector #f) - ) - ) - ((< 0.16666667 f0-29) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM03" - #t - (the-as vector #f) - ) - ) - (else - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM02" - #t - (the-as vector #f) - ) - ) - ) - ) - (ja-channel-push! 1 15) - (let ((v1-176 (-> self skel root-channel 0))) - (set! - (-> v1-176 frame-group) - (the-as art-joint-anim (-> self draw art-group data 27)) - ) - ) - ) - (let ((a0-70 (-> self skel root-channel 0))) - (set! (-> a0-70 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-70 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + ) + (while (not (or + (>= (- (-> *display* game-frame-counter) (-> self state-time)) (-> self till-next-shot)) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 35) ) - data - 0 - length + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 26) + ) ) - -1 + (ja-channel-push! 1 60) + (let ((v1-40 (-> self skel root-channel 0))) + (set! (-> v1-40 frame-group) (the-as art-joint-anim (-> self draw art-group data 26))) + ) + ) + (let ((a0-24 (-> self skel root-channel 0))) + (set! (-> a0-24 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) ) - ) - ) - (set! (-> a0-70 param 1) 1.0) - (set! (-> a0-70 frame-num) 0.0) - (joint-control-channel-group! - a0-70 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-71 (-> self skel root-channel 0))) - (set! - (-> a0-71 param 0) - (the float (+ (-> a0-71 frame-group data 0 length) -1)) - ) - (set! (-> a0-71 param 1) 1.0) - (joint-control-channel-group-eval! - a0-71 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (when (= (if (> (-> self skel active-channels) 0) + (set! (-> a0-24 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-24 param 1) 1.0) + (set! (-> a0-24 frame-num) 0.0) + (joint-control-channel-group! + a0-24 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (robotboss-is-yellow-hit) + (goto cfg-36) + ) + (suspend) + (let ((a0-25 (-> self skel root-channel 0))) + (set! (-> a0-25 param 0) (the float (+ (-> a0-25 frame-group data 0 length) -1))) + (set! (-> a0-25 param 1) 1.0) + (joint-control-channel-group-eval! a0-25 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (label cfg-36) + (when (not (robotboss-is-yellow-hit)) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 26) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-93 (-> self skel root-channel 0))) + (set! (-> v1-93 frame-group) (the-as art-joint-anim (-> self draw art-group data 26))) + ) + ) + (let ((a0-41 (-> self skel root-channel 0))) + (set! (-> a0-41 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-41 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-41 param 1) 1.0) + (set! (-> a0-41 frame-num) 0.0) + (joint-control-channel-group! + a0-41 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (robotboss-is-yellow-hit) + (goto cfg-55) + ) + (if (< 15.0 (ja-aframe-num 0)) + (set! (-> self keep-charging) #t) + ) + (suspend) + (let ((a0-43 (-> self skel root-channel 0))) + (set! (-> a0-43 param 0) (the float (+ (-> a0-43 frame-group data 0 length) -1))) + (set! (-> a0-43 param 1) 1.0) + (joint-control-channel-group-eval! a0-43 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (label cfg-55) + (when (and + (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 35) + ) + ) + (or (robotboss-time-to-shoot-yellow) (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 28) + ) + ) + ) + ) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (let* ((f30-1 (-> self dda yellow-shot-time-min)) + (f28-0 (-> self dda yellow-shot-time-rnd)) + (v1-147 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-148 (the-as number (logior #x3f800000 v1-147))) + ) + (set! (-> self till-next-shot) + (the int (+ f30-1 (the float (the int (* f28-0 (+ -1.0 (the-as float v1-148))))))) + ) + ) + (stop! (-> self looping-sound 3)) + (robotboss-yellowshot) + (robotboss-yellow-eco-on) + (let* ((v1-154 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-155 (the-as number (logior #x3f800000 v1-154))) + (f0-29 (+ -1.0 (the-as float v1-155))) + ) + (cond + ((< 0.8333333 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM04" + #t + (the-as vector #f) + ) + ) + ((< 0.6666667 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM09" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM08" + #t + (the-as vector #f) + ) + ) + ((< 0.33333334 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.16666667 f0-29) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + (ja-channel-push! 1 15) + (let ((v1-176 (-> self skel root-channel 0))) + (set! (-> v1-176 frame-group) (the-as art-joint-anim (-> self draw art-group data 27))) + ) + ) + (let ((a0-70 (-> self skel root-channel 0))) + (set! (-> a0-70 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-70 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-70 param 1) 1.0) + (set! (-> a0-70 frame-num) 0.0) + (joint-control-channel-group! + a0-70 + (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) ) - (-> self draw art-group data 35) - ) - (let ((a0-77 (-> self skel root-channel 0))) - (set! - (-> a0-77 frame-group) - (the-as art-joint-anim (-> self draw art-group data 29)) - ) - (set! - (-> a0-77 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 29)) - data - 0 - length + num-func-seek! ) - -1 - ) ) - ) - (set! (-> a0-77 param 1) 1.0) - (set! (-> a0-77 frame-num) 0.0) - (joint-control-channel-group! - a0-77 - (the-as art-joint-anim (-> self draw art-group data 29)) - num-func-seek! - ) + (until (ja-done? 0) + (suspend) + (let ((a0-71 (-> self skel root-channel 0))) + (set! (-> a0-71 param 0) (the float (+ (-> a0-71 frame-group data 0 length) -1))) + (set! (-> a0-71 param 1) 1.0) + (joint-control-channel-group-eval! a0-71 (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 35) + ) + (let ((a0-77 (-> self skel root-channel 0))) + (set! (-> a0-77 frame-group) (the-as art-joint-anim (-> self draw art-group data 29))) + (set! (-> a0-77 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 29)) data 0 length) -1)) + ) + (set! (-> a0-77 param 1) 1.0) + (set! (-> a0-77 frame-num) 0.0) + (joint-control-channel-group! a0-77 (the-as art-joint-anim (-> self draw art-group data 29)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-78 (-> self skel root-channel 0))) + (set! (-> a0-78 param 0) (the float (+ (-> a0-78 frame-group data 0 length) -1))) + (set! (-> a0-78 param 1) 1.0) + (joint-control-channel-group-eval! a0-78 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go robotboss-yellow-dark-bomb) + ) ) - (until (ja-done? 0) - (suspend) - (let ((a0-78 (-> self skel root-channel 0))) - (set! - (-> a0-78 param 0) - (the float (+ (-> a0-78 frame-group data 0 length) -1)) - ) - (set! (-> a0-78 param 1) 1.0) - (joint-control-channel-group-eval! - a0-78 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (go robotboss-yellow-dark-bomb) - ) + (none) ) - (none) - ) :post (behavior () - (when *target* - (if (nonzero? (-> self yellow-gun)) - (set-target! (-> self yellow-gun) (target-pos 5)) - ) + (when *target* + (if (nonzero? (-> self yellow-gun)) + (set-target! (-> self yellow-gun) (target-pos 5)) + ) + ) + (transform-post) + (none) ) - (transform-post) - (none) - ) ) (defstate robotboss-yellow (robotboss) @@ -2086,177 +1653,136 @@ robotboss-handler :enter (behavior () - (set! (-> self old-loc quad) (-> self desired-loc quad)) - (set-vector! (-> self desired-loc) 13653.333 77824.0 491520.0 1.0) - (set! (-> self loc-t) 0.0) - (set! (-> self loc-t-start) (-> *display* game-frame-counter)) - (set! (-> self loc-t-duration) 900) - (set! (-> self desired-pool-y) -18432.0) - (none) - ) + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 13653.333 77824.0 491520.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -18432.0) + (none) + ) :trans (behavior () - (robotboss-always-trans robotboss-yellow-wait) - (if (>= (-> self loc-t) 1.0) - (go robotboss-yellow-wait) + (robotboss-always-trans robotboss-yellow-wait) + (if (>= (-> self loc-t) 1.0) + (go robotboss-yellow-wait) + ) + (robotboss-position) + (none) ) - (robotboss-position) - (none) - ) :code (behavior () - (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 param 0) - (the float (+ (-> a0-0 frame-group data 0 length) -1)) - ) - (set! (-> a0-0 param 1) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (while (not (ja-done? 0)) - (suspend) - (ja-eval) - ) - (ja-channel-push! 1 60) - (let ((v1-11 (-> self skel root-channel 0))) - (set! - (-> v1-11 frame-group) - (the-as art-joint-anim (-> self draw art-group data 25)) - ) - ) - (let ((a0-6 (-> self skel root-channel 0))) - (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-6 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) (the float (+ (-> a0-0 frame-group data 0 length) -1))) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! (-> v1-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 25))) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-6 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (while #t + (cond + ((and *target* (< (+ 81920.0 (-> self entity extra trans y)) (-> (target-pos 0) y))) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 23) + ) ) - -1 - ) - ) - ) - (set! (-> a0-6 param 1) 1.0) - (set! (-> a0-6 frame-num) 0.0) - (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-7 (-> self skel root-channel 0))) - (set! - (-> a0-7 param 0) - (the float (+ (-> a0-7 frame-group data 0 length) -1)) - ) - (set! (-> a0-7 param 1) 1.0) - (joint-control-channel-group-eval! - a0-7 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (while #t - (cond - ((and - *target* - (< (+ 81920.0 (-> self entity extra trans y)) (-> (target-pos 0) y)) - ) - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 23) - ) + (ja-channel-push! 1 240) + (let ((v1-55 (-> self skel root-channel 0))) + (set! (-> v1-55 frame-group) (the-as art-joint-anim (-> self draw art-group data 23))) ) - (ja-channel-push! 1 240) - (let ((v1-55 (-> self skel root-channel 0))) - (set! - (-> v1-55 frame-group) - (the-as art-joint-anim (-> self draw art-group data 23)) + ) + ) + ((not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 21) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-64 (-> self skel root-channel 0))) + (set! (-> v1-64 frame-group) (the-as art-joint-anim (-> self draw art-group data 21))) + ) ) ) - ) - ) - ((not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 21) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-64 (-> self skel root-channel 0))) - (set! - (-> v1-64 frame-group) - (the-as art-joint-anim (-> self draw art-group data 21)) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-27 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-27 param 1) 1.0) + (set! (-> a0-27 frame-num) 0.0) + (joint-control-channel-group! + a0-27 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! (-> a0-28 param 0) (the float (+ (-> a0-28 frame-group data 0 length) -1))) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! a0-28 (the-as art-joint-anim #f) num-func-seek!) + ) ) - ) ) - ) - (let ((a0-27 (-> self skel root-channel 0))) - (set! (-> a0-27 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-27 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-27 param 1) 1.0) - (set! (-> a0-27 frame-num) 0.0) - (joint-control-channel-group! - a0-27 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-28 (-> self skel root-channel 0))) - (set! - (-> a0-28 param 0) - (the float (+ (-> a0-28 frame-group data 0 length) -1)) - ) - (set! (-> a0-28 param 1) 1.0) - (joint-control-channel-group-eval! - a0-28 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -2266,173 +1792,131 @@ robotboss-bomb-handler :enter (behavior () - (set! (-> self children-spawned) 0) - (logior! (-> self alts 11 extra perm status) (entity-perm-status bit-3)) - (none) - ) + (set! (-> self children-spawned) 0) + (logior! (-> self alts 11 extra perm status) (entity-perm-status bit-3)) + (none) + ) :exit (behavior () - (set! (-> self ignore-camera) #f) - (set! (-> self des-cam-entity) #f) - (logclear! (-> self alts 11 extra perm status) (entity-perm-status bit-3)) - (none) - ) + (set! (-> self ignore-camera) #f) + (set! (-> self des-cam-entity) #f) + (logclear! (-> self alts 11 extra perm status) (entity-perm-status bit-3)) + (none) + ) :trans (behavior () - (robotboss-always-trans robotboss-yellow) - (if - (and - (< (-> self children-spawned) 0) - (or - (not *target*) - (!= (-> *target* control unknown-surface00 name) 'launch-jump) - ) - ) - (go robotboss-yellow) + (robotboss-always-trans robotboss-yellow) + (if (and + (< (-> self children-spawned) 0) + (or (not *target*) (!= (-> *target* control unknown-surface00 name) 'launch-jump)) + ) + (go robotboss-yellow) + ) + (robotboss-position) + (none) ) - (robotboss-position) - (none) - ) :code (behavior () - (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 param 0) - (the float (+ (-> a0-0 frame-group data 0 length) -1)) - ) - (set! (-> a0-0 param 1) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (while (not (ja-done? 0)) - (suspend) - (ja-eval) - ) - (ja-channel-push! 1 30) - (let ((v1-11 (-> self skel root-channel 0))) - (set! - (-> v1-11 frame-group) - (the-as art-joint-anim (-> self draw art-group data 24)) - ) - ) - (let ((a0-6 (-> self skel root-channel 0))) - (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-6 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) (the float (+ (-> a0-0 frame-group data 0 length) -1))) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) ) - ) - (set! (-> a0-6 param 1) 1.0) - (set! (-> a0-6 frame-num) 0.0) - (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) - (robotboss-darkecobomb - (new 'static 'vector :y 32768.0) - (-> self dda red-bomb-time) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) ) - (set! (-> self des-cam-entity) "camera-365") - ) - (suspend) - (let ((a0-9 (-> self skel root-channel 0))) - (set! - (-> a0-9 param 0) - (the float (+ (-> a0-9 frame-group data 0 length) -1)) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! (-> v1-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 24))) ) - (set! (-> a0-9 param 1) 1.0) - (joint-control-channel-group-eval! - a0-9 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (while #t - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 21) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-57 (-> self skel root-channel 0))) - (set! - (-> v1-57 frame-group) - (the-as art-joint-anim (-> self draw art-group data 21)) - ) - ) - ) - (let ((a0-19 (-> self skel root-channel 0))) - (set! (-> a0-19 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-6 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) ) - (set! - (-> a0-19 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb (new 'static 'vector :y 32768.0) (-> self dda red-bomb-time)) + (set! (-> self des-cam-entity) "camera-365") + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1))) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) ) - data - 0 - length - ) - -1 - ) - ) + (-> self draw art-group data 21) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-57 (-> self skel root-channel 0))) + (set! (-> v1-57 frame-group) (the-as art-joint-anim (-> self draw art-group data 21))) + ) + ) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-19 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-19 param 1) 1.0) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! + a0-19 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + 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!) + ) + ) ) - (set! (-> a0-19 param 1) 1.0) - (set! (-> a0-19 frame-num) 0.0) - (joint-control-channel-group! - a0-19 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - 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) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -2440,140 +1924,112 @@ (defstate robotboss-red-dark-bomb (robotboss) :enter (behavior () - (set! (-> self old-loc quad) (-> self desired-loc quad)) - (set-vector! (-> self desired-loc) 0.0 -81920.0 716800.0 1.0) - (set! (-> self loc-t) 0.0) - (set! (-> self loc-t-start) (-> *display* game-frame-counter)) - (set! (-> self loc-t-duration) 900) - (set! (-> self desired-pool-y) -20480.0) - (none) - ) + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 0.0 -81920.0 716800.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -20480.0) + (none) + ) :trans (behavior () - (robotboss-always-trans robotboss-red-dark-bomb-wait) - (robotboss-position) - (if (>= (-> self loc-t) 1.0) - (go robotboss-red-dark-bomb-wait) + (robotboss-always-trans robotboss-red-dark-bomb-wait) + (robotboss-position) + (if (>= (-> self loc-t) 1.0) + (go robotboss-red-dark-bomb-wait) + ) + (none) ) - (none) - ) :code (behavior () - (ja-channel-push! 1 60) - (let ((v1-2 (-> self skel root-channel 0))) - (set! - (-> v1-2 frame-group) - (the-as art-joint-anim (-> self draw art-group data 22)) - ) - ) - (let ((a0-4 (-> self skel root-channel 0))) - (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-4 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-4 param 1) 1.0) - (set! (-> a0-4 frame-num) 0.0) - (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-5 (-> self skel root-channel 0))) - (set! - (-> a0-5 param 0) - (the float (+ (-> a0-5 frame-group data 0 length) -1)) - ) - (set! (-> a0-5 param 1) 1.0) - (joint-control-channel-group-eval! - a0-5 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 21) - ) - ) (ja-channel-push! 1 60) - (let ((v1-41 (-> self skel root-channel 0))) - (set! - (-> v1-41 frame-group) - (the-as art-joint-anim (-> self draw art-group data 21)) + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 22))) ) - ) - ) - (while #t - (let ((a0-15 (-> self skel root-channel 0))) - (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-4 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) ) - (set! - (-> a0-15 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-15 param 1) 1.0) - (set! (-> a0-15 frame-num) 0.0) - (joint-control-channel-group! - a0-15 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) (until (ja-done? 0) - (suspend) - (let ((a0-16 (-> self skel root-channel 0))) - (set! - (-> a0-16 param 0) - (the float (+ (-> a0-16 frame-group data 0 length) -1)) - ) - (set! (-> a0-16 param 1) 1.0) - (joint-control-channel-group-eval! - a0-16 - (the-as art-joint-anim #f) - num-func-seek! - ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1))) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) ) - ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 21) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! (-> v1-41 frame-group) (the-as art-joint-anim (-> self draw art-group data 21))) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-15 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 param 0) (the float (+ (-> a0-16 frame-group data 0 length) -1))) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! a0-16 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -2603,828 +2059,647 @@ (s4-0 (new 'stack-no-clear 'vector)) (s5-0 (new-stack-vector0)) ) - 0.0 - (dotimes (s3-0 6) - (let ((s1-0 (-> arg0 info s3-0))) - (let* ((f30-0 -40960.0) - (f28-0 81920.0) - (v1-4 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-5 (the-as number (logior #x3f800000 v1-4))) - ) - (set! (-> s1-0 dest x) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-5))))) - ) - (set! (-> s1-0 dest y) 0.0) - (let* ((f30-1 -40960.0) - (f28-1 81920.0) - (v1-10 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-11 (the-as number (logior #x3f800000 v1-10))) - ) - (set! (-> s1-0 dest z) (+ f30-1 (* f28-1 (+ -1.0 (the-as float v1-11))))) - ) - (set! (-> s1-0 dest w) 1.0) - ) - (dotimes (s1-1 s3-0) - (vector-! - s4-0 - (the-as vector (-> arg0 info s3-0)) - (the-as vector (-> arg0 info s1-1)) - ) - (let ((f0-13 (vector-length-squared s4-0))) - (if (< f0-13 1073741800.0) - (vector+float*! - (the-as vector (-> arg0 info s3-0)) - (the-as vector (-> arg0 info s1-1)) - s4-0 - (/ 32768.0 (sqrtf f0-13)) + 0.0 + (dotimes (s3-0 6) + (let ((s1-0 (-> arg0 info s3-0))) + (let* ((f30-0 -40960.0) + (f28-0 81920.0) + (v1-4 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-5 (the-as number (logior #x3f800000 v1-4))) + ) + (set! (-> s1-0 dest x) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-5))))) + ) + (set! (-> s1-0 dest y) 0.0) + (let* ((f30-1 -40960.0) + (f28-1 81920.0) + (v1-10 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-11 (the-as number (logior #x3f800000 v1-10))) + ) + (set! (-> s1-0 dest z) (+ f30-1 (* f28-1 (+ -1.0 (the-as float v1-11))))) + ) + (set! (-> s1-0 dest w) 1.0) ) - ) + (dotimes (s1-1 s3-0) + (vector-! s4-0 (the-as vector (-> arg0 info s3-0)) (the-as vector (-> arg0 info s1-1))) + (let ((f0-13 (vector-length-squared s4-0))) + (if (< f0-13 1073741800.0) + (vector+float*! + (the-as vector (-> arg0 info s3-0)) + (the-as vector (-> arg0 info s1-1)) + s4-0 + (/ 32768.0 (sqrtf f0-13)) + ) + ) + ) + ) + (vector+! s5-0 s5-0 (the-as vector (-> arg0 info s3-0))) + (let* ((f30-2 60.0) + (v1-27 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-28 (the-as number (logior #x3f800000 v1-27))) + ) + (set! (-> arg0 info s3-0 flight-time) (+ (the int (* f30-2 (+ -1.0 (the-as float v1-28)))) 180)) + ) + (let* ((s1-3 (max 150 (- s2-0 (-> arg0 info s3-0 flight-time)))) + (f30-3 60.0) + (v1-38 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-39 (the-as number (logior #x3f800000 v1-38))) + ) + (set! (-> arg0 info s3-0 stall-time) (+ (the int (* f30-3 (+ -1.0 (the-as float v1-39)))) 300 s1-3)) + ) + (set! s2-0 (+ (-> arg0 info s3-0 flight-time) (-> arg0 info s3-0 stall-time))) ) - ) - (vector+! s5-0 s5-0 (the-as vector (-> arg0 info s3-0))) - (let* ((f30-2 60.0) - (v1-27 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-28 (the-as number (logior #x3f800000 v1-27))) - ) - (set! - (-> arg0 info s3-0 flight-time) - (+ (the int (* f30-2 (+ -1.0 (the-as float v1-28)))) 180) + (vector-float*! s5-0 s5-0 0.16666667) + (vector-! s5-0 (-> self entity extra trans) s5-0) + (dotimes (v1-53 6) + (vector+! (the-as vector (-> arg0 info v1-53)) (the-as vector (-> arg0 info v1-53)) s5-0) + (set! (-> arg0 info v1-53 dest y) (+ (-> (new 'static 'array float 1 2048.0) 0) (-> arg0 info v1-53 dest y))) ) - ) - (let* ((s1-3 (max 150 (- s2-0 (-> arg0 info s3-0 flight-time)))) - (f30-3 60.0) - (v1-38 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-39 (the-as number (logior #x3f800000 v1-38))) - ) - (set! - (-> arg0 info s3-0 stall-time) - (+ (the int (* f30-3 (+ -1.0 (the-as float v1-39)))) 300 s1-3) - ) - ) - (set! - s2-0 - (+ (-> arg0 info s3-0 flight-time) (-> arg0 info s3-0 stall-time)) - ) ) - (vector-float*! s5-0 s5-0 0.16666667) - (vector-! s5-0 (-> self entity extra trans) s5-0) - (dotimes (v1-53 6) - (vector+! - (the-as vector (-> arg0 info v1-53)) - (the-as vector (-> arg0 info v1-53)) - s5-0 - ) - (set! - (-> arg0 info v1-53 dest y) - (+ (-> (new 'static 'array float 1 2048.0) 0) (-> arg0 info v1-53 dest y)) - ) - ) - ) (none) ) ;; WARN: Stack slot load at 64 mismatch: defined as size 4, got size 16 -(defbehavior - robotboss-redshot robotboss - ((arg0 redshot-launch-info) (arg1 symbol)) - (local-vars - (sv-32 redshot-launch-info) - (sv-48 vector) - (sv-64 float) - (sv-80 int) - (sv-96 int) - ) +(defbehavior robotboss-redshot robotboss ((arg0 redshot-launch-info) (arg1 symbol)) + (local-vars (sv-32 redshot-launch-info) (sv-48 vector) (sv-64 float) (sv-80 int) (sv-96 int)) (set! sv-32 arg0) (let ((s5-0 arg1)) - (+! (-> self children-spawned) 1) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (vector<-cspace! gp-0 (-> self node-list data 40)) - (let ((s4-0 (get-process *default-dead-pool* redshot #x4000))) - (when s4-0 - (let ((t9-2 (method-of-type redshot activate))) - (t9-2 (the-as redshot s4-0) self 'redshot (the-as pointer #x70004000)) - ) - (let ((s3-0 run-function-in-process) - (s2-0 s4-0) - (s1-0 redshot-init-by-other) - (s0-0 gp-0) + (+! (-> self children-spawned) 1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 40)) + (let ((s4-0 (get-process *default-dead-pool* redshot #x4000))) + (when s4-0 + (let ((t9-2 (method-of-type redshot activate))) + (t9-2 (the-as redshot s4-0) self 'redshot (the-as pointer #x70004000)) ) - (set! sv-48 (-> sv-32 dest)) - (let* ((f30-0 20480.0) - (f28-0 12288.0) - (v1-10 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-11 (the-as number (logior #x3f800000 v1-10))) + (let ((s3-0 run-function-in-process) + (s2-0 s4-0) + (s1-0 redshot-init-by-other) + (s0-0 gp-0) + ) + (set! sv-48 (-> sv-32 dest)) + (let* ((f30-0 20480.0) + (f28-0 12288.0) + (v1-10 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-11 (the-as number (logior #x3f800000 v1-10))) + ) + (set! sv-64 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-11))))) ) - (set! sv-64 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-11))))) - ) - (set! sv-80 (-> sv-32 flight-time)) - (set! sv-96 (-> sv-32 stall-time)) - (let* ((f30-1 300.0) - (v1-19 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-20 (the-as number (logior #x3f800000 v1-19))) - (t3-0 (the int (* f30-1 (+ -1.0 (the-as float v1-20))))) + (set! sv-80 (-> sv-32 flight-time)) + (set! sv-96 (-> sv-32 stall-time)) + (let* ((f30-1 300.0) + (v1-19 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-20 (the-as number (logior #x3f800000 v1-19))) + (t3-0 (the int (* f30-1 (+ -1.0 (the-as float v1-20))))) + ) + ((the-as (function object object object object object object object object none) s3-0) + s2-0 + s1-0 + s0-0 + sv-48 + sv-64 + sv-80 + sv-96 + t3-0 + ) ) - ((the-as - (function object object object object object object object object none) - s3-0 + ) + (-> s4-0 ppointer) ) - s2-0 - s1-0 - s0-0 - sv-48 - sv-64 - sv-80 - sv-96 - t3-0 - ) ) - ) - (-> s4-0 ppointer) - ) - ) - (when s5-0 - (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) - (when s5-1 - (let ((t9-7 (method-of-type part-tracker activate))) - (t9-7 - (the-as part-tracker s5-1) - *entity-pool* - 'part-tracker - (the-as pointer #x70004000) - ) + (when s5-0 + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 part-tracker-init (-> *part-group-id-table* 641) 300 #f #f #f gp-0) + (-> s5-1 ppointer) + ) + ) + (sound-play-by-name (static-sound-name "red-fire") (new-sound-id) 1024 0 0 1 #t) ) - (run-now-in-process - s5-1 - part-tracker-init - (-> *part-group-id-table* 641) - 300 - #f - #f - #f - gp-0 - ) - (-> s5-1 ppointer) - ) ) - (sound-play-by-name - (static-sound-name "red-fire") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - ) ) - ) ) (defbehavior robotboss-is-red-hit robotboss () - (or (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) + (or + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) (-> self draw art-group data 19) ) - (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) ) - (-> self draw art-group data 34) ) - ) ) (defstate robotboss-red-wait (robotboss) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('hit-jak) - (let* ((v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-3 (the-as number (logior #x3f800000 v1-2))) - (f0-2 (+ -1.0 (the-as float v1-3))) + (case arg2 + (('hit-jak) + (let* ((v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-3 (the-as number (logior #x3f800000 v1-2))) + (f0-2 (+ -1.0 (the-as float v1-3))) + ) + (cond + ((< 0.75 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) ) - (cond - ((< 0.75 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM10" - #t - (the-as vector #f) - ) - ) - ((< 0.5 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM12" - #t - (the-as vector #f) - ) - ) - ((< 0.25 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM15" - #t - (the-as vector #f) - ) - ) - (else - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM03" - #t - (the-as vector #f) - ) - ) - ) - ) - ) - (('missed-jak) - (let* ((v1-13 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-14 (the-as number (logior #x3f800000 v1-13))) - (f0-5 (+ -1.0 (the-as float v1-14))) ) - (if (< 0.5 f0-5) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM14" - #t - (the-as vector #f) - ) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM01" - #t - (the-as vector #f) - ) + ((< 0.5 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM12" + #t + (the-as vector #f) + ) + ) + ((< 0.25 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM15" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + ) + ) ) + (('missed-jak) + (let* ((v1-13 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-14 (the-as number (logior #x3f800000 v1-13))) + (f0-5 (+ -1.0 (the-as float v1-14))) + ) + (if (< 0.5 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM14" + #t + (the-as vector #f) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM01" + #t + (the-as vector #f) + ) + ) + ) + ) + (else + (robotboss-handler arg0 arg1 arg2 arg3) + ) ) - ) - (else - (robotboss-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (set! (-> self hits-to-go) -1) - (set! (-> self des-cam-entity) "camera-390") - (set! (-> self use-interesting) #t) - (set! (-> self state-time) (-> *display* game-frame-counter)) - (set! (-> self till-next-shot) 0) - 0 - (none) - ) + (set! (-> self hits-to-go) -1) + (set! (-> self des-cam-entity) "camera-390") + (set! (-> self use-interesting) #t) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self till-next-shot) 0) + 0 + (none) + ) :exit (behavior () - (let ((a0-1 (handle->process (-> self shot-attractor)))) - (if a0-1 - (deactivate a0-1) - ) - ) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 1) - (set! (-> a1-1 message) 'open) - (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 676))) - (let ((t9-1 send-event-function) - (v1-10 (-> self alts 1)) + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) ) - (t9-1 (if v1-10 - (-> v1-10 extra process) - ) - a1-1 ) - ) - ) - (let ((a1-2 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 1) - (set! (-> a1-2 message) 'open) - (set! (-> a1-2 param 0) (the-as uint 0.3)) - (let ((t9-2 send-event-function) - (v1-17 (-> self alts 0)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 676))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 1)) + ) + (t9-1 + (if v1-10 + (-> v1-10 extra process) + ) + a1-1 ) - (t9-2 (if v1-17 - (-> v1-17 extra process) - ) - a1-2 + ) ) - ) - ) - (set! - (-> - (the-as collide-shape-prim-group (-> self root-override root-prim)) - prims - 5 - collide-with - ) - (the-as uint 0) - ) - (set! - (-> - (the-as collide-shape-prim-group (-> self root-override root-prim)) - prims - 5 - prim-core - collide-as - ) - (the-as uint 0) - ) - (set! (-> self use-interesting) #f) - (set! (-> self des-cam-entity) #f) - (robotboss-yellow-eco-off) - (let ((a1-3 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-3 from) self) - (set! (-> a1-3 num-params) 0) - (set! (-> a1-3 message) 'show) - (let ((t9-4 send-event-function) - (v1-27 (-> self alts 11)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.3)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 + (if v1-17 + (-> v1-17 extra process) + ) + a1-2 ) - (t9-4 (if v1-27 - (-> v1-27 extra process) - ) - a1-3 + ) ) - ) + (set! (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 5 collide-with) + (the-as uint 0) + ) + (set! (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 5 prim-core collide-as) + (the-as uint 0) + ) + (set! (-> self use-interesting) #f) + (set! (-> self des-cam-entity) #f) + (robotboss-yellow-eco-off) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'show) + (let ((t9-4 send-event-function) + (v1-27 (-> self alts 11)) + ) + (t9-4 + (if v1-27 + (-> v1-27 extra process) + ) + a1-3 + ) + ) + ) + (none) ) - (none) - ) :trans (behavior () - (robotboss-always-trans robotboss-red-dark-bomb) - (robotboss-shooting-trans 40) - (cond - ((zero? (-> self hits-to-go)) - (robotboss-yellow-eco-off) - (let ((a1-0 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-0 from) self) - (set! (-> a1-0 num-params) 0) - (set! (-> a1-0 message) 'show) - (let ((t9-3 send-event-function) - (v1-3 (-> self alts 11)) - ) - (t9-3 (if v1-3 - (-> v1-3 extra process) - ) - a1-0 - ) - ) - ) - (set! (-> self took-hit) #f) - (+! (-> self hits-to-go) -1) - (ja-channel-push! 1 30) - (let ((v1-10 (-> self skel root-channel 0))) - (set! - (-> v1-10 frame-group) - (the-as art-joint-anim (-> self draw art-group data 34)) - ) - ) - (set! (-> self red-smoke) #t) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (vector<-cspace! gp-0 (-> self node-list data 51)) - (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) - (when s5-0 - (let ((t9-7 (method-of-type part-tracker activate))) - (t9-7 - (the-as part-tracker s5-0) - *entity-pool* - 'part-tracker - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-0 - part-tracker-init - (-> *part-group-id-table* 649) - 300 - #f - #f - #f - gp-0 - ) - (-> s5-0 ppointer) - ) - ) - ) - (let* ((s5-1 (get-process *default-dead-pool* manipy #x4000)) - (gp-1 (when s5-1 - (let ((t9-10 (method-of-type manipy activate))) - (t9-10 - (the-as manipy s5-1) - self - 'manipy - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-1 - manipy-init - (-> self root-override trans) - (-> self entity) - *robotboss-redeco-sg* - #f - ) - (-> s5-1 ppointer) - ) + (robotboss-always-trans robotboss-red-dark-bomb) + (robotboss-shooting-trans 40) + (cond + ((zero? (-> self hits-to-go)) + (robotboss-yellow-eco-off) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'show) + (let ((t9-3 send-event-function) + (v1-3 (-> self alts 11)) + ) + (t9-3 + (if v1-3 + (-> v1-3 extra process) + ) + a1-0 ) + ) + ) + (set! (-> self took-hit) #f) + (+! (-> self hits-to-go) -1) + (ja-channel-push! 1 30) + (let ((v1-10 (-> self skel root-channel 0))) + (set! (-> v1-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 34))) + ) + (set! (-> self red-smoke) #t) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 51)) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 (the-as part-tracker s5-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 part-tracker-init (-> *part-group-id-table* 649) 300 #f #f #f gp-0) + (-> s5-0 ppointer) + ) + ) + ) + (let* ((s5-1 (get-process *default-dead-pool* manipy #x4000)) + (gp-1 + (when s5-1 + (let ((t9-10 (method-of-type manipy activate))) + (t9-10 (the-as manipy s5-1) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 manipy-init (-> self root-override trans) (-> self entity) *robotboss-redeco-sg* #f) + (-> s5-1 ppointer) + ) + ) + ) + (send-event (ppointer->process (-> self parent)) 'flash 255.0) + (send-event (ppointer->process gp-1) 'anim-mode 'play1) + (send-event (ppointer->process gp-1) 'rot-quat (-> self root-override quat)) + (send-event (ppointer->process gp-1) 'art-joint-anim "robotboss-redeco-red-last-hit") + ) + ) + ((and (> (-> self hits-to-go) 0) (-> self took-hit)) + (if (not + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM17" + #t + (the-as vector #f) + ) + ) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM06" + #t + (the-as vector #f) ) - (send-event (ppointer->process (-> self parent)) 'flash 255.0) - (send-event (ppointer->process gp-1) 'anim-mode 'play1) - (send-event - (ppointer->process gp-1) - 'rot-quat - (-> self root-override quat) - ) - (send-event - (ppointer->process gp-1) - 'art-joint-anim - "robotboss-redeco-red-last-hit" + ) + (set! (-> self took-hit) #f) + (ja-channel-push! 1 30) + (let ((v1-56 (-> self skel root-channel 0))) + (set! (-> v1-56 frame-group) (the-as art-joint-anim (-> self draw art-group data 19))) + ) ) ) - ) - ((and (> (-> self hits-to-go) 0) (-> self took-hit)) - (if - (not - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM17" - #t - (the-as vector #f) - ) - ) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM06" - #t - (the-as vector #f) - ) - ) - (set! (-> self took-hit) #f) - (ja-channel-push! 1 30) - (let ((v1-56 (-> self skel root-channel 0))) - (set! - (-> v1-56 frame-group) - (the-as art-joint-anim (-> self draw art-group data 19)) - ) - ) - ) + (robotboss-position) + (none) ) - (robotboss-position) - (none) - ) :code (behavior () - (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 param 0) - (the float (+ (-> a0-0 frame-group data 0 length) -1)) - ) - (set! (-> a0-0 param 1) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (while (not (ja-done? 0)) - (suspend) - (ja-eval) - ) - (robotboss-setup-for-hits 1 5) - (while #t - (until - (or - (>= - (- (-> *display* game-frame-counter) (-> self state-time)) - (-> self till-next-shot) - ) - (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) (the float (+ (-> a0-0 frame-group data 0 length) -1))) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (robotboss-setup-for-hits 1 5) + (while #t + (until (or + (>= (- (-> *display* game-frame-counter) (-> self state-time)) (-> self till-next-shot)) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! (-> v1-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) ) - (-> self draw art-group data 34) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-11 (-> self skel root-channel 0))) - (set! - (-> v1-11 frame-group) - (the-as art-joint-anim (-> self draw art-group data 16)) - ) - ) - (let ((a0-7 (-> self skel root-channel 0))) - (set! (-> a0-7 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-7 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-7 param 1) 1.0) - (set! (-> a0-7 frame-num) 0.0) - (joint-control-channel-group! - a0-7 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (if (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 34) - ) - (goto cfg-24) - ) - (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! - ) - ) - ) - ) - (label cfg-24) - (set! (-> self state-time) (-> *display* game-frame-counter)) - (let* ((f30-0 (-> self dda red-shot-time-min)) - (f28-0 (-> self dda red-shot-time-rnd)) - (v1-65 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-66 (the-as number (logior #x3f800000 v1-65))) - ) - (set! - (-> self till-next-shot) - (the - int - (+ f30-0 (the float (the int (* f28-0 (+ -1.0 (the-as float v1-66)))))) - ) - ) - ) - (when (not (robotboss-is-red-hit)) - (ja-channel-push! 1 60) - (let ((v1-72 (-> self skel root-channel 0))) - (set! - (-> v1-72 frame-group) - (the-as art-joint-anim (-> self draw art-group data 17)) - ) - ) - (let ((a0-27 (-> self skel root-channel 0))) - (set! (-> a0-27 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-27 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-27 param 1) 1.0) - (set! (-> a0-27 frame-num) 0.0) - (joint-control-channel-group! - a0-27 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (update! (-> self looping-sound 2)) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (vector<-cspace! gp-0 (-> self node-list data 40)) - (spawn (-> self particle 5) gp-0) - ) - (if (robotboss-is-red-hit) - (goto cfg-37) - ) - (suspend) - (let ((a0-31 (-> self skel root-channel 0))) - (set! - (-> a0-31 param 0) - (the float (+ (-> a0-31 frame-group data 0 length) -1)) - ) - (set! (-> a0-31 param 1) 1.0) - (joint-control-channel-group-eval! - a0-31 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (label cfg-37) - (stop! (-> self looping-sound 2)) - ) - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 34) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) ) - ) - (let* ((v1-120 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-121 (the-as number (logior #x3f800000 v1-120))) - (f30-1 (+ -1.0 (the-as float v1-121))) - (gp-1 (new 'stack-no-clear 'redshot-launch-array)) - (s5-0 (-> self dda red-shots-min)) + (set! (-> a0-7 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! ) - (robotboss-yellow-eco-on) - (robotboss-redshot-fill-array gp-1) - (robotboss-redshot (the-as redshot-launch-info (-> gp-1 info)) #t) - (let* - ((v1-127 - (+ s5-0 (the int (* f30-1 (the float (-> self dda red-shots-rnd))))) - ) - (s5-1 (+ (min 6 v1-127) -1)) - ) - (dotimes (s4-0 s5-1) - (robotboss-redshot (-> gp-1 info (+ s4-0 1)) #f) - ) - ) - ) - ) - (when (not (robotboss-is-red-hit)) - (let* ((v1-135 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-136 (the-as number (logior #x3f800000 v1-135))) - (f0-33 (+ -1.0 (the-as float v1-136))) + ) + (until (ja-done? 0) + (if (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 34) + ) + (goto cfg-24) + ) + (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!) ) - (cond - ((< 0.8333333 f0-33) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM04" - #t - (the-as vector #f) - ) + ) ) - ((< 0.6666667 f0-33) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM05" - #t - (the-as vector #f) - ) + (label cfg-24) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (let* ((f30-0 (-> self dda red-shot-time-min)) + (f28-0 (-> self dda red-shot-time-rnd)) + (v1-65 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-66 (the-as number (logior #x3f800000 v1-65))) + ) + (set! (-> self till-next-shot) + (the int (+ f30-0 (the float (the int (* f28-0 (+ -1.0 (the-as float v1-66))))))) + ) ) - ((< 0.5 f0-33) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM08" - #t - (the-as vector #f) - ) + (when (not (robotboss-is-red-hit)) + (ja-channel-push! 1 60) + (let ((v1-72 (-> self skel root-channel 0))) + (set! (-> v1-72 frame-group) (the-as art-joint-anim (-> self draw art-group data 17))) + ) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-27 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-27 param 1) 1.0) + (set! (-> a0-27 frame-num) 0.0) + (joint-control-channel-group! + a0-27 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (update! (-> self looping-sound 2)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 40)) + (spawn (-> self particle 5) gp-0) + ) + (if (robotboss-is-red-hit) + (goto cfg-37) + ) + (suspend) + (let ((a0-31 (-> self skel root-channel 0))) + (set! (-> a0-31 param 0) (the float (+ (-> a0-31 frame-group data 0 length) -1))) + (set! (-> a0-31 param 1) 1.0) + (joint-control-channel-group-eval! a0-31 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (label cfg-37) + (stop! (-> self looping-sound 2)) ) - ((< 0.33333334 f0-33) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM10" - #t - (the-as vector #f) - ) - ) - ((< 0.16666667 f0-33) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM03" - #t - (the-as vector #f) - ) - ) - (else - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM02" - #t - (the-as vector #f) - ) - ) - ) - ) - (let ((v1-157 (-> self skel root-channel 0))) - (set! - (-> v1-157 frame-group) - (the-as art-joint-anim (-> self draw art-group data 18)) - ) - ) - ) - (let ((a0-56 (-> self skel root-channel 0))) - (set! (-> a0-56 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-56 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) + (when (not (= (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-56 param 1) 1.0) - (set! (-> a0-56 frame-num) 0.0) - (joint-control-channel-group! - a0-56 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-57 (-> self skel root-channel 0))) - (set! - (-> a0-57 param 0) - (the float (+ (-> a0-57 frame-group data 0 length) -1)) - ) - (set! (-> a0-57 param 1) 1.0) - (joint-control-channel-group-eval! - a0-57 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (when (= (if (> (-> self skel active-channels) 0) + (-> self draw art-group data 34) + ) + ) + (let* ((v1-120 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-121 (the-as number (logior #x3f800000 v1-120))) + (f30-1 (+ -1.0 (the-as float v1-121))) + (gp-1 (new 'stack-no-clear 'redshot-launch-array)) + (s5-0 (-> self dda red-shots-min)) + ) + (robotboss-yellow-eco-on) + (robotboss-redshot-fill-array gp-1) + (robotboss-redshot (the-as redshot-launch-info (-> gp-1 info)) #t) + (let* ((v1-127 (+ s5-0 (the int (* f30-1 (the float (-> self dda red-shots-rnd)))))) + (s5-1 (+ (min 6 v1-127) -1)) + ) + (dotimes (s4-0 s5-1) + (robotboss-redshot (-> gp-1 info (+ s4-0 1)) #f) + ) + ) + ) + ) + (when (not (robotboss-is-red-hit)) + (let* ((v1-135 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-136 (the-as number (logior #x3f800000 v1-135))) + (f0-33 (+ -1.0 (the-as float v1-136))) + ) + (cond + ((< 0.8333333 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM04" + #t + (the-as vector #f) + ) + ) + ((< 0.6666667 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM05" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM08" + #t + (the-as vector #f) + ) + ) + ((< 0.33333334 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.16666667 f0-33) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + (let ((v1-157 (-> self skel root-channel 0))) + (set! (-> v1-157 frame-group) (the-as art-joint-anim (-> self draw art-group data 18))) + ) + ) + (let ((a0-56 (-> self skel root-channel 0))) + (set! (-> a0-56 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-56 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-56 param 1) 1.0) + (set! (-> a0-56 frame-num) 0.0) + (joint-control-channel-group! + a0-56 + (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) ) - (-> self draw art-group data 34) - ) - (let ((a0-63 (-> self skel root-channel 0))) - (set! - (-> a0-63 frame-group) - (the-as art-joint-anim (-> self draw art-group data 20)) - ) - (set! - (-> a0-63 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 20)) - data - 0 - length + num-func-seek! ) - -1 - ) ) - ) - (set! (-> a0-63 param 1) 1.0) - (set! (-> a0-63 frame-num) 0.0) - (joint-control-channel-group! - a0-63 - (the-as art-joint-anim (-> self draw art-group data 20)) - num-func-seek! - ) + (until (ja-done? 0) + (suspend) + (let ((a0-57 (-> self skel root-channel 0))) + (set! (-> a0-57 param 0) (the float (+ (-> a0-57 frame-group data 0 length) -1))) + (set! (-> a0-57 param 1) 1.0) + (joint-control-channel-group-eval! a0-57 (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 34) + ) + (let ((a0-63 (-> self skel root-channel 0))) + (set! (-> a0-63 frame-group) (the-as art-joint-anim (-> self draw art-group data 20))) + (set! (-> a0-63 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 20)) data 0 length) -1)) + ) + (set! (-> a0-63 param 1) 1.0) + (set! (-> a0-63 frame-num) 0.0) + (joint-control-channel-group! a0-63 (the-as art-joint-anim (-> self draw art-group data 20)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-64 (-> self skel root-channel 0))) + (set! (-> a0-64 param 0) (the float (+ (-> a0-64 frame-group data 0 length) -1))) + (set! (-> a0-64 param 1) 1.0) + (joint-control-channel-group-eval! a0-64 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go robotboss-red-dark-bomb) + ) ) - (until (ja-done? 0) - (suspend) - (let ((a0-64 (-> self skel root-channel 0))) - (set! - (-> a0-64 param 0) - (the float (+ (-> a0-64 frame-group data 0 length) -1)) - ) - (set! (-> a0-64 param 1) 1.0) - (joint-control-channel-group-eval! - a0-64 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (go robotboss-red-dark-bomb) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -3434,157 +2709,122 @@ robotboss-handler :enter (behavior () - (set! (-> self old-loc quad) (-> self desired-loc quad)) - (set-vector! (-> self desired-loc) 8192.0 -40960.0 327680.0 1.0) - (set! (-> self loc-t) 0.0) - (set! (-> self loc-t-start) (-> *display* game-frame-counter)) - (set! (-> self loc-t-duration) 900) - (set! (-> self desired-pool-y) -22528.0) - (set-setting! *setting-control* self 'sound-flava #f (the-as float 40.0) 48) - (none) - ) + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 8192.0 -40960.0 327680.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -22528.0) + (set-setting! *setting-control* self 'sound-flava #f (the-as float 40.0) 48) + (none) + ) :trans (behavior () - (robotboss-always-trans robotboss-red-wait) - (if (>= (-> self loc-t) 1.0) - (go robotboss-red-wait) + (robotboss-always-trans robotboss-red-wait) + (if (>= (-> self loc-t) 1.0) + (go robotboss-red-wait) + ) + (robotboss-position) + (none) ) - (robotboss-position) - (none) - ) :code (behavior () - (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 param 0) - (the float (+ (-> a0-0 frame-group data 0 length) -1)) - ) - (set! (-> a0-0 param 1) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (while (not (ja-done? 0)) - (suspend) - (ja-eval) - ) - (ja-channel-push! 1 60) - (let ((v1-11 (-> self skel root-channel 0))) - (set! - (-> v1-11 frame-group) - (the-as art-joint-anim (-> self draw art-group data 15)) - ) - ) - (let ((a0-6 (-> self skel root-channel 0))) - (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-6 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) (the float (+ (-> a0-0 frame-group data 0 length) -1))) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) ) - ) - (set! (-> a0-6 param 1) 1.0) - (set! (-> a0-6 frame-num) 0.0) - (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-7 (-> self skel root-channel 0))) - (set! - (-> a0-7 param 0) - (the float (+ (-> a0-7 frame-group data 0 length) -1)) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) ) - (set! (-> a0-7 param 1) 1.0) - (joint-control-channel-group-eval! - a0-7 - (the-as art-joint-anim #f) - num-func-seek! + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! (-> v1-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 15))) ) - ) - ) - (while #t - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 6) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-50 (-> self skel root-channel 0))) - (set! - (-> v1-50 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) - ) - ) - ) - (let ((a0-17 (-> self skel root-channel 0))) - (set! (-> a0-17 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-6 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) ) - (set! - (-> a0-17 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) ) - data - 0 - length - ) - -1 - ) - ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-50 (-> self skel root-channel 0))) + (set! (-> v1-50 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + ) + ) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-17 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-17 param 1) 1.0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! + a0-17 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! (-> a0-18 param 0) (the float (+ (-> a0-18 frame-group data 0 length) -1))) + (set! (-> a0-18 param 1) 1.0) + (joint-control-channel-group-eval! a0-18 (the-as art-joint-anim #f) num-func-seek!) + ) + ) ) - (set! (-> a0-17 param 1) 1.0) - (set! (-> a0-17 frame-num) 0.0) - (joint-control-channel-group! - a0-17 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-18 (-> self skel root-channel 0))) - (set! - (-> a0-18 param 0) - (the float (+ (-> a0-18 frame-group data 0 length) -1)) - ) - (set! (-> a0-18 param 1) 1.0) - (joint-control-channel-group-eval! - a0-18 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -3593,179 +2833,129 @@ :event robotboss-bomb-handler :enter - (behavior () - (set! (-> self children-spawned) 0) - 0 - (none) - ) + (behavior () (set! (-> self children-spawned) 0) 0 (none)) :exit - (behavior () - (set! (-> self ignore-camera) #f) - (set! (-> self des-cam-entity) #f) - (none) - ) + (behavior () (set! (-> self ignore-camera) #f) (set! (-> self des-cam-entity) #f) (none)) :trans (behavior () - (robotboss-always-trans robotboss-red) - (if - (and - (< (-> self children-spawned) 0) - (or - (not *target*) - (!= (-> *target* control unknown-surface00 name) 'launch-jump) - ) - ) - (go robotboss-red) + (robotboss-always-trans robotboss-red) + (if (and + (< (-> self children-spawned) 0) + (or (not *target*) (!= (-> *target* control unknown-surface00 name) 'launch-jump)) + ) + (go robotboss-red) + ) + (robotboss-position) + (none) ) - (robotboss-position) - (none) - ) :code (behavior () - (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 param 0) - (the float (+ (-> a0-0 frame-group data 0 length) -1)) - ) - (set! (-> a0-0 param 1) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (while (not (ja-done? 0)) - (suspend) - (ja-eval) - ) - (ja-channel-push! 1 30) - (let ((v1-11 (-> self skel root-channel 0))) - (set! - (-> v1-11 frame-group) - (the-as art-joint-anim (-> self draw art-group data 9)) - ) - ) - (let ((a0-6 (-> self skel root-channel 0))) - (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-6 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) (the float (+ (-> a0-0 frame-group data 0 length) -1))) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) ) - ) - (set! (-> a0-6 param 1) 1.0) - (set! (-> a0-6 frame-num) 0.0) - (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) - (robotboss-darkecobomb - (new 'static 'vector :y 32768.0) - (-> self dda green-bomb-time) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) ) - (set! (-> self des-cam-entity) "camera-365") - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM11" - #t - (the-as vector #f) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! (-> v1-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) ) - ) - (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! - ) - ) - ) - (while #t - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 6) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-59 (-> self skel root-channel 0))) - (set! - (-> v1-59 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) - ) - ) - ) - (let ((a0-20 (-> self skel root-channel 0))) - (set! (-> a0-20 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-6 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) ) - (set! - (-> a0-20 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb (new 'static 'vector :y 32768.0) (-> self dda green-bomb-time)) + (set! (-> self des-cam-entity) "camera-365") + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM11" + #t + (the-as vector #f) + ) + ) + (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!) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) ) - data - 0 - length - ) - -1 - ) - ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-59 (-> self skel root-channel 0))) + (set! (-> v1-59 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + ) + ) + (let ((a0-20 (-> self skel root-channel 0))) + (set! (-> a0-20 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-20 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-20 param 1) 1.0) + (set! (-> a0-20 frame-num) 0.0) + (joint-control-channel-group! + a0-20 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-21 (-> self skel root-channel 0))) + (set! (-> a0-21 param 0) (the float (+ (-> a0-21 frame-group data 0 length) -1))) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group-eval! a0-21 (the-as art-joint-anim #f) num-func-seek!) + ) + ) ) - (set! (-> a0-20 param 1) 1.0) - (set! (-> a0-20 frame-num) 0.0) - (joint-control-channel-group! - a0-20 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-21 (-> self skel root-channel 0))) - (set! - (-> a0-21 param 0) - (the float (+ (-> a0-21 frame-group data 0 length) -1)) - ) - (set! (-> a0-21 param 1) 1.0) - (joint-control-channel-group-eval! - a0-21 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -3773,661 +2963,487 @@ (defstate robotboss-green-dark-bomb (robotboss) :enter (behavior () - (set! (-> self old-loc quad) (-> self desired-loc quad)) - (set-vector! (-> self desired-loc) 16384.0 -81920.0 716800.0 1.0) - (set! (-> self loc-t) 0.0) - (set! (-> self loc-t-start) (-> *display* game-frame-counter)) - (set! (-> self loc-t-duration) 900) - (set! (-> self desired-pool-y) -24576.0) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM01" - #t - (the-as vector #f) + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 16384.0 -81920.0 716800.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -24576.0) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM01" + #t + (the-as vector #f) + ) + (none) ) - (none) - ) :trans (behavior () - (robotboss-always-trans robotboss-green-dark-bomb-wait) - (robotboss-position) - (if (>= (-> self loc-t) 1.0) - (go robotboss-green-dark-bomb-wait) + (robotboss-always-trans robotboss-green-dark-bomb-wait) + (robotboss-position) + (if (>= (-> self loc-t) 1.0) + (go robotboss-green-dark-bomb-wait) + ) + (none) ) - (none) - ) :code (behavior () - (ja-channel-push! 1 60) - (let ((v1-2 (-> self skel root-channel 0))) - (set! - (-> v1-2 frame-group) - (the-as art-joint-anim (-> self draw art-group data 14)) - ) - ) - (let ((a0-4 (-> self skel root-channel 0))) - (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-4 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-4 param 1) 1.0) - (set! (-> a0-4 frame-num) 0.0) - (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-5 (-> self skel root-channel 0))) - (set! - (-> a0-5 param 0) - (the float (+ (-> a0-5 frame-group data 0 length) -1)) - ) - (set! (-> a0-5 param 1) 1.0) - (joint-control-channel-group-eval! - a0-5 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 6) - ) - ) (ja-channel-push! 1 60) - (let ((v1-41 (-> self skel root-channel 0))) - (set! - (-> v1-41 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 14))) ) - ) - ) - (while #t - (let ((a0-15 (-> self skel root-channel 0))) - (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-4 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) ) - (set! - (-> a0-15 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-15 param 1) 1.0) - (set! (-> a0-15 frame-num) 0.0) - (joint-control-channel-group! - a0-15 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) (until (ja-done? 0) - (suspend) - (let ((a0-16 (-> self skel root-channel 0))) - (set! - (-> a0-16 param 0) - (the float (+ (-> a0-16 frame-group data 0 length) -1)) - ) - (set! (-> a0-16 param 1) 1.0) - (joint-control-channel-group-eval! - a0-16 - (the-as art-joint-anim #f) - num-func-seek! - ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1))) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) ) - ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! (-> v1-41 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-15 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 param 0) (the float (+ (-> a0-16 frame-group data 0 length) -1))) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! a0-16 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) ;; WARN: Function may read a register that is not set: t2 -(defbehavior - robotboss-greenshot robotboss - ((arg0 vector) (arg1 basic) (arg2 basic) (arg3 symbol)) +(defbehavior robotboss-greenshot robotboss ((arg0 vector) (arg1 basic) (arg2 basic) (arg3 symbol)) (local-vars (t2-0 none)) (+! (-> self children-spawned) 1) (let ((gp-0 (new 'stack-no-clear 'vector))) - (let ((s2-0 (new 'stack-no-clear 'vector))) - (vector<-cspace! gp-0 (-> self node-list data 68)) - (set! (-> s2-0 quad) (-> self entity extra trans quad)) - (set! (-> s2-0 y) (+ -40960.0 (-> s2-0 y))) - (vector+! s2-0 s2-0 arg0) - (let ((s1-1 (get-process *default-dead-pool* greenshot #x4000))) - (when s1-1 - (let ((t9-2 (method-of-type greenshot activate))) - (t9-2 - (the-as greenshot s1-1) - self - 'greenshot - (the-as pointer #x70004000) + (let ((s2-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 68)) + (set! (-> s2-0 quad) (-> self entity extra trans quad)) + (set! (-> s2-0 y) (+ -40960.0 (-> s2-0 y))) + (vector+! s2-0 s2-0 arg0) + (let ((s1-1 (get-process *default-dead-pool* greenshot #x4000))) + (when s1-1 + (let ((t9-2 (method-of-type greenshot activate))) + (t9-2 (the-as greenshot s1-1) self 'greenshot (the-as pointer #x70004000)) + ) + (run-now-in-process s1-1 greenshot-init-by-other gp-0 s2-0 arg1 arg2 t2-0) + (-> s1-1 ppointer) + ) ) - ) - (run-now-in-process s1-1 greenshot-init-by-other gp-0 s2-0 arg1 arg2 t2-0) - (-> s1-1 ppointer) ) - ) - ) - (when arg3 - (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) - (when s5-1 - (let ((t9-5 (method-of-type part-tracker activate))) - (t9-5 - (the-as part-tracker s5-1) - *entity-pool* - 'part-tracker - (the-as pointer #x70004000) + (when arg3 + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-5 (method-of-type part-tracker activate))) + (t9-5 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 part-tracker-init (-> *part-group-id-table* 640) 300 #f #f #f gp-0) + (-> s5-1 ppointer) + ) ) - ) - (run-now-in-process - s5-1 - part-tracker-init - (-> *part-group-id-table* 640) - 300 - #f - #f - #f - gp-0 - ) - (-> s5-1 ppointer) + (sound-play-by-name (static-sound-name "green-fire") (new-sound-id) 1024 0 0 1 #t) ) - ) - (sound-play-by-name - (static-sound-name "green-fire") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) ) - ) (none) ) (defstate robotboss-green-wait (robotboss) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('trigger) - (ja-channel-push! 1 60) - (let ((v1-3 (-> self skel root-channel 0))) - (set! - (-> v1-3 frame-group) - (the-as art-joint-anim (-> self draw art-group data 13)) - ) - ) - (robotboss-yellow-eco-off) - (let ((a1-2 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 0) - (set! (-> a1-2 message) 'show) - (let ((t9-2 send-event-function) - (v1-5 (-> self alts 11)) - ) - (t9-2 (if v1-5 - (-> v1-5 extra process) + (case arg2 + (('trigger) + (ja-channel-push! 1 60) + (let ((v1-3 (-> self skel root-channel 0))) + (set! (-> v1-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 13))) + ) + (robotboss-yellow-eco-off) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'show) + (let ((t9-2 send-event-function) + (v1-5 (-> self alts 11)) ) - a1-2 + (t9-2 + (if v1-5 + (-> v1-5 extra process) + ) + a1-2 + ) + ) ) - ) ) - ) - (('hit-jak) - (let* ((v1-8 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-9 (the-as number (logior #x3f800000 v1-8))) - (f0-2 (+ -1.0 (the-as float v1-9))) + (('hit-jak) + (let* ((v1-8 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-9 (the-as number (logior #x3f800000 v1-8))) + (f0-2 (+ -1.0 (the-as float v1-9))) + ) + (cond + ((< 0.75 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) ) - (cond - ((< 0.75 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM10" - #t - (the-as vector #f) - ) - ) - ((< 0.5 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM12" - #t - (the-as vector #f) - ) - ) - ((< 0.25 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM15" - #t - (the-as vector #f) - ) - ) - (else - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM03" - #t - (the-as vector #f) - ) - ) - ) - ) - ) - (('blob-died) - (let* ((v1-19 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-20 (the-as number (logior #x3f800000 v1-19))) - (f0-5 (+ -1.0 (the-as float v1-20))) + ((< 0.5 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM12" + #t + (the-as vector #f) + ) ) - (cond - ((< 0.75 f0-5) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM02" - #t - (the-as vector #f) + ((< 0.25 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM15" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + ) ) - ) - ((< 0.5 f0-5) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM03" - #t - (the-as vector #f) - ) - ) - ((< 0.25 f0-5) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM14" - #t - (the-as vector #f) - ) - ) - (else - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM02" - #t - (the-as vector #f) - ) - ) ) + (('blob-died) + (let* ((v1-19 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-20 (the-as number (logior #x3f800000 v1-19))) + (f0-5 (+ -1.0 (the-as float v1-20))) + ) + (cond + ((< 0.75 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM02" + #t + (the-as vector #f) + ) + ) + ((< 0.5 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM03" + #t + (the-as vector #f) + ) + ) + ((< 0.25 f0-5) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM14" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM02" + #t + (the-as vector #f) + ) + ) + ) + ) + ) + (else + (robotboss-handler arg0 arg1 arg2 arg3) + ) ) - ) - (else - (robotboss-handler arg0 arg1 arg2 arg3) - ) ) - ) :enter (behavior () - (set! (-> self state-time) (-> *display* game-frame-counter)) - (set! (-> self children-spawned) 0) - (robotboss-setup-for-hits 2 5) - (set! (-> self des-cam-entity) "camera-385") - (none) - ) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (set! (-> self children-spawned) 0) + (robotboss-setup-for-hits 2 5) + (set! (-> self des-cam-entity) "camera-385") + (none) + ) :exit (behavior () - (let ((a0-1 (handle->process (-> self shot-attractor)))) - (if a0-1 - (deactivate a0-1) - ) - ) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 1) - (set! (-> a1-1 message) 'open) - (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 675))) - (let ((t9-1 send-event-function) - (v1-10 (-> self alts 2)) + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) ) - (t9-1 (if v1-10 - (-> v1-10 extra process) - ) - a1-1 ) - ) - ) - (let ((a1-2 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 1) - (set! (-> a1-2 message) 'open) - (set! (-> a1-2 param 0) (the-as uint 0.2)) - (let ((t9-2 send-event-function) - (v1-17 (-> self alts 0)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 675))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 2)) + ) + (t9-1 + (if v1-10 + (-> v1-10 extra process) + ) + a1-1 ) - (t9-2 (if v1-17 - (-> v1-17 extra process) - ) - a1-2 + ) ) - ) - ) - (set! - (-> - (the-as collide-shape-prim-group (-> self root-override root-prim)) - prims - 9 - collide-with - ) - (the-as uint 0) - ) - (set! - (-> - (the-as collide-shape-prim-group (-> self root-override root-prim)) - prims - 9 - prim-core - collide-as - ) - (the-as uint 0) - ) - (set! (-> self des-cam-entity) #f) - (robotboss-yellow-eco-off) - (let ((a1-3 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-3 from) self) - (set! (-> a1-3 num-params) 0) - (set! (-> a1-3 message) 'show) - (let ((t9-4 send-event-function) - (v1-27 (-> self alts 11)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.2)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 + (if v1-17 + (-> v1-17 extra process) + ) + a1-2 ) - (t9-4 (if v1-27 - (-> v1-27 extra process) - ) - a1-3 + ) ) - ) + (set! (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 9 collide-with) + (the-as uint 0) + ) + (set! (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 9 prim-core collide-as) + (the-as uint 0) + ) + (set! (-> self des-cam-entity) #f) + (robotboss-yellow-eco-off) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'show) + (let ((t9-4 send-event-function) + (v1-27 (-> self alts 11)) + ) + (t9-4 + (if v1-27 + (-> v1-27 extra process) + ) + a1-3 + ) + ) + ) + (none) ) - (none) - ) :trans (behavior () - (robotboss-always-trans robotboss-green-dark-bomb) - (cond - ((and - (>= (- (-> *display* game-frame-counter) (-> self state-time)) 120) - (< (-> self children-spawned) 1) - ) - (robotboss-greenshot - (new 'static 'vector) - (the-as basic 24576.0) - (the-as basic 600) - #t - ) - (ja-channel-push! 1 60) - (let ((v1-9 (-> self skel root-channel 0))) - (set! - (-> v1-9 frame-group) - (the-as art-joint-anim (-> self draw art-group data 11)) - ) - ) - ) - ((and - (>= (- (-> *display* game-frame-counter) (-> self state-time)) 360) - (< (-> self children-spawned) 3) - ) - (robotboss-greenshot - (new 'static 'vector :x 8192.0) - (the-as basic 16384.0) - (the-as basic 600) - #t - ) - (robotboss-greenshot - (new 'static 'vector :z 8192.0) - (the-as basic 32768.0) - (the-as basic 660) - #f - ) - (ja-channel-push! 1 60) - (let ((v1-20 (-> self skel root-channel 0))) - (set! - (-> v1-20 frame-group) - (the-as art-joint-anim (-> self draw art-group data 11)) - ) - ) - ) - ((and - (>= (- (-> *display* game-frame-counter) (-> self state-time)) 780) - (< (-> self children-spawned) 6) - ) - (robotboss-greenshot - (new 'static 'vector :z 12288.0) - (the-as basic 20480.0) - (the-as basic 600) - #t - ) - (robotboss-greenshot - (new 'static 'vector :x 8192.0) - (the-as basic 8192.0) - (the-as basic 660) - #f - ) - (robotboss-greenshot - (new 'static 'vector) - (the-as basic 36864.0) - (the-as basic 720) - #f - ) - (ja-channel-push! 1 60) - (let ((v1-32 (-> self skel root-channel 0))) - (set! - (-> v1-32 frame-group) - (the-as art-joint-anim (-> self draw art-group data 11)) - ) - ) - ) - ((and - (>= (- (-> *display* game-frame-counter) (-> self state-time)) 1200) - (< (-> self children-spawned) 7) - ) - (robotboss-greenshot - (new 'static 'vector) - (the-as basic 24576.0) - (the-as basic 600) - #t - ) - (ja-channel-push! 1 60) - (let ((v1-42 (-> self skel root-channel 0))) - (set! - (-> v1-42 frame-group) - (the-as art-joint-anim (-> self draw art-group data 11)) - ) - ) - ) - ((and - (>= (- (-> *display* game-frame-counter) (-> self state-time)) 1650) - (< (-> self children-spawned) 9) - ) - (robotboss-greenshot - (new 'static 'vector) - (the-as basic 12288.0) - (the-as basic 600) - #t - ) - (robotboss-greenshot - (new 'static 'vector :x 4096.0 :z 12288.0) - (the-as basic 32768.0) - (the-as basic 600) - #f - ) - (ja-channel-push! 1 60) - (let ((v1-53 (-> self skel root-channel 0))) - (set! - (-> v1-53 frame-group) - (the-as art-joint-anim (-> self draw art-group data 11)) - ) - ) - ) - ((and - (>= (- (-> *display* game-frame-counter) (-> self state-time)) 2400) - (< (-> self children-spawned) 10) - ) - (+! (-> self children-spawned) 1) - (let ((gp-0 (get-process *default-dead-pool* green-eco-lurker-gen #x4000))) - (when gp-0 - (let ((t9-16 (method-of-type green-eco-lurker-gen activate))) - (t9-16 - (the-as green-eco-lurker-gen gp-0) - self - 'green-eco-lurker-gen - (the-as pointer #x70004000) + (robotboss-always-trans robotboss-green-dark-bomb) + (cond + ((and (>= (- (-> *display* game-frame-counter) (-> self state-time)) 120) (< (-> self children-spawned) 1)) + (robotboss-greenshot (new 'static 'vector) (the-as basic 24576.0) (the-as basic 600) #t) + (ja-channel-push! 1 60) + (let ((v1-9 (-> self skel root-channel 0))) + (set! (-> v1-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) ) - ) - (run-now-in-process - gp-0 - green-eco-lurker-gen-init-by-other - (-> self entity) - (-> self entity extra trans) - (-> self dda num-blobs) - ) - (-> gp-0 ppointer) + ) + ((and (>= (- (-> *display* game-frame-counter) (-> self state-time)) 360) (< (-> self children-spawned) 3)) + (robotboss-greenshot (new 'static 'vector :x 8192.0) (the-as basic 16384.0) (the-as basic 600) #t) + (robotboss-greenshot (new 'static 'vector :z 8192.0) (the-as basic 32768.0) (the-as basic 660) #f) + (ja-channel-push! 1 60) + (let ((v1-20 (-> self skel root-channel 0))) + (set! (-> v1-20 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + ) + ) + ((and (>= (- (-> *display* game-frame-counter) (-> self state-time)) 780) (< (-> self children-spawned) 6)) + (robotboss-greenshot (new 'static 'vector :z 12288.0) (the-as basic 20480.0) (the-as basic 600) #t) + (robotboss-greenshot (new 'static 'vector :x 8192.0) (the-as basic 8192.0) (the-as basic 660) #f) + (robotboss-greenshot (new 'static 'vector) (the-as basic 36864.0) (the-as basic 720) #f) + (ja-channel-push! 1 60) + (let ((v1-32 (-> self skel root-channel 0))) + (set! (-> v1-32 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + ) + ) + ((and (>= (- (-> *display* game-frame-counter) (-> self state-time)) 1200) (< (-> self children-spawned) 7)) + (robotboss-greenshot (new 'static 'vector) (the-as basic 24576.0) (the-as basic 600) #t) + (ja-channel-push! 1 60) + (let ((v1-42 (-> self skel root-channel 0))) + (set! (-> v1-42 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + ) + ) + ((and (>= (- (-> *display* game-frame-counter) (-> self state-time)) 1650) (< (-> self children-spawned) 9)) + (robotboss-greenshot (new 'static 'vector) (the-as basic 12288.0) (the-as basic 600) #t) + (robotboss-greenshot (new 'static 'vector :x 4096.0 :z 12288.0) (the-as basic 32768.0) (the-as basic 600) #f) + (ja-channel-push! 1 60) + (let ((v1-53 (-> self skel root-channel 0))) + (set! (-> v1-53 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + ) + ) + ((and (>= (- (-> *display* game-frame-counter) (-> self state-time)) 2400) (< (-> self children-spawned) 10)) + (+! (-> self children-spawned) 1) + (let ((gp-0 (get-process *default-dead-pool* green-eco-lurker-gen #x4000))) + (when gp-0 + (let ((t9-16 (method-of-type green-eco-lurker-gen activate))) + (t9-16 (the-as green-eco-lurker-gen gp-0) self 'green-eco-lurker-gen (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + green-eco-lurker-gen-init-by-other + (-> self entity) + (-> self entity extra trans) + (-> self dda num-blobs) + ) + (-> gp-0 ppointer) + ) + ) + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 24576.0 0.0 655360.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -26624.0) + ) + ((and (>= (- (-> *display* game-frame-counter) (-> self state-time)) 2460) (< (-> self children-spawned) 11)) + (+! (-> self children-spawned) 1) + (robotboss-yellow-eco-on) ) ) - (set! (-> self old-loc quad) (-> self desired-loc quad)) - (set-vector! (-> self desired-loc) 24576.0 0.0 655360.0 1.0) - (set! (-> self loc-t) 0.0) - (set! (-> self loc-t-start) (-> *display* game-frame-counter)) - (set! (-> self loc-t-duration) 900) - (set! (-> self desired-pool-y) -26624.0) - ) - ((and - (>= (- (-> *display* game-frame-counter) (-> self state-time)) 2460) - (< (-> self children-spawned) 11) - ) - (+! (-> self children-spawned) 1) - (robotboss-yellow-eco-on) - ) + (robotboss-position) + (none) ) - (robotboss-position) - (none) - ) :code (behavior () - (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 param 0) - (the float (+ (-> a0-0 frame-group data 0 length) -1)) - ) - (set! (-> a0-0 param 1) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (while (not (ja-done? 0)) - (suspend) - (ja-eval) - ) - (while #t - (cond - ((= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 13) - ) - (go robotboss-green-dark-bomb) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) (the float (+ (-> a0-0 frame-group data 0 length) -1))) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) ) - ((not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 6) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (while #t + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 13) ) - ) - (ja-channel-push! 1 60) - (let ((v1-25 (-> self skel root-channel 0))) - (set! - (-> v1-25 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) + (go robotboss-green-dark-bomb) + ) + ((not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-25 (-> self skel root-channel 0))) + (set! (-> v1-25 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + ) + ) + ) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-14 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! + a0-14 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) (the float (+ (-> a0-15 frame-group data 0 length) -1))) + (set! (-> a0-15 param 1) 1.0) + (joint-control-channel-group-eval! a0-15 (the-as art-joint-anim #f) num-func-seek!) + ) ) - ) ) - ) - (let ((a0-14 (-> self skel root-channel 0))) - (set! (-> a0-14 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-14 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-14 param 1) 1.0) - (set! (-> a0-14 frame-num) 0.0) - (joint-control-channel-group! - a0-14 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-15 (-> self skel root-channel 0))) - (set! - (-> a0-15 param 0) - (the float (+ (-> a0-15 frame-group data 0 length) -1)) - ) - (set! (-> a0-15 param 1) 1.0) - (joint-control-channel-group-eval! - a0-15 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -4437,163 +3453,128 @@ robotboss-handler :enter (behavior () - (set! (-> self old-loc quad) (-> self desired-loc quad)) - (set-vector! (-> self desired-loc) 24576.0 0.0 245760.0 1.0) - (set! (-> self loc-t) 0.0) - (set! (-> self loc-t-start) (-> *display* game-frame-counter)) - (set! (-> self loc-t-duration) 900) - (set! (-> self desired-pool-y) -26624.0) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM01" - #t - (the-as vector #f) + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 24576.0 0.0 245760.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -26624.0) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM01" + #t + (the-as vector #f) + ) + (set-setting! *setting-control* self 'sound-flava #f (the-as float 40.0) 47) + (none) ) - (set-setting! *setting-control* self 'sound-flava #f (the-as float 40.0) 47) - (none) - ) :trans (behavior () - (robotboss-always-trans robotboss-green-wait) - (if (>= (-> self loc-t) 1.0) - (go robotboss-green-wait) + (robotboss-always-trans robotboss-green-wait) + (if (>= (-> self loc-t) 1.0) + (go robotboss-green-wait) + ) + (robotboss-position) + (none) ) - (robotboss-position) - (none) - ) :code (behavior () - (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 param 0) - (the float (+ (-> a0-0 frame-group data 0 length) -1)) - ) - (set! (-> a0-0 param 1) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (while (not (ja-done? 0)) - (suspend) - (ja-eval) - ) - (ja-channel-push! 1 60) - (let ((v1-11 (-> self skel root-channel 0))) - (set! - (-> v1-11 frame-group) - (the-as art-joint-anim (-> self draw art-group data 10)) - ) - ) - (let ((a0-6 (-> self skel root-channel 0))) - (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-6 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) (the float (+ (-> a0-0 frame-group data 0 length) -1))) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) ) - ) - (set! (-> a0-6 param 1) 1.0) - (set! (-> a0-6 frame-num) 0.0) - (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-7 (-> self skel root-channel 0))) - (set! - (-> a0-7 param 0) - (the float (+ (-> a0-7 frame-group data 0 length) -1)) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) ) - (set! (-> a0-7 param 1) 1.0) - (joint-control-channel-group-eval! - a0-7 - (the-as art-joint-anim #f) - num-func-seek! + (ja-channel-push! 1 60) + (let ((v1-11 (-> self skel root-channel 0))) + (set! (-> v1-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) ) - ) - ) - (while #t - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 6) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-50 (-> self skel root-channel 0))) - (set! - (-> v1-50 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) - ) - ) - ) - (let ((a0-17 (-> self skel root-channel 0))) - (set! (-> a0-17 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-6 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) ) - (set! - (-> a0-17 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) ) - data - 0 - length - ) - -1 - ) - ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-50 (-> self skel root-channel 0))) + (set! (-> v1-50 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + ) + ) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-17 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-17 param 1) 1.0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! + a0-17 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! (-> a0-18 param 0) (the float (+ (-> a0-18 frame-group data 0 length) -1))) + (set! (-> a0-18 param 1) 1.0) + (joint-control-channel-group-eval! a0-18 (the-as art-joint-anim #f) num-func-seek!) + ) + ) ) - (set! (-> a0-17 param 1) 1.0) - (set! (-> a0-17 frame-num) 0.0) - (joint-control-channel-group! - a0-17 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-18 (-> self skel root-channel 0))) - (set! - (-> a0-18 param 0) - (the float (+ (-> a0-18 frame-group data 0 length) -1)) - ) - (set! (-> a0-18 param 1) 1.0) - (joint-control-channel-group-eval! - a0-18 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -4602,200 +3583,144 @@ :event robotboss-bomb-handler :enter - (behavior () - (set! (-> self children-spawned) 0) - 0 - (none) - ) + (behavior () (set! (-> self children-spawned) 0) 0 (none)) :exit - (behavior () - (set! (-> self ignore-camera) #f) - (set! (-> self des-cam-entity) #f) - (none) - ) + (behavior () (set! (-> self ignore-camera) #f) (set! (-> self des-cam-entity) #f) (none)) :trans (behavior () - (robotboss-always-trans robotboss-green) - (if - (and - (< (-> self children-spawned) 0) - (or - (not *target*) - (!= (-> *target* control unknown-surface00 name) 'launch-jump) - ) - ) - (go robotboss-green) + (robotboss-always-trans robotboss-green) + (if (and + (< (-> self children-spawned) 0) + (or (not *target*) (!= (-> *target* control unknown-surface00 name) 'launch-jump)) + ) + (go robotboss-green) + ) + (robotboss-position) + (none) ) - (robotboss-position) - (none) - ) :code (behavior () - (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 param 0) - (the float (+ (-> a0-0 frame-group data 0 length) -1)) - ) - (set! (-> a0-0 param 1) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (while (not (ja-done? 0)) - (suspend) - (ja-eval) - ) - (ja-channel-push! 1 30) - (let ((v1-11 (-> self skel root-channel 0))) - (set! - (-> v1-11 frame-group) - (the-as art-joint-anim (-> self draw art-group data 9)) - ) - ) - (let ((a0-6 (-> self skel root-channel 0))) - (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-6 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) (the float (+ (-> a0-0 frame-group data 0 length) -1))) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) ) - ) - (set! (-> a0-6 param 1) 1.0) - (set! (-> a0-6 frame-num) 0.0) - (joint-control-channel-group! a0-6 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) - (robotboss-darkecobomb - (new 'static 'vector :y 32768.0) - (the-as float 3600.0) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) ) - (set! (-> self des-cam-entity) "camera-365") - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM04" - #t - (the-as vector #f) + (ja-channel-push! 1 30) + (let ((v1-11 (-> self skel root-channel 0))) + (set! (-> v1-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) ) - ) - (suspend) - (let ((a0-10 (-> self skel root-channel 0))) - (set! - (-> a0-10 param 0) - (the float (+ (-> a0-10 frame-group data 0 length) -1)) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-6 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) ) - (set! (-> a0-10 param 1) 1.0) - (joint-control-channel-group-eval! - a0-10 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (while #t - (cond - ((and - *target* - (< (+ 81920.0 (-> self entity extra trans y)) (-> (target-pos 0) y)) - ) - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 7) - ) - ) - (ja-channel-push! 1 240) - (let ((v1-64 (-> self skel root-channel 0))) - (set! - (-> v1-64 frame-group) - (the-as art-joint-anim (-> self draw art-group data 7)) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) 15.0) (< (-> self children-spawned) 1)) + (robotboss-darkecobomb (new 'static 'vector :y 32768.0) (the-as float 3600.0)) + (set! (-> self des-cam-entity) "camera-365") + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM04" + #t + (the-as vector #f) ) ) - ) - ) - ((not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 6) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-73 (-> self skel root-channel 0))) - (set! - (-> v1-73 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 param 0) (the float (+ (-> a0-10 frame-group data 0 length) -1))) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!) ) - ) ) - ) - (let ((a0-30 (-> self skel root-channel 0))) - (set! (-> a0-30 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) + (while #t + (cond + ((and *target* (< (+ 81920.0 (-> self entity extra trans y)) (-> (target-pos 0) y))) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + ) + (ja-channel-push! 1 240) + (let ((v1-64 (-> self skel root-channel 0))) + (set! (-> v1-64 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + ) + ) + ) + ((not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-73 (-> self skel root-channel 0))) + (set! (-> v1-73 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + ) + ) + ) + (let ((a0-30 (-> self skel root-channel 0))) + (set! (-> a0-30 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-30 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-30 param 1) 1.0) + (set! (-> a0-30 frame-num) 0.0) + (joint-control-channel-group! + a0-30 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-31 (-> self skel root-channel 0))) + (set! (-> a0-31 param 0) (the float (+ (-> a0-31 frame-group data 0 length) -1))) + (set! (-> a0-31 param 1) 1.0) + (joint-control-channel-group-eval! a0-31 (the-as art-joint-anim #f) num-func-seek!) + ) + ) ) - (set! - (-> a0-30 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-30 param 1) 1.0) - (set! (-> a0-30 frame-num) 0.0) - (joint-control-channel-group! - a0-30 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-31 (-> self skel root-channel 0))) - (set! - (-> a0-31 param 0) - (the float (+ (-> a0-31 frame-group data 0 length) -1)) - ) - (set! (-> a0-31 param 1) 1.0) - (joint-control-channel-group-eval! - a0-31 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -4803,140 +3728,112 @@ (defstate robotboss-blue-dark-bomb (robotboss) :enter (behavior () - (set! (-> self old-loc quad) (-> self desired-loc quad)) - (set-vector! (-> self desired-loc) 16384.0 -118784.0 614400.0 1.0) - (set! (-> self loc-t) 0.0) - (set! (-> self loc-t-start) (-> *display* game-frame-counter)) - (set! (-> self loc-t-duration) 900) - (set! (-> self desired-pool-y) -28672.0) - (none) - ) + (set! (-> self old-loc quad) (-> self desired-loc quad)) + (set-vector! (-> self desired-loc) 16384.0 -118784.0 614400.0 1.0) + (set! (-> self loc-t) 0.0) + (set! (-> self loc-t-start) (-> *display* game-frame-counter)) + (set! (-> self loc-t-duration) 900) + (set! (-> self desired-pool-y) -28672.0) + (none) + ) :trans (behavior () - (robotboss-always-trans robotboss-blue-dark-bomb-wait) - (robotboss-position) - (if (>= (-> self loc-t) 1.0) - (go robotboss-blue-dark-bomb-wait) + (robotboss-always-trans robotboss-blue-dark-bomb-wait) + (robotboss-position) + (if (>= (-> self loc-t) 1.0) + (go robotboss-blue-dark-bomb-wait) + ) + (none) ) - (none) - ) :code (behavior () - (ja-channel-push! 1 60) - (let ((v1-2 (-> self skel root-channel 0))) - (set! - (-> v1-2 frame-group) - (the-as art-joint-anim (-> self draw art-group data 8)) - ) - ) - (let ((a0-4 (-> self skel root-channel 0))) - (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-4 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-4 param 1) 1.0) - (set! (-> a0-4 frame-num) 0.0) - (joint-control-channel-group! a0-4 (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-5 (-> self skel root-channel 0))) - (set! - (-> a0-5 param 0) - (the float (+ (-> a0-5 frame-group data 0 length) -1)) - ) - (set! (-> a0-5 param 1) 1.0) - (joint-control-channel-group-eval! - a0-5 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 6) - ) - ) (ja-channel-push! 1 60) - (let ((v1-41 (-> self skel root-channel 0))) - (set! - (-> v1-41 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) ) - ) - ) - (while #t - (let ((a0-15 (-> self skel root-channel 0))) - (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-4 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) ) - (set! - (-> a0-15 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-15 param 1) 1.0) - (set! (-> a0-15 frame-num) 0.0) - (joint-control-channel-group! - a0-15 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) (until (ja-done? 0) - (suspend) - (let ((a0-16 (-> self skel root-channel 0))) - (set! - (-> a0-16 param 0) - (the float (+ (-> a0-16 frame-group data 0 length) -1)) - ) - (set! (-> a0-16 param 1) 1.0) - (joint-control-channel-group-eval! - a0-16 - (the-as art-joint-anim #f) - num-func-seek! - ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1))) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) ) - ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-41 (-> self skel root-channel 0))) + (set! (-> v1-41 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + ) + ) + (while #t + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-15 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 param 0) (the float (+ (-> a0-16 frame-group data 0 length) -1))) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group-eval! a0-16 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) @@ -4945,201 +3842,188 @@ (let ((s4-0 (new 'stack-no-clear 'vector)) (gp-0 (new 'stack-no-clear 'vector)) ) - (let ((s3-0 (new 'stack-no-clear 'vector))) - (set! (-> gp-0 quad) (-> self entity extra trans quad)) - (vector<-cspace! s4-0 (-> self node-list data arg0)) - (vector-! s3-0 gp-0 s4-0) - (let ((f30-0 (vector-y-angle s3-0)) - (f0-1 (- 16384.0 (vector-x-angle s3-0))) - ) - (set! (-> *part-id-table* 2546 init-specs 14 initial-valuef) f30-0) - (set! (-> *part-id-table* 2546 init-specs 13 initial-valuef) f0-1) - (set! (-> *part-id-table* 2548 init-specs 14 initial-valuef) f30-0) - (set! (-> *part-id-table* 2548 init-specs 13 initial-valuef) f0-1) - (set! (-> *part-id-table* 2545 init-specs 14 initial-valuef) f30-0) - (set! (-> *part-id-table* 2545 init-specs 13 initial-valuef) f0-1) - ) - ) - (cond - ((and - (>= (- (-> *display* game-frame-counter) (-> self state-time)) 120) - (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 3) - ) - ) - (spawn (-> self particle 0) s4-0) - (when (and arg1 (nonzero? (-> self looping-sound 0))) - (update! (-> self looping-sound 0)) - (when (and *target* (zero? (logand (-> *target* state-flags) #x80f8))) - (let ((t2-0 (new 'stack-no-clear 'collide-mesh-cache-tri)) - (a2-0 (new 'stack-no-clear 'vector)) - ) - (vector-! a2-0 gp-0 s4-0) - (when - (>= - (dummy-10 - *collide-cache* - s4-0 - a2-0 - (the-as float 4096.0) - 16 - self - t2-0 - 1 - ) - 0.0 - ) - (let ((a1-13 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-13 from) self) - (set! (-> a1-13 num-params) 2) - (set! (-> a1-13 message) 'attack) - (set! (-> a1-13 param 0) (the-as uint #f)) - (let ((v1-50 (new 'static 'attack-info :mask #xc0))) - (set! (-> v1-50 shove-up) 10240.0) - (set! (-> v1-50 shove-back) 30720.0) - (set! (-> a1-13 param 1) (the-as uint v1-50)) - ) - (send-event-function *target* a1-13) - ) - ) - ) - ) - ) - ) - ((nonzero? (-> self looping-sound 0)) - (stop! (-> self looping-sound 0)) - ) - ) - (cond - ((and - (>= (- (-> *display* game-frame-counter) (-> self state-time)) 420) - (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 5) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self entity extra trans quad)) + (vector<-cspace! s4-0 (-> self node-list data arg0)) + (vector-! s3-0 gp-0 s4-0) + (let ((f30-0 (vector-y-angle s3-0)) + (f0-1 (- 16384.0 (vector-x-angle s3-0))) ) - ) - ) - (spawn (-> self particle 1) gp-0) - (when (and arg1 (nonzero? (-> self looping-sound 1))) - (update! (-> self looping-sound 1)) - (when - (and - *target* - (zero? (logand (-> *target* state-flags) #x80f8)) - (>= 8192.0 (vector-vector-distance gp-0 (target-pos 0))) + (set! (-> *part-id-table* 2546 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2546 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2548 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2548 init-specs 13 initial-valuef) f0-1) + (set! (-> *part-id-table* 2545 init-specs 14 initial-valuef) f30-0) + (set! (-> *part-id-table* 2545 init-specs 13 initial-valuef) f0-1) ) - (let ((a1-16 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-16 from) self) - (set! (-> a1-16 num-params) 2) - (set! (-> a1-16 message) 'attack) - (set! (-> a1-16 param 0) (the-as uint #f)) - (let ((v1-80 (new 'static 'attack-info :mask #xc0))) - (set! (-> v1-80 shove-up) 10240.0) - (set! (-> v1-80 shove-back) 30720.0) - (set! (-> a1-16 param 1) (the-as uint v1-80)) + ) + (cond + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 120) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 3) + ) ) - (send-event-function *target* a1-16) - ) + (spawn (-> self particle 0) s4-0) + (when (and arg1 (nonzero? (-> self looping-sound 0))) + (update! (-> self looping-sound 0)) + (when (and *target* (zero? (logand (-> *target* state-flags) #x80f8))) + (let ((t2-0 (new 'stack-no-clear 'collide-tri-result)) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (vector-! a2-0 gp-0 s4-0) + (when (>= (dummy-10 *collide-cache* s4-0 a2-0 (the-as float 4096.0) 16 self t2-0 1) 0.0) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 2) + (set! (-> a1-13 message) 'attack) + (set! (-> a1-13 param 0) (the-as uint #f)) + (let ((v1-50 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-50 shove-up) 10240.0) + (set! (-> v1-50 shove-back) 30720.0) + (set! (-> a1-13 param 1) (the-as uint v1-50)) + ) + (send-event-function *target* a1-13) + ) + ) + ) + ) + ) + ) + ((nonzero? (-> self looping-sound 0)) + (stop! (-> self looping-sound 0)) + ) + ) + (cond + ((and + (>= (- (-> *display* game-frame-counter) (-> self state-time)) 420) + (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + ) + ) + (spawn (-> self particle 1) gp-0) + (when (and arg1 (nonzero? (-> self looping-sound 1))) + (update! (-> self looping-sound 1)) + (when (and + *target* + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= 8192.0 (vector-vector-distance gp-0 (target-pos 0))) + ) + (let ((a1-16 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-16 from) self) + (set! (-> a1-16 num-params) 2) + (set! (-> a1-16 message) 'attack) + (set! (-> a1-16 param 0) (the-as uint #f)) + (let ((v1-80 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-80 shove-up) 10240.0) + (set! (-> v1-80 shove-back) 30720.0) + (set! (-> a1-16 param 1) (the-as uint v1-80)) + ) + (send-event-function *target* a1-16) + ) + ) + ) + ) + ((nonzero? (-> self looping-sound 1)) + (stop! (-> self looping-sound 1)) ) ) - ) - ((nonzero? (-> self looping-sound 1)) - (stop! (-> self looping-sound 1)) - ) ) - ) (none) ) (defbehavior robotboss-set-dda robotboss () 0 (let ((gp-0 (-> self entity extra perm))) - (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) - (set! (-> gp-0 user-int8 0) (seekl (-> gp-0 user-int8 0) 255 1)) - (let ((v1-5 (-> gp-0 user-int8 0))) - (set! (-> self dda) (cond - ((< 15 v1-5) - (new 'static 'robotboss-dda - :blue-bomb-time 4800.0 - :num-blobs 8 - :green-bomb-time 4200.0 - :red-shots-min 3 - :red-shot-time-min 5400.0 - :red-shot-time-rnd 600.0 - :red-bomb-time 3600.0 - :yellow-shot-time-min 1800.0 - :yellow-gun-hits 7 - :yellow-bomb-time 4800.0 - ) - ) - ((< 10 v1-5) - (new 'static 'robotboss-dda - :blue-bomb-time 4800.0 - :num-blobs 10 - :green-bomb-time 4200.0 - :red-shots-min 4 - :red-shot-time-min 4800.0 - :red-shot-time-rnd 600.0 - :red-bomb-time 3600.0 - :yellow-shot-time-min 1500.0 - :yellow-gun-hits 10 - :yellow-bomb-time 4800.0 - ) - ) - ((< 5 v1-5) - (new 'static 'robotboss-dda - :blue-bomb-time 4800.0 - :num-blobs 11 - :green-bomb-time 4200.0 - :red-shots-min 4 - :red-shot-time-min 4200.0 - :red-shot-time-rnd 600.0 - :red-bomb-time 3600.0 - :yellow-shot-time-min 1200.0 - :yellow-gun-hits 13 - :yellow-bomb-time 4800.0 - ) - ) - (else - (new 'static 'robotboss-dda - :blue-bomb-time 4800.0 - :num-blobs 12 - :green-bomb-time 4200.0 - :red-shots-min 5 - :red-shot-time-min 3600.0 - :red-shot-time-rnd 600.0 - :red-bomb-time 3600.0 - :yellow-shot-time-min 900.0 - :yellow-gun-hits 16 - :yellow-bomb-time 4800.0 - ) - ) - ) - ) + (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) + (set! (-> gp-0 user-int8 0) (seekl (-> gp-0 user-int8 0) 255 1)) + (let ((v1-5 (-> gp-0 user-int8 0))) + (set! (-> self dda) (cond + ((< 15 v1-5) + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 8 + :green-bomb-time 4200.0 + :red-shots-min 3 + :red-shot-time-min 5400.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 1800.0 + :yellow-gun-hits 7 + :yellow-bomb-time 4800.0 + ) + ) + ((< 10 v1-5) + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 10 + :green-bomb-time 4200.0 + :red-shots-min 4 + :red-shot-time-min 4800.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 1500.0 + :yellow-gun-hits 10 + :yellow-bomb-time 4800.0 + ) + ) + ((< 5 v1-5) + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 11 + :green-bomb-time 4200.0 + :red-shots-min 4 + :red-shot-time-min 4200.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 1200.0 + :yellow-gun-hits 13 + :yellow-bomb-time 4800.0 + ) + ) + (else + (new 'static 'robotboss-dda + :blue-bomb-time 4800.0 + :num-blobs 12 + :green-bomb-time 4200.0 + :red-shots-min 5 + :red-shot-time-min 3600.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 900.0 + :yellow-gun-hits 16 + :yellow-bomb-time 4800.0 + ) + ) + ) + ) + ) ) - ) (none) ) (defbehavior robotboss-blue-done robotboss () (robotboss-yellow-eco-off) (let ((a1-0 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-0 from) self) - (set! (-> a1-0 num-params) 0) - (set! (-> a1-0 message) 'show) - (let ((t9-1 send-event-function) - (v1-1 (-> self alts 11)) - ) - (t9-1 (if v1-1 - (-> v1-1 extra process) - ) - a1-0 - ) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'show) + (let ((t9-1 send-event-function) + (v1-1 (-> self alts 11)) + ) + (t9-1 + (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) ) - ) ) (defstate robotboss-blue-wait (robotboss) @@ -5147,885 +4031,561 @@ robotboss-handler :enter (behavior () - (set! (-> self state-time) (-> *display* game-frame-counter)) - (robotboss-setup-for-hits 4 5) - (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) 'hide) - (let ((t9-1 send-event-function) - (v1-3 (-> self alts 11)) - ) - (t9-1 (if v1-3 - (-> v1-3 extra process) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (robotboss-setup-for-hits 4 5) + (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) 'hide) + (let ((t9-1 send-event-function) + (v1-3 (-> self alts 11)) ) - a1-1 + (t9-1 + (if v1-3 + (-> v1-3 extra process) + ) + a1-1 + ) + ) ) - ) + (process-entity-status! self (entity-perm-status bit-3) #t) + (set! (-> self use-interesting) #t) + (robotboss-yellow-eco-on) + (none) ) - (process-entity-status! self (entity-perm-status bit-3) #t) - (set! (-> self use-interesting) #t) - (robotboss-yellow-eco-on) - (none) - ) :exit (behavior () - (let ((a0-1 (handle->process (-> self shot-attractor)))) - (if a0-1 - (deactivate a0-1) - ) - ) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 1) - (set! (-> a1-1 message) 'open) - (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 674))) - (let ((t9-1 send-event-function) - (v1-10 (-> self alts 3)) + (let ((a0-1 (handle->process (-> self shot-attractor)))) + (if a0-1 + (deactivate a0-1) ) - (t9-1 (if v1-10 - (-> v1-10 extra process) - ) - a1-1 ) - ) - ) - (let ((a1-2 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 1) - (set! (-> a1-2 message) 'open) - (set! (-> a1-2 param 0) (the-as uint 0.1)) - (let ((t9-2 send-event-function) - (v1-17 (-> self alts 0)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'open) + (set! (-> a1-1 param 0) (the-as uint (-> *part-group-id-table* 674))) + (let ((t9-1 send-event-function) + (v1-10 (-> self alts 3)) + ) + (t9-1 + (if v1-10 + (-> v1-10 extra process) + ) + a1-1 ) - (t9-2 (if v1-17 - (-> v1-17 extra process) - ) - a1-2 + ) ) - ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'open) + (set! (-> a1-2 param 0) (the-as uint 0.1)) + (let ((t9-2 send-event-function) + (v1-17 (-> self alts 0)) + ) + (t9-2 + (if v1-17 + (-> v1-17 extra process) + ) + a1-2 + ) + ) + ) + (set! (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 collide-with) + (the-as uint 0) + ) + (set! (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core collide-as) + (the-as uint 0) + ) + (set! (-> self use-interesting) #f) + (send-event *camera* 'point-of-interest #f) + (robotboss-blue-done) + (if (nonzero? (-> self looping-sound 0)) + (stop! (-> self looping-sound 0)) + ) + (if (nonzero? (-> self looping-sound 1)) + (stop! (-> self looping-sound 1)) + ) + (robotboss-set-dda) + (robotboss-cut-cam-exit) + (none) ) - (set! - (-> - (the-as collide-shape-prim-group (-> self root-override root-prim)) - prims - 0 - collide-with - ) - (the-as uint 0) - ) - (set! - (-> - (the-as collide-shape-prim-group (-> self root-override root-prim)) - prims - 0 - prim-core - collide-as - ) - (the-as uint 0) - ) - (set! (-> self use-interesting) #f) - (send-event *camera* 'point-of-interest #f) - (robotboss-blue-done) - (if (nonzero? (-> self looping-sound 0)) - (stop! (-> self looping-sound 0)) - ) - (if (nonzero? (-> self looping-sound 1)) - (stop! (-> self looping-sound 1)) - ) - (robotboss-set-dda) - (robotboss-cut-cam-exit) - (none) - ) :trans (behavior () - (robotboss-always-trans robotboss-blue-dark-bomb) - (robotboss-shooting-trans 9) - (cond - ((zero? (-> self hits-to-go)) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM06" - #t - (the-as vector #f) - ) - (robotboss-blue-done) - (set! (-> self took-hit) #f) - (+! (-> self hits-to-go) -1) - (ja-channel-push! 1 30) - (let ((v1-8 (-> self skel root-channel 0))) - (set! - (-> v1-8 frame-group) - (the-as art-joint-anim (-> self draw art-group data 33)) - ) - ) - (sound-play-by-name - (static-sound-name "explod-eye") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - (set! (-> self blue-smoke) #t) - (let ((gp-1 (new 'stack-no-clear 'vector))) - (vector<-cspace! gp-1 (-> self node-list data 7)) - (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) - (when s5-1 - (let ((t9-9 (method-of-type part-tracker activate))) - (t9-9 - (the-as part-tracker s5-1) - *entity-pool* - 'part-tracker - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-1 - part-tracker-init - (-> *part-group-id-table* 644) - 300 - #f - #f - #f - gp-1 - ) - (-> s5-1 ppointer) - ) - ) - ) - (let* ((s5-2 (get-process *default-dead-pool* manipy #x4000)) - (gp-2 (when s5-2 - (let ((t9-12 (method-of-type manipy activate))) - (t9-12 - (the-as manipy s5-2) - self - 'manipy - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-2 - manipy-init - (-> self root-override trans) - (-> self entity) - *robotboss-blueeco-sg* - #f - ) - (-> s5-2 ppointer) - ) - ) - ) - (send-event (ppointer->process (-> self parent)) 'flash 255.0) - (send-event (ppointer->process gp-2) 'anim-mode 'play1) - (send-event - (ppointer->process gp-2) - 'rot-quat - (-> self root-override quat) - ) - (send-event - (ppointer->process gp-2) - 'art-joint-anim - "robotboss-blueeco-blue-last-hit" - ) - ) - ) - ((-> self took-hit) - (if - (not + (robotboss-always-trans robotboss-blue-dark-bomb) + (robotboss-shooting-trans 9) + (cond + ((zero? (-> self hits-to-go)) ((method-of-type ambient-control play-ambient) (the-as ambient-control (&-> self ambient)) - "GOL-AM17" + "GOL-AM06" #t (the-as vector #f) ) + (robotboss-blue-done) + (set! (-> self took-hit) #f) + (+! (-> self hits-to-go) -1) + (ja-channel-push! 1 30) + (let ((v1-8 (-> self skel root-channel 0))) + (set! (-> v1-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 33))) + ) + (sound-play-by-name (static-sound-name "explod-eye") (new-sound-id) 1024 0 0 1 #t) + (set! (-> self blue-smoke) #t) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-1 (-> self node-list data 7)) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-9 (method-of-type part-tracker activate))) + (t9-9 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 part-tracker-init (-> *part-group-id-table* 644) 300 #f #f #f gp-1) + (-> s5-1 ppointer) + ) + ) + ) + (let* ((s5-2 (get-process *default-dead-pool* manipy #x4000)) + (gp-2 + (when s5-2 + (let ((t9-12 (method-of-type manipy activate))) + (t9-12 (the-as manipy s5-2) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process s5-2 manipy-init (-> self root-override trans) (-> self entity) *robotboss-blueeco-sg* #f) + (-> s5-2 ppointer) + ) + ) + ) + (send-event (ppointer->process (-> self parent)) 'flash 255.0) + (send-event (ppointer->process gp-2) 'anim-mode 'play1) + (send-event (ppointer->process gp-2) 'rot-quat (-> self root-override quat)) + (send-event (ppointer->process gp-2) 'art-joint-anim "robotboss-blueeco-blue-last-hit") + ) ) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM06" - #t - (the-as vector #f) - ) - ) - (set! (-> self took-hit) #f) - (ja-channel-push! 1 30) - (let ((v1-54 (-> self skel root-channel 0))) - (set! - (-> v1-54 frame-group) - (the-as art-joint-anim (-> self draw art-group data 4)) - ) - ) - ) - ) - (when (not (or (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 5) - ) - (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 33) + ((-> self took-hit) + (if (not + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM17" + #t + (the-as vector #f) ) ) - ) - ) - (robotboss-blue-beam 8 #t) - (robotboss-blue-beam 9 #f) - (when - ((method-of-type ambient-control TODO-RENAME-10) - (the-as ambient-control (&-> self ambient)) - (new 'stack-no-clear 'vector) - 3000 - (the-as float 327680.0) - self - ) - (let* ((v1-73 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-74 (the-as number (logior #x3f800000 v1-73))) - (f0-2 (+ -1.0 (the-as float v1-74))) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM06" + #t + (the-as vector #f) + ) ) - (cond - ((< 0.8 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM02" - #t - (the-as vector #f) - ) - ) - ((< 0.6 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM10" - #t - (the-as vector #f) - ) - ) - ((< 0.4 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM08" - #t - (the-as vector #f) - ) - ) - ((< 0.2 f0-2) - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "MAI-AM03" - #t - (the-as vector #f) - ) - ) - (else - ((method-of-type ambient-control play-ambient) - (the-as ambient-control (&-> self ambient)) - "GOL-AM07" - #t - (the-as vector #f) - ) + (set! (-> self took-hit) #f) + (ja-channel-push! 1 30) + (let ((v1-54 (-> self skel root-channel 0))) + (set! (-> v1-54 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + ) ) ) - ) - ) - (robotboss-position) - (robotboss-cut-cam - (the-as float 5.0) - (the-as float 50.0) - (the-as int (-> self draw art-group data 5)) - ) - (none) - ) - :code - (behavior () - (ja-channel-push! 1 120) - (let ((a0-1 (-> self skel root-channel 0))) - (set! - (-> a0-1 frame-group) - (the-as art-joint-anim (-> self draw art-group data 3)) - ) - (set! - (-> a0-1 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 3)) - 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 3)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-2 (-> self skel root-channel 0))) - (set! - (-> a0-2 param 0) - (the float (+ (-> a0-2 frame-group data 0 length) -1)) - ) - (set! (-> a0-2 param 1) 1.0) - (joint-control-channel-group-eval! - a0-2 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (while #t - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 3) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-32 (-> self skel root-channel 0))) - (set! - (-> v1-32 frame-group) - (the-as art-joint-anim (-> self draw art-group data 3)) - ) - ) - ) - (let ((a0-12 (-> self skel root-channel 0))) - (set! (-> a0-12 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-12 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) + (when (not (or + (= (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) ) - data - 0 - length - ) - -1 - ) - ) + (-> self draw art-group data 5) + ) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 33) + ) + ) + ) ) - (set! (-> a0-12 param 1) 1.0) - (set! (-> a0-12 frame-num) 0.0) - (joint-control-channel-group! - a0-12 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-13 (-> self skel root-channel 0))) - (set! - (-> a0-13 param 0) - (the float (+ (-> a0-13 frame-group data 0 length) -1)) - ) - (set! (-> a0-13 param 1) 1.0) - (joint-control-channel-group-eval! - a0-13 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (when (<= (-> self hits-to-go) 0) - (let ((a1-6 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-6 from) self) - (set! (-> a1-6 num-params) 1) - (set! (-> a1-6 message) 'target) - (set! (-> a1-6 param 0) (the-as uint 0.0)) - (let ((t9-8 send-event-function) - (v1-69 (-> self alts 12)) + (robotboss-blue-beam 8 #t) + (robotboss-blue-beam 9 #f) + (when ((method-of-type ambient-control TODO-RENAME-10) + (the-as ambient-control (&-> self ambient)) + (new 'stack-no-clear 'vector) + 3000 + (the-as float 327680.0) + self + ) + (let* ((v1-73 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-74 (the-as number (logior #x3f800000 v1-73))) + (f0-2 (+ -1.0 (the-as float v1-74))) + ) + (cond + ((< 0.8 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM02" + #t + (the-as vector #f) ) - (t9-8 (if v1-69 - (-> v1-69 extra process) - ) - a1-6 + ) + ((< 0.6 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM10" + #t + (the-as vector #f) + ) + ) + ((< 0.4 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM08" + #t + (the-as vector #f) + ) + ) + ((< 0.2 f0-2) + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "MAI-AM03" + #t + (the-as vector #f) + ) + ) + (else + ((method-of-type ambient-control play-ambient) + (the-as ambient-control (&-> self ambient)) + "GOL-AM07" + #t + (the-as vector #f) + ) + ) + ) ) - ) ) - (ja-channel-push! 1 30) - (let ((v1-74 (-> self skel root-channel 0))) - (set! - (-> v1-74 frame-group) - (the-as art-joint-anim (-> self draw art-group data 5)) - ) - ) - (let ((a0-20 (-> self skel root-channel 0))) - (set! (-> a0-20 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-20 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-20 param 1) 1.0) - (set! (-> a0-20 frame-num) 0.0) - (joint-control-channel-group! - a0-20 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-21 (-> self skel root-channel 0))) - (set! - (-> a0-21 param 0) - (the float (+ (-> a0-21 frame-group data 0 length) -1)) - ) - (set! (-> a0-21 param 1) 1.0) - (joint-control-channel-group-eval! - a0-21 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (go robotboss-blue-dark-bomb) - ) + (robotboss-position) + (robotboss-cut-cam (the-as float 5.0) (the-as float 50.0) (the-as int (-> self draw art-group data 5))) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 120) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) 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 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 3) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-32 (-> self skel root-channel 0))) + (set! (-> v1-32 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + ) + ) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-12 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-12 param 1) 1.0) + (set! (-> a0-12 frame-num) 0.0) + (joint-control-channel-group! + a0-12 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1))) + (set! (-> a0-13 param 1) 1.0) + (joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (when (<= (-> self hits-to-go) 0) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'target) + (set! (-> a1-6 param 0) (the-as uint 0.0)) + (let ((t9-8 send-event-function) + (v1-69 (-> self alts 12)) + ) + (t9-8 + (if v1-69 + (-> v1-69 extra process) + ) + a1-6 + ) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-74 (-> self skel root-channel 0))) + (set! (-> v1-74 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + ) + (let ((a0-20 (-> self skel root-channel 0))) + (set! (-> a0-20 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-20 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-20 param 1) 1.0) + (set! (-> a0-20 frame-num) 0.0) + (joint-control-channel-group! + a0-20 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-21 (-> self skel root-channel 0))) + (set! (-> a0-21 param 0) (the float (+ (-> a0-21 frame-group data 0 length) -1))) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group-eval! a0-21 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go robotboss-blue-dark-bomb) + ) + ) + (none) ) - (none) - ) :post (the-as (function none :behavior robotboss) transform-post) ) (defmethod init-from-entity! robotboss ((obj robotboss) (arg0 entity-actor)) (stack-size-set! (-> obj main-thread) 512) - (let - ((s4-0 - (new - 'process - 'collide-shape-moving - obj - (collide-list-enum usually-hit-by-player) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 19) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 368640.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 4)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 7) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 32768.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 6) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 57344.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 2) (the-as uint 0)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 6) + (set-vector! (-> s2-2 local-sphere) 0.0 -57344.0 61440.0 73728.0) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 3) (the-as uint 8)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core action) (the-as uint 1)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 16) + (set-vector! (-> s2-3 local-sphere) 0.0 -20480.0 69632.0 237568.0) + (append-prim s3-0 s2-3) + ) + (let ((s2-4 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 4) (the-as uint 0)))) + (set! (-> s2-4 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core action) (the-as uint 1)) + (set! (-> s2-4 prim-core offense) 4) + (set! (-> s2-4 transform-index) 14) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 81920.0) + (append-prim s3-0 s2-4) + ) + (let ((s2-5 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 5) (the-as uint 1)))) + (set! (-> s2-5 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-5 collide-with) (the-as uint 16)) + (set! (-> s2-5 prim-core action) (the-as uint 1)) + (set! (-> s2-5 prim-core offense) 4) + (set! (-> s2-5 transform-index) 39) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 69632.0) + (append-prim s3-0 s2-5) + ) + (let ((s2-6 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 6) (the-as uint 0)))) + (set! (-> s2-6 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-6 collide-with) (the-as uint 16)) + (set! (-> s2-6 prim-core action) (the-as uint 1)) + (set! (-> s2-6 prim-core offense) 4) + (set! (-> s2-6 transform-index) 31) + (set-vector! (-> s2-6 local-sphere) 0.0 -57344.0 0.0 90112.0) + (append-prim s3-0 s2-6) + ) + (let ((s2-7 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 7) (the-as uint 0)))) + (set! (-> s2-7 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-7 collide-with) (the-as uint 16)) + (set! (-> s2-7 prim-core action) (the-as uint 1)) + (set! (-> s2-7 prim-core offense) 4) + (set! (-> s2-7 transform-index) 30) + (set-vector! (-> s2-7 local-sphere) 0.0 24576.0 0.0 81920.0) + (append-prim s3-0 s2-7) + ) + (let ((s2-8 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 8) (the-as uint 0)))) + (set! (-> s2-8 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-8 collide-with) (the-as uint 16)) + (set! (-> s2-8 prim-core action) (the-as uint 1)) + (set! (-> s2-8 prim-core offense) 4) + (set! (-> s2-8 transform-index) 57) + (set-vector! (-> s2-8 local-sphere) 0.0 0.0 0.0 81920.0) + (append-prim s3-0 s2-8) + ) + (let ((s2-9 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 9) (the-as uint 2)))) + (set! (-> s2-9 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-9 collide-with) (the-as uint 16)) + (set! (-> s2-9 prim-core action) (the-as uint 1)) + (set! (-> s2-9 prim-core offense) 4) + (set! (-> s2-9 transform-index) 68) + (set-vector! (-> s2-9 local-sphere) 0.0 0.0 0.0 49152.0) + (append-prim s3-0 s2-9) + ) + (let ((s2-10 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 10) (the-as uint 0)))) + (set! (-> s2-10 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-10 collide-with) (the-as uint 16)) + (set! (-> s2-10 prim-core action) (the-as uint 1)) + (set! (-> s2-10 prim-core offense) 4) + (set! (-> s2-10 transform-index) 4) + (set-vector! (-> s2-10 local-sphere) 0.0 24576.0 0.0 102400.0) + (append-prim s3-0 s2-10) + ) + (let ((s2-11 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 11) (the-as uint 0)))) + (set! (-> s2-11 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-11 collide-with) (the-as uint 16)) + (set! (-> s2-11 prim-core action) (the-as uint 1)) + (set! (-> s2-11 prim-core offense) 4) + (set! (-> s2-11 transform-index) 77) + (set-vector! (-> s2-11 local-sphere) 0.0 0.0 0.0 73728.0) + (append-prim s3-0 s2-11) + ) + (let ((s2-12 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 12) (the-as uint 0)))) + (set! (-> s2-12 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-12 collide-with) (the-as uint 16)) + (set! (-> s2-12 prim-core action) (the-as uint 1)) + (set! (-> s2-12 prim-core offense) 4) + (set! (-> s2-12 transform-index) 75) + (set-vector! (-> s2-12 local-sphere) 0.0 24576.0 0.0 81920.0) + (append-prim s3-0 s2-12) + ) + (let ((s2-13 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 13) (the-as uint 0)))) + (set! (-> s2-13 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-13 collide-with) (the-as uint 16)) + (set! (-> s2-13 prim-core action) (the-as uint 1)) + (set! (-> s2-13 prim-core offense) 4) + (set! (-> s2-13 transform-index) 74) + (set-vector! (-> s2-13 local-sphere) 0.0 40960.0 0.0 73728.0) + (append-prim s3-0 s2-13) + ) + (let ((s2-14 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 14) (the-as uint 0)))) + (set! (-> s2-14 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-14 collide-with) (the-as uint 16)) + (set! (-> s2-14 prim-core action) (the-as uint 1)) + (set! (-> s2-14 prim-core offense) 4) + (set! (-> s2-14 transform-index) 73) + (set-vector! (-> s2-14 local-sphere) 0.0 32768.0 0.0 61440.0) + (append-prim s3-0 s2-14) + ) + (let ((s2-15 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 15) (the-as uint 0)))) + (set! (-> s2-15 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-15 collide-with) (the-as uint 16)) + (set! (-> s2-15 prim-core action) (the-as uint 1)) + (set! (-> s2-15 prim-core offense) 4) + (set! (-> s2-15 transform-index) 84) + (set-vector! (-> s2-15 local-sphere) 0.0 40960.0 -8192.0 98304.0) + (append-prim s3-0 s2-15) + ) + (let ((s2-16 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 16) (the-as uint 0)))) + (set! (-> s2-16 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-16 collide-with) (the-as uint 16)) + (set! (-> s2-16 prim-core action) (the-as uint 1)) + (set! (-> s2-16 prim-core offense) 4) + (set! (-> s2-16 transform-index) 83) + (set-vector! (-> s2-16 local-sphere) 0.0 65536.0 0.0 73728.0) + (append-prim s3-0 s2-16) + ) + (let ((s2-17 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 17) (the-as uint 0)))) + (set! (-> s2-17 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-17 collide-with) (the-as uint 16)) + (set! (-> s2-17 prim-core action) (the-as uint 1)) + (set! (-> s2-17 prim-core offense) 4) + (set! (-> s2-17 transform-index) 82) + (set-vector! (-> s2-17 local-sphere) 0.0 32768.0 0.0 61440.0) + (append-prim s3-0 s2-17) + ) + (let ((s2-18 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 18) (the-as uint 0)))) + (set! (-> s2-18 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-18 collide-with) (the-as uint 16)) + (set! (-> s2-18 prim-core action) (the-as uint 1)) + (set! (-> s2-18 prim-core offense) 4) + (set! (-> s2-18 transform-index) 3) + (set-vector! (-> s2-18 local-sphere) 0.0 0.0 0.0 61440.0) + (append-prim s3-0 s2-18) + ) ) - ) + (set! (-> s4-0 nav-radius) 4096.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) ) - (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) - (set! (-> s4-0 reaction) default-collision-reaction) - (set! - (-> s4-0 no-reaction) - (the-as - (function collide-shape-moving collide-shape-intersect vector vector none) - nothing - ) - ) - (let - ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 19) 0))) - (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) - (set! (-> s3-0 collide-with) (the-as uint 16)) - (set! (-> s3-0 prim-core action) (the-as uint 1)) - (set! (-> s3-0 transform-index) 0) - (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 368640.0) - (set-root-prim! s4-0 s3-0) - (let - ((s2-0 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 0) - (the-as uint 4) - ) - ) - ) - (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-0 collide-with) (the-as uint 16)) - (set! (-> s2-0 prim-core action) (the-as uint 1)) - (set! (-> s2-0 prim-core offense) 4) - (set! (-> s2-0 transform-index) 7) - (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 32768.0) - (append-prim s3-0 s2-0) - ) - (let - ((s2-1 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 1) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-1 collide-with) (the-as uint 16)) - (set! (-> s2-1 prim-core action) (the-as uint 1)) - (set! (-> s2-1 prim-core offense) 4) - (set! (-> s2-1 transform-index) 6) - (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 57344.0) - (append-prim s3-0 s2-1) - ) - (let - ((s2-2 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 2) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-2 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-2 collide-with) (the-as uint 16)) - (set! (-> s2-2 prim-core action) (the-as uint 1)) - (set! (-> s2-2 prim-core offense) 4) - (set! (-> s2-2 transform-index) 6) - (set-vector! (-> s2-2 local-sphere) 0.0 -57344.0 61440.0 73728.0) - (append-prim s3-0 s2-2) - ) - (let - ((s2-3 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 3) - (the-as uint 8) - ) - ) - ) - (set! (-> s2-3 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-3 collide-with) (the-as uint 16)) - (set! (-> s2-3 prim-core action) (the-as uint 1)) - (set! (-> s2-3 prim-core offense) 4) - (set! (-> s2-3 transform-index) 16) - (set-vector! (-> s2-3 local-sphere) 0.0 -20480.0 69632.0 237568.0) - (append-prim s3-0 s2-3) - ) - (let - ((s2-4 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 4) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-4 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-4 collide-with) (the-as uint 16)) - (set! (-> s2-4 prim-core action) (the-as uint 1)) - (set! (-> s2-4 prim-core offense) 4) - (set! (-> s2-4 transform-index) 14) - (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 81920.0) - (append-prim s3-0 s2-4) - ) - (let - ((s2-5 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 5) - (the-as uint 1) - ) - ) - ) - (set! (-> s2-5 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-5 collide-with) (the-as uint 16)) - (set! (-> s2-5 prim-core action) (the-as uint 1)) - (set! (-> s2-5 prim-core offense) 4) - (set! (-> s2-5 transform-index) 39) - (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 69632.0) - (append-prim s3-0 s2-5) - ) - (let - ((s2-6 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 6) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-6 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-6 collide-with) (the-as uint 16)) - (set! (-> s2-6 prim-core action) (the-as uint 1)) - (set! (-> s2-6 prim-core offense) 4) - (set! (-> s2-6 transform-index) 31) - (set-vector! (-> s2-6 local-sphere) 0.0 -57344.0 0.0 90112.0) - (append-prim s3-0 s2-6) - ) - (let - ((s2-7 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 7) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-7 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-7 collide-with) (the-as uint 16)) - (set! (-> s2-7 prim-core action) (the-as uint 1)) - (set! (-> s2-7 prim-core offense) 4) - (set! (-> s2-7 transform-index) 30) - (set-vector! (-> s2-7 local-sphere) 0.0 24576.0 0.0 81920.0) - (append-prim s3-0 s2-7) - ) - (let - ((s2-8 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 8) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-8 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-8 collide-with) (the-as uint 16)) - (set! (-> s2-8 prim-core action) (the-as uint 1)) - (set! (-> s2-8 prim-core offense) 4) - (set! (-> s2-8 transform-index) 57) - (set-vector! (-> s2-8 local-sphere) 0.0 0.0 0.0 81920.0) - (append-prim s3-0 s2-8) - ) - (let - ((s2-9 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 9) - (the-as uint 2) - ) - ) - ) - (set! (-> s2-9 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-9 collide-with) (the-as uint 16)) - (set! (-> s2-9 prim-core action) (the-as uint 1)) - (set! (-> s2-9 prim-core offense) 4) - (set! (-> s2-9 transform-index) 68) - (set-vector! (-> s2-9 local-sphere) 0.0 0.0 0.0 49152.0) - (append-prim s3-0 s2-9) - ) - (let - ((s2-10 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 10) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-10 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-10 collide-with) (the-as uint 16)) - (set! (-> s2-10 prim-core action) (the-as uint 1)) - (set! (-> s2-10 prim-core offense) 4) - (set! (-> s2-10 transform-index) 4) - (set-vector! (-> s2-10 local-sphere) 0.0 24576.0 0.0 102400.0) - (append-prim s3-0 s2-10) - ) - (let - ((s2-11 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 11) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-11 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-11 collide-with) (the-as uint 16)) - (set! (-> s2-11 prim-core action) (the-as uint 1)) - (set! (-> s2-11 prim-core offense) 4) - (set! (-> s2-11 transform-index) 77) - (set-vector! (-> s2-11 local-sphere) 0.0 0.0 0.0 73728.0) - (append-prim s3-0 s2-11) - ) - (let - ((s2-12 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 12) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-12 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-12 collide-with) (the-as uint 16)) - (set! (-> s2-12 prim-core action) (the-as uint 1)) - (set! (-> s2-12 prim-core offense) 4) - (set! (-> s2-12 transform-index) 75) - (set-vector! (-> s2-12 local-sphere) 0.0 24576.0 0.0 81920.0) - (append-prim s3-0 s2-12) - ) - (let - ((s2-13 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 13) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-13 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-13 collide-with) (the-as uint 16)) - (set! (-> s2-13 prim-core action) (the-as uint 1)) - (set! (-> s2-13 prim-core offense) 4) - (set! (-> s2-13 transform-index) 74) - (set-vector! (-> s2-13 local-sphere) 0.0 40960.0 0.0 73728.0) - (append-prim s3-0 s2-13) - ) - (let - ((s2-14 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 14) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-14 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-14 collide-with) (the-as uint 16)) - (set! (-> s2-14 prim-core action) (the-as uint 1)) - (set! (-> s2-14 prim-core offense) 4) - (set! (-> s2-14 transform-index) 73) - (set-vector! (-> s2-14 local-sphere) 0.0 32768.0 0.0 61440.0) - (append-prim s3-0 s2-14) - ) - (let - ((s2-15 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 15) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-15 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-15 collide-with) (the-as uint 16)) - (set! (-> s2-15 prim-core action) (the-as uint 1)) - (set! (-> s2-15 prim-core offense) 4) - (set! (-> s2-15 transform-index) 84) - (set-vector! (-> s2-15 local-sphere) 0.0 40960.0 -8192.0 98304.0) - (append-prim s3-0 s2-15) - ) - (let - ((s2-16 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 16) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-16 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-16 collide-with) (the-as uint 16)) - (set! (-> s2-16 prim-core action) (the-as uint 1)) - (set! (-> s2-16 prim-core offense) 4) - (set! (-> s2-16 transform-index) 83) - (set-vector! (-> s2-16 local-sphere) 0.0 65536.0 0.0 73728.0) - (append-prim s3-0 s2-16) - ) - (let - ((s2-17 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 17) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-17 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-17 collide-with) (the-as uint 16)) - (set! (-> s2-17 prim-core action) (the-as uint 1)) - (set! (-> s2-17 prim-core offense) 4) - (set! (-> s2-17 transform-index) 82) - (set-vector! (-> s2-17 local-sphere) 0.0 32768.0 0.0 61440.0) - (append-prim s3-0 s2-17) - ) - (let - ((s2-18 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 18) - (the-as uint 0) - ) - ) - ) - (set! (-> s2-18 prim-core collide-as) (the-as uint 2048)) - (set! (-> s2-18 collide-with) (the-as uint 16)) - (set! (-> s2-18 prim-core action) (the-as uint 1)) - (set! (-> s2-18 prim-core offense) 4) - (set! (-> s2-18 transform-index) 3) - (set-vector! (-> s2-18 local-sphere) 0.0 0.0 0.0 61440.0) - (append-prim s3-0 s2-18) - ) - ) - (set! (-> s4-0 nav-radius) 4096.0) - (backup-collide-with-as s4-0) - (set! (-> obj root-override) s4-0) - ) (process-drawable-from-entity! obj arg0) (initialize-skeleton obj *robotboss-sg* '()) (aybabtu 2) - (set! - (-> obj nav) - (new 'process 'nav-control (-> obj root-override) 16 (the-as float 40960.0)) - ) - (logior! - (-> obj nav flags) - (nav-control-flags display-marks bit3 bit5 bit6 bit7) - ) - (set! - (-> obj root-override nav-flags) - (logand -2 (-> obj root-override nav-flags)) - ) + (set! (-> obj nav) (new 'process 'nav-control (-> obj root-override) 16 (the-as float 40960.0))) + (logior! (-> obj nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) + (set! (-> obj root-override nav-flags) (logand -2 (-> obj root-override nav-flags))) (let ((t9-48 (method-of-type path-control new)) (a0-87 'process) (a1-47 path-control) @@ -6033,143 +4593,107 @@ (a3-22 'path) (t0-21 0.0) ) - (set! (-> obj path) (t9-48 a0-87 a1-47 a2-23 a3-22 (the-as float t0-21))) - (logior! - (-> obj path flags) - (path-control-flag display draw-line draw-point draw-text) - ) - (logclear! (-> obj mask) (process-mask actor-pause)) - (set! (-> obj root-override pause-adjust-distance) 1228800.0) - (set-vector! (-> obj old-loc) 8192.0 0.0 245760.0 1.0) - (set! (-> obj desired-loc quad) (-> obj old-loc quad)) - (set! (-> obj loc-t) 1.0) - (set! (-> obj loc-t-duration) 1) - (set! (-> obj loc-t-start) 0) - (set! (-> obj shot-attractor) (the-as handle #f)) - (set! (-> obj white-eco) (the-as handle #f)) - (set! (-> obj desired-pool-y) -30720.0) - (set! (-> obj des-cam-entity) #f) - (set! (-> obj use-interesting) #f) - (set! (-> obj ignore-camera) #f) - (dotimes (v1-211 13) - (set! (-> obj alts v1-211) #f) - ) - (let ((s5-1 (entity-actor-count (-> obj entity) 'alt-actor))) - (dotimes (s4-1 (min 13 s5-1)) - (set! - (-> obj alts s4-1) - (entity-actor-lookup (-> obj entity) 'alt-actor s4-1) + (set! (-> obj path) (t9-48 a0-87 a1-47 a2-23 a3-22 (the-as float t0-21))) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj root-override pause-adjust-distance) 1228800.0) + (set-vector! (-> obj old-loc) 8192.0 0.0 245760.0 1.0) + (set! (-> obj desired-loc quad) (-> obj old-loc quad)) + (set! (-> obj loc-t) 1.0) + (set! (-> obj loc-t-duration) 1) + (set! (-> obj loc-t-start) 0) + (set! (-> obj shot-attractor) (the-as handle #f)) + (set! (-> obj white-eco) (the-as handle #f)) + (set! (-> obj desired-pool-y) -30720.0) + (set! (-> obj des-cam-entity) #f) + (set! (-> obj use-interesting) #f) + (set! (-> obj ignore-camera) #f) + (dotimes (v1-211 13) + (set! (-> obj alts v1-211) #f) ) - ) - ) - (set! - (-> obj particle 0) - (create-launch-control (-> *part-group-id-table* 636) obj) - ) - (set! - (-> obj particle 1) - (create-launch-control (-> *part-group-id-table* 637) obj) - ) - (set! - (-> obj particle 2) - (create-launch-control (-> *part-group-id-table* 645) obj) - ) - (set! - (-> obj particle 3) - (create-launch-control (-> *part-group-id-table* 650) obj) - ) - (set! - (-> obj particle 4) - (create-launch-control (-> *part-group-id-table* 654) obj) - ) - (set! - (-> obj particle 5) - (create-launch-control (-> *part-group-id-table* 646) obj) - ) - (set! - (-> obj particle 6) - (create-launch-control (-> *part-group-id-table* 651) obj) - ) - (set! - (-> obj looping-sound 0) - (new - 'process - 'ambient-sound - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "robo-blue-lp") - :volume #x400 - :fo-max 80 + (let ((s5-1 (entity-actor-count (-> obj entity) 'alt-actor))) + (dotimes (s4-1 (min 13 s5-1)) + (set! (-> obj alts s4-1) (entity-actor-lookup (-> obj entity) 'alt-actor s4-1)) + ) ) - (-> obj root-override trans) - ) - ) - (set! - (-> obj looping-sound 1) - (new - 'process - 'ambient-sound - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "eco-torch") - :volume #x400 - :fo-max 80 - ) - (-> obj root-override trans) - ) - ) - (set! - (-> obj looping-sound 2) - (new - 'process - 'ambient-sound - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "red-buzz") - :volume #x400 - :fo-max 80 - ) - (-> obj root-override trans) - ) - ) - (let ((t9-61 (method-of-type ambient-sound new)) - (a0-110 'process) - (a1-60 ambient-sound) - (a2-28 - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "bfg-buzz") - :volume #x400 - :fo-max 80 - ) + (set! (-> obj particle 0) (create-launch-control (-> *part-group-id-table* 636) obj)) + (set! (-> obj particle 1) (create-launch-control (-> *part-group-id-table* 637) obj)) + (set! (-> obj particle 2) (create-launch-control (-> *part-group-id-table* 645) obj)) + (set! (-> obj particle 3) (create-launch-control (-> *part-group-id-table* 650) obj)) + (set! (-> obj particle 4) (create-launch-control (-> *part-group-id-table* 654) obj)) + (set! (-> obj particle 5) (create-launch-control (-> *part-group-id-table* 646) obj)) + (set! (-> obj particle 6) (create-launch-control (-> *part-group-id-table* 651) obj)) + (set! (-> obj looping-sound 0) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "robo-blue-lp") + :volume #x400 + :fo-max 80 + ) + (-> obj root-override trans) + ) ) - (a3-26 (-> obj root-override trans)) - ) - (set! (-> obj looping-sound 3) (t9-61 a0-110 a1-60 a2-28 a3-26)) - (set! (-> obj blue-smoke) #f) - (set! (-> obj red-smoke) #f) - (set! (-> obj yellow-smoke) #f) - ((method-of-type ambient-control dummy-9) - (the-as ambient-control (&-> obj ambient)) - (the-as vector a1-60) - (the-as int a2-28) - (the-as float a3-26) - (the-as process-drawable t0-21) - ) + (set! (-> obj looping-sound 1) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "eco-torch") + :volume #x400 + :fo-max 80 + ) + (-> obj root-override trans) + ) + ) + (set! (-> obj looping-sound 2) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "red-buzz") + :volume #x400 + :fo-max 80 + ) + (-> obj root-override trans) + ) + ) + (let ((t9-61 (method-of-type ambient-sound new)) + (a0-110 'process) + (a1-60 ambient-sound) + (a2-28 + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "bfg-buzz") + :volume #x400 + :fo-max 80 + ) + ) + (a3-26 (-> obj root-override trans)) + ) + (set! (-> obj looping-sound 3) (t9-61 a0-110 a1-60 a2-28 a3-26)) + (set! (-> obj blue-smoke) #f) + (set! (-> obj red-smoke) #f) + (set! (-> obj yellow-smoke) #f) + ((method-of-type ambient-control dummy-9) + (the-as ambient-control (&-> obj ambient)) + (the-as vector a1-60) + (the-as int a2-28) + (the-as float a3-26) + (the-as process-drawable t0-21) + ) + ) ) - ) - (set! - (-> obj yellow-gun) - (new 'process 'joint-mod (joint-mod-handler-mode flex-blend) obj 16) - ) + (set! (-> obj yellow-gun) (new 'process 'joint-mod (joint-mod-handler-mode flex-blend) obj 16)) (set-vector! (-> obj yellow-gun twist-max) 8192.0 8192.0 0.0 1.0) (set! (-> obj yellow-gun up) (the-as uint 1)) (set! (-> obj yellow-gun nose) (the-as uint 2)) @@ -6177,22 +4701,20 @@ (set! (-> obj yellow-gun max-dist) 819200.0) (set! (-> obj yellow-gun ignore-angle) 16384.0) (set! (-> obj palette-val) 0.0) - (set! - (-> obj dda) - (new 'static 'robotboss-dda - :blue-bomb-time 4200.0 - :num-blobs 12 - :green-bomb-time 4200.0 - :red-shots-min 5 - :red-shot-time-min 3600.0 - :red-shot-time-rnd 600.0 - :red-bomb-time 3600.0 - :yellow-shot-time-min 900.0 - :yellow-shot-time-rnd 600.0 - :yellow-gun-hits 5 - :yellow-bomb-time 3600.0 - ) - ) + (set! (-> obj dda) (new 'static 'robotboss-dda + :blue-bomb-time 4200.0 + :num-blobs 12 + :green-bomb-time 4200.0 + :red-shots-min 5 + :red-shot-time-min 3600.0 + :red-shot-time-rnd 600.0 + :red-bomb-time 3600.0 + :yellow-shot-time-min 900.0 + :yellow-shot-time-rnd 600.0 + :yellow-gun-hits 5 + :yellow-bomb-time 3600.0 + ) + ) (go robotboss-blue-wait) (none) ) diff --git a/goal_src/levels/jungle/darkvine.gc b/goal_src/levels/jungle/darkvine.gc index bc35052ec1..f6258bae6c 100644 --- a/goal_src/levels/jungle/darkvine.gc +++ b/goal_src/levels/jungle/darkvine.gc @@ -5,3 +5,552 @@ ;; name in dgo: darkvine ;; dgos: JUN, JUNGLE, L1 +(define-extern *darkvine-sg* skeleton-group) + +(declare-type darkvine process-drawable) + +(define-extern darkvine-die (state symbol darkvine)) ;; unknown type +(define-extern darkvine-idle (state darkvine)) ;; unknown type +(define-extern darkvine-retreat (state darkvine)) ;; unknown type + +;; DECOMP BEGINS + +(deftype darkvine (process-drawable) + ((root-override collide-shape :offset 112) + (speed float :offset-assert 176) + (tip-index int8 :offset-assert 180) + (dangerous symbol :offset-assert 184) + (vulnerable symbol :offset-assert 188) + (hit-player symbol :offset-assert 192) + (touch-time uint64 :offset-assert 200) + (player-attack-id int32 :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xd4 + :flag-assert #x14007000d4 + ) + + +(defmethod run-logic? darkvine ((obj darkvine)) + (or + (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or + (and + (nonzero? (-> obj draw)) + (logtest? (-> obj draw status) 8) + (>= + (+ + (-> *ACTOR-bank* pause-dist) + (-> obj root-override pause-adjust-distance) + ) + (vector-vector-distance (-> obj root-override trans) (math-camera-pos)) + ) + ) + (and + (nonzero? (-> obj skel)) + (!= (-> obj skel root-channel 0) (-> obj skel channel)) + ) + (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) + ) + ) + ) + +(defskelgroup *darkvine-sg* darkvine + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 2 0 3.5) + :longest-edge (meters 0) + ) + +(set! + (-> *part-group-id-table* 175) + (new 'static 'sparticle-launch-group + :length 3 + :duration #x96 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-darkvine-puffs" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 800) + (sp-item 801) + (sp-item 802) + ) + :bounds + (new 'static 'sphere :y 8192.0 :w 12288.0) + ) + ) + +(set! + (-> *part-id-table* 800) + (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.8) + (sp-rnd-flt spt-x (meters 0.0) (meters 0.5) 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 30.0 20.0 1.0) + (sp-rnd-flt spt-g 25.0 10.0 1.0) + (sp-rnd-flt spt-b 10.0 5.0 1.0) + (sp-rnd-flt spt-a 0.0 32.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.0016666667) (meters 0.0033333334) 1.0) + (sp-flt spt-vel-y (meters 0.013333334)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a 0.1882353) + (sp-flt spt-accel-y -2.048) + (sp-int spt-timer 255) + (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* 802) + (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.25) + (sp-rnd-flt spt-x (meters 0.0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.025) (meters 0.2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 45.0 45.0 1.0) + (sp-rnd-flt spt-g 45.0 10.0 1.0) + (sp-rnd-flt spt-b 20.0 6.0 1.0) + (sp-flt spt-a 96.0) + (sp-rnd-flt spt-vel-x (meters 0.0016666667) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-accel-y -2.7306666) + (sp-int spt-timer 375) + (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* 801) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters 0.0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 10.0 6.0 1.0) + (sp-rnd-flt spt-g 40.0 90.0 1.0) + (sp-rnd-flt spt-b 10.0 6.0 1.0) + (sp-flt spt-a 96.0) + (sp-rnd-flt spt-vel-x (meters 0.0016666667) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.013333334) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -1.2) 1 436.90668) + (sp-flt spt-accel-y -1.3653333) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 50] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 52] +(defbehavior + darkvine-event-handler darkvine + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'touch) + (dummy-45 (-> self root-override)) + (when (-> self dangerous) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'attack) + (set! (-> a1-1 param 0) (-> arg3 param 0)) + (set! + (-> a1-1 param 1) + (the-as uint (new 'static 'attack-info)) + ) + (if (send-event-function arg0 a1-1) + (dummy-54 (-> self root-override) 2 0) + ) + ) + ) + ) + ((= v1-0 'attack) + (let ((v1-10 (-> arg3 param 2))) + (cond + ((!= v1-10 (-> self player-attack-id)) + (set! (-> self player-attack-id) (the-as int v1-10)) + (when (-> self vulnerable) + (dummy-45 (-> self root-override)) + (go darkvine-retreat) + ) + ) + (else + 'push + ) + ) + ) + ) + ) + ) + ) + ) + +(defstate darkvine-idle (darkvine) + :event + darkvine-event-handler + :code + (behavior () + (set! (-> self dangerous) #t) + (set! (-> self vulnerable) #t) + (let ((f30-0 0.0)) + (while #t + (if + (logtest? (get-reminder (get-task-control (game-task jungle-plant)) 0) 1) + (go darkvine-die #f) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) (-> self speed)) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (and (>= (ja-aframe-num 0) 120.0) (>= 180.0 (ja-aframe-num 0))) + (seek-toward-yaw-angle! (-> self root-override) f30-0 32768.0 150) + ) + (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) (-> self speed)) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (set! f30-0 (if (rand-vu-percent? 0.5) + (+ 16384.0 f30-0) + (+ -16384.0 f30-0) + ) + ) + ) + ) + (none) + ) + :post + (behavior () + (when + (and + (-> self hit-player) + (or + (not *target*) + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self touch-time))) + 15 + ) + ) + ) + (dummy-54 (-> self root-override) 2 4) + (set! (-> self hit-player) #f) + ) + (transform-post) + (if *target* + (look-at-enemy! + (-> *target* neck) + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> self node-list data (-> self tip-index)) + ) + 'nothing + self + ) + ) + (none) + ) + ) + +(defstate darkvine-retreat (darkvine) + :event + darkvine-event-handler + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self dangerous) #f) + (set! (-> self vulnerable) #f) + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 45) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + 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 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 800) + (-> self root-override trans) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.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! + ) + ) + ) + (ja-channel-set! 0) + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 600) + (suspend) + ) + ) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 + (the-as part-tracker gp-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 175) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-1 ppointer) + ) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-2) 150) + (suspend) + ) + ) + (set! (-> self dangerous) #t) + (logior! (-> self mask) (process-mask actor-pause)) + (ja-channel-set! 1) + (let ((a0-11 (-> self skel root-channel 0))) + (set! + (-> a0-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-11 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-11 param 1) 1.0) + (set! (-> a0-11 frame-num) 0.0) + (joint-control-channel-group! + a0-11 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 param 0) + (the float (+ (-> a0-12 frame-group data 0 length) -1)) + ) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go darkvine-idle) + (none) + ) + :post + (-> darkvine-idle post) + ) + +(defstate darkvine-die (darkvine) + :code + (behavior ((arg0 symbol)) + (logclear! (-> self mask) (process-mask actor-pause)) + (if arg0 + (ja-channel-set! 1) + (ja-channel-push! 1 150) + ) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while (!= (-> self skel root-channel 0) (-> self skel channel)) + (suspend) + ) + (logior! (-> self mask) (process-mask sleep)) + (anim-loop) + (none) + ) + :post + (-> darkvine-idle post) + ) + +(defmethod init-from-entity! darkvine ((obj darkvine) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let + ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 4) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3072)) + (set-vector! (-> s3-0 local-sphere) 0.0 8192.0 0.0 16384.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 5) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 3276.8) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 6) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 2867.2) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 7) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 2457.6) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 8) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-3) + ) + ) + (set! (-> s4-0 nav-radius) 2048.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (set! (-> obj tip-index) 8) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *darkvine-sg* '()) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (set! (-> obj hit-player) #f) + (set! (-> obj speed) (rand-vu-float-range 0.95 1.05)) + (if (logtest? (get-reminder (get-task-control (game-task jungle-plant)) 0) 1) + (go darkvine-die #t) + ) + (go darkvine-idle) + (none) + ) + + + + diff --git a/goal_src/levels/jungle/jungle-mirrors.gc b/goal_src/levels/jungle/jungle-mirrors.gc index 4e10616250..4e8706962b 100644 --- a/goal_src/levels/jungle/jungle-mirrors.gc +++ b/goal_src/levels/jungle/jungle-mirrors.gc @@ -5,3 +5,2317 @@ ;; name in dgo: jungle-mirrors ;; dgos: JUN, JUNGLE, L1 +(declare-type reflector process-drawable) + +(define-extern draw-power-beam (function vector vector none)) + +;; DECOMP BEGINS + +(set! (-> *part-group-id-table* 176) (new 'static 'sparticle-launch-group + :length 21 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag screen-space) + :name "group-jungle-binoculars" + :launcher + (new 'static 'inline-array sparticle-group-item 21 + (sp-item 803) + (sp-item 804) + (sp-item 805) + (sp-item 806) + (sp-item 807) + (sp-item 808) + (sp-item 809) + (sp-item 810) + (sp-item 811) + (sp-item 812) + (sp-item 813) + (sp-item 814) + (sp-item 815) + (sp-item 816) + (sp-item 817) + (sp-item 818) + (sp-item 819) + (sp-item 820) + (sp-item 821) + (sp-item 822) + (sp-item 823) + ) + :bounds (new 'static 'sphere :w 4096.0) + ) + ) + +(set! (-> *part-id-table* 823) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x28 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 1.0)) + (sp-flt spt-rot-z (degrees -45.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-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 0.0)) + (sp-flt spt-conerot-radius (meters 1.45)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 815) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees -15.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 30.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 816) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 15.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 60.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 817) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 75.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 120.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 818) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 105.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 150.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 819) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 165.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 210.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 820) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 195.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 240.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 821) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 255.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 300.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 822) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 285.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 330.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 811) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x27 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.75)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 0.75)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 0.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 812) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x27 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.75)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 0.75)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 90.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 813) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x27 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.75)) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 0.75)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 180.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 814) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x27 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.75)) + (sp-flt spt-rot-z (degrees 270.0)) + (sp-flt spt-scale-y (meters 0.75)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 270.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 803) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.9)) + (sp-flt spt-y (meters 2.1)) + (sp-flt spt-scale-x (meters 4.5)) + (sp-flt spt-scale-y (meters 3.0)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 804) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1.11)) + (sp-flt spt-y (meters 2.1)) + (sp-flt spt-scale-x (meters 4.5)) + (sp-flt spt-scale-y (meters 3.0)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 805) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -1.11)) + (sp-flt spt-y (meters 2.1)) + (sp-flt spt-scale-x (meters 3.0)) + (sp-flt spt-rot-z (degrees -90.0)) + (sp-flt spt-scale-y (meters 4.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 806) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 2.9)) + (sp-flt spt-y (meters 2.1)) + (sp-flt spt-scale-x (meters 3.0)) + (sp-flt spt-rot-z (degrees -90.0)) + (sp-flt spt-scale-y (meters 4.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 807) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.9)) + (sp-flt spt-y (meters -2.1)) + (sp-flt spt-scale-x (meters 3.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 4.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 808) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1.11)) + (sp-flt spt-y (meters -2.1)) + (sp-flt spt-scale-x (meters 3.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 4.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 809) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -1.11)) + (sp-flt spt-y (meters -2.1)) + (sp-flt spt-scale-x (meters 4.5)) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 3.0)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 810) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 2.9)) + (sp-flt spt-y (meters -2.1)) + (sp-flt spt-scale-x (meters 4.5)) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 3.0)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 689) + (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :name "group-jungle-binoculars-aligned" + :launcher + (new 'static 'inline-array sparticle-group-item 4 (sp-item 2840) (sp-item 2863) (sp-item 2864) (sp-item 2865)) + :bounds (new 'static 'sphere :w 40960.0) + ) + ) + +(set! (-> *part-id-table* 2865) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 1.0 5.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 96.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a 0.85333335) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int-plain-rnd spt-next-time 75 74 1) + (sp-launcher-by-id spt-next-launcher 2866) + (sp-rnd-flt spt-conerot-x (degrees -360.0) (degrees 720.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees -1440.0) (degrees 2880.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2866) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.85333335) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 2864) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-rnd-flt spt-num 1.0 1.0 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 0.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 96.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters -0.0033333334) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a 4.266667) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int-plain-rnd spt-next-time 15 14 1) + (sp-launcher-by-id spt-next-launcher 2867) + (sp-rnd-flt spt-conerot-x (degrees -360.0) (degrees 720.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees -360.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters -2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2867) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -4.266667) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 2863) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 0.15) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 96.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.0125)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.8) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2840) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 11 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 13.0) (meters 5.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 96.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(deftype periscope (process-drawable) + ((root-override collide-shape :offset 112) + (y-offset meters :offset-assert 176) + (y-offset-grips meters :offset-assert 180) + (height meters :offset-assert 184) + (turn degrees :offset-assert 188) + (tilt degrees :offset-assert 192) + (target-turn degrees :offset-assert 196) + (target-tilt degrees :offset-assert 200) + (base vector :inline :offset-assert 208) + (reflector-trans vector :inline :offset-assert 224) + (next-reflector-trans vector :inline :offset-assert 240) + (prev-reflector-trans vector :inline :offset-assert 256) + (old-camera-matrix matrix :inline :offset-assert 272) + (reflector (pointer reflector) :offset-assert 336) + (gauge-rot degrees :offset-assert 340) + (lock-time uint64 :offset-assert 344) + (aligned? symbol :offset-assert 352) + (raised? symbol :offset-assert 356) + (player-touching-grips? symbol :offset-assert 360) + (grips-moving? symbol :offset-assert 364) + (sound-id sound-id :offset-assert 368) + (rise-sound-id sound-id :offset-assert 372) + (grips-sound-id sound-id :offset-assert 376) + (grips joint-mod-set-world :offset-assert 380) + (part-aligned sparticle-launch-control :offset-assert 384) + ) + :heap-base #x120 + :method-count-assert 20 + :size-assert #x184 + :flag-assert #x1401200184 + (:states + periscope-activate + periscope-idle + periscope-player-control + periscope-power-on + periscope-wait-for-player + periscope-wait-for-power-input + ) + ) + + +(defmethod relocate periscope ((obj periscope) (arg0 int)) + (if (nonzero? (-> obj grips)) + (&+! (-> obj grips) arg0) + ) + (if (nonzero? (-> obj part-aligned)) + (&+! (-> obj part-aligned) arg0) + ) + (the-as periscope ((method-of-type process-drawable relocate) obj arg0)) + ) + +(defmethod deactivate periscope ((obj periscope)) + (if (nonzero? (-> obj part-aligned)) + (kill-and-free-particles (-> obj part-aligned)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(deftype reflector (process-drawable) + ((parent-override (pointer periscope) :offset 12) + (root-override collide-shape :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + reflector-idle + ) + ) + + +(deftype reflector-origin (process-drawable) + ((reflector-trans vector :inline :offset-assert 176) + (next-reflector-trans vector :inline :offset-assert 192) + (reflector uint32 :offset-assert 208) + (next basic :offset-assert 212) + (blocker entity-actor :offset-assert 216) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xdc + :flag-assert #x14007000dc + (:states + reflector-origin-idle + ) + ) + + +(deftype reflector-mirror (process-drawable) + ((root-override collide-shape :offset 112) + (beam-end vector :inline :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xc0 + :flag-assert #x14005000c0 + (:states + reflector-mirror-broken + reflector-mirror-idle + ) + ) + + +(defskelgroup *periscope-base-sg* periscope + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 23.5 0 24) + :longest-edge (meters 4.5) + ) + +(defskelgroup *periscope-mirror-sg* periscope + 4 + 7 + ((5 (meters 20)) (6 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +(defskelgroup *reflector-mirror-sg* reflector-mirror + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 9 0 9) + :longest-edge (meters 3) + ) + +(defskelgroup *reflector-mirror-break-sg* reflector-mirror + 4 + 6 + ((5 (meters 999999))) + :bounds (static-spherem 0 9 0 9) + :longest-edge (meters 0) + ) + +(defstate cam-periscope (camera-slave) + :event + cam-standard-event-handler + :enter + (behavior () + (when (not (-> self enter-has-run)) + (set! (-> (new 'stack-no-clear 'vector) quad) (the-as uint128 0)) + (let ((v1-2 (-> self change-event-from))) + (set! (-> self trans quad) (-> (the-as periscope (-> v1-2 0)) reflector-trans quad)) + (matrix-rotate-yx! + (the-as matrix (-> self tracking)) + (-> (the-as periscope (-> v1-2 0)) turn) + (-> (the-as periscope (-> v1-2 0)) tilt) + ) + ) + (set! (-> self blend-from-type) (the-as uint 0)) + (set! (-> self blend-to-type) (the-as uint 0)) + 0 + ) + (none) + ) + :trans + (behavior () + (if (zero? (logand (-> *camera* master-options) 2)) + (cam-slave-go cam-free-floating) + ) + (none) + ) + :code + (behavior () + (local-vars (sv-32 int) (sv-48 int)) + (let* ((gp-0 (-> self change-event-from)) + (f28-0 (the-as float (-> (the-as periscope (-> gp-0 0)) tilt))) + (f30-0 (the-as float (-> (the-as periscope (-> gp-0 0)) turn))) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (while #t + (when (not (or (paused?) (-> (the-as periscope (-> self change-event-from 0)) aligned?))) + (vector-reset! s5-0) + (when *camera-read-analog* + (let ((f26-0 (analog-input + (the-as int (+ (-> *cpad-list* cpads 0 rightx) -256 (-> *cpad-list* cpads 0 leftx))) + 0.0 + 48.0 + 110.0 + -1.0 + ) + ) + (f0-0 (analog-input + (the-as int (+ (-> *cpad-list* cpads 0 righty) -256 (-> *cpad-list* cpads 0 lefty))) + 0.0 + 48.0 + 110.0 + -1.0 + ) + ) + ) + (set! (-> s5-0 y) (- (-> s5-0 y) (* 136.53334 (- f26-0)))) + (set! (-> s5-0 x) (- (-> s5-0 x) (* 136.53334 (- f0-0)))) + (cond + ((and (= f26-0 0.0) (= f0-0 0.0)) + (sound-stop (-> (the-as periscope (-> gp-0 0)) sound-id)) + ) + (else + (let ((s4-0 sound-play-by-name) + (s3-0 (make-u128 101 (the-as uint #x706f6373656c6574))) + (s2-0 (-> (the-as periscope (-> gp-0 0)) sound-id)) + (s1-0 1024) + (s0-0 0) + ) + (set! sv-32 0) + (set! sv-48 1) + (let ((t2-0 (target-pos 0))) + (the-as int (s4-0 (the-as sound-name s3-0) s2-0 s1-0 s0-0 sv-32 sv-48 (the-as symbol t2-0))) + ) + ) + ) + ) + ) + ) + (cond + ((< 136.53334 (-> s5-0 x)) + (set! (-> s5-0 x) 136.53334) + ) + ((< (-> s5-0 x) -136.53334) + (set! (-> s5-0 x) -136.53334) + ) + ) + (cond + ((< 136.53334 (-> s5-0 y)) + (set! (-> s5-0 y) 136.53334) + ) + ((< (-> s5-0 y) -136.53334) + (set! (-> s5-0 y) -136.53334) + ) + ) + (+! f30-0 (* (-> s5-0 y) (-> *display* time-adjust-ratio))) + (set! f28-0 (fmax -12743.111 (fmin 12743.111 (+ f28-0 (* (-> s5-0 x) (-> *display* time-adjust-ratio)))))) + (matrix-rotate-yx! (the-as matrix (-> self tracking)) f30-0 f28-0) + ) + (suspend) + ) + ) + (none) + ) + ) + +(defstate reflector-idle (reflector) + :code + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (while #t + (set! (-> gp-0 x) (-> self parent-override 0 tilt)) + (set! (-> gp-0 y) (-> self parent-override 0 turn)) + (set! (-> gp-0 z) 0.0) + (set! (-> gp-0 w) 1.0) + (quaternion-zxy! (-> self root-override quat) gp-0) + (set! (-> self root-override trans quad) + (-> self parent-override 0 node-list data 6 bone transform vector 3 quad) + ) + (ja-post) + (dummy-47 (-> self root-override)) + (suspend) + ) + ) + (none) + ) + ) + +(defbehavior reflector-init-by-other reflector ((arg0 vector)) + (set! (-> self entity) (-> self parent-override 0 entity)) + (let ((s5-0 (new 'process 'collide-shape self (collide-list-enum hit-by-player)))) + (let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 16384.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> self root-override) s5-0) + ) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (initialize-skeleton self *periscope-mirror-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (go reflector-idle) + (none) + ) + +(defbehavior periscope-crosshair periscope () + (let ((s3-0 (matrix-local->world #f #f)) + (s5-0 (new 'static 'vector4w-4)) + (s4-0 (new 'static 'vector)) + (gp-0 #f) + ) + (set! (-> self turn) (vector-y-angle (-> s3-0 vector 2))) + (set! (-> self tilt) (- (vector-x-angle (-> s3-0 vector 2)))) + (set! (-> s4-0 quad) (-> self next-reflector-trans quad)) + (set! (-> s4-0 w) 1.0) + (init-for-transform *identity-matrix*) + (transform-float-point s4-0 (the-as vector4w (-> s5-0 quad))) + (let* ((v1-1 (-> self link)) + (s4-1 (and (-> v1-1 next) (-> v1-1 next extra process))) + (v1-5 (if (and (nonzero? s4-1) (type-type? (-> s4-1 type) periscope)) + s4-1 + ) + ) + ) + (when (or (not v1-5) (-> (the-as periscope v1-5) raised?)) + (cond + ((>= (-> s5-0 vector 0 z) 0) + (set! (-> s5-0 vector 0 x) (+ (/ (-> s5-0 vector 0 x) 16) -2048)) + (set! (-> s5-0 vector 0 y) (- (- 2048 (/ (-> s5-0 vector 0 y) 16)))) + (let ((v1-15 (abs (-> s5-0 vector 0 x)))) + (cond + ((and (< v1-15 20) (let ((v1-17 (abs (-> s5-0 vector 0 y)))) + (< v1-17 10) + ) + ) + (when (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete)))) + (sound-stop (-> self sound-id)) + (sound-play-by-name + (static-sound-name "beam-connect") + (new-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (target-pos 0)) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (set! gp-0 #t) + ) + (else + (process-entity-status! self (entity-perm-status complete) #f) + ) + ) + ) + ) + (else + (process-entity-status! self (entity-perm-status complete) #f) + ) + ) + ) + ) + (let* ((s5-2 (position-in-front-of-camera! (new 'stack-no-clear 'vector) 40960.0 0.0)) + (v1-28 + (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (-> self next-reflector-trans) s5-2) 20480.0) + ) + (s4-4 (vector+! (new 'stack-no-clear 'vector) s5-2 v1-28)) + ) + (init-for-transform *identity-matrix*) + (let ((v1-30 (transform-float-point s4-4 (new 'stack 'vector4w)))) + (when (>= (-> v1-30 z) 0) + (set! (-> v1-30 x) (+ (/ (-> v1-30 x) 16) -2048)) + (set! (-> v1-30 y) (- (- 2048 (/ (-> v1-30 y) 16)))) + ) + (let ((f0-9 (- (atan (the float (-> v1-30 x)) (the float (- (-> v1-30 y))))))) + (set! (-> self gauge-rot) (deg-seek (-> self gauge-rot) f0-9 (* 131072.0 (-> *display* seconds-per-frame)))) + ) + ) + ) + (let ((f0-13 (-> self gauge-rot))) + (set! (-> *part-id-table* 823 init-specs 3 initial-valuef) (+ -8192.0 f0-13)) + (set! (-> *part-id-table* 823 init-specs 11 initial-valuef) f0-13) + (if gp-0 + (set! (-> *part-id-table* 823 init-specs 1 initial-valuef) 0.0) + (set! (-> *part-id-table* 823 init-specs 1 initial-valuef) 1.0) + ) + (set! (-> *part-id-table* 815 init-specs 3 initial-valuef) (- -2730.6667 f0-13)) + (set! (-> *part-id-table* 815 init-specs 11 initial-valuef) (- 5461.3335 f0-13)) + (set! (-> *part-id-table* 816 init-specs 3 initial-valuef) (- 2730.6667 f0-13)) + (set! (-> *part-id-table* 816 init-specs 11 initial-valuef) (- 10922.667 f0-13)) + (set! (-> *part-id-table* 817 init-specs 3 initial-valuef) (- 13653.333 f0-13)) + (set! (-> *part-id-table* 817 init-specs 11 initial-valuef) (- 21845.334 f0-13)) + (set! (-> *part-id-table* 818 init-specs 3 initial-valuef) (- 19114.666 f0-13)) + (set! (-> *part-id-table* 818 init-specs 11 initial-valuef) (- 27306.666 f0-13)) + (set! (-> *part-id-table* 819 init-specs 3 initial-valuef) (- 30037.334 f0-13)) + (set! (-> *part-id-table* 819 init-specs 11 initial-valuef) (- 38229.332 f0-13)) + (set! (-> *part-id-table* 820 init-specs 3 initial-valuef) (- 35498.668 f0-13)) + (set! (-> *part-id-table* 820 init-specs 11 initial-valuef) (- 43690.668 f0-13)) + (set! (-> *part-id-table* 821 init-specs 3 initial-valuef) (- 46421.332 f0-13)) + (set! (-> *part-id-table* 821 init-specs 11 initial-valuef) (- 54613.332 f0-13)) + (set! (-> *part-id-table* 822 init-specs 3 initial-valuef) (- 51882.668 f0-13)) + (set! (-> *part-id-table* 822 init-specs 11 initial-valuef) (- 60074.668 f0-13)) + (set! (-> *part-id-table* 811 init-specs 3 initial-valuef) (- f0-13)) + (set! (-> *part-id-table* 811 init-specs 11 initial-valuef) (- f0-13)) + (set! (-> *part-id-table* 812 init-specs 3 initial-valuef) (- 16384.0 f0-13)) + (set! (-> *part-id-table* 812 init-specs 11 initial-valuef) (- 16384.0 f0-13)) + (set! (-> *part-id-table* 813 init-specs 3 initial-valuef) (- 32768.0 f0-13)) + (set! (-> *part-id-table* 813 init-specs 11 initial-valuef) (- 32768.0 f0-13)) + (set! (-> *part-id-table* 814 init-specs 3 initial-valuef) (- 49152.0 f0-13)) + (set! (-> *part-id-table* 814 init-specs 11 initial-valuef) (- 49152.0 f0-13)) + ) + (spawn (-> self part) *zero-vector*) + (let ((s4-5 (new 'stack-no-clear 'vector)) + (s3-2 (new 'stack-no-clear 'vector)) + (s5-4 (new 'stack-no-clear 'vector)) + ) + (set! (-> s4-5 quad) (-> (camera-pos) quad)) + (vector-! s3-2 (-> self prev-reflector-trans) s4-5) + (vector-normalize! s3-2 1.0) + (vector+*! s5-4 s4-5 s3-2 20480.0) + (spawn (-> self part-aligned) s5-4) + (when gp-0 + (vector-! s3-2 (-> self next-reflector-trans) s4-5) + (vector-normalize! s3-2 1.0) + (vector+*! s5-4 s4-5 s3-2 20480.0) + (spawn (-> self part-aligned) s5-4) + ) + ) + (set! (-> self aligned?) gp-0) + gp-0 + ) + ) + +(set! (-> *part-id-table* 825) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 4.5) + (sp-rnd-flt spt-scale-x (meters 1.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 32.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-vel-y (meters 0.010666667)) + (sp-flt spt-scalevel-x (meters -0.008333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.99999994) (degrees 1.9999999) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.17777778) + (sp-flt spt-fade-a -0.53333336) + (sp-flt spt-accel-y 0.68266666) + (sp-int spt-timer 165) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-z (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 2.3) 1.0) + (sp-end) + ) + ) + ) + +(defbehavior periscope-find-next periscope () + (let ((gp-0 (-> self link next))) + (let ((a0-0 (-> self link prev))) + (when a0-0 + (set! (-> self prev-reflector-trans quad) (-> a0-0 extra trans quad)) + (+! (-> self prev-reflector-trans y) (res-lump-float a0-0 'height-info)) + ) + ) + (cond + (gp-0 + (set! (-> self next-reflector-trans quad) (-> gp-0 extra trans quad)) + (let ((f0-3 (+ (-> self next-reflector-trans y) (res-lump-float gp-0 'height-info)))) + (set! (-> self next-reflector-trans y) f0-3) + f0-3 + ) + ) + (else + (let ((v1-9 (res-lump-struct (-> self entity) 'alt-vector structure)) + (v0-2 (the-as object (-> self next-reflector-trans))) + ) + (set! (-> (the-as vector v0-2) quad) (-> (the-as vector v1-9) quad)) + v0-2 + ) + ) + ) + ) + ) + +(defbehavior periscope-set-target-direction periscope ((arg0 vector)) + (let ((f30-0 (vector-xz-length arg0))) + (set! (-> self target-turn) (atan (-> arg0 x) (-> arg0 z))) + (let ((f0-5 (atan (- (-> arg0 y)) f30-0))) + (set! (-> self target-tilt) f0-5) + f0-5 + ) + ) + ) + +(defbehavior periscope-find-aim-at-angles periscope () + (let ((a0-0 (-> self link next)) + (gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (when a0-0 + (set! (-> gp-0 quad) (-> a0-0 extra trans quad)) + (+! (-> gp-0 y) (res-lump-float a0-0 'height-info)) + (vector-! s5-0 gp-0 (-> self reflector-trans)) + (vector-normalize! s5-0 1.0) + (periscope-set-target-direction s5-0) + ) + ) + ) + +(defbehavior periscope-find-reflection-angles periscope () + (let ((a0-0 (-> self link next)) + (s2-0 (-> self link prev)) + (s3-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (when (and s2-0 a0-0) + (set! (-> s3-0 quad) (-> a0-0 extra trans quad)) + (+! (-> s3-0 y) (res-lump-float a0-0 'height-info)) + (vector-! s5-0 s3-0 (-> self reflector-trans)) + (vector-normalize! s5-0 1.0) + (set! (-> s3-0 quad) (-> s2-0 extra trans quad)) + (+! (-> s3-0 y) (res-lump-float s2-0 'height-info)) + (vector-! gp-0 s3-0 (-> self reflector-trans)) + (vector-normalize! gp-0 1.0) + (vector+! s4-0 gp-0 s5-0) + (vector-normalize! s4-0 1.0) + (periscope-set-target-direction s4-0) + ) + ) + ) + +(defbehavior periscope-has-power-input? periscope () + (let ((v1-1 (-> self link prev))) + (if v1-1 + (logtest? (-> v1-1 extra perm status) (entity-perm-status complete)) + ) + ) + ) + +(defbehavior periscope-draw-beam-impact periscope () + (when (periscope-has-power-input?) + (update! (-> self sound)) + (if (logtest? (-> self draw status) 8) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 825) + (-> self reflector-trans) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + 0 + (none) + ) + +(defbehavior periscope-draw-beam periscope () + (if (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete))) + (draw-power-beam (-> self reflector-trans) (-> self next-reflector-trans)) + ) + 0 + (none) + ) + +(defbehavior periscope-update-joints periscope () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 to) (the-as process 0.0)) + (set! (-> a1-0 from) (the-as process (-> self turn))) + (set! (-> a1-0 num-params) (the-as int 0.0)) + (set! (-> a1-0 message) (the-as symbol 1.0)) + (quaternion-zxy! (-> self root-override quat) (the-as vector a1-0)) + ) + (set! (-> self root-override trans y) (+ -184320.0 (-> self y-offset) (-> self base y))) + (let ((f0-10 (+ (- (+ (-> self base y) (-> self y-offset)) (-> self height)) (-> self y-offset-grips)))) + (set! (-> self grips transform trans y) f0-10) + f0-10 + ) + ) + +(defbehavior periscope-post periscope () + (periscope-draw-beam) + (periscope-draw-beam-impact) + (periscope-update-joints) + (ja-post) + (dummy-47 (-> self root-override)) + 0 + (none) + ) + +(defbehavior periscope-test-task-complete? periscope () + (local-vars (sv-16 symbol)) + (set! sv-16 #t) + (apply-all + (-> self link) + (lambda ((arg0 entity-actor) (arg1 (pointer symbol))) + (the-as + object + (when (and (= (-> arg0 etype) periscope) (zero? (logand (-> arg0 extra perm status) (entity-perm-status complete)))) + (set! (-> arg1 0) #f) + #t + ) + ) + ) + (& sv-16) + ) + sv-16 + ) + +(defun peri-beamcam-init-by-other ((arg0 string)) + (with-pp + (let ((gp-0 (entity-by-name "junglecam-1"))) + (the-as + (pointer process) + (cond + (gp-0 + (cond + ((name= arg0 "reflector-mirror-2") + (let ((s5-1 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-1 + (let ((t9-3 (method-of-type pov-camera activate))) + (t9-3 (the-as pov-camera s5-1) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-1 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "tower1" + 0 + #f + '((0 ambient camera "gamcam14")) + ) + (-> s5-1 ppointer) + ) + ) + ) + ((name= arg0 "periscope-11") + (let ((s5-2 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-2 + (let ((t9-7 (method-of-type pov-camera activate))) + (t9-7 (the-as pov-camera s5-2) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-2 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "tower2" + 0 + #f + '((0 ambient camera "gamcam15") (0 want-force-vis jungle #t) (0 want-force-vis village1 #t)) + ) + (-> s5-2 ppointer) + ) + ) + ) + ((name= arg0 "periscope-12") + (let ((s5-3 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-3 + (let ((t9-11 (method-of-type pov-camera activate))) + (t9-11 (the-as pov-camera s5-3) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-3 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "tower3" + 0 + #f + '((0 ambient camera "gamcam16")) + ) + (-> s5-3 ppointer) + ) + ) + ) + ((name= arg0 "periscope-13") + (let ((s5-4 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-4 + (let ((t9-15 (method-of-type pov-camera activate))) + (t9-15 (the-as pov-camera s5-4) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-4 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "tower4" + 0 + #f + '((0 ambient camera "gamcam17")) + ) + (-> s5-4 ppointer) + ) + ) + ) + ((name= arg0 "periscope-14") + (let ((s5-5 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-5 + (let ((t9-19 (method-of-type pov-camera activate))) + (t9-19 (the-as pov-camera s5-5) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-5 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "tower5" + 0 + #f + '((0 ambient camera "gamcam18") (0 want-force-vis jungle #t) (0 want-force-vis village1 #t)) + ) + (-> s5-5 ppointer) + ) + ) + ) + ((name= arg0 "periscope-15") + (let ((s5-6 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-6 + (let ((t9-23 (method-of-type pov-camera activate))) + (t9-23 (the-as pov-camera s5-6) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-6 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "beamcam" + 0 + #f + '((0 ambient camera "gamcam19") + (0 want-force-vis jungle #t) + (0 want-force-vis village1 #t) + (0 display-level village1 movie) + ) + ) + (-> s5-6 ppointer) + ) + ) + ) + (else + (format #t "ERROR: don't know which peri-beamcam to play for ~S~%" arg0) + ) + ) + ) + (else + (format #t "ERROR: couldn't find junglecam-1 to initialize peri-beamcam~%") + ) + ) + ) + ) + ) + ) + +(defbehavior periscope-debug-trans periscope () + 0 + (none) + ) + +(defstate periscope-idle (periscope) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('activate) + (logclear! (-> self mask) (process-mask actor-pause)) + (go periscope-activate) + ) + ) + ) + :enter + (behavior () (clear-collide-with-as (-> self root-override)) (none)) + :exit + (behavior () + (restore-collide-with-as (-> self root-override)) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) + :trans + periscope-debug-trans + :code + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (set! (-> self raised?) #f) + (set! (-> self y-offset) 0.0) + (set! (-> self y-offset-grips) (+ -20480.0 (-> self height))) + (set! (-> self tilt) 16384.0) + (set! (-> self turn) (+ 18204.445 (-> self target-turn))) + (periscope-update-joints) + (ja-post) + (suspend) + (dummy-47 (-> self root-override)) + (logior! (-> self draw status) 2) + (while #t + (suspend) + ) + (none) + ) + ) + +(defstate periscope-activate (periscope) + :exit + (behavior () + (sound-stop (-> self rise-sound-id)) + (sound-play-by-name + (static-sound-name "eco-tower-stop") + (new-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self base)) + ) + (none) + ) + :trans + periscope-debug-trans + :code + (behavior () + (local-vars (v1-13 symbol)) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (link-to-next-and-prev-actor (-> self link)) + (periscope-find-next) + (periscope-find-reflection-angles) + (when (< 61440.0 (-> self height)) + (set! (-> self y-offset) (+ -61440.0 (-> self height))) + (set! (-> self turn) (+ 18204.445 (-> self target-turn))) + ) + (until (and v1-13 (= (-> self turn) (-> self target-turn)) (= (-> self tilt) (-> self target-tilt))) + (sound-play-by-name + (static-sound-name "eco-tower-rise") + (-> self rise-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self base)) + ) + (set! (-> self y-offset) + (seek (-> self y-offset) (-> self height) (* 16384.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self turn) + (seek (-> self turn) (-> self target-turn) (* 7281.778 (-> *display* seconds-per-frame))) + ) + (set! (-> self tilt) + (seek (-> self tilt) (-> self target-tilt) (* 7281.778 (-> *display* seconds-per-frame))) + ) + (set! (-> self raised?) (< (+ -12288.0 (-> self height)) (-> self y-offset))) + (periscope-update-joints) + (suspend) + (set! v1-13 (= (-> self y-offset) (-> self height))) + ) + (set! (-> self raised?) #t) + (go periscope-wait-for-power-input) + (none) + ) + :post + periscope-post + ) + +(defstate periscope-wait-for-power-input (periscope) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self raised?) #t) + (let ((f30-0 (+ -20480.0 (-> self height)))) + (until (= (-> self y-offset-grips) f30-0) + (set! (-> self y-offset-grips) + (seek (-> self y-offset-grips) f30-0 (* 16384.0 (-> *display* seconds-per-frame))) + ) + (periscope-update-joints) + (suspend) + ) + ) + (dummy-47 (-> self root-override)) + (set! (-> self y-offset) (-> self height)) + (while #t + (if (periscope-has-power-input?) + (go periscope-wait-for-player) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior periscope) ja-post) + ) + +(defun target-close-to-point? ((arg0 vector) (arg1 float)) + (the-as symbol (and *target* (>= arg1 (vector-vector-distance arg0 (-> *target* control trans))))) + ) + +(defstate periscope-wait-for-player (periscope) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (when (and *target* (not (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + ) + ) + (when ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint 1) + ) + (let ((v0-0 (the-as object #t))) + (set! (-> self player-touching-grips?) (the-as symbol v0-0)) + v0-0 + ) + ) + ) + ) + (('change-mode) + (level-hint-spawn + (game-text-id jungle-mirrors-tutorial) + "sksp0049" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (go periscope-player-control) + ) + ) + ) + :exit + (behavior () (sound-stop (-> self grips-sound-id)) (none)) + :code + (behavior () + (hide-hud) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self raised?) #t) + (set! (-> self grips-moving?) #t) + (let ((f30-0 8192.0) + (gp-0 (res-lump-value (-> self entity) 'text-id uint128)) + ) + (until (= (-> self y-offset-grips) f30-0) + (if (nonzero? gp-0) + (level-hint-spawn (game-text-id zero) (the-as string #f) (-> self entity) *entity-pool* (game-task none)) + ) + (sound-play-by-name + (static-sound-name "site-moves") + (-> self grips-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self grips transform)) + ) + (set! (-> self y-offset-grips) + (seek (-> self y-offset-grips) f30-0 (* 16384.0 (-> *display* seconds-per-frame))) + ) + (periscope-update-joints) + (suspend) + ) + ) + (set! (-> self grips-moving?) #f) + (set! (-> self player-touching-grips?) #f) + (let ((gp-1 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (while #t + (set! (-> s5-0 quad) (-> self node-list data 4 bone transform vector 3 quad)) + (let ((a0-10 s5-0) + (f30-1 81920.0) + ) + (when (and *target* (>= f30-1 (vector-vector-distance a0-10 (-> *target* control trans)))) + (when (logtest? (-> *target* control status) 1) + (let ((f0-7 (fmax 4096.0 (fmin 12288.0 (+ (- 5120.0 (-> self base y)) (-> *target* control trans y)))))) + (set! (-> self y-offset-grips) + (seek (-> self y-offset-grips) f0-7 (* 16384.0 (-> *display* seconds-per-frame))) + ) + ) + ) + (vector-! gp-1 (target-pos 0) (-> self base)) + (vector-z-quaternion! s4-0 (-> self grips transform quat)) + (quaternion-rotate-y-to-vector! + (-> self grips transform quat) + (-> self grips transform quat) + (the-as quaternion gp-1) + (* 27306.666 (-> *display* seconds-per-frame)) + ) + (vector-z-quaternion! s3-0 (-> self grips transform quat)) + (set! (-> self grips-moving?) (< (vector-dot s4-0 s3-0) (cos 182.04445))) + (periscope-update-joints) + (dummy-47 (-> self root-override)) + (when (and (-> self player-touching-grips?) (not (level-hint-displayed?))) + (set! (-> self player-touching-grips?) #f) + (hide-hud) + (level-hint-surpress!) + (kill-current-level-hint '() '(sidekick voicebox) 'exit) + (when (and (hud-hidden?) (can-grab-display? (the-as process-taskable self))) + (let ((s2-2 + (new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning)) + ) + ) + (let ((v1-43 s2-2)) + (set! (-> v1-43 width) (the float 440)) + ) + (let ((v1-44 s2-2)) + (set! (-> v1-44 height) (the float 80)) + ) + (set! (-> s2-2 flags) (font-flags shadow kerning large)) + (print-game-text (lookup-text! *common-text* (game-text-id press-to-use) #f) s2-2 #f 128 22) + ) + (when (cpad-pressed? 0 circle) + (set! (-> self grips-moving?) #f) + (while #t + (send-event *target* 'change-mode 'periscope self) + (hide-hud) + (suspend) + (hide-hud) + (suspend) + ) + ) + ) + ) + ) + ) + (if (not (periscope-has-power-input?)) + (go periscope-wait-for-power-input) + ) + (suspend) + ) + ) + (none) + ) + :post + (behavior () + (if (-> self grips-moving?) + (sound-play-by-name + (static-sound-name "site-moves") + (-> self grips-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self grips transform)) + ) + (sound-stop (-> self grips-sound-id)) + ) + (periscope-draw-beam-impact) + (ja-post) + (none) + ) + ) + +(defstate periscope-player-control (periscope) + :exit + (behavior () + (set! (-> self reflector 0 draw status) (logand -3 (-> self reflector 0 draw status))) + (periscope-find-reflection-angles) + (set! (-> self turn) (-> self target-turn)) + (set! (-> self tilt) (-> self target-tilt)) + (none) + ) + :trans + (behavior () (hide-hud) (none)) + :code + (behavior () + (set! (-> self lock-time) (the-as uint (-> *display* base-frame-counter))) + (link-to-next-and-prev-actor (-> self link)) + (periscope-find-next) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'activate) + (let ((t9-2 send-event-function) + (v1-5 (-> self link)) + ) + (t9-2 (the-as process-tree (and (-> v1-5 next) (-> v1-5 next extra process))) a1-0) + ) + ) + (periscope-find-aim-at-angles) + (set! (-> self turn) (-> self target-turn)) + (set! (-> self tilt) (-> self target-tilt)) + (let ((v1-10 (res-lump-data (-> self entity) 'rotoffset (pointer float)))) + (cond + (v1-10 + (+! (-> self turn) (-> v1-10 0)) + (+! (-> self tilt) (-> v1-10 1)) + ) + (else + (set! (-> self turn) (+ 910.2222 (-> self turn))) + ) + ) + ) + (case (get-aspect-ratio) + (('aspect16x9) + (set! (-> *part-id-table* 823 init-specs 12 initial-valuef) 5120.0) + (set! (-> *part-id-table* 815 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 816 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 817 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 818 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 819 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 820 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 821 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 822 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 811 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 812 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 813 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 814 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 803 init-specs 2 initial-valuef) -10854.4) + (set! (-> *part-id-table* 803 init-specs 3 initial-valuef) 6553.6) + (set! (-> *part-id-table* 804 init-specs 2 initial-valuef) 4546.56) + (set! (-> *part-id-table* 804 init-specs 3 initial-valuef) 6553.6) + (set! (-> *part-id-table* 805 init-specs 2 initial-valuef) -4546.56) + (set! (-> *part-id-table* 805 init-specs 3 initial-valuef) 6553.6) + (set! (-> *part-id-table* 806 init-specs 2 initial-valuef) 10854.4) + (set! (-> *part-id-table* 806 init-specs 3 initial-valuef) 6553.6) + (set! (-> *part-id-table* 807 init-specs 2 initial-valuef) -10854.4) + (set! (-> *part-id-table* 807 init-specs 3 initial-valuef) -6553.6) + (set! (-> *part-id-table* 808 init-specs 2 initial-valuef) 4546.56) + (set! (-> *part-id-table* 808 init-specs 3 initial-valuef) -6553.6) + (set! (-> *part-id-table* 809 init-specs 2 initial-valuef) -4546.56) + (set! (-> *part-id-table* 809 init-specs 3 initial-valuef) -6553.6) + (set! (-> *part-id-table* 810 init-specs 2 initial-valuef) 10854.4) + (set! (-> *part-id-table* 810 init-specs 3 initial-valuef) -6553.6) + ) + (('aspect4x3) + (set! (-> *part-id-table* 823 init-specs 12 initial-valuef) 5939.2) + (set! (-> *part-id-table* 815 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 816 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 817 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 818 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 819 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 820 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 821 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 822 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 811 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 812 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 813 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 814 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 803 init-specs 2 initial-valuef) -11878.4) + (set! (-> *part-id-table* 803 init-specs 3 initial-valuef) 8601.6) + (set! (-> *part-id-table* 804 init-specs 2 initial-valuef) 4546.56) + (set! (-> *part-id-table* 804 init-specs 3 initial-valuef) 8601.6) + (set! (-> *part-id-table* 805 init-specs 2 initial-valuef) -4546.56) + (set! (-> *part-id-table* 805 init-specs 3 initial-valuef) 8601.6) + (set! (-> *part-id-table* 806 init-specs 2 initial-valuef) 11878.4) + (set! (-> *part-id-table* 806 init-specs 3 initial-valuef) 8601.6) + (set! (-> *part-id-table* 807 init-specs 2 initial-valuef) -11878.4) + (set! (-> *part-id-table* 807 init-specs 3 initial-valuef) -8601.6) + (set! (-> *part-id-table* 808 init-specs 2 initial-valuef) 4546.56) + (set! (-> *part-id-table* 808 init-specs 3 initial-valuef) -8601.6) + (set! (-> *part-id-table* 809 init-specs 2 initial-valuef) -4546.56) + (set! (-> *part-id-table* 809 init-specs 3 initial-valuef) -8601.6) + (set! (-> *part-id-table* 810 init-specs 2 initial-valuef) 11878.4) + (set! (-> *part-id-table* 810 init-specs 3 initial-valuef) -8601.6) + ) + ) + (let* ((gp-0 (-> self old-camera-matrix)) + (a2-1 (matrix-local->world #f #f)) + (v1-191 (-> a2-1 vector 0 quad)) + (a0-8 (-> a2-1 vector 1 quad)) + (a1-3 (-> a2-1 vector 2 quad)) + (a2-2 (-> a2-1 vector 3 quad)) + ) + (set! (-> gp-0 vector 0 quad) v1-191) + (set! (-> gp-0 vector 1 quad) a0-8) + (set! (-> gp-0 vector 2 quad) a1-3) + (set! (-> gp-0 vector 3 quad) a2-2) + ) + (send-event *camera* 'change-state cam-periscope 0) + (logior! (-> self reflector 0 draw status) 2) + (suspend) + (while #t + (if (not (-> self aligned?)) + (set! (-> self lock-time) (the-as uint (-> *display* base-frame-counter))) + ) + (periscope-crosshair) + (when (or + (cpad-pressed? 0 triangle x) + (and (-> self aligned?) (>= (- (-> *display* base-frame-counter) (the-as int (-> self lock-time))) 900)) + ) + (sound-stop (-> self sound-id)) + (if (periscope-test-task-complete?) + (close-specific-task! (game-task jungle-lurkerm) (task-status need-reminder)) + ) + (while #t + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 0) + (set! (-> a1-6 message) 'end-mode) + (when (send-event-function *target* a1-6) + (cond + ((and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete))) + (let ((gp-1 (ppointer->handle (peri-beamcam-init-by-other (the-as string (-> self name)))))) + (suspend) + (while (and *target* (= (-> *target* next-state name) 'target-periscope)) + (periscope-crosshair) + (suspend) + ) + (set! (-> self reflector 0 draw status) (logand -3 (-> self reflector 0 draw status))) + (periscope-find-reflection-angles) + (set! (-> self turn) (-> self target-turn)) + (set! (-> self tilt) (-> self target-tilt)) + (set! *camera-init-mat* (-> self old-camera-matrix)) + (send-event *camera* 'change-state *camera-base-mode* 0) + (set! *camera-init-mat* #f) + (while (handle->process (the-as handle gp-1)) + (suspend) + ) + ) + (let ((gp-2 (get-process *default-dead-pool* process #x4000))) + (when gp-2 + (let ((t9-18 (method-of-type process activate))) + (t9-18 gp-2 self 'process (the-as pointer #x70004000)) + ) + (run-next-time-in-process + gp-2 + (lambda ((arg0 string)) + (while (or + (-> *setting-control* current ambient) + (-> *setting-control* current movie) + (-> *setting-control* current hint) + ) + (suspend) + ) + (cond + ((name= arg0 "periscope-11") + (level-hint-spawn + (game-text-id jungle-mirrors-follow-the-beam) + "sksp0053" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((name= arg0 "periscope-12") + (level-hint-spawn + (game-text-id jungle-mirrors-go-to-the-next-tower) + "sksp0052" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((name= arg0 "periscope-15") + (level-hint-spawn + (game-text-id jungle-mirrors-completion-talk-to-mayor) + "sksp0018" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (none) + ) + (-> self name) + ) + (-> gp-2 ppointer) + ) + ) + ) + (else + (set! *camera-init-mat* (-> self old-camera-matrix)) + (send-event *camera* 'change-state *camera-base-mode* 0) + (set! *camera-init-mat* #f) + ) + ) + (if (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete))) + (go periscope-power-on) + (go periscope-wait-for-player) + ) + ) + ) + (suspend) + ) + ) + (suspend) + ) + (none) + ) + :post + (behavior () (periscope-draw-beam) (periscope-update-joints) (ja-post) (none)) + ) + +(defstate periscope-power-on (periscope) + :trans + periscope-debug-trans + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self y-offset) (-> self height)) + (link-to-next-and-prev-actor (-> self link)) + (periscope-find-reflection-angles) + (set! (-> self turn) (-> self target-turn)) + (set! (-> self tilt) (-> self target-tilt)) + (let ((f30-0 (+ -20480.0 (-> self height)))) + (until (= (-> self y-offset-grips) f30-0) + (set! (-> self y-offset-grips) + (seek (-> self y-offset-grips) f30-0 (* 16384.0 (-> *display* seconds-per-frame))) + ) + (periscope-update-joints) + (sound-play-by-name + (static-sound-name "site-moves") + (-> self grips-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self grips transform)) + ) + (suspend) + ) + ) + (sound-stop (-> self grips-sound-id)) + (ja-post) + (while #t + (suspend) + ) + (none) + ) + :post + periscope-post + ) + +(defmethod init-from-entity! periscope ((obj periscope) (arg0 entity-actor)) + (stack-size-set! (-> obj main-thread) 512) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 96256.0 0.0 98304.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (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) 3) + (set-vector! (-> s2-0 local-sphere) 0.0 96256.0 0.0 98304.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 4) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 9216.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 0) + (set! (-> s2-2 transform-index) 4) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 11264.0) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set! (-> obj height) (res-lump-float (-> obj entity) 'height-info)) + (set! (-> obj y-offset) (-> obj height)) + (set! (-> obj y-offset-grips) (+ -20480.0 (-> obj height))) + (set! (-> obj base quad) (-> obj root-override trans quad)) + (set! (-> obj reflector-trans quad) (-> obj base quad)) + (+! (-> obj reflector-trans y) (-> obj height)) + (let ((s5-1 (get-process *default-dead-pool* reflector #x4000))) + (set! (-> obj reflector) + (the-as (pointer reflector) (when s5-1 + (let ((t9-14 (method-of-type reflector activate))) + (t9-14 (the-as reflector s5-1) obj 'reflector (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 reflector-init-by-other (-> obj reflector-trans)) + (-> s5-1 ppointer) + ) + ) + ) + ) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (periscope-find-next) + (initialize-skeleton obj *periscope-base-sg* '()) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 176) obj)) + (set! (-> obj part-aligned) (create-launch-control (-> *part-group-id-table* 689) obj)) + (set! (-> obj grips) (new 'process 'joint-mod-set-world obj 4 #t)) + (transformq-copy! (-> obj grips transform) (the-as transformq (-> obj root-override trans))) + (periscope-find-reflection-angles) + (set! (-> obj turn) (-> obj target-turn)) + (set! (-> obj tilt) (-> obj target-tilt)) + (periscope-update-joints) + (set! (-> obj grips-moving?) #f) + (set! (-> obj sound-id) (new-sound-id)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "eco-beam") + :volume #x400 + :fo-max 50 + ) + (-> obj reflector-trans) + ) + ) + (set! (-> obj rise-sound-id) (new-sound-id)) + (set! (-> obj grips-sound-id) (new-sound-id)) + (set! (-> obj root-override nav-radius) 8192.0) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (cond + ((and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go periscope-power-on) + ) + ((periscope-has-power-input?) + (set! (-> obj y-offset-grips) 8192.0) + (go periscope-wait-for-player) + ) + (else + (go periscope-idle) + ) + ) + (none) + ) + +(defbehavior reflector-origin-update reflector-origin ((arg0 entity-actor)) + (when arg0 + (set! (-> self next-reflector-trans quad) (-> arg0 extra trans quad)) + (+! (-> self next-reflector-trans y) (res-lump-float arg0 'height-info)) + ) + 0 + (none) + ) + +(defstate reflector-origin-idle (reflector-origin) + :code + (behavior () + (reflector-origin-update (-> self blocker)) + (while (zero? (logand (-> self blocker extra perm status) (entity-perm-status complete))) + (suspend) + ) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'activate) + (let ((t9-1 send-event-function) + (v1-6 (-> self link)) + ) + (t9-1 (the-as process-tree (and (-> v1-6 next) (-> v1-6 next extra process))) a1-0) + ) + ) + (reflector-origin-update (-> self link next)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector-! gp-0 (-> self next-reflector-trans) (-> self reflector-trans)) + (vector-normalize! gp-0 819200.0) + (vector+! (-> self next-reflector-trans) (-> self reflector-trans) gp-0) + ) + (let ((gp-1 #f)) + (until gp-1 + (let* ((v1-13 (-> self link)) + (s5-0 (and (-> v1-13 next) (-> v1-13 next extra process))) + (v1-17 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) periscope)) + s5-0 + ) + ) + ) + (if v1-17 + (set! gp-1 (-> (the-as periscope v1-17) raised?)) + ) + ) + (suspend) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (reflector-origin-update (-> self link next)) + (while #t + (suspend) + ) + (none) + ) + :post + (behavior () (draw-power-beam (-> self reflector-trans) (-> self next-reflector-trans)) (none)) + ) + +(defmethod init-from-entity! reflector-origin ((obj reflector-origin) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj blocker) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj reflector-trans quad) (-> obj root trans quad)) + (go reflector-origin-idle) + (none) + ) + +(defstate reflector-mirror-idle (reflector-mirror) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (sound-play-by-name (static-sound-name "mirror-smash") (new-sound-id) 1024 0 0 1 #t) + enter-state + (go reflector-mirror-broken) + ) + ) + ) + :exit + (behavior () (stop! (-> self sound)) (none)) + :code + (behavior () + (let ((gp-0 (new-stack-vector0))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (set! (-> gp-0 y) (+ 49152.0 (-> gp-0 y))) + (while #t + (draw-power-beam gp-0 (-> self beam-end)) + (update! (-> self sound)) + (when (logtest? (-> self draw status) 8) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 825) + (-> self beam-end) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (when (and *target* (>= 24576.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (start-hint-timer (game-text-id jungle-mirrors-break-the-mirror-jak)) + (level-hint-spawn + (game-text-id jungle-mirrors-break-the-mirror-jak) + "sksp0050" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior reflector-mirror) ja-post) + ) + +(defstate reflector-mirror-broken (reflector-mirror) + :code + (behavior () + (local-vars (a0-0 none)) + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (ja-post) + (let ((s5-0 (entity-actor-count (-> self entity) 'alt-actor))) + (dotimes (s4-0 s5-0) + (while (let ((s3-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> s3-0 from) self) + (set! (-> s3-0 num-params) 0) + (set! (-> s3-0 message) 'stop) + (let ((s2-0 send-event-function) + (v1-3 (entity-actor-lookup (-> self entity) 'alt-actor s4-0)) + ) + (not (s2-0 + (if v1-3 + (-> v1-3 extra process) + ) + s3-0 + ) + ) + ) + ) + (suspend) + ) + ) + ) + (when (not a0-0) + (ambient-hint-spawn "gamcam21" (the-as vector #f) *entity-pool* 'camera) + (let* ((gp-1 (get-process *default-dead-pool* manipy #x4000)) + (v1-11 (when gp-1 + (let ((t9-8 (method-of-type manipy activate))) + (t9-8 (the-as manipy gp-1) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + manipy-init + (-> self root-override trans) + (-> self entity) + *reflector-mirror-break-sg* + #f + ) + (-> gp-1 ppointer) + ) + ) + ) + (send-event (ppointer->process v1-11) 'anim-mode 'play1) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-2) 150) + (suspend) + ) + ) + (process-grab? *target*) + (while (or (-> self child) (-> *setting-control* current ambient)) + (suspend) + ) + (process-release? *target*) + (peri-beamcam-init-by-other (the-as string (-> self name))) + (process-entity-status! self (entity-perm-status complete) #t) + (close-specific-task! (game-task jungle-lurkerm) (task-status need-reminder-a)) + (while (-> self child) + (suspend) + ) + ) + (logior! (-> self mask) (process-mask actor-pause)) + (while #t + (suspend) + ) + (none) + ) + ) + +(defmethod init-from-entity! reflector-mirror ((obj reflector-mirror) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 24576.0 0.0 49152.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 1) + (set-vector! (-> s2-0 local-sphere) 0.0 6144.0 0.0 6963.2) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 1) + (set-vector! (-> s2-1 local-sphere) 0.0 18432.0 0.0 6963.2) + (append-prim s3-0 s2-1) + ) + (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) 1) + (set-vector! (-> s2-2 local-sphere) 0.0 30720.0 0.0 8192.0) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (initialize-skeleton obj *reflector-mirror-sg* '()) + (set-vector! (-> obj beam-end) 1805721.6 167936.0 -932659.2 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 "eco-beam") + :volume #x400 + :fo-max 50 + ) + (-> obj beam-end) + ) + ) + (cond + ((and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + enter-state + #t + (go reflector-mirror-broken) + ) + (else + (go reflector-mirror-idle) + ) + ) + (none) + ) + +(defun draw-power-beam ((arg0 vector) (arg1 vector)) + (when (line-in-view-frustum? arg0 arg1) + (let ((s4-1 (vector-! (new 'stack-no-clear 'vector) arg1 arg0))) + (vector-length s4-1) + (let ((t2-0 (new 'stack-no-clear 'collide-mesh-cache-tri))) + 0.0 + (if (>= (dummy-10 *collide-cache* arg0 s4-1 6144.0 16 (the-as process #f) (the-as collide-tri-result t2-0) 1) 0.0) + (send-event *target* 'get-pickup 3 5.0) + ) + ) + ) + (if (and + (< 4096.0 (vector-vector-distance (camera-pos) arg0)) + (< 4096.0 (vector-vector-distance (camera-pos) arg1)) + ) + (draw-eco-beam arg0 arg1) + ) + ) + 0 + (none) + ) + + + + diff --git a/goal_src/levels/maincave/dark-crystal.gc b/goal_src/levels/maincave/dark-crystal.gc index 50db3ea933..df05fc8e4b 100644 --- a/goal_src/levels/maincave/dark-crystal.gc +++ b/goal_src/levels/maincave/dark-crystal.gc @@ -5,3 +5,753 @@ ;; name in dgo: dark-crystal ;; dgos: L1, MAI, MAINCAVE +(define-extern *dark-crystal-sg* skeleton-group) +(define-extern *dark-crystal-explode-sg* skeleton-group) + +(declare-type dark-crystal process-drawable) + +(define-extern dark-crystal-spawn-fuel-cell (state dark-crystal)) ;; unknown type +(define-extern dark-crystal-idle (state dark-crystal)) ;; unknown type +(define-extern dark-crystal-explode (state dark-crystal)) ;; unknown type +(define-extern dark-crystal-activate (state dark-crystal)) ;; unknown type + +;; DECOMP BEGINS + +(deftype dark-crystal (process-drawable) + ((root-override collide-shape :offset 112) + (crystal-num int32 :offset-assert 176) + (underwater? symbol :offset-assert 180) + (explode-danger-radius float :offset-assert 184) + (lit-color-mult vector :inline :offset-assert 192) + (lit-color-emissive vector :inline :offset-assert 208) + (unlit-color-mult vector :inline :offset-assert 224) + (unlit-color-emissive vector :inline :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 22 + :size-assert #x100 + :flag-assert #x1600900100 + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) symbol 21) + ) + ) + + +(defskelgroup *dark-crystal-sg* dark-crystal + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 3.4 0 3.8) + :longest-edge (meters 0) + ) + +(defskelgroup *dark-crystal-explode-sg* dark-crystal + 3 + -1 + ((4 (meters 999999))) + :bounds (static-spherem 0 -15 0 50) + :longest-edge (meters 0) + ) + +(define + *dark-crystal-flash-delays* + (the-as (array int32) + (new 'static 'boxed-array :type int32 :length 9 :allocated-length 9 #xb4 #x96 #x78 90 60 30 15 7 3) + ) + ) + +(define + *dark-crystal-exploder-params* + (new 'static 'joint-exploder-static-params + :joints + (new + 'static + 'boxed-array + :type joint-exploder-static-joint-params :length 15 :allocated-length 15 + (new 'static 'joint-exploder-static-joint-params :joint-index 3 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 17 :parent-joint-index -1) + ) + ) + ) + +(set! (-> *part-group-id-table* 322) + (new 'static 'sparticle-launch-group + :length 69 + :duration #x4b + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-dark-crystal-gnd-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 69 + (sp-item 2153 :fade-after (meters 100.0) :period 600 :length 5 :binding 296) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2154 :period 600 :length 5) + (sp-item 2155 :period 600 :length 40) + (sp-item 2156 :period 600 :length 20) + (sp-item 2157 :period 600 :length 20) + ) + :bounds (new 'static 'sphere :w 65536.0) + ) + ) + +(set! (-> *part-id-table* 2153) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-flt spt-scale-x (meters 0.1)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.026666667) 1.0) + (sp-flt spt-accel-y -1.3653333) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 240) + (sp-cpuinfo-flags bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2155) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 24.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.16) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 89 1) + (sp-launcher-by-id spt-next-launcher 2158) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2158) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.0666667) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 2157) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 12.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-flt spt-scale-x (meters 0.3)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 12.0)) + (sp-rnd-flt spt-r 64.0 192.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.04)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2154) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 2.0)) + (sp-flt spt-scale-x (meters 24.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2156) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (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-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 323) (new 'static 'sparticle-launch-group + :length 6 + :duration #x4b + :linger-duration #x2ee0 + :flags (sp-group-flag use-local-clock) + :name "group-dark-crystal-water-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 6 + (sp-item 2159 :period 600 :length 5) + (sp-item 2160 :period 600 :length 40) + (sp-item 2161 :period 600 :length 20) + (sp-item 2162 :period 600 :length 20) + (sp-item 2163 :period 600 :length 75) + (sp-item 2164 :period 600 :length 75) + ) + :bounds (new 'static 'sphere :w 65536.0) + ) + ) + +(set! (-> *part-id-table* 2160) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 24.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.16) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 89 1) + (sp-launcher-by-id spt-next-launcher 2158) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2162) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 12.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-flt spt-scale-x (meters 0.3)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 12.0)) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.04)) + (sp-flt spt-fade-r -1.0666667) + (sp-flt spt-fade-g -2.1333334) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2159) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 2.0)) + (sp-flt spt-scale-x (meters 24.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-g -2.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2161) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 26 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (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-rnd-flt spt-r 128.0 96.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 32.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.2) + (sp-flt spt-fade-g -0.2) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2163) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-x (meters -4.0) (meters 8.0) 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 6.0) 1.0) + (sp-rnd-flt spt-z -16384.0 32768.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.15) (meters 0.05) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.125) (meters 0.025) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.006666667) 1.0) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 12000) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-flt spt-userdata 143360.0) + (sp-func spt-func 'check-water-level-above-and-die) + (sp-int-plain-rnd spt-next-time 30 29 1) + (sp-launcher-by-id spt-next-launcher 2165) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2165) + (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* 2164) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 4.0) + (sp-rnd-flt spt-x (meters -4.0) (meters 8.0) 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 6.0) 1.0) + (sp-rnd-flt spt-z -16384.0 32768.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.15) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.006666667) 1.0) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 12000) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-flt spt-userdata 143360.0) + (sp-func spt-func 'check-water-level-above-and-die) + (sp-int-plain-rnd spt-next-time 30 29 1) + (sp-launcher-by-id spt-next-launcher 2165) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(defstate dark-crystal-idle (dark-crystal) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (if (= (-> arg0 type) target) + (level-hint-spawn + (game-text-id dark-crystal-run-away) + "sksp0334" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (close-specific-task! (game-task cave-dark-crystals) (task-status need-hint)) + (go dark-crystal-activate) + ) + ) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate dark-crystal-activate (dark-crystal) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (dotimes (gp-0 (-> *dark-crystal-flash-delays* length)) + (sound-play-by-name (static-sound-name "warning") (new-sound-id) 1024 0 0 1 #t) + (set! (-> self draw color-mult quad) (-> self lit-color-mult quad)) + (set! (-> self draw color-emissive quad) (-> self lit-color-emissive quad)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (suspend) + ) + (set! (-> self draw color-mult quad) (-> self unlit-color-mult quad)) + (set! (-> self draw color-emissive quad) (-> self unlit-color-emissive quad)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((s5-1 (-> *dark-crystal-flash-delays* gp-0))) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) s5-1) + (suspend) + ) + ) + ) + (go dark-crystal-explode) + (none) + ) + ) + +(defstate dark-crystal-explode (dark-crystal) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (logclear! (-> self mask) (process-mask actor-pause)) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (new 'stack 'joint-exploder-tuning 0))) + (when (-> self underwater?) + (set! (-> gp-0 duration) (the-as uint 1200)) + (set! (-> gp-0 gravity) -20480.0) + (set! (-> gp-0 rot-speed) 4.2) + (set-vector! (-> gp-0 fountain-rand-transv-lo) -40960.0 20480.0 -40960.0 1.0) + (set-vector! (-> gp-0 fountain-rand-transv-hi) 40960.0 49152.0 40960.0 1.0) + ) + (let ((s5-0 (get-process *default-dead-pool* joint-exploder #x4000))) + (when s5-0 + (let ((t9-3 (method-of-type joint-exploder activate))) + (t9-3 (the-as joint-exploder s5-0) self 'joint-exploder (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + joint-exploder-init-by-other + *dark-crystal-explode-sg* + 5 + gp-0 + *dark-crystal-exploder-params* + ) + (-> s5-0 ppointer) + ) + ) + ) + (activate! *camera-smush-control* 819.2 37 210 1.0 0.995) + (let ((gp-1 (dummy-21 self))) + (suspend) + (ja-channel-set! 0) + (ja-post) + (logior! (-> self draw status) 2) + (dummy-20 self) + (if (-> self underwater?) + (sound-play-by-name (static-sound-name "water-explosion") (new-sound-id) 1024 0 0 1 #t) + (sound-play-by-name (static-sound-name "crystal-explode") (new-sound-id) 1024 0 0 1 #t) + ) + (let ((s5-3 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-3 + (let ((t9-15 (method-of-type part-tracker activate))) + (t9-15 (the-as part-tracker s5-3) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-3 + part-tracker-init + (if (-> self underwater?) + (-> *part-group-id-table* 323) + (-> *part-group-id-table* 322) + ) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> s5-3 ppointer) + ) + ) + (let ((s5-4 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s5-4) 75) + (suspend) + ) + ) + (if gp-1 + (go dark-crystal-spawn-fuel-cell) + ) + ) + (dummy-18 self) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + ) + +(defstate dark-crystal-spawn-fuel-cell (dark-crystal) + :event + (the-as + (function process int symbol event-message-block object :behavior dark-crystal) + process-drawable-fuel-cell-handler + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (clear-collide-with-as (-> self root-override)) + (level-hint-spawn + (game-text-id dark-crystal-last-one) + "sksp0327" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (ja-channel-set! 0) + (ja-post) + (logior! (-> self draw status) 2) + (if (not (task-complete? *game-info* (-> self entity extra perm task))) + (birth-pickup-at-point + (-> self root-override trans) + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #t + self + (the-as fact-info #f) + ) + ) + (suspend) + (until (not (-> self child)) + (suspend) + ) + (aybabtu 2) + (dummy-18 self) + (none) + ) + ) + +(defmethod dummy-20 dark-crystal ((obj dark-crystal)) + (when *target* + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> obj root-override trans quad)) + (set! (-> s5-0 y) (+ 6144.0 (-> s5-0 y))) + (set! (-> s3-0 quad) (-> (target-pos 0) quad)) + (set! (-> s3-0 y) (+ 6144.0 (-> s3-0 y))) + (when (>= (-> obj explode-danger-radius) (vector-vector-distance s5-0 s3-0)) + (vector-! s4-0 s3-0 s5-0) + (let ((t2-0 (new 'stack-no-clear 'collide-tri-result))) + (if (< (dummy-10 *collide-cache* s5-0 s4-0 819.2 1 obj t2-0 1) 0.0) + (send-event *target* 'attack #f (new 'static 'attack-info)) + ) + ) + ) + ) + ) + (none) + ) + +(defmethod dummy-21 dark-crystal ((obj dark-crystal)) + (let ((s5-0 #f)) + (when (nonzero? (-> obj crystal-num)) + (let* ((s4-0 (get-task-control (game-task cave-dark-crystals))) + (s3-0 (logior (get-reminder s4-0 3) (ash 1 (-> obj crystal-num)))) + ) + (save-reminder s4-0 s3-0 3) + (when (= s3-0 62) + (set! s5-0 #t) + (process-entity-status! obj (entity-perm-status complete) #t) + ) + ) + ) + s5-0 + ) + ) + +(defmethod init-from-entity! dark-crystal ((obj dark-crystal) (arg0 entity-actor)) + (set-vector! (-> obj unlit-color-mult) 0.5 0.5 0.5 1.0) + (set-vector! (-> obj unlit-color-emissive) 0.0 0.0 0.0 0.0) + (set-vector! (-> obj lit-color-mult) 1.0 1.0 1.0 1.0) + (set-vector! (-> obj lit-color-emissive) 1.0 1.0 1.0 0.0) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-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 6963.2 0.0 15564.8) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *dark-crystal-sg* '()) + (set! (-> obj mask) (logior (process-mask attackable) (-> obj mask))) + (set! (-> obj draw color-mult quad) (-> obj unlit-color-mult quad)) + (set! (-> obj draw color-emissive quad) (-> obj unlit-color-emissive quad)) + (set! (-> obj underwater?) (= (res-lump-value arg0 'mode uint128) 1)) + (set! (-> obj explode-danger-radius) (res-lump-float arg0 'extra-radius :default 28672.0)) + (set! (-> obj crystal-num) (res-lump-value arg0 'extra-id int)) + (set-vector! (-> obj root-override scale) 2.0 2.0 2.0 1.0) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go dark-crystal-spawn-fuel-cell) + (go dark-crystal-idle) + ) + (none) + ) + + + + diff --git a/goal_src/levels/maincave/driller-lurker.gc b/goal_src/levels/maincave/driller-lurker.gc index 838c537fdd..dcbc725cdf 100644 --- a/goal_src/levels/maincave/driller-lurker.gc +++ b/goal_src/levels/maincave/driller-lurker.gc @@ -5,3 +5,1851 @@ ;; name in dgo: driller-lurker ;; dgos: L1, MAI, MAINCAVE +(define-extern *driller-lurker-sg* skeleton-group) + +(declare-type driller-lurker process-drawable) + +(define-extern driller-lurker-idle-drilling (state driller-lurker)) ;; unknown type +(define-extern driller-lurker-patrol (state driller-lurker)) ;; unknown type +(define-extern driller-lurker-chase (state symbol driller-lurker)) ;; unknown type +(define-extern driller-lurker-jammed-standing (state driller-lurker)) ;; unknown type +(define-extern driller-lurker-attack (state driller-lurker)) ;; unknown type +(define-extern driller-lurker-patrol-pause (state driller-lurker)) ;; unknown type +(define-extern driller-lurker-die (state driller-lurker)) ;; unknown type +(define-extern driller-lurker-debug-play-anims (state driller-lurker)) ;; unknown type + +;; DECOMP BEGINS + +(deftype driller-lurker (process-drawable) + ((root-overeride collide-shape-moving :offset 112) + (hit-player? symbol :offset-assert 176) + (played-drill-sound? symbol :offset-assert 180) + (mode uint64 :offset-assert 184) + (path-u float :offset-assert 192) + (path-units-per-meter float :offset-assert 196) + (path-speed float :offset-assert 200) + (targ-path-speed float :offset-assert 204) + (path-dir float :offset-assert 208) + (path-ry float :offset-assert 212) + (facing-ry float :offset-assert 216) + (drill-rz float :offset-assert 220) + (drill-speed float :offset-assert 224) + (up-blend float :offset-assert 228) + (player-path-u float :offset-assert 232) + (ambient-drilling-u float :offset-assert 236) + (timeout int32 :offset-assert 240) + (neck joint-mod :offset-assert 244) + (drill joint-mod :offset-assert 248) + (sound2 ambient-sound :offset-assert 252) + (last-update-time uint64 :offset-assert 256) + (last-player-path-u-time uint64 :offset-assert 264) + (started-chasing-time uint64 :offset-assert 272) + (hit-player-time uint64 :offset-assert 280) + (player-attack-id uint64 :offset-assert 288) + ) + :heap-base #xc0 + :method-count-assert 28 + :size-assert #x128 + :flag-assert #x1c00c00128 + (:methods + (dummy-20 (_type_ symbol target) symbol 20) + (dummy-21 (_type_) none 21) + (dummy-22 (_type_) none 22) + (dummy-23 (_type_) float 23) + (dummy-24 (_type_) symbol 24) + (dummy-25 (_type_) symbol 25) + (dummy-26 (_type_) symbol 26) + (dummy-27 (_type_) object 27) + ) + ) + + +(defskelgroup *driller-lurker-sg* driller-lurker + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1.5 0 7.75) + :longest-edge (meters 2.3) + :shadow 4 + ) + +(define + *driller-lurker-shadow-control* + (new 'static 'shadow-control + :settings + (new 'static 'shadow-settings + :center + (new 'static 'vector :w (the-as float #x9)) + :shadow-dir + (new 'static 'vector :y -1.0 :w 614400.0) + :bot-plane (new 'static 'plane :y 1.0 :w 4096.0) + :top-plane (new 'static 'plane :y 1.0 :w -2048.0) + :fade-dist 245760.0 + ) + ) + ) + +(set! + (-> *part-group-id-table* 331) + (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-driller-lurker-drilling-debris" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 728 :fade-after (meters 80.0) :falloff-to (meters 80.0)) + (sp-item 2075 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + (sp-item 2076 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + (sp-item 2077 :fade-after (meters 40.0) :falloff-to (meters 40.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! + (-> *part-id-table* 728) + (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 4.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (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 1.5) (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 64.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.45714286) + (sp-flt spt-accel-y 2.7306666) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2075) + (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 4.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (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 0.5) (meters 0.25) 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 64.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.30476192) + (sp-flt spt-accel-y 2.7306666) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2076) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 4.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (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 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 96.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.10666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int spt-next-time 375) + (sp-launcher-by-id spt-next-launcher 2078) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2078) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -1.7066667) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2077) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 8.0 8.0 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (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 0.05) (meters 0.15) 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 96.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.10666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 2078) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(defbehavior + driller-lurker-default-event-handler driller-lurker + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (sv-96 collide-shape-prim)) + (cond + ((= arg2 'attack) + (cond + ((= (-> arg0 type) target) + (let ((v1-3 (-> arg3 param 2))) + (when (!= v1-3 (-> self player-attack-id)) + (set! (-> self player-attack-id) v1-3) + (case (-> self mode) + ((5) + (let ((v1-5 *target*)) + (when (!= (-> arg3 param 1) 'flop) + (let + ((f0-4 + (atan + (- (-> v1-5 control trans x) (-> self root-overeride trans x)) + (- (-> v1-5 control trans z) (-> self root-overeride trans z)) + ) + ) + ) + (quaternion-axis-angle! + (-> self root-overeride quat) + 0.0 + 1.0 + 0.0 + f0-4 + ) + ) + ) + ) + (go driller-lurker-die) + ) + (else + (let ((s4-0 *target*) + (s2-0 #f) + (s3-0 #f) + ) + (let* ((s1-0 (the-as touching-shapes-entry (-> arg3 param 0))) + (s0-0 (-> s1-0 head)) + ) + (while s0-0 + (set! + sv-96 + (get-touched-prim + s0-0 + (-> self root-overeride) + (the-as touching-prims-entry s1-0) + ) + ) + (if + (and + (logtest? + (-> + (get-touched-prim + s0-0 + (-> s4-0 control) + (the-as touching-prims-entry s1-0) + ) + prim-core + action + ) + 1 + ) + (logtest? (-> sv-96 prim-id) 1) + ) + (set! s2-0 #t) + ) + (if (logtest? (-> sv-96 prim-id) 2) + (set! s3-0 #t) + ) + (set! s0-0 (-> s0-0 next)) + ) + ) + (cond + ((or s2-0 (not s3-0)) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack) + (set! (-> a1-6 param 0) (-> arg3 param 0)) + (let ((v1-34 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-34 shove-up) 8192.0) + (set! (-> v1-34 shove-back) 12288.0) + (set! (-> a1-6 param 1) (the-as uint v1-34)) + ) + (when (send-event-function arg0 a1-6) + (set! (-> self hit-player?) #t) + (set! + (-> self hit-player-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (dummy-54 (-> self root-overeride) 2 0) + (let ((v1-39 (-> self mode))) + (if (or (zero? v1-39) (= v1-39 1) (= v1-39 2)) + (go driller-lurker-chase #t) + ) + ) + ) + ) + ) + (s3-0 + (when (!= (-> arg3 param 1) 'flop) + (let + ((f0-11 + (atan + (- (-> s4-0 control trans x) (-> self root-overeride trans x)) + (- (-> s4-0 control trans z) (-> self root-overeride trans z)) + ) + ) + ) + (quaternion-axis-angle! + (-> self root-overeride quat) + 0.0 + 1.0 + 0.0 + f0-11 + ) + ) + ) + (go driller-lurker-die) + ) + ) + ) + ) + ) + ) + ) + ) + (else + (go driller-lurker-die) + ) + ) + ) + ((= arg2 'touch) + (when (= (-> arg0 type) target) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 2) + (set! (-> a1-11 message) 'attack) + (set! (-> a1-11 param 0) (-> arg3 param 0)) + (let ((v1-57 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-57 shove-up) 8192.0) + (set! (-> v1-57 shove-back) 12288.0) + (set! (-> a1-11 param 1) (the-as uint v1-57)) + ) + (when (send-event-function arg0 a1-11) + (set! (-> self hit-player?) #t) + (set! + (-> self hit-player-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (dummy-54 (-> self root-overeride) 2 0) + (let ((v1-62 (-> self mode))) + (if (or (zero? v1-62) (= v1-62 1) (= v1-62 2)) + (go driller-lurker-chase #t) + ) + ) + ) + ) + ) + ) + ) + ) + +(defmethod + dummy-20 + driller-lurker + ((obj driller-lurker) (arg0 symbol) (arg1 target)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-update-time)) + (set! (-> obj last-update-time) (the-as uint v1-1)) + (let* ((f0-0 (-> obj path-speed)) + (f1-1 + (seek + f0-0 + (-> obj targ-path-speed) + (* 12288.0 (-> *display* seconds-per-frame)) + ) + ) + ) + (set! (-> obj path-speed) f1-1) + (when (< 0.0 f1-1) + (let* ((f0-5 (-> obj path-u)) + (f30-0 (* (-> obj path-dir) f1-1 (-> *display* seconds-per-frame))) + (s4-0 #t) + (f0-6 + (+ f0-5 (* 0.00024414062 (-> obj path-units-per-meter) f30-0)) + ) + ) + (cond + ((< f0-6 0.0) + (set! s4-0 #f) + (cond + (arg0 + (set! f0-6 (- f0-6)) + (set! (-> obj path-dir) (- (-> obj path-dir))) + (set! (-> obj path-speed) 0.0) + ) + (else + (set! f0-6 0.0) + (set! (-> obj path-speed) 0.0) + ) + ) + ) + ((< 1.0 f0-6) + (set! s4-0 #f) + (cond + (arg0 + (set! f0-6 (- 2.0 f0-6)) + (set! (-> obj path-dir) (- (-> obj path-dir))) + (set! (-> obj path-speed) 0.0) + ) + (else + (set! f0-6 1.0) + (set! (-> obj path-speed) 0.0) + ) + ) + ) + ) + (set! (-> obj path-u) f0-6) + (let ((s3-1 (new 'stack-no-clear 'vector))) + (set! (-> s3-1 quad) (-> obj root-overeride trans quad)) + (eval-path-curve! + (-> obj path) + (-> obj root-overeride trans) + f0-6 + 'interp + ) + (when s4-0 + (let + ((f0-7 (vector-vector-xz-distance s3-1 (-> obj root-overeride trans))) + ) + (set! + (-> obj path-units-per-meter) + (* (/ (fabs f30-0) f0-7) (-> obj path-units-per-meter)) + ) + ) + ) + ) + ) + ) + ) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (TODO-RENAME-14 (-> obj path) s4-1 (-> obj path-u)) + (let ((f0-13 (atan (-> s4-1 x) (-> s4-1 z)))) + (if (< (-> obj path-dir) 0.0) + (set! f0-13 (+ 32768.0 f0-13)) + ) + (set! (-> obj path-ry) f0-13) + ) + ) + (case (-> obj mode) + ((4) + (when *target* + (let ((a0-13 (target-pos 0)) + (v1-26 (new 'stack-no-clear 'vector)) + ) + (vector-! v1-26 a0-13 (-> obj root-overeride trans)) + (let ((f0-16 (atan (-> v1-26 x) (-> v1-26 z)))) + (set! + (-> obj facing-ry) + (deg-seek-smooth + (-> obj facing-ry) + f0-16 + (* 32768.0 (-> *display* seconds-per-frame)) + 0.25 + ) + ) + ) + ) + (when (< 16384.0 (fabs (deg- (-> obj facing-ry) (-> obj path-ry)))) + (set! (-> obj path-dir) (- (-> obj path-dir))) + (set! (-> obj path-ry) (+ 32768.0 (-> obj path-ry))) + ) + ) + ) + (else + (if (!= (-> obj mode) 1) + (set! + (-> obj facing-ry) + (deg-seek-smooth + (-> obj facing-ry) + (-> obj path-ry) + (* 32768.0 (-> *display* seconds-per-frame)) + 0.25 + ) + ) + ) + ) + ) + (quaternion-axis-angle! + (-> obj root-overeride quat) + 0.0 + 1.0 + 0.0 + (-> obj facing-ry) + ) + (let ((f30-2 0.0)) + (when *target* + (let + ((f0-34 + (vector-vector-xz-distance + (target-pos 0) + (-> obj root-overeride trans) + ) + ) + ) + (if (< f0-34 36864.0) + (set! f30-2 (- 1.0 (* 0.00006510417 (fmax 0.0 (+ -21504.0 f0-34))))) + ) + ) + ) + (let + ((f28-1 + (* + 0.0001373291 + (fmin 7281.778 (fabs (deg- (-> obj path-ry) (-> obj facing-ry)))) + ) + ) + ) + (cond + ((< 0.0 f30-2) + (let ((s3-2 (new 'stack-no-clear 'vector))) + (vector-! s3-2 (target-pos 0) (-> obj root-overeride trans)) + (let* ((f1-27 (vector-x-angle s3-2)) + (f1-29 (fmax 728.1778 (fmin 10194.489 f1-27))) + (f0-46 (* 0.000105637766 (+ -728.1778 f1-29))) + (f0-47 (lerp f28-1 f0-46 f30-2)) + ) + (set! + (-> obj up-blend) + (seek-with-smooth + (-> obj up-blend) + f0-47 + (* 8192.0 (-> *display* seconds-per-frame)) + 0.25 + 0.01 + ) + ) + ) + ) + ) + (else + (set! + (-> obj up-blend) + (seek-with-smooth + (-> obj up-blend) + f28-1 + (* 8192.0 (-> *display* seconds-per-frame)) + 0.125 + 0.01 + ) + ) + ) + ) + ) + ) + (when (and arg1 *target*) + (set-target! (-> obj neck) (target-pos 5)) + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> obj root-overeride root-prim prim-core)) + 'attacking + obj + ) + ) + ) + (let ((f30-3 (-> obj drill-speed))) + (let ((v1-56 (-> obj mode))) + (cond + ((or (= v1-56 2) (zero? v1-56)) + (set! + f30-3 + (seek f30-3 72817.78 (* 372827.03 (-> *display* seconds-per-frame))) + ) + ) + ((= v1-56 1) + (set! + f30-3 + (seek f30-3 276707.56 (* 372827.03 (-> *display* seconds-per-frame))) + ) + ) + ((or (= v1-56 3) (= v1-56 4)) + (set! + f30-3 + (if + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> obj started-chasing-time)) + ) + 675 + ) + (seek f30-3 0.0 (* 600746.7 (-> *display* seconds-per-frame))) + (seek f30-3 276707.56 (* 372827.03 (-> *display* seconds-per-frame))) + ) + ) + ) + ((= v1-56 5) + (set! + f30-3 + (if + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> obj started-chasing-time)) + ) + 1725 + ) + (seek f30-3 276707.56 (* 372827.03 (-> *display* seconds-per-frame))) + (seek f30-3 0.0 (* 600746.7 (-> *display* seconds-per-frame))) + ) + ) + ) + ) + ) + (set! (-> obj drill-speed) f30-3) + (cond + ((>= f30-3 36408.89) + (update-trans! (-> obj sound) (-> obj root-overeride trans)) + (update! (-> obj sound)) + (set! (-> obj played-drill-sound?) #t) + ) + (else + (when (-> obj played-drill-sound?) + (set! (-> obj played-drill-sound?) #f) + (stop! (-> obj sound)) + ) + ) + ) + (let + ((f0-69 (+ (-> obj drill-rz) (* f30-3 (-> *display* seconds-per-frame))))) + (set! + (-> obj drill-rz) + (- f0-69 (* (the float (the int (/ f0-69 65536.0))) 65536.0)) + ) + ) + ) + (let ((s5-2 (new 'stack-no-clear 'quaternion))) + (quaternion-axis-angle! s5-2 0.0 0.0 1.0 (-> obj drill-rz)) + (set-trs! (-> obj drill) (the-as vector #f) s5-2 (the-as vector #f)) + ) + 0 + ) + ) + (when + (and + (-> obj hit-player?) + (or + (not *target*) + (and + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> obj hit-player-time)) + ) + 15 + ) + ) + ) + ) + (dummy-54 (-> obj root-overeride) 2 1) + (set! (-> obj hit-player?) #f) + #f + ) + ) + +(defmethod dummy-23 driller-lurker ((obj driller-lurker)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-player-path-u-time)) + (set! (-> obj last-player-path-u-time) (the-as uint v1-1)) + (cond + (*target* + (let* ((s5-0 (-> obj path)) + (s4-0 (method-of-object s5-0 TODO-RENAME-20)) + ) + (target-pos 0) + (set! (-> obj player-path-u) (s4-0 s5-0)) + ) + ) + (else + (set! (-> obj player-path-u) 0.0) + ) + ) + ) + ) + (-> obj player-path-u) + ) + +(defmethod dummy-25 driller-lurker ((obj driller-lurker)) + (when *target* + (let* ((s5-0 (target-pos 0)) + (f0-1 (- (-> s5-0 y) (-> obj root-overeride trans y))) + ) + (when (and (>= 32768.0 f0-1) (>= f0-1 -2048.0)) + (case (-> obj mode) + ((1) + (if + (>= + 73728.0 + (vector-vector-xz-distance (-> obj root-overeride trans) s5-0) + ) + (return #t) + ) + ) + (else + (when + (>= + 102400.0 + (vector-vector-xz-distance (-> obj root-overeride trans) s5-0) + ) + (let + ((f0-8 + (atan + (- (-> s5-0 x) (-> obj root-overeride trans x)) + (- (-> s5-0 z) (-> obj root-overeride trans z)) + ) + ) + ) + (if (>= 20024.889 (fabs (deg- f0-8 (-> obj facing-ry)))) + (return #t) + ) + ) + ) + ) + ) + ) + ) + ) + #f + ) + +(defmethod dummy-26 driller-lurker ((obj driller-lurker)) + (when *target* + (let* ((a1-0 (target-pos 0)) + (f0-1 (- (-> a1-0 y) (-> obj root-overeride trans y))) + ) + (if + (and + (< f0-1 40960.0) + (< -10240.0 f0-1) + (< + (vector-vector-xz-distance (-> obj root-overeride trans) a1-0) + 143360.0 + ) + ) + (return #f) + ) + ) + ) + #t + ) + +(defmethod dummy-24 driller-lurker ((obj driller-lurker)) + (when *target* + (let* ((a1-0 (target-pos 0)) + (f0-1 (- (-> a1-0 y) (-> obj root-overeride trans y))) + ) + (when (and (< f0-1 40960.0) (< -10240.0 f0-1)) + (let + ((f0-2 (vector-vector-xz-distance (-> obj root-overeride trans) a1-0))) + (cond + ((>= 17408.0 f0-2) + (return #t) + ) + ((< f0-2 143360.0) + (let ((f0-3 (dummy-23 obj)) + (f1-5 (-> obj path-u)) + ) + (if (>= (* 0.1 (-> obj path-units-per-meter)) (fabs (- f0-3 f1-5))) + (return #t) + ) + ) + ) + ) + ) + ) + ) + ) + #f + ) + +(defmethod dummy-27 driller-lurker ((obj driller-lurker)) + (let ((a2-0 (-> obj node-list data 25 bone transform)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set-vector! s5-0 0.0 0.0 8192.0 1.0) + (vector-matrix*! s5-0 s5-0 a2-0) + (vector-float*! s5-0 s5-0 (/ 1.0 (-> s5-0 w))) + (spawn (-> obj part) s5-0) + ) + ) + +(defstate driller-lurker-debug-play-anims (driller-lurker) + :code + (behavior () + 0 + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +(defstate driller-lurker-idle-drilling (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior () + (set! (-> self mode) (the-as uint 1)) + (set! (-> self targ-path-speed) 0.0) + (set! (-> self path-speed) 0.0) + (shut-down! (-> self neck)) + (none) + ) + :exit + (behavior () + (stop! (-> self sound2)) + (none) + ) + :trans + (behavior () + (if (dummy-25 self) + (go driller-lurker-chase #t) + ) + (dummy-20 self #t (the-as target #f)) + (none) + ) + :code + (behavior () + (update-trans! (-> self sound2) (-> self root-overeride trans)) + (while #t + (set! (-> self timeout) (rand-vu-int-range 4 8)) + (ja-channel-push! 1 60) + (dotimes (gp-0 (-> self timeout)) + (let ((f30-0 (rand-vu-float-range 1.0 1.8))) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 15)) + ) + (set! + (-> a0-4 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 15)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) f30-0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (the-as art-joint-anim (-> self draw art-group data 15)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (update! (-> self sound2)) + (if (and (>= (ja-aframe-num 0) 7.0) (>= 13.0 (ja-aframe-num 0))) + (dummy-27 self) + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) f30-0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (stop! (-> self sound2)) + (ja-channel-push! 1 60) + (cond + ((zero? (rand-vu-int-count 2)) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + ) + (else + (let ((gp-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + ) + ) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 param 0) + (the float (+ (-> a0-16 frame-group data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! + (-> a0-17 param 0) + (the float (+ (-> a0-17 frame-group data 0 length) -1)) + ) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! + a0-17 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +(defstate driller-lurker-patrol (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior () + (set! (-> self mode) (the-as uint 2)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self timeout) (rand-vu-int-range 900 3600)) + (set! (-> self targ-path-speed) 15360.0) + (if (>= 4096.0 (-> self path-speed)) + (set! (-> self targ-path-speed) 15360.0) + ) + (shut-down! (-> self neck)) + (none) + ) + :trans + (behavior () + (if (dummy-25 self) + (go driller-lurker-chase #t) + ) + (dummy-20 self #t (the-as target #f)) + (none) + ) + :code + (behavior () + (ja-channel-push! 2 60) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (let ((a0-2 (-> self skel root-channel 1))) + (set! (-> a0-2 frame-interp) (-> self up-blend)) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + (set! (-> a0-2 param 0) 0.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-chan + ) + ) + (while #t + (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! + ) + ) + (when (= (ja-group-size) 2) + (let ((a0-4 (-> self skel root-channel 1))) + (set! (-> a0-4 frame-interp) (-> self up-blend)) + (set! (-> a0-4 param 0) 0.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-chan + ) + ) + ) + (when (ja-done? 0) + (if + (and + (>= + (- (-> *display* base-frame-counter) (-> self state-time)) + (-> self timeout) + ) + (>= 546.13336 (fabs (deg- (-> self path-ry) (-> self facing-ry)))) + ) + (go driller-lurker-patrol-pause) + ) + (let ((v1-34 (-> self skel root-channel 0))) + (set! (-> v1-34 num-func) num-func-identity) + (set! (-> v1-34 frame-num) 0.0) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +(defstate driller-lurker-patrol-pause (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior () + (set! (-> self mode) (the-as uint 2)) + (set! (-> self path-speed) 0.0) + (set! (-> self targ-path-speed) 0.0) + (shut-down! (-> self neck)) + (none) + ) + :trans + (behavior () + (if (dummy-25 self) + (go driller-lurker-chase #t) + ) + (dummy-20 self #t (the-as target #f)) + (none) + ) + :code + (behavior () + (set! (-> self timeout) (rand-vu-int-range 2 4)) + (let ((s5-0 -1)) + (dotimes (gp-0 (-> self timeout)) + (let ((v1-0 (rand-vu-int-count 3))) + (if (= v1-0 s5-0) + (set! v1-0 (mod (+ v1-0 1) 3)) + ) + (set! s5-0 v1-0) + (cond + ((zero? v1-0) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((s4-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s4-0 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> s4-0 frame-num) 0.0) + ) + ) + ((= v1-0 1) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((s4-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + ) + ((= v1-0 2) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((s4-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s4-2 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-identity + ) + (set! (-> s4-2 frame-num) 0.0) + ) + ) + ) + ) + (let ((a0-27 (-> self skel root-channel 0))) + (set! + (-> a0-27 param 0) + (the float (+ (-> a0-27 frame-group data 0 length) -1)) + ) + (set! (-> a0-27 param 1) 1.0) + (joint-control-channel-group! + a0-27 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! + (-> a0-28 param 0) + (the float (+ (-> a0-28 frame-group data 0 length) -1)) + ) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! + a0-28 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (go driller-lurker-patrol) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +(defstate driller-lurker-chase (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior ((arg0 symbol)) + (if arg0 + (set! + (-> self started-chasing-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + (set! (-> self mode) (the-as uint 3)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self targ-path-speed) 23552.0) + (none) + ) + :trans + (behavior () + (if (dummy-24 self) + (go driller-lurker-attack) + ) + (if (dummy-26 self) + (go driller-lurker-patrol) + ) + (if + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self started-chasing-time)) + ) + 900 + ) + (go driller-lurker-jammed-standing) + ) + (let* ((gp-0 (-> self path)) + (s5-0 (method-of-object gp-0 TODO-RENAME-20)) + ) + (target-pos 0) + (let ((f0-1 (- (s5-0 gp-0) (-> self path-u)))) + (when (>= (fabs f0-1) (* 0.1 (-> self path-units-per-meter))) + (cond + ((< 0.0 f0-1) + (when (< (-> self path-dir) 0.0) + (set! (-> self path-dir) 1.0) + (set! (-> self path-speed) 0.0) + ) + ) + (else + (when (>= (-> self path-dir) 0.0) + (set! (-> self path-dir) -1.0) + (set! (-> self path-speed) 0.0) + ) + ) + ) + ) + ) + ) + (dummy-20 self #f (the-as target #t)) + (none) + ) + :code + (behavior ((arg0 symbol)) + (ja-channel-push! 2 60) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (let ((a0-3 (-> self skel root-channel 1))) + (set! (-> a0-3 frame-interp) (-> self up-blend)) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 12)) + ) + (set! (-> a0-3 param 0) 0.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 12)) + num-func-chan + ) + ) + (while #t + (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! + ) + ) + (when (= (ja-group-size) 2) + (let ((a0-5 (-> self skel root-channel 1))) + (set! (-> a0-5 frame-interp) (-> self up-blend)) + (set! (-> a0-5 param 0) 0.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-chan + ) + ) + ) + (when (ja-done? 0) + (let ((v1-27 (-> self skel root-channel 0))) + (set! (-> v1-27 num-func) num-func-identity) + (set! (-> v1-27 frame-num) 0.0) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +(defstate driller-lurker-attack (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior () + (set! (-> self mode) (the-as uint 4)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self path-speed) 0.0) + (set! (-> self targ-path-speed) 0.0) + (none) + ) + :trans + (behavior () + (cond + ((dummy-24 self) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (go driller-lurker-chase #f) + ) + ) + ) + (if + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self started-chasing-time)) + ) + 900 + ) + (go driller-lurker-jammed-standing) + ) + (dummy-20 self #f (the-as target #t)) + (none) + ) + :code + (behavior () + (ja-channel-push! 2 60) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 13)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (let ((a0-2 (-> self skel root-channel 1))) + (set! (-> a0-2 frame-interp) (-> self up-blend)) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 14)) + ) + (set! (-> a0-2 param 0) 0.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 14)) + num-func-chan + ) + ) + (while #t + (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! + ) + ) + (when (= (ja-group-size) 2) + (let ((a0-4 (-> self skel root-channel 1))) + (set! (-> a0-4 frame-interp) (-> self up-blend)) + (set! (-> a0-4 param 0) 0.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-chan + ) + ) + ) + (when (ja-done? 0) + (let ((v1-27 (-> self skel root-channel 0))) + (set! (-> v1-27 num-func) num-func-identity) + (set! (-> v1-27 frame-num) 0.0) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +(defstate driller-lurker-jammed-standing (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior () + (set! (-> self mode) (the-as uint 5)) + (set! (-> self path-speed) 0.0) + (set! (-> self targ-path-speed) 0.0) + (shut-down! (-> self neck)) + (none) + ) + :trans + (behavior () + (dummy-20 self #f (the-as target #f)) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (set! + (-> self started-chasing-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (cond + (*target* + (go driller-lurker-chase #f) + (set! (-> self path-speed) 5888.0) + ) + (else + (set! (-> self path-speed) 7680.0) + (go driller-lurker-patrol) + ) + ) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +(defstate driller-lurker-die (driller-lurker) + :event + (the-as + (function process int symbol event-message-block object :behavior driller-lurker) + process-drawable-death-event-handler + ) + :code + (behavior () + (shut-down! (-> self neck)) + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 60) + (clear-collide-with-as (-> self root-overeride)) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 16)) + ) + (set! + (-> a0-4 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 16)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (the-as art-joint-anim (-> self draw art-group data 16)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (send-event self 'death-end) + (while (-> self child) + (suspend) + ) + (dummy-18 self) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) ja-post) + ) + +(defmethod relocate driller-lurker ((obj driller-lurker) (arg0 int)) + (if (nonzero? (-> obj neck)) + (&+! (-> obj neck) arg0) + ) + (if (nonzero? (-> obj drill)) + (&+! (-> obj drill) arg0) + ) + (if (nonzero? (-> obj sound2)) + (&+! (-> obj sound2) arg0) + ) + (the-as + driller-lurker + ((the-as + (function process-drawable int process-drawable) + (find-parent-method driller-lurker 7) + ) + obj + arg0 + ) + ) + ) + +(defmethod deactivate driller-lurker ((obj driller-lurker)) + (if (nonzero? (-> obj sound2)) + (stop! (-> obj sound2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(defmethod + init-from-entity! + driller-lurker + ((obj driller-lurker) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (set! (-> obj hit-player?) #f) + (set! (-> obj played-drill-sound?) #f) + (set! (-> obj hit-player-time) (the-as uint 0)) + (set! (-> obj mode) (the-as uint 0)) + (set! (-> obj drill-rz) 0.0) + (set! (-> obj drill-speed) 72817.78) + (set! (-> obj last-update-time) (the-as uint 0)) + (set! (-> obj last-player-path-u-time) (the-as uint 0)) + (set! (-> obj started-chasing-time) (the-as uint 0)) + (set! (-> obj player-attack-id) (the-as uint 0)) + (set! (-> obj ambient-drilling-u) -1.0) + (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) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 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 3073)) + (set! (-> s3-0 prim-core offense) 2) + (set-vector! (-> s3-0 local-sphere) 0.0 11264.0 0.0 22528.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-0 prim-core offense) 1) + (set-vector! (-> s2-0 local-sphere) 0.0 3276.8 0.0 4505.6) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-1 prim-core offense) 1) + (set-vector! (-> s2-1 local-sphere) 0.0 7372.8 0.0 4505.6) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-2 prim-core offense) 1) + (set-vector! (-> s2-2 local-sphere) 0.0 11468.8 0.0 4505.6) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core offense) 2) + (set! (-> s2-3 transform-index) 25) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 4096.0 3276.8) + (append-prim s3-0 s2-3) + ) + (let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core offense) 2) + (set! (-> s2-4 transform-index) 25) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 5734.4 3686.4) + (append-prim s3-0 s2-4) + ) + (let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-5 collide-with) (the-as uint 16)) + (set! (-> s2-5 prim-core offense) 2) + (set! (-> s2-5 transform-index) 25) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 9420.8 2457.6) + (append-prim s3-0 s2-5) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-overeride) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *driller-lurker-sg* '()) + (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0)) + (logior! + (-> obj path flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (if (< (-> obj path curve num-cverts) 2) + (go process-drawable-art-error "bad path") + ) + (set! + (-> obj fact) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! (-> obj draw shadow-ctrl) *driller-lurker-shadow-control*) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "drill-idle") + :volume #x400 + :fo-max 40 + ) + (-> obj root-overeride trans) + ) + ) + (set! + (-> obj sound2) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "drill-idle2") + :volume #x400 + :fo-max 60 + ) + (-> obj root-overeride trans) + ) + ) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 331) obj) + ) + (let ((f0-34 (path-distance (-> obj path)))) + (set! (-> obj path-units-per-meter) (/ 4096.0 f0-34)) + ) + (set! (-> obj path-dir) 1.0) + (set! (-> obj path-u) 0.0) + (set! (-> obj path-speed) 15360.0) + (set! (-> obj targ-path-speed) 15360.0) + (set! (-> obj up-blend) 0.0) + (set! sv-16 (new 'static 'res-tag)) + (let + ((v1-91 + (res-lump-data + arg0 + 'driller-lurker + (pointer float) + :tag-ptr + (the-as (pointer res-tag) (new 'stack-no-clear 'vector)) + ) + ) + ) + (when v1-91 + (set! (-> obj path-u) (fmax 0.0 (fmin 1.0 (-> v1-91 0)))) + (if (< (-> v1-91 1) 0.0) + (set! (-> obj path-dir) -1.0) + ) + (let ((f0-45 (-> v1-91 2))) + (when (!= f0-45 12345.0) + (let ((f30-0 (* 182.04445 f0-45))) + (set! (-> obj ambient-drilling-u) (-> obj path-u)) + (quaternion-axis-angle! (-> obj root-overeride quat) 0.0 1.0 0.0 f30-0) + (set! (-> obj facing-ry) f30-0) + ) + ) + ) + ) + ) + (eval-path-curve! + (-> obj path) + (-> obj root-overeride trans) + (-> obj path-u) + 'interp + ) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (TODO-RENAME-14 (-> obj path) s5-1 (-> obj path-u)) + (let ((f0-51 (atan (-> s5-1 x) (-> s5-1 z)))) + (if (< (-> obj path-dir) 0.0) + (set! f0-51 (+ 32768.0 f0-51)) + ) + (set! (-> obj path-ry) f0-51) + (if (< (-> obj ambient-drilling-u) 0.0) + (set! (-> obj facing-ry) f0-51) + ) + ) + ) + (let ((v1-103 (new 'process 'joint-mod (joint-mod-handler-mode reset) obj 6))) + (set! (-> obj neck) v1-103) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> v1-103 up) (the-as uint 1)) + (set! (-> v1-103 nose) (the-as uint 2)) + (set! (-> v1-103 ear) (the-as uint 0)) + (set! (-> v1-103 max-dist) 102400.0) + (set! (-> v1-103 ignore-angle) 16384.0) + ) + (set! + (-> obj drill) + (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) obj 38) + ) + (transform-post) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as + (function object object object object object) + cavecrystal-light-control-default-callback + ) + -1 + 8192.0 + ) + (if (>= (-> obj ambient-drilling-u) 0.0) + (go driller-lurker-idle-drilling) + (go driller-lurker-patrol) + ) + (none) + ) + + + + diff --git a/goal_src/levels/maincave/gnawer.gc b/goal_src/levels/maincave/gnawer.gc index 44bab5e76a..d43bc410eb 100644 --- a/goal_src/levels/maincave/gnawer.gc +++ b/goal_src/levels/maincave/gnawer.gc @@ -5,3 +5,1829 @@ ;; name in dgo: gnawer ;; dgos: L1, MAI, MAINCAVE +(define-extern *gnawer-sg* skeleton-group) +(define-extern *gnawer-segment-sg* skeleton-group) + +(declare-type gnawer process-drawable) + +(define-extern gnawer-put-items-at-dest (state gnawer)) ;; unknown type +(define-extern gnawer-chewing-on-post (state gnawer)) ;; unknown type +(define-extern gnawer-give-fuel-cell (state gnawer)) ;; unknown type +(define-extern gnawer-dying-give-pickups (state gnawer)) ;; unknown type +(define-extern gnawer-wait-to-run (state gnawer)) ;; unknown type +(define-extern gnawer-die (state gnawer)) ;; unknown type +(define-extern gnawer-run (state gnawer)) ;; unknown type +(define-extern gnawer-retreat-into-post (state gnawer)) ;; unknown type + +(define-extern gnawer-joint-callback (function gnawer none)) + +;; DECOMP BEGINS + +(deftype gnawer-falling-segment (process-drawable) + ((transv vector :inline :offset-assert 176) + (facing-rot vector :inline :offset-assert 192) + (facing-rotv vector :inline :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 21 + :size-assert #xe0 + :flag-assert #x15007000e0 + (:methods + (falling () _type_ :state 20) + ) + ) + + +(deftype gnawer-segment-info (structure) + ((num-joints int32 :offset-assert 0) + (joint-index int8 8 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + + +(deftype gnawer-segment (structure) + ((place int32 :offset-assert 0) + (world-pos vector :inline :offset-assert 16) + (anim-to-local-trans-offset vector :inline :offset-assert 32) + (orient-mat matrix :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) + + +(deftype gnawer-route (structure) + ((src-pt-index int32 :offset-assert 0) + (dest-pt-index int32 :offset-assert 4) + (total-travel-time uint64 :offset-assert 8) + (src-ang float :offset-assert 16) + (dest-ang float :offset-assert 20) + (delta-ang float :offset-assert 24) + (surface-dist float :offset-assert 28) + (total-dist float :offset-assert 32) + (src-pt-offset vector :inline :offset-assert 48) + (dest-pt-offset vector :inline :offset-assert 64) + (surface-dir vector :inline :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ) + + +(deftype gnawer (process-drawable) + ((root-override collide-shape :offset 112) + (hit-points int32 :offset-assert 176) + (gnawer-id int32 :offset-assert 180) + (total-money int32 :offset-assert 184) + (money-mask uint32 :offset-assert 188) + (eco-green-mask uint32 :offset-assert 192) + (hidden? symbol :offset-assert 196) + (show-damage? symbol :offset-assert 200) + (route-dist float :offset-assert 204) + (speed float :offset-assert 208) + (anim-speed float :offset-assert 212) + (part2 sparticle-launch-control :offset-assert 216) + (sound2 ambient-sound :offset-assert 220) + (last-hit-time uint64 :offset-assert 224) + (post-trans vector :inline :offset-assert 240) + (fall-trans vector :inline :offset-assert 256) + (route gnawer-route :inline :offset-assert 272) + (segments gnawer-segment 10 :inline :offset-assert 368) + ) + :heap-base #x560 + :method-count-assert 31 + :size-assert #x5d0 + :flag-assert #x1f056005d0 + (:methods + (dummy-20 (_type_ int) matrix 20) + (dummy-21 (_type_ int bounding-box symbol float) float 21) + (dummy-22 (_type_ float) symbol 22) + (dummy-23 (_type_) none 23) + (dummy-24 (_type_) none 24) + (dummy-25 (_type_) symbol 25) + (dummy-26 (_type_) none 26) + (dummy-27 (_type_) none 27) + (dummy-28 (_type_ int int) symbol 28) + (dummy-29 (_type_ int vector vector) float 29) + (dummy-30 (_type_ process-drawable) uint 30) + ) + ) + + +(defskelgroup *gnawer-sg* gnawer + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0.5 0 8) + :longest-edge (meters 0.8) + ) + +(defskelgroup *gnawer-segment-sg* gnawer + 14 + -1 + ((15 (meters 999999))) + :bounds (static-spherem 0 0 0 2) + :longest-edge (meters 0) + ) + +(define + *gnawer-segment-infos* + (new 'static 'inline-array gnawer-segment-info 10 + (new 'static 'gnawer-segment-info + :num-joints 8 + :joint-index + (new 'static 'array int8 8 4 #x1f #xd #x20 #x21 #x22 #x23 #x24) + ) + (new 'static 'gnawer-segment-info :num-joints 3 :joint-index (new 'static 'array int8 8 5 #xe #xf 0 0 0 0 0)) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #x6 #x10 #x11 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #x7 #x12 #x13 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #x8 #x14 #x15 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #x9 #x16 #x17 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #xa #x18 #x19 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #xb #x1a #x1b 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #xc #x1c #x1d 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info :num-joints 1 :joint-index (new 'static 'array int8 8 #x1e 0 0 0 0 0 0 0)) + ) + ) + +(set! (-> *part-group-id-table* 329) (new 'static 'sparticle-launch-group + :length 76 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-gnawer-loses-segment" + :launcher + (new 'static 'inline-array sparticle-group-item 76 + (sp-item 727 :binding 2309) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2310) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 2310) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 2.0) + (sp-flt spt-scale-x (meters 16.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 64.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 192.0 128.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -4.266667) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 727) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 16.0 16.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 64.0 1.0) + (sp-rnd-flt spt-g 0.0 16.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -4.096 -2.7306666 1.0) + (sp-flt spt-friction 0.975) + (sp-int-plain-rnd spt-timer 300 149 1) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 135.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 2.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2309) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x2)) + (sp-rnd-flt spt-num 0.25 0.5 1.0) + (sp-rnd-flt spt-scale-x (meters 0.7) (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 32.0 64.0 1.0) + (sp-rnd-flt spt-g 0.0 16.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -0.42666668) + (sp-flt spt-accel-y -2.7306666) + (sp-int-plain-rnd spt-timer 150 299 1) + (sp-cpuinfo-flags bit2) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 330) (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-gnawer-crumbs" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 2141 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 2141) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) + (sp-rnd-flt spt-num 1.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.15) (meters 0.35) 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 64.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 128.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.008333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-flt spt-fade-a -0.16) + (sp-flt spt-accel-y -3.4133334) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(defstate falling (gnawer-falling-segment) + :virtual #t + :trans + (behavior () + (+! (-> self transv y) (* -409600.0 (-> *display* seconds-per-frame))) + (vector-v+! (-> self root trans) (-> self root trans) (-> self transv)) + (+! (-> self facing-rot x) (* (-> self facing-rotv x) (-> *display* seconds-per-frame))) + (set! (-> self facing-rot z) + (deg-seek (-> self facing-rot z) 16384.0 (* (-> self facing-rotv z) (-> *display* seconds-per-frame))) + ) + (quaternion-zxy! (-> self root quat) (-> self facing-rot)) + (set! (-> self root scale x) (seek (-> self root scale x) 0.0 (* 0.5 (-> *display* seconds-per-frame)))) + (set! (-> self root scale y) (-> self root scale x)) + (set! (-> self root scale z) (-> self root scale x)) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 0) + (dotimes (gp-0 1) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 17))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 17)) data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim (-> self draw art-group data 17)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1))) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior gnawer-falling-segment) ja-post) + ) + +(defbehavior gnawer-falling-segment-init-by-other gnawer-falling-segment ((arg0 gnawer) (arg1 vector) (arg2 vector)) + (set! (-> self entity) (-> arg0 entity)) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 quad)) + (vector-identity! (-> self root scale)) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set-vector! + s5-1 + (+ (-> arg2 x) (rand-vu-float-range -0.2 0.2)) + (+ (-> arg2 y) (rand-vu-float-range -0.2 0.2)) + (+ (-> arg2 z) (rand-vu-float-range -0.2 0.2)) + 1.0 + ) + (vector-normalize! s5-1 1.0) + (set-vector! + s4-0 + (+ (-> arg2 x) (rand-vu-float-range -0.2 0.2)) + (+ (-> arg2 y) (rand-vu-float-range 0.0 0.4)) + (+ (-> arg2 z) (rand-vu-float-range -0.2 0.2)) + 1.0 + ) + (vector-normalize! s4-0 1.0) + (set-heading-vec-clear-roll-pitch! (-> self root) s5-1) + (vector-float*! (-> self transv) s4-0 (rand-vu-float-range 20480.0 40960.0)) + ) + (rot-zxy-from-vector! (-> self facing-rot) s5-1) + ) + (set-vector! + (-> self facing-rotv) + (rand-vu-float-range 5461.3335 16384.0) + 0.0 + (rand-vu-float-range 16384.0 36408.89) + 1.0 + ) + (initialize-skeleton self *gnawer-segment-sg* '()) + (go-virtual falling) + (none) + ) + +(defmethod dummy-23 gnawer ((obj gnawer)) + (when (not (-> obj hidden?)) + (set! (-> obj hidden?) #t) + (logior! (-> obj draw status) 2) + (logclear! (-> obj mask) (process-mask attackable)) + (set! (-> obj skel postbind-function) #f) + (set! (-> obj root-override trans quad) (-> obj post-trans quad)) + (clear-collide-with-as (-> obj root-override)) + (dotimes (v1-12 10) + (set! (-> obj segments v1-12 world-pos quad) (-> obj post-trans quad)) + ) + (set-vector! (-> obj draw bounds) 0.0 0.0 0.0 12288.0) + ) + (none) + ) + +(defmethod dummy-26 gnawer ((obj gnawer)) + (when (-> obj hidden?) + (set! (-> obj hidden?) #f) + (restore-collide-with-as (-> obj root-override)) + (set! (-> obj skel postbind-function) + (the-as (function pointer int process-drawable none) gnawer-joint-callback) + ) + (set! (-> obj draw status) (logand -3 (-> obj draw status))) + ) + (none) + ) + +(defmethod dummy-24 gnawer ((obj gnawer)) + (local-vars (sv-48 vector) (sv-64 vector)) + (let ((s5-0 0) + (s4-0 0) + ) + (let ((f30-0 -1.0) + (s3-0 (-> obj path curve num-cverts)) + ) + (dotimes (s2-0 3) + (let ((s1-0 (rand-vu-int-count s3-0)) + (s0-0 (rand-vu-int-count s3-0)) + ) + (when (= s1-0 s0-0) + (set! s0-0 (rand-vu-int-count s3-0)) + (if (= s1-0 s0-0) + (set! s0-0 (mod (+ s1-0 1) s3-0)) + ) + ) + (set! sv-48 (new 'stack-no-clear 'vector)) + (set! sv-64 (new 'stack-no-clear 'vector)) + (eval-path-curve-div! (-> obj path) sv-48 (the float s1-0) 'interp) + (eval-path-curve-div! (-> obj path) sv-64 (the float s0-0) 'interp) + (let ((f0-4 (vector-vector-distance sv-48 sv-64))) + (when (< f30-0 f0-4) + (set! f30-0 f0-4) + (set! s5-0 s1-0) + (set! s4-0 s0-0) + ) + ) + ) + ) + ) + (set! (-> obj route src-pt-index) s5-0) + (set! (-> obj route dest-pt-index) s4-0) + ) + (let ((v1-13 (-> obj route src-pt-index)) + (s5-1 (-> obj route dest-pt-index)) + ) + (eval-path-curve-div! (-> obj path) (-> obj route src-pt-offset) (the float v1-13) 'interp) + (eval-path-curve-div! (-> obj path) (-> obj route dest-pt-offset) (the float s5-1) 'interp) + ) + (vector-! (-> obj route src-pt-offset) (-> obj route src-pt-offset) (-> obj post-trans)) + (vector-! (-> obj route dest-pt-offset) (-> obj route dest-pt-offset) (-> obj post-trans)) + (let ((f30-1 (-> obj route src-pt-offset y))) + (set! (-> obj route src-pt-offset y) 0.0) + (vector-normalize! (-> obj route src-pt-offset) 10240.0) + (set! (-> obj route src-pt-offset y) f30-1) + ) + (let ((f30-2 (-> obj route dest-pt-offset y))) + (set! (-> obj route dest-pt-offset y) 0.0) + (vector-normalize! (-> obj route dest-pt-offset) 10240.0) + (set! (-> obj route dest-pt-offset y) f30-2) + ) + (let ((f30-3 (atan (-> obj route src-pt-offset x) (-> obj route src-pt-offset z))) + (f0-15 (atan (-> obj route dest-pt-offset x) (-> obj route dest-pt-offset z))) + ) + (set! (-> obj route src-ang) f30-3) + (set! (-> obj route dest-ang) f0-15) + (let ((f30-4 (deg- f0-15 f30-3))) + 0.0 + (let* ((v0-13 (rand-vu-int-count 100)) + (f0-17 (cond + ((< v0-13 67) + 131072.0 + ) + ((< v0-13 82) + 196608.0 + ) + (else + 65536.0 + ) + ) + ) + ) + (set! (-> obj route delta-ang) (if (>= f30-4 0.0) + (- f30-4 f0-17) + (+ f30-4 f0-17) + ) + ) + ) + ) + ) + (let ((f30-5 (* 0.9817476 (-> obj route delta-ang))) + (f28-0 (- (-> obj route dest-pt-offset y) (-> obj route src-pt-offset y))) + ) + (set-vector! (-> obj route surface-dir) f30-5 f28-0 0.0 1.0) + (vector-normalize! (-> obj route surface-dir) 1.0) + (let ((f0-25 (sqrtf (+ (* f30-5 f30-5) (* f28-0 f28-0))))) + (set! (-> obj route surface-dist) f0-25) + (set! (-> obj route total-dist) (+ 20480.0 f0-25)) + ) + ) + (set! (-> obj route total-travel-time) + (the-as uint (the int (/ (-> obj route total-dist) (* 0.016666668 (-> obj speed))))) + ) + (none) + ) + +(defmethod dummy-22 gnawer ((obj gnawer) (arg0 float)) + (let ((s4-0 (new 'stack-no-clear 'bounding-box)) + (a3-0 #t) + (gp-0 #t) + ) + (dotimes (s2-0 10) + (let ((v1-4 (-> obj segments s2-0 place))) + (cond + ((>= v1-4 0) + (let ((f0-1 (- arg0 (* 3891.2 (the float v1-4))))) + (cond + ((< f0-1 0.0) + (set! f0-1 0.0) + (set! gp-0 #f) + ) + ((>= f0-1 (-> obj route total-dist)) + (set! f0-1 (-> obj route total-dist)) + ) + (else + (set! gp-0 #f) + ) + ) + (dummy-21 obj s2-0 s4-0 a3-0 f0-1) + ) + ) + (else + (dummy-20 obj s2-0) + ) + ) + ) + (set! a3-0 #f) + ) + (set-vector! + (-> obj root-override trans) + (* 0.5 (+ (-> s4-0 min x) (-> s4-0 max x))) + (* 0.5 (+ (-> s4-0 min y) (-> s4-0 max y))) + (* 0.5 (+ (-> s4-0 min z) (-> s4-0 max z))) + 1.0 + ) + (let* ((f0-10 (- (-> s4-0 max x) (-> obj root-override trans x))) + (f1-12 (- (-> s4-0 max y) (-> obj root-override trans y))) + (f2-7 (- (-> s4-0 max z) (-> obj root-override trans z))) + (f0-14 (sqrtf (+ (* f0-10 f0-10) (* f1-12 f1-12) (* f2-7 f2-7)))) + (a0-3 (-> obj draw bounds)) + (v1-21 (-> obj root-override root-prim)) + (f0-15 (+ 12288.0 f0-14)) + ) + (vector-reset! a0-3) + (set! (-> a0-3 w) f0-15) + (vector-reset! (-> v1-21 local-sphere)) + (set! (-> v1-21 local-sphere w) f0-15) + (set! (-> v1-21 prim-core world-sphere quad) (-> obj root-override trans quad)) + (set! (-> v1-21 prim-core world-sphere w) f0-15) + ) + gp-0 + ) + ) + +(defmethod dummy-21 gnawer ((obj gnawer) (arg0 int) (arg1 bounding-box) (arg2 symbol) (arg3 float)) + (let ((gp-0 (-> obj segments arg0))) + (let ((f0-1 (+ 10240.0 (-> obj route surface-dist)))) + (cond + ((< arg3 10240.0) + (let ((f0-3 (* 0.00009765625 arg3))) + (vector-float*! (-> gp-0 world-pos) (-> obj route src-pt-offset) f0-3) + ) + (set! (-> gp-0 world-pos y) (-> obj route src-pt-offset y)) + (vector+! (-> gp-0 world-pos) (-> gp-0 world-pos) (-> obj post-trans)) + ) + ((< arg3 f0-1) + (let* ((f30-0 (/ (+ -10240.0 arg3) (-> obj route surface-dist))) + (f28-0 (+ (* (-> obj route delta-ang) f30-0) (-> obj route src-ang))) + ) + (set-vector! + (-> gp-0 world-pos) + (* 10240.0 (sin f28-0)) + (lerp (-> obj route src-pt-offset y) (-> obj route dest-pt-offset y) f30-0) + (* 10240.0 (cos f28-0)) + 1.0 + ) + ) + (vector+! (-> gp-0 world-pos) (-> gp-0 world-pos) (-> obj post-trans)) + ) + (else + (let ((f0-19 (- 1.0 (* 0.00009765625 (- arg3 f0-1))))) + (vector-float*! (-> gp-0 world-pos) (-> obj route dest-pt-offset) f0-19) + ) + (set! (-> gp-0 world-pos y) (-> obj route dest-pt-offset y)) + (vector+! (-> gp-0 world-pos) (-> gp-0 world-pos) (-> obj post-trans)) + ) + ) + ) + (cond + (arg2 + (set! (-> arg1 min quad) (-> gp-0 world-pos quad)) + (set! (-> arg1 max quad) (-> gp-0 world-pos quad)) + ) + (else + (add-point! arg1 (the-as vector3s (-> gp-0 world-pos))) + ) + ) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector-! s4-1 (-> gp-0 world-pos) (-> obj post-trans)) + (set! (-> s4-1 y) 0.0) + (vector-normalize! s4-1 1.0) + (let ((f0-24 (atan (-> s4-1 x) (-> s4-1 z))) + (s3-1 (new 'stack-no-clear 'vector)) + ) + (vector-rotate-around-y! s3-1 (-> obj route surface-dir) f0-24) + (set! (-> gp-0 orient-mat vector 1 quad) (-> s4-1 quad)) + (set! (-> gp-0 orient-mat vector 2 quad) (-> s3-1 quad)) + ) + ) + (vector-cross! + (the-as vector (-> gp-0 orient-mat)) + (-> gp-0 orient-mat vector 1) + (-> gp-0 orient-mat vector 2) + ) + (vector-normalize! (the-as vector (-> gp-0 orient-mat)) 1.0) + (set! (-> gp-0 orient-mat vector 0 w) 0.0) + (set! (-> gp-0 orient-mat vector 1 w) 0.0) + (let ((f0-27 0.0)) + (set! (-> gp-0 orient-mat vector 2 w) f0-27) + f0-27 + ) + ) + ) + +(defmethod dummy-20 gnawer ((obj gnawer) (arg0 int)) + (let ((v1-3 (-> obj segments arg0)) + (a0-1 (-> obj segments (+ arg0 -1))) + ) + (set! (-> v1-3 world-pos quad) (-> a0-1 world-pos quad)) + (let ((v0-0 (-> v1-3 orient-mat))) + (let* ((a2-3 (-> a0-1 orient-mat)) + (v1-4 (-> a2-3 vector 0 quad)) + (a0-2 (-> a2-3 vector 1 quad)) + (a1-5 (-> a2-3 vector 2 quad)) + (a2-4 (-> a2-3 vector 3 quad)) + ) + (set! (-> v0-0 vector 0 quad) v1-4) + (set! (-> v0-0 vector 1 quad) a0-2) + (set! (-> v0-0 vector 2 quad) a1-5) + (set! (-> v0-0 vector 3 quad) a2-4) + ) + v0-0 + ) + ) + ) + +(defmethod dummy-25 gnawer ((obj gnawer)) + (dotimes (s5-0 3) + (when (> (-> obj hit-points) 0) + (+! (-> obj hit-points) -1) + (set! (-> obj speed) (+ 4096.0 (-> obj speed))) + (when (> (-> obj hit-points) 0) + (set! (-> obj show-damage?) #t) + (let ((s4-0 (+ (-> obj hit-points) 2))) + (let ((s3-0 (-> obj segments s4-0))) + (let ((s1-0 (new 'stack-no-clear 'vector)) + (s2-0 (-> s3-0 world-pos)) + ) + (vector-! s1-0 s2-0 (-> obj root-override trans)) + (set! (-> s1-0 y) 0.0) + (vector-normalize! s1-0 1.0) + (let ((s0-0 (get-process *default-dead-pool* gnawer-falling-segment #x4000))) + (when s0-0 + (let ((t9-2 (method-of-type gnawer-falling-segment activate))) + (t9-2 (the-as gnawer-falling-segment s0-0) obj 'gnawer-falling-segment (the-as pointer #x70004000)) + ) + (run-now-in-process s0-0 gnawer-falling-segment-init-by-other obj s2-0 s1-0) + (-> s0-0 ppointer) + ) + ) + ) + (set! (-> s3-0 place) -1) + ) + (while (< s4-0 10) + (let ((v1-20 (-> obj segments s4-0))) + (if (>= (-> v1-20 place) 0) + (+! (-> v1-20 place) -1) + ) + ) + (+! s4-0 1) + ) + ) + ) + ) + ) + (close-specific-task! (game-task cave-gnawers) (task-status need-hint)) + (<= (-> obj hit-points) 0) + ) + +(defmethod dummy-28 gnawer ((obj gnawer) (arg0 int) (arg1 int)) + (when (> arg0 0) + (let* ((v1-1 (rand-vu-int-count arg0)) (a0-2 v1-1)) (until (= a0-2 v1-1) + (let ((a1-2 (ash 1 a0-2))) + (if (zero? (logand a1-2 arg1)) + (return (the-as symbol a1-2)) + ) + ) + (set! a0-2 (mod (+ a0-2 1) arg0)) + ) + ) + ) + (the-as symbol 0) + ) + +(defmethod dummy-27 gnawer ((obj gnawer)) + (set! (-> obj eco-green-mask) (the-as uint 0)) + (let ((s4-0 (-> obj path curve num-cverts)) + (s3-0 (get-death-count *game-info* #f)) + (s5-0 (-> obj money-mask)) + ) + (when (and *target* (or + (and (= s3-0 1) (and (>= 1.0 (-> *target* fact-info-target health)) (rand-vu-percent? 0.1))) + (and (< 1 s3-0) (and (>= 2.0 (-> *target* fact-info-target health)) (rand-vu-percent? 0.05))) + ) + ) + (let ((v1-14 (dummy-28 obj s4-0 (the-as int s5-0)))) + (logior s5-0 (the-as uint v1-14)) + (set! (-> obj eco-green-mask) (the-as uint (logior (-> obj eco-green-mask) (the-as uint v1-14)))) + ) + ) + ) + (none) + ) + +(defmethod dummy-29 gnawer ((obj gnawer) (arg0 int) (arg1 vector) (arg2 vector)) + (let ((s1-0 (-> obj path curve num-cverts)) + (s2-0 (new 'stack-no-clear 'vector)) + ) + 0.0 + 0.0 + (eval-path-curve-div! (-> obj path) s2-0 0.0 'interp) + (let* ((f30-0 (-> s2-0 y)) + (f28-0 f30-0) + ) + (eval-path-curve-div! (-> obj path) s2-0 (the float (+ s1-0 -1)) 'interp) + (let ((f30-1 (fmin f30-0 (-> s2-0 y))) + (f28-1 (fmax f28-0 (-> s2-0 y))) + ) + (eval-path-curve-div! (-> obj path) arg1 (the float arg0) 'interp) + (vector-! arg2 arg1 (-> obj post-trans)) + (let ((f0-9 (+ 16384.0 (* 16384.0 (/ (fmax 0.0 (- (-> arg2 y) f30-1)) (- f28-1 f30-1)))))) + (set! (-> arg2 y) 0.0) + (vector-normalize! arg2 f0-9) + ) + ) + ) + ) + (vector+! arg2 arg2 (-> obj post-trans)) + (let ((f0-11 (+ 4096.0 (-> arg2 y)))) + (set! (-> arg2 y) f0-11) + f0-11 + ) + ) + +(defmethod dummy-30 gnawer ((obj gnawer) (arg0 process-drawable)) + (local-vars (sv-48 vector)) + (let ((gp-0 (-> obj entity extra perm))) + (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) + (let ((s5-0 (-> gp-0 user-uint16 0)) + (s2-0 -1) + ) + (let ((f30-0 0.0) + (s1-0 (-> obj path curve num-cverts)) + ) + (dotimes (s0-0 s1-0) + (when (logtest? (ash 1 s0-0) s5-0) + (let ((a2-0 (new 'stack-no-clear 'vector))) + (set! sv-48 (new 'stack-no-clear 'vector)) + (dummy-29 obj s0-0 a2-0 sv-48) + ) + (let* ((t9-1 vector-vector-xz-distance) + (a1-2 (-> arg0 root trans)) + (f0-0 (t9-1 sv-48 a1-2)) + ) + (when (or (< s2-0 0) (< f0-0 f30-0)) + (set! s2-0 s0-0) + (set! f30-0 f0-0) + ) + ) + ) + ) + ) + (when (>= s2-0 0) + (let ((v0-2 (logxor s5-0 (the-as uint (ash 1 s2-0))))) + (set! (-> gp-0 user-int16 0) (the-as int v0-2)) + v0-2 + ) + ) + ) + ) + ) + +(defstate gnawer-chewing-on-post (gnawer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (when (= (-> arg0 type) target) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'shove) + (set! (-> a1-4 param 0) (-> arg3 param 0)) + (let ((v1-6 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-6 shove-up) 6144.0) + (set! (-> v1-6 shove-back) 10240.0) + (set! (-> a1-4 param 1) (the-as uint v1-6)) + ) + (send-event-function arg0 a1-4) + ) + ) + (go gnawer-retreat-into-post) + ) + (('attack) + (sound-play-by-name (static-sound-name "gnawer-dies") (new-sound-id) 1024 -381 0 1 #t) + (go gnawer-retreat-into-post) + ) + ) + ) + :exit + (behavior () (stop! (-> self sound2)) (none)) + :trans + (behavior () + (if (and *target* (>= 81920.0 (vector-vector-distance (target-pos 0) (-> self root-override trans)))) + (go gnawer-retreat-into-post) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (cond + ((zero? (rand-vu-int-count 2)) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-identity + ) + (set! (-> gp-0 frame-num) + (rand-vu-float-range 0.0 (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + ) + (else + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-identity + ) + (set! (-> gp-1 frame-num) + (rand-vu-float-range 0.0 (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (while #t + (let ((gp-2 (rand-vu-int-range 1 2)) + (s4-0 (rand-vu-int-range 1 2)) + ) + (dotimes (s5-0 gp-2) + (dotimes (s3-0 s4-0) + (set! (-> self anim-speed) (rand-vu-float-range 0.8 1.0)) + (ja-channel-push! 1 22) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-13 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-13 param 1) (-> self anim-speed)) + (set! (-> a0-13 frame-num) 0.0) + (joint-control-channel-group! a0-13 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 param 0) (the float (+ (-> a0-14 frame-group data 0 length) -1))) + (set! (-> a0-14 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-14 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (set! s4-0 (rand-vu-int-range 1 2)) + (dotimes (s3-1 s4-0) + (set! (-> self anim-speed) (rand-vu-float-range 0.8 1.0)) + (ja-channel-push! 1 22) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-19 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-19 param 1) (-> self anim-speed)) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! a0-19 (the-as art-joint-anim (-> self draw art-group data 9)) 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) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-20 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ) + (ja-channel-push! 1 22) + (let ((a0-23 (-> self skel root-channel 0))) + (set! (-> a0-23 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-23 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-23 param 1) 1.0) + (set! (-> a0-23 frame-num) 0.0) + (joint-control-channel-group! a0-23 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (let ((gp-3 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-3 (-> self node-list data 34)) + (spawn (-> self part2) gp-3) + ) + (let ((gp-4 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-4 (-> self node-list data 33)) + (spawn (-> self part2) gp-4) + ) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! (-> a0-28 param 0) (the float (+ (-> a0-28 frame-group data 0 length) -1))) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! a0-28 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((gp-5 (rand-vu-int-range 1 4))) + (set! (-> self anim-speed) (rand-vu-float-range 0.8 1.0)) + (dotimes (s5-1 gp-5) + (ja-channel-push! 1 22) + (let ((a0-33 (-> self skel root-channel 0))) + (set! (-> a0-33 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-33 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1)) + ) + (set! (-> a0-33 param 1) (-> self anim-speed)) + (set! (-> a0-33 frame-num) 0.0) + (joint-control-channel-group! a0-33 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!) + ) + (until (ja-done? 0) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector<-cspace! s4-1 (-> self node-list data 34)) + (spawn (-> self part2) s4-1) + ) + (let ((s4-2 (new 'stack-no-clear 'vector))) + (vector<-cspace! s4-2 (-> self node-list data 33)) + (spawn (-> self part2) s4-2) + ) + (update! (-> self sound2)) + (suspend) + (let ((a0-39 (-> self skel root-channel 0))) + (set! (-> a0-39 param 0) (the float (+ (-> a0-39 frame-group data 0 length) -1))) + (set! (-> a0-39 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-39 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (stop! (-> self sound2)) + (let ((a0-42 (-> self skel root-channel 0))) + (set! (-> a0-42 frame-group) (the-as art-joint-anim (-> self draw art-group data 13))) + (set! (-> a0-42 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 13)) data 0 length) -1)) + ) + (set! (-> a0-42 param 1) 1.0) + (set! (-> a0-42 frame-num) 0.0) + (joint-control-channel-group! a0-42 (the-as art-joint-anim (-> self draw art-group data 13)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-43 (-> self skel root-channel 0))) + (set! (-> a0-43 param 0) (the float (+ (-> a0-43 frame-group data 0 length) -1))) + (set! (-> a0-43 param 1) 1.0) + (joint-control-channel-group-eval! a0-43 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior gnawer) transform-post) + ) + +(defstate gnawer-retreat-into-post (gnawer) + :exit + (behavior () (logior! (-> self mask) (process-mask actor-pause)) (none)) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 22) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 12)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 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 12)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (quaternion-identity! (-> self root-override quat)) + (go gnawer-wait-to-run) + (none) + ) + :post + (the-as (function none :behavior gnawer) transform-post) + ) + +(defstate gnawer-wait-to-run (gnawer) + :code + (behavior () + (set! (-> self draw origin-joint-index) (the-as uint 0)) + (dummy-23 self) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-0 (rand-vu-int-range 240 360))) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0) + (suspend) + ) + ) + (go gnawer-run) + (none) + ) + ) + +(defstate gnawer-run (gnawer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('touch) + (when (= (-> arg0 type) target) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'shove) + (set! (-> a1-4 param 0) (-> arg3 param 0)) + (let ((v1-5 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-5 shove-up) 6144.0) + (set! (-> v1-5 shove-back) 10240.0) + (set! (-> a1-4 param 1) (the-as uint v1-5)) + ) + (send-event-function arg0 a1-4) + ) + ) + ) + (('attack) + (cond + ((= (-> arg0 type) target) + (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) + (set! (-> a1-7 param 0) (-> arg3 param 0)) + (let ((v1-10 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-10 shove-up) 6144.0) + (set! (-> v1-10 shove-back) 10240.0) + (set! (-> a1-7 param 1) (the-as uint v1-10)) + ) + (send-event-function arg0 a1-7) + ) + ) + (else + (if (< (- (-> *display* base-frame-counter) (the-as int (-> self last-hit-time))) 150) + (return #f) + ) + (let* ((a2-1 (the-as object (-> arg3 param 0))) + (v1-19 + (-> (get-touched-prim + (-> (the-as touching-shapes-entry a2-1) head) + (-> self root-override) + (the-as touching-prims-entry a2-1) + ) + prim-id + ) + ) + (v1-22 (-> self segments v1-19)) + ) + (spawn (-> self part) (-> v1-22 world-pos)) + ) + (if (dummy-25 self) + (go gnawer-die) + ) + (return #t) + v0-0 + ) + ) + ) + ) + ) + :enter + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self route-dist) 0.0) + (dummy-24 self) + (set! (-> self last-hit-time) (the-as uint (-> *display* base-frame-counter))) + (dummy-26 self) + (none) + ) + :exit + (behavior () (logior! (-> self mask) (process-mask actor-pause)) (stop! (-> self sound)) (none)) + :trans + (behavior () + (+! (-> self route-dist) (* (-> self speed) (-> *display* seconds-per-frame))) + (if (dummy-22 self (-> self route-dist)) + (go gnawer-wait-to-run) + ) + (update! (-> self sound)) + (none) + ) + :code + (behavior () + (local-vars (v1-19 symbol) (v1-35 symbol)) + (ja-channel-set! 1) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (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!) + ) + (while #t + (until v1-19 + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-19 (or (ja-done? 0) (-> self show-damage?))) + ) + (when (-> self show-damage?) + (until (not (-> self show-damage?)) + (set! (-> self show-damage?) #f) + (ja-channel-push! 1 30) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (until v1-35 + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-35 (or (ja-done? 0) (-> self show-damage?))) + ) + ) + (ja-channel-push! 1 30) + ) + (let ((gp-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + ) + (none) + ) + :post + (the-as (function none :behavior gnawer) transform-post) + ) + +(defstate gnawer-die (gnawer) + :enter + (behavior () + (let ((v1-0 (-> self segments))) + (set! (-> self fall-trans quad) (-> v1-0 0 world-pos quad)) + (vector-! (-> self root-override transv) (-> v1-0 0 world-pos) (-> self post-trans)) + ) + (set! (-> self root-override transv y) 0.0) + (vector-normalize! (-> self root-override transv) 1.0) + (set! (-> self root-override transv y) 0.3) + (vector-normalize! (-> self root-override transv) 32768.0) + (none) + ) + :trans + (behavior () + (+! (-> self root-override transv y) (* -409600.0 (-> *display* seconds-per-frame))) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self fall-trans quad)) + (vector-v+! (-> self fall-trans) (-> self fall-trans) (-> self root-override transv)) + (vector-! gp-0 (-> self fall-trans) gp-0) + (dotimes (v1-6 10) + (let ((a1-3 (-> self segments v1-6))) + (vector+! (-> a1-3 world-pos) (-> a1-3 world-pos) gp-0) + ) + ) + (vector+! (-> self root-override trans) (-> self root-override trans) gp-0) + ) + (spool-push *art-control* "maincavecam-gnawer-fuel-cell" 0 self -1.0) + (none) + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (ja-channel-push! 1 30) + (clear-collide-with-as (-> self root-override)) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1))) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go gnawer-dying-give-pickups) + (none) + ) + :post + (the-as (function none :behavior gnawer) ja-post) + ) + +(defstate gnawer-dying-give-pickups (gnawer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'notify) + (if (and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) + (dummy-30 self (the-as process-drawable arg0)) + ) + ) + ) + ) + ) + :trans + (behavior () (spool-push *art-control* "maincavecam-gnawer-fuel-cell" 0 self -1.0) (none)) + :code + (behavior () + (local-vars (sv-128 symbol)) + (clear-collide-with-as (-> self root-override)) + (set! (-> self skel postbind-function) #f) + (ja-channel-set! 0) + (ja-post) + (logior! (-> self draw status) 2) + (process-entity-status! self (entity-perm-status complete) #t) + (dummy-27 self) + (let ((v1-10 (-> self entity extra perm))) + (logior! (-> v1-10 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-10 user-int16 0) (the-as int (-> self money-mask))) + ) + (dotimes (gp-0 (-> self path curve num-cverts)) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (dummy-29 self gp-0 s4-0 s5-0) + (let ((a1-2 7)) + (let ((v1-14 (ash 1 gp-0))) + (cond + ((logtest? v1-14 (-> self eco-green-mask)) + (set! a1-2 4) + ) + ((logtest? v1-14 (-> self money-mask)) + (set! a1-2 5) + ) + ) + ) + (let ((v1-19 (birth-pickup-at-point s4-0 (the-as pickup-type a1-2) 1.0 #f self (the-as fact-info #f)))) + (send-event (ppointer->process v1-19) 'jump s5-0) + ) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 15) + (suspend) + ) + ) + (set! sv-128 (the-as symbol #f)) + (apply-all (-> self link) actor-link-subtask-complete-hook (& sv-128)) + (when sv-128 + (save-reminder (get-task-control (game-task cave-gnawers)) (-> self gnawer-id) 3) + (go gnawer-give-fuel-cell) + ) + (set! (-> self trans-hook) #f) + (process-entity-status! self (entity-perm-status bit-3) #f) + (logior! (-> self mask) (process-mask actor-pause)) + (until (not (-> self child)) + (suspend) + ) + (dummy-18 self) + (none) + ) + ) + +(defstate gnawer-give-fuel-cell (gnawer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'notify) + (cond + ((and (= (-> arg0 type) maincavecam) (= (-> arg3 param 0) 'die)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (let ((v0-0 (the-as uint (logior (-> self mask) (process-mask actor-pause))))) + (set! (-> self mask) (the-as process-mask v0-0)) + v0-0 + ) + ) + ((and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) + (dummy-30 self (the-as process-drawable arg0)) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (when (not (task-complete? *game-info* (-> self entity extra perm task))) + (spool-push *art-control* "maincavecam-gnawer-fuel-cell" 0 self -1.0) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set-vector! gp-0 4503813.0 46363.85 -12796366.0 1.0) + (let ((s5-0 (the-as maincavecam (get-process *default-dead-pool* maincavecam #x4000)))) + (set! (-> (the-as + maincavecam + (-> (when s5-0 + (let ((t9-4 (method-of-type maincavecam activate))) + (t9-4 s5-0 self 'maincavecam (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + gp-0 + *maincavecam-sg* + (new 'static 'spool-anim :name "maincavecam-gnawer-fuel-cell" :index 3 :parts 1 :command-list '()) + 0 + self + '() + ) + (-> s5-0 ppointer) + ) + 0 + ) + ) + seq + ) + (the-as uint 0) + ) + ) + ) + 0 + (sound-play-by-name (static-sound-name "cell-prize") (new-sound-id) 1024 0 0 1 #t) + (until (not (-> self child)) + (suspend) + ) + ) + (process-entity-status! self (entity-perm-status bit-3) #f) + (logior! (-> self mask) (process-mask actor-pause)) + (dummy-18 self) + (none) + ) + ) + +(defstate gnawer-put-items-at-dest (gnawer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'notify) + (if (and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) + (dummy-30 self (the-as process-drawable arg0)) + ) + ) + ) + ) + ) + :code + (behavior () + (set! (-> self draw origin-joint-index) (the-as uint 0)) + (clear-collide-with-as (-> self root-override)) + (set! (-> self skel postbind-function) #f) + (ja-channel-set! 0) + (ja-post) + (logior! (-> self draw status) 2) + (case (get-reminder (get-task-control (game-task cave-gnawers)) 3) + (((-> self gnawer-id)) + (when (not (task-complete? *game-info* (-> self entity extra perm task))) + (let ((a0-7 (new 'stack-no-clear 'vector))) + (set-vector! a0-7 4485903.0 51184.027 -12815461.0 1.0) + (birth-pickup-at-point + a0-7 + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + self + (the-as fact-info #f) + ) + ) + ) + ) + ) + (let ((gp-0 (-> self entity extra perm user-uint16 0))) + (when (nonzero? gp-0) + (let ((s5-0 (-> self path curve num-cverts))) + (dotimes (s4-0 s5-0) + (when (logtest? (ash 1 s4-0) gp-0) + (let ((a2-1 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (dummy-29 self s4-0 a2-1 s3-0) + (birth-pickup-at-point s3-0 (pickup-type money) 1.0 #f self (the-as fact-info #f)) + ) + ) + ) + ) + ) + ) + (until (not (-> self child)) + (suspend) + ) + (dummy-18 self) + (none) + ) + ) + +(defun gnawer-joint-callback ((arg0 gnawer)) + (dotimes (s5-0 10) + (let* ((v1-1 (-> *gnawer-segment-infos* s5-0)) + (s4-0 (-> arg0 segments s5-0)) + (s3-0 (-> v1-1 joint-index)) + ) + (countdown (s2-0 (-> v1-1 num-joints)) + (let ((s1-0 (-> arg0 node-list data (-> s3-0 0) bone transform))) + (vector-! (-> s1-0 vector 3) (-> s1-0 vector 3) (-> arg0 root-override trans)) + (vector+! (-> s1-0 vector 3) (-> s1-0 vector 3) (-> s4-0 anim-to-local-trans-offset)) + (matrix*! s1-0 s1-0 (-> s4-0 orient-mat)) + (vector+! (-> s1-0 vector 3) (-> s1-0 vector 3) (-> s4-0 world-pos)) + ) + (set! s3-0 (&-> s3-0 1)) + ) + ) + ) + 0 + (none) + ) + +(defmethod deactivate gnawer ((obj gnawer)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + (if (nonzero? (-> obj sound2)) + (stop! (-> obj sound2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(defmethod relocate gnawer ((obj gnawer) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (if (nonzero? (-> obj sound2)) + (&+! (-> obj sound2) arg0) + ) + (the-as + gnawer + ((the-as (function nav-enemy int nav-enemy) (find-parent-method gnawer 7)) (the-as nav-enemy obj) arg0) + ) + ) + +(defmethod init-from-entity! gnawer ((obj gnawer) (arg0 entity-actor)) + (local-vars (sv-16 res-tag) (sv-32 res-tag) (sv-48 res-tag)) + (set! (-> obj hidden?) #f) + (set! (-> obj show-damage?) #f) + (set! (-> obj hit-points) 6) + (set! (-> obj speed) 24576.0) + (set! (-> obj last-hit-time) (the-as uint 0)) + (set! (-> obj route-dist) 0.0) + (logclear! (-> obj mask) (process-mask attackable)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 8) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set-vector! (-> s3-0 local-sphere) 0.0 32768.0 0.0 53248.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core offense) 0) + (set! (-> s2-0 transform-index) 13) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core offense) 0) + (set! (-> s2-1 transform-index) 6) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 3)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 0) + (set! (-> s2-2 transform-index) 7) + (set-vector! (-> s2-2 local-sphere) 0.0 -409.6 1228.8 6144.0) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 4)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core offense) 0) + (set! (-> s2-3 transform-index) 8) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-3) + ) + (let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 5)))) + (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 offense) 0) + (set! (-> s2-4 transform-index) 9) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-4) + ) + (let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 6)))) + (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) 0) + (set! (-> s2-5 transform-index) 10) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-5) + ) + (let ((s2-6 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 7)))) + (set! (-> s2-6 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-6 collide-with) (the-as uint 16)) + (set! (-> s2-6 prim-core offense) 0) + (set! (-> s2-6 transform-index) 11) + (set-vector! (-> s2-6 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-6) + ) + (let ((s2-7 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 7)))) + (set! (-> s2-7 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-7 collide-with) (the-as uint 16)) + (set! (-> s2-7 prim-core offense) 0) + (set! (-> s2-7 transform-index) 12) + (set-vector! (-> s2-7 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-7) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (quaternion-identity! (-> obj root-override quat)) + (initialize-skeleton obj *gnawer-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 8)) + (set! (-> obj post-trans quad) (-> obj root-override trans quad)) + (let ((f0-40 (res-lump-float (-> obj entity) 'rotoffset))) + (quaternion-rotate-y! (-> obj root-override quat) (-> obj root-override quat) f0-40) + ) + (set! (-> obj root-override trans y) (+ -2048.0 (-> obj root-override trans y))) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-81 (res-lump-data arg0 'trans-offset (pointer float) :tag-ptr (& sv-16)))) + (when v1-81 + (+! (-> obj root-override trans x) (-> v1-81 0)) + (+! (-> obj root-override trans y) (-> v1-81 1)) + (+! (-> obj root-override trans z) (-> v1-81 2)) + ) + ) + (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (if (< (-> obj path curve num-cverts) 2) + (go process-drawable-art-error "bad path") + ) + (set! (-> obj part2) (create-launch-control (-> *part-group-id-table* 330) obj)) + (set! (-> obj total-money) 0) + (set! (-> obj money-mask) (the-as uint 0)) + (set! sv-32 (new 'static 'res-tag)) + (let ((v1-96 (res-lump-data arg0 'extra-count (pointer int32) :tag-ptr (& sv-32)))) + (when v1-96 + (case (-> v1-96 0) + ((5) + (set! (-> obj total-money) (-> v1-96 1)) + ) + ) + ) + ) + (when (> (-> obj total-money) 0) + (set! sv-48 (new 'static 'res-tag)) + (let ((a0-49 (res-lump-data arg0 'gnawer (pointer int32) :tag-ptr (& sv-48)))) + (cond + (a0-49 + (let ((v1-100 0)) + (dotimes (a1-30 (-> obj total-money)) + (let ((a3-15 (-> a0-49 a1-30))) + (set! v1-100 (logior v1-100 (ash 1 a3-15))) + ) + ) + (set! (-> obj money-mask) (the-as uint v1-100)) + ) + ) + (else + (go process-drawable-art-error "bad actor params") + ) + ) + ) + ) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 329) obj)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #xc0 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "gnawer-crawl") + :volume #x400 + :fo-min 30 + :fo-max 30 + ) + (-> obj root-override trans) + ) + ) + (set! (-> obj sound2) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "gnawer-chew") + :volume #x400 + :fo-max 40 + ) + (-> obj root-override trans) + ) + ) + (dotimes (v1-110 10) + (let ((a0-59 (-> obj segments v1-110))) + (set! (-> a0-59 place) v1-110) + (set! (-> a0-59 world-pos quad) (-> obj post-trans quad)) + (vector-reset! (-> a0-59 anim-to-local-trans-offset)) + (+! (-> a0-59 anim-to-local-trans-offset z) (* 5447.68 (the float v1-110))) + ) + ) + (logior! (-> obj skel status) 1) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj gnawer-id) (+ (actor-count-before (-> obj link)) 1)) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go gnawer-put-items-at-dest) + (go gnawer-chewing-on-post) + ) + (none) + ) + + + + diff --git a/goal_src/levels/maincave/maincave-obs.gc b/goal_src/levels/maincave/maincave-obs.gc index 5c06a4f8de..9be6cb67cc 100644 --- a/goal_src/levels/maincave/maincave-obs.gc +++ b/goal_src/levels/maincave/maincave-obs.gc @@ -5,3 +5,13 @@ ;; name in dgo: maincave-obs ;; dgos: L1, MAI, MAINCAVE +;; TODO - for gnawer +(deftype maincavecam (pov-camera) + ((seq uint64 :offset-assert 224) + ) + :method-count-assert 30 + :size-assert #xe8 + :heap-base #x80 + :flag-assert #x1e008000e8 + ) +(define-extern *maincavecam-sg* skeleton-group) diff --git a/goal_src/levels/maincave/mother-spider-egg.gc b/goal_src/levels/maincave/mother-spider-egg.gc index 66499687aa..b38f30ebaf 100644 --- a/goal_src/levels/maincave/mother-spider-egg.gc +++ b/goal_src/levels/maincave/mother-spider-egg.gc @@ -5,3 +5,656 @@ ;; name in dgo: mother-spider-egg ;; dgos: L1, MAI, MAINCAVE +(define-extern *mother-spider-egg-unbroken-sg* skeleton-group) +(define-extern *mother-spider-egg-broken-sg* skeleton-group) + +(declare-type mother-spider-egg process-drawable) + +(define-extern mother-spider-egg-falling (state mother-spider-egg)) ;; unknown type +(define-extern mother-spider-egg-die-exit (state mother-spider-egg)) ;; unknown type +(define-extern mother-spider-egg-hatch (state mother-spider-egg)) ;; unknown type +(define-extern mother-spider-egg-die (state mother-spider-egg)) ;; unknown type +(define-extern mother-spider-egg-on-ground (state mother-spider-egg)) ;; unknown type +(define-extern mother-spider-egg-die-while-falling (state mother-spider-egg)) ;; unknown type + +;; DECOMP BEGINS + +(deftype mother-spider-egg (process-drawable) + ((parent-override (pointer mother-spider) :offset 12) + (root-override collide-shape-moving :offset 112) + (anim-speed float :offset-assert 176) + (part2 sparticle-launch-control :offset-assert 180) + (falling-start-time uint64 :offset-assert 184) + (fall-dest vector :inline :offset-assert 192) + (fall-dest-normal vector :inline :offset-assert 208) + (broken-look lod-set :inline :offset-assert 224) + (traj trajectory :inline :offset-assert 272) + (shadow-pos vector :inline :offset-assert 320) + ) + :heap-base #xe0 + :method-count-assert 22 + :size-assert #x150 + :flag-assert #x1600e00150 + (:methods + (dummy-20 (_type_) none 20) + (draw-egg-shadow (_type_ vector symbol) symbol 21) + ) + ) + + +(defskelgroup *mother-spider-egg-unbroken-sg* spider-egg + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1 0 2) + :longest-edge (meters 0) + :shadow 4 + ) + +(defskelgroup *mother-spider-egg-broken-sg* spider-egg + 5 + -1 + ((6 (meters 20)) (7 (meters 40)) (8 (meters 999999))) + :bounds (static-spherem 0 1 0 2) + :longest-edge (meters 0) + ) + +(set! (-> *part-group-id-table* 324) (new 'static 'sparticle-launch-group + :length 2 + :duration #x5 + :linger-duration #x384 + :flags (sp-group-flag use-local-clock) + :name "group-spider-egg-hatches" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 2018 :fade-after (meters 50.0) :falloff-to (meters 50.0)) + (sp-item 2071 :fade-after (meters 50.0) :falloff-to (meters 50.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 2071) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 16.0) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-scale-x (meters 0.1)) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.1)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-int spt-timer 225) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2072) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2072) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-scale-x (meters 0.1)) + (sp-flt spt-scale-y (meters 2.0)) + (sp-flt spt-scalevel-y (meters 0.2)) + (sp-flt spt-fade-a -1.4222223) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2018) (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 8.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (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 32.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 16.0 1.0) + (sp-rnd-flt spt-b 32.0 32.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 1.4222223) + (sp-flt spt-accel-y 0.27306667) + (sp-int spt-timer 375) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int spt-next-time 45) + (sp-launcher-by-id spt-next-launcher 2073) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2073) + (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* 325) (new 'static 'sparticle-launch-group + :length 1 + :duration #x5 + :linger-duration #x177 + :flags (sp-group-flag use-local-clock) + :name "group-spider-egg-explodes" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 2074 :fade-after (meters 50.0) :falloff-to (meters 50.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 2074) (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 8.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (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 32.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 16.0 1.0) + (sp-rnd-flt spt-b 32.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -1.4222223) + (sp-flt spt-accel-y 0.27306667) + (sp-int spt-timer 375) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) + +(defmethod draw-egg-shadow mother-spider-egg ((obj mother-spider-egg) (arg0 vector) (arg1 symbol)) + (cond + ((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) (logtest? (-> obj draw status) 8)) + (let ((s5-0 (new 'stack-no-clear 'collide-tri-result)) + (a1-1 (new 'stack-no-clear 'vector)) + (a2-1 (new 'stack-no-clear 'vector)) + ) + (set! (-> a1-1 quad) (-> obj root-override trans quad)) + (set! (-> a1-1 y) (+ 1228.8 (-> a1-1 y))) + (set-vector! a2-1 0.0 -61440.0 0.0 1.0) + (cond + ((>= (dummy-10 *collide-cache* a1-1 a2-1 7372.8 1 obj s5-0 1) 0.0) + (let ((v1-11 (-> obj draw shadow-ctrl))) + (set! (-> v1-11 settings flags) (logand -33 (-> v1-11 settings flags))) + ) + 0 + (let ((v1-14 (-> obj draw shadow-ctrl))) + (set! (-> v1-14 settings bot-plane w) (- (+ -4096.0 (-> s5-0 intersect y)))) + ) + 0 + (let ((v1-17 (-> obj draw shadow-ctrl))) + (set! (-> v1-17 settings top-plane w) (- (+ 6144.0 (-> s5-0 intersect y)))) + ) + 0 + (return #t) + ) + (else + (let ((v1-22 (-> obj draw shadow-ctrl))) + (logior! (-> v1-22 settings flags) 32) + ) + 0 + ) + ) + ) + ) + (else + (let ((v1-25 (-> obj draw shadow-ctrl))) + (logior! (-> v1-25 settings flags) 32) + ) + 0 + ) + ) + #f + ) + +(defstate mother-spider-egg-falling (mother-spider-egg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (go mother-spider-egg-die-while-falling) + ) + ) + ) + :enter + (behavior () (set! (-> self falling-start-time) (the-as uint (-> *display* base-frame-counter))) (none)) + :trans + (behavior () + (let ((f30-0 (fmin + (the float (- (-> *display* base-frame-counter) (the-as int (-> self falling-start-time)))) + (-> self traj time) + ) + ) + ) + (let ((f28-0 (/ f30-0 (-> self traj time)))) + (eval-position! (-> self traj) f30-0 (-> self root-override trans)) + (let ((f0-3 (lerp 0.3 0.4 f28-0))) + (set-vector! (-> self root-override scale) f0-3 f0-3 f0-3 1.0) + ) + ) + (when (= f30-0 (-> self traj time)) + (sound-play-by-name (static-sound-name "eggs-lands") (new-sound-id) 1024 0 0 1 #t) + (go mother-spider-egg-on-ground) + ) + ) + (draw-egg-shadow self (-> self shadow-pos) #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 0) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) (-> self anim-speed)) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider-egg) transform-post) + ) + +(defstate mother-spider-egg-on-ground (mother-spider-egg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'touch) + (dummy-55 (-> self root-override) arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 0.7 6144.0 16384.0) + ) + ((= v1-0 'attack) + (go mother-spider-egg-die) + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if (not (draw-egg-shadow self (-> self shadow-pos) #t)) + (set! (-> self shadow-pos quad) (-> self fall-dest quad)) + ) + (none) + ) + :trans + (behavior () + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (go mother-spider-egg-hatch) + ) + (draw-egg-shadow self (-> self shadow-pos) #f) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 30) + (let ((gp-0 (new 'stack-no-clear 'quaternion)) + (s5-0 (new 'stack-no-clear 'quaternion)) + ) + (let ((s3-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (quaternion-copy! gp-0 (-> self root-override quat)) + (set-vector! s4-0 0.0 1.0 0.0 1.0) + (set! (-> s3-0 quad) (-> self fall-dest-normal quad)) + (vector-normalize! s3-0 1.0) + (quaternion-from-two-vectors! s5-0 s4-0 s3-0) + ) + (quaternion*! s5-0 s5-0 gp-0) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.3) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!) + ) + (until (ja-done? 0) + (let* ((f0-8 (ja-frame-num 0)) + (v1-19 (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (f0-9 (/ f0-8 (the float (+ (-> v1-19 data 0 length) -1)))) + ) + (quaternion-slerp! (-> self root-override quat) gp-0 s5-0 f0-9) + ) + (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.3) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (while #t + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-12 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-12 param 1) (-> self anim-speed)) + (set! (-> a0-12 frame-num) 0.0) + (joint-control-channel-group! a0-12 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1))) + (set! (-> a0-13 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider-egg) transform-post) + ) + +(defstate mother-spider-egg-hatch (mother-spider-egg) + :trans + (behavior () + (when (and (zero? (-> self draw cur-lod)) (logtest? (-> self draw status) 8)) + (let ((a1-0 (new 'stack-no-clear 'vector))) + (set! (-> a1-0 quad) (-> self fall-dest quad)) + (compute-and-draw-shadow + (-> self root-override trans) + a1-0 + (-> self fall-dest-normal) + (the-as vector 7372.8) + 81920.0 + (the-as float 0) + ) + ) + ) + (none) + ) + :code + (behavior () + (send-event (ppointer->process (-> self parent-override)) 'trigger) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 324) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (lods-assign! (-> self draw) (-> self broken-look)) + (ja-channel-push! 1 60) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((v1-37 (-> self draw shadow-ctrl))) + (logior! (-> v1-37 settings flags) 32) + ) + 0 + (go mother-spider-egg-die-exit) + (none) + ) + :post + (the-as (function none :behavior mother-spider-egg) transform-post) + ) + +(defstate mother-spider-egg-die (mother-spider-egg) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((v1-3 (-> self draw shadow-ctrl))) + (logior! (-> v1-3 settings flags) 32) + ) + 0 + (lods-assign! (-> self draw) (-> self broken-look)) + (ja-channel-push! 1 30) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 325) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 12)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 12)) 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!) + ) + ) + (go mother-spider-egg-die-exit) + (none) + ) + :post + (the-as (function none :behavior mother-spider-egg) ja-post) + ) + +(defstate mother-spider-egg-die-while-falling (mother-spider-egg) + :trans + (behavior () + (let ((f0-2 (fmin + (the float (- (-> *display* base-frame-counter) (the-as int (-> self falling-start-time)))) + (-> self traj time) + ) + ) + ) + (eval-position! (-> self traj) f0-2 (-> self root-override trans)) + ) + (none) + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (clear-collide-with-as (-> self root-override)) + (let ((v1-5 (-> self draw shadow-ctrl))) + (logior! (-> v1-5 settings flags) 32) + ) + 0 + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-2 (method-of-type part-tracker activate))) + (t9-2 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 325) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (lods-assign! (-> self draw) (-> self broken-look)) + (ja-channel-push! 1 30) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 12)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 12)) 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!) + ) + ) + (go mother-spider-egg-die-exit) + (none) + ) + :post + (the-as (function none :behavior mother-spider-egg) ja-post) + ) + +(defstate mother-spider-egg-die-exit (mother-spider-egg) + :code + (behavior () + (send-event (ppointer->process (-> self parent-override)) 'untrigger) + (logior! (-> self draw status) 2) + (let ((v1-8 (-> self draw shadow-ctrl))) + (logior! (-> v1-8 settings flags) 32) + ) + 0 + (set! (-> self root-override nav-flags) (logand -2 (-> self root-override nav-flags))) + (set! (-> self root-override nav-flags) (logand -3 (-> self root-override nav-flags))) + (clear-collide-with-as (-> self root-override)) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + ) + +(defbehavior mother-spider-egg-init-by-other mother-spider-egg ((arg0 entity) (arg1 vector) (arg2 vector) (arg3 vector)) + (set! (-> self entity) arg0) + (set! (-> self anim-speed) (rand-vu-float-range 0.8 1.2)) + (set! (-> self falling-start-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self fall-dest quad) (-> arg2 quad)) + (set! (-> self fall-dest-normal quad) (-> arg3 quad)) + (let ((s4-1 (new 'process 'collide-shape-moving self (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-1 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-1 reaction) default-collision-reaction) + (set! (-> s4-1 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-1 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 2048.0 0.0 3686.4) + (set-root-prim! s4-1 s3-0) + ) + (set! (-> s4-1 nav-radius) 4096.0) + (backup-collide-with-as s4-1) + (set! (-> self root-override) s4-1) + ) + (set! (-> self root-override trans quad) (-> arg1 quad)) + (set-vector! (-> self root-override scale) 0.3 0.3 0.3 1.0) + (quaternion-copy! (-> self root-override quat) (-> self parent-override 0 root-override quat)) + (logior! (-> self mask) (process-mask actor-pause)) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (set! (-> self mask) (logior (process-mask attackable) (-> self mask))) + (initialize-skeleton self *mother-spider-egg-unbroken-sg* '()) + (dummy-9 (-> self broken-look) *mother-spider-egg-broken-sg* (-> self draw art-group) (-> self entity)) + (set! (-> self draw shadow-ctrl) (new 'process 'shadow-control 0.0 0.0 614400.0 (the-as float 60) 245760.0)) + (set! (-> self nav) (new 'process 'nav-control (-> self root-override) 16 40960.0)) + (logior! (-> self nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) + (set! (-> self root-override nav-flags) (logand -2 (-> self root-override nav-flags))) + (logior! (-> self root-override nav-flags) 2) + (set! (-> self nav extra-nav-sphere quad) (-> self fall-dest quad)) + (set! (-> self nav extra-nav-sphere w) 4096.0) + (setup-from-to-height! (-> self traj) (-> self root-override trans) arg2 4096.0 -4.551111) + (create-connection! + *cavecrystal-light-control* + self + (-> self entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 4096.0 + ) + (go mother-spider-egg-falling) + (none) + ) + + + + diff --git a/goal_src/levels/maincave/mother-spider-h.gc b/goal_src/levels/maincave/mother-spider-h.gc index a8b64d62cb..dfe9089e77 100644 --- a/goal_src/levels/maincave/mother-spider-h.gc +++ b/goal_src/levels/maincave/mother-spider-h.gc @@ -25,6 +25,7 @@ (trans-u float :offset-assert 4) (swing-arc-u float :offset-assert 8) ) + :pack-me :method-count-assert 9 :size-assert #xc :flag-assert #x90000000c @@ -63,7 +64,8 @@ (set! (-> mother-spider-history-array heap-base) (the-as uint 16)) (deftype mother-spider (process-drawable) - ((mode uint64 :offset-assert 176) + ((root-override collide-shape :offset 112) + (mode uint64 :offset-assert 176) (damage int32 :offset-assert 184) (baby-count int32 :offset-assert 188) (max-baby-count int32 :offset-assert 192) @@ -111,18 +113,18 @@ :size-assert #x1f0 :flag-assert #x20018001f0 (:methods - (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) + (TODO-RENAME-20 (_type_ vector vector) symbol 20) + (TODO-RENAME-21 (_type_ vector float symbol) symbol 21) + (dummy-22 (_type_ matrix vector) float 22) + (TODO-RENAME-23 (_type_) none 23) + (TODO-RENAME-24 (_type_) number 24) + (letgo-player? (_type_) symbol 25) + (grab-player? (_type_) symbol 26) + (STUB-27 (_type_) none 27) + (STUB-28 (_type_) none 28) + (TODO-RENAME-29 (_type_ symbol symbol) none 29) + (spawn-child (_type_ vector vector symbol) int 30) + (is-player-stuck? (_type_) symbol 31) ) ) diff --git a/goal_src/levels/misty/quicksandlurker.gc b/goal_src/levels/misty/quicksandlurker.gc index ffa1e4961b..ae769e4d30 100644 --- a/goal_src/levels/misty/quicksandlurker.gc +++ b/goal_src/levels/misty/quicksandlurker.gc @@ -5,3 +5,1722 @@ ;; name in dgo: quicksandlurker ;; dgos: L1, MIS +(define-extern *quicksandlurker-sg* skeleton-group) + +(declare-type quicksandlurker process-drawable) +(declare-type quicksandlurker-missile process-drawable) + +(define-extern quicksandlurker-idle (state quicksandlurker)) ;; unknown type +(define-extern quicksandlurker-track (state quicksandlurker)) ;; unknown type +(define-extern quicksandlurker-wait (state quicksandlurker)) ;; unknown type +(define-extern quicksandlurker-popup (state quicksandlurker)) ;; unknown type +(define-extern quicksandlurker-attack (state quicksandlurker)) ;; unknown type +(define-extern quicksandlurker-hide (state quicksandlurker)) ;; unknown type +(define-extern quicksandlurker-die (state quicksandlurker)) ;; unknown type +(define-extern quicksandlurker-victory (state quicksandlurker)) ;; unknown type +(define-extern quicksandlurker-missile-idle (state quicksandlurker-missile)) ;; unknown type +(define-extern quicksandlurker-missile-impact (state quicksandlurker-missile)) ;; unknown type +(define-extern quicksandlurker-yawn (state quicksandlurker)) ;; unknown type + +;; TODO - I skipped a function that was unused, and i moved the type defs to make the parent-override work + +;; DECOMP BEGINS + +(set! + (-> *part-group-id-table* 198) + (new 'static 'sparticle-launch-group + :length 48 + :duration #xbb8 + :linger-duration #x5dc + :name "group-quicksandlurker-missile" + :launcher + (new 'static 'inline-array sparticle-group-item 48 + (sp-item 2481 :flags (launch-asap) :binding 2479) + (sp-item 2479 :flags (start-dead) :binding 2480) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + ) + :bounds (new 'static 'sphere :w 12288.0) + ) + ) + +(set! + (-> *part-id-table* 2481) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 9 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 0.0) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags bit3) + (sp-func spt-func 'sparticle-track-root-prim) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2479) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 2.0) + (sp-flt spt-scale-x (meters 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 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.006666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.0666667) + (sp-flt spt-fade-g -1.0666667) + (sp-flt spt-fade-b 0.0) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 81) + (sp-launcher-by-id spt-next-launcher 2482) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.1)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2482) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2480) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 1.0 5.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.0666667) + (sp-flt spt-fade-g -1.0666667) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-accel-y -2.7306666) + (sp-flt spt-friction 0.97) + (sp-int-plain-rnd spt-timer 30 119 1) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 2482) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.4) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-group-id-table* 199) + (new 'static 'sparticle-launch-group + :length 1 + :duration #x5 + :linger-duration #x5dc + :name "group-quicksandlurker-pre-missile" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2483)) + :bounds (new 'static 'sphere :w 12288.0) + ) + ) + +(set! + (-> *part-id-table* 2483) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.053333335) 1.0) + (sp-flt spt-scalevel-x (meters -0.006666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.7111111) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-accel-y -0.68266666) + (sp-rnd-flt spt-friction 0.85 0.05 1.0) + (sp-int-plain-rnd spt-timer 30 119 1) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 2482) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.4) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-group-id-table* 200) + (new 'static 'sparticle-launch-group + :length 3 + :duration #xa + :linger-duration #x5dc + :name "group-quicksandlurker-missile-impact" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 2484) + (sp-item 2485) + (sp-item 2486) + ) + :bounds (new 'static 'sphere :w 12288.0) + ) + ) + +(set! + (-> *part-id-table* 2484) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 64.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.006666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.7111111) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-accel-y -0.68266666) + (sp-rnd-flt spt-friction 0.85 0.05 1.0) + (sp-int-plain-rnd spt-timer 30 119 1) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 2482) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.4) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2486) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-r -0.35555556) + (sp-flt spt-fade-g -0.35555556) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -0.30476192) + (sp-rnd-flt spt-accel-y -0.68266666 0.68266666 1.0) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 2482) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 180.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2485) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 6.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 128.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 32.0 1.0) + (sp-flt spt-a 96.0) + (sp-flt spt-fade-a -4.8) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2) + (sp-end) + ) + ) + ) + +(set! + (-> *part-group-id-table* 201) + (new 'static 'sparticle-launch-group + :length 16 + :duration #x384 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-quicksandlurker-hide" + :launcher + (new 'static 'inline-array sparticle-group-item 16 + (sp-item 124 :flags (is-3d) :period 900 :length 63) + (sp-item 125 :period 900 :length 15) + (sp-item 126 :flags (is-3d) :period 900 :length 15) + (sp-item 127 :flags (is-3d) :period 900 :length 15) + (sp-item 128 :period 900 :length 10 :binding 129) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +(set! + (-> *part-group-id-table* 202) + (new 'static 'sparticle-launch-group + :length 16 + :duration #x384 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-quicksandlurker-popup" + :launcher + (new 'static 'inline-array sparticle-group-item 16 + (sp-item 124 :flags (is-3d) :period 900 :length 63) + (sp-item 125 :period 900 :length 15) + (sp-item 126 :flags (is-3d) :period 900 :length 15) + (sp-item 127 :flags (is-3d) :period 900 :length 15) + (sp-item 128 :period 900 :length 10 :binding 129) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +;; Manually Placed +(deftype quicksandlurker (process-drawable) + ((root-override collide-shape :offset 112) + (original-position vector :inline :offset-assert 176) + (y-offset float :offset-assert 192) + (theta-angle float :offset-assert 196) + (radial-offset float :offset-assert 200) + (bob-angle float :offset-assert 204) + (mud-entity entity-actor :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xd4 + :flag-assert #x14007000d4 + ) + +(deftype quicksandlurker-missile (process-drawable) + ((parent-override (pointer quicksandlurker) :offset 12) + (root-override collide-shape-moving :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + + +(defstate quicksandlurker-missile-idle (quicksandlurker-missile) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touched) + (when (cond + ((= (-> arg0 type) target) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'attack) + (set! (-> a1-3 param 0) (-> arg3 param 0)) + (let ((a2-1 (new 'static 'attack-info :mask #x20))) + (set! (-> a2-1 mode) 'explode) + (set! (-> a1-3 param 1) (the-as uint a2-1)) + ) + (send-event-function arg0 a1-3) + ) + ) + (else + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 4) + (set! (-> a1-4 message) 'attack) + (set! (-> a1-4 param 0) (-> arg3 param 0)) + (set! (-> a1-4 param 1) (the-as uint 'explode)) + (let ((v1-12 (+ *global-attack-id* 1))) + (set! *global-attack-id* v1-12) + (set! (-> a1-4 param 2) (the-as uint v1-12)) + ) + (set! (-> a1-4 param 3) (the-as uint 0)) + (send-event-function arg0 a1-4) + ) + ) + ) + (send-event (ppointer->process (-> self parent-override)) 'victory) + (go quicksandlurker-missile-impact) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :code + (behavior () + (while (< (- (-> *display* base-frame-counter) (-> self state-time)) 1200) + (dummy-33 + (-> self root-override) + (-> self root-override transv) + (-> self root-override root-prim collide-with) + ) + (if + (or + (logtest? (-> self root-override status) 8) + (< + (vector-vector-distance + (-> self root-override trans) + (the-as vector (-> self root-override trans-old)) + ) + 40.96 + ) + ) + (go quicksandlurker-missile-impact) + ) + (spawn (-> self part) (-> self root-override trans)) + (find-ground-and-draw-shadow + (-> self root-override trans) + (the-as vector #f) + 8192.0 + (the-as uint 1) + (the-as process #f) + 0.0 + 81920.0 + ) + (suspend) + ) + (dummy-18 self) + (none) + ) + :post + (behavior () + (dummy-47 (-> self root-override)) + (none) + ) + ) + +(defstate quicksandlurker-missile-impact (quicksandlurker-missile) + :code + (behavior () + (sound-play-by-name + (static-sound-name "sack-land") + (new-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self root-override trans)) + ) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 + (the-as part-tracker gp-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 200) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-1 ppointer) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (suspend) + ) + (dummy-18 self) + (none) + ) + ) + +(deftype quicksandlurker-missile-init-data (structure) + ((position vector :offset-assert 0) + (velocity vector :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + + +(defbehavior + quicksandlurker-missile-init-by-other quicksandlurker-missile + ((arg0 quicksandlurker-missile-init-data) (arg1 entity)) + (set! (-> self entity) arg1) + (let + ((s5-0 + (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! + (-> s5-0 no-reaction) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 2973)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 2867.2) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 1)) + (set! (-> s5-0 event-self) 'touched) + (set! (-> self root-override) s5-0) + ) + (set! (-> self root-override trans quad) (-> arg0 position quad)) + (set! + (-> self root-override quat vec quad) + (-> self parent-override 0 root-override quat vec quad) + ) + (vector-identity! (-> self root-override scale)) + (set! (-> self root-override transv quad) (-> arg0 velocity quad)) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 198) self) + ) + (go quicksandlurker-missile-idle) + (none) + ) + +(defun + spawn-quicksandlurker-missile + ((arg0 quicksandlurker) (arg1 vector) (arg2 vector) (arg3 entity)) + (let ((s5-0 (new 'stack-no-clear 'quicksandlurker-missile-init-data))) + (set! (-> s5-0 position) arg1) + (set! (-> s5-0 velocity) arg2) + (let + ((s3-0 (get-process *default-dead-pool* quicksandlurker-missile #x4000))) + (when s3-0 + (let ((t9-1 (method-of-type quicksandlurker-missile activate))) + (t9-1 + (the-as quicksandlurker-missile s3-0) + arg0 + 'quicksandlurker-missile + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s3-0 quicksandlurker-missile-init-by-other s5-0 arg3) + (-> s3-0 ppointer) + ) + ) + ) + 0 + (none) + ) + +(defskelgroup *quicksandlurker-sg* quicksandlurker + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +(defbehavior orient-to-face-target quicksandlurker () + (if *target* + (seek-to-point-toward-point! + (-> self root-override) + (-> *target* control trans) + 65536.0 + 60 + ) + ) + ) + +;; ERROR: function has no type analysis. Cannot decompile. + +(defun + intersects-nav-mesh? + ((arg0 quicksandlurker) (arg1 int) (arg2 (inline-array vector)) (arg3 vector)) + (if (dummy-16 arg0 arg1 arg2 arg3) + #t + ) + ) + +(defbehavior + quicksandlurker-default-event-handler quicksandlurker + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + enter-state + (go quicksandlurker-die) + ) + (('victory) + (go quicksandlurker-victory) + ) + ) + ) + +(defun inc-angle ((arg0 (pointer float)) (arg1 float)) + (+! (-> arg0 0) arg1) + (when (< 65536.0 (-> arg0 0)) + (let ((f0-4 (+ -65536.0 (-> arg0 0)))) + (set! (-> arg0 0) f0-4) + f0-4 + ) + ) + ) + +(defbehavior quicksandlurker-post quicksandlurker () + (inc-angle + (&-> self theta-angle) + (* 9102.223 (-> *display* seconds-per-frame)) + ) + (inc-angle + (&-> self bob-angle) + (* 14563.556 (-> *display* seconds-per-frame)) + ) + (let ((f28-0 (* (-> self radial-offset) (cos (-> self theta-angle)))) + (f30-2 (* 0.0 (sin (-> self theta-angle)))) + ) + (let ((f0-10 (* (-> self radial-offset) (sin (-> self theta-angle))))) + (set! + (-> self root-override trans x) + (+ (-> self original-position x) f28-0) + ) + (set! + (-> self root-override trans z) + (+ (-> self original-position z) f0-10) + ) + ) + (let* ((v1-4 (-> self mud-entity)) + (a0-5 (if v1-4 + (-> v1-4 extra process) + ) + ) + ) + (if a0-5 + (set! + (-> self root-override trans y) + (+ + (get-ripple-height + (the-as water-anim a0-5) + (-> self root-override trans) + ) + f30-2 + (-> self y-offset) + ) + ) + (set! + (-> self root-override trans y) + (+ (-> self original-position y) f30-2 (-> self y-offset)) + ) + ) + ) + ) + (transform-post) + (none) + ) + +(defbehavior quicksandlurker-check-hide-transition quicksandlurker () + (when *target* + (if + (and + (and + *target* + (>= + 20480.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (!= (-> *target* next-state name) 'target-flop) + ) + (go quicksandlurker-hide) + ) + 0.0 + (let ((a0-2 (-> self nav)) + (a1-1 (-> *target* control trans)) + ) + (when (if (dummy-16 a0-2 a1-1) + #t + ) + (if (< (- (-> *target* control trans y) (-> self original-position y)) 0.0) + (go quicksandlurker-hide) + ) + ) + ) + ) + (none) + ) + +(defstate quicksandlurker-idle (quicksandlurker) + :event + (the-as + (function process int symbol event-message-block object :behavior quicksandlurker) + #f + ) + :enter + (behavior () + (logior! (-> self draw status) 2) + (none) + ) + :exit + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) + :trans + (behavior () + (if + (and + *target* + (>= + 163840.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go quicksandlurker-wait) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior quicksandlurker) ja-post) + ) + +(defstate quicksandlurker-wait (quicksandlurker) + :event + quicksandlurker-default-event-handler + :trans + (behavior () + (cond + ((and + *target* + (>= + 81920.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (set! (-> self y-offset) 1228.8) + (go quicksandlurker-track) + ) + ((or + (not *target*) + (< + 163840.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (set! + (-> self y-offset) + (seek + (-> self y-offset) + -6553.6 + (* 20480.0 (-> *display* seconds-per-frame)) + ) + ) + (if (= (-> self y-offset) -6553.6) + (go quicksandlurker-idle) + ) + ) + (else + (set! + (-> self y-offset) + (seek + (-> self y-offset) + 1228.8 + (* 20480.0 (-> *display* seconds-per-frame)) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-0 (the int (* 300.0 (rand-vu-float-range 1.5 2.0)))) + (s5-0 5) + (s4-0 0) + ) + (ja-channel-push! 1 30) + (while #t + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (+! s4-0 1) + (when (< s5-0 s4-0) + (set! s4-0 0) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (orient-to-face-target) + (let ((v1-55 (-> self skel root-channel 0))) + (set! + (-> v1-55 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + ) + (let ((v1-58 (-> self skel root-channel 0))) + (set! (-> v1-58 num-func) num-func-identity) + (set! (-> v1-58 frame-num) 0.0) + ) + (suspend) + ) + ) + (none) + ) + :post + quicksandlurker-post + ) + +(defstate quicksandlurker-yawn (quicksandlurker) + :event + quicksandlurker-default-event-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + 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 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go quicksandlurker-wait) + (none) + ) + :post + quicksandlurker-post + ) + +(defstate quicksandlurker-track (quicksandlurker) + :event + quicksandlurker-default-event-handler + :trans + (behavior () + (if + (or + (not *target*) + (< + 81920.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go quicksandlurker-wait) + ) + (quicksandlurker-check-hide-transition) + (none) + ) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-0 (the int (* 300.0 (rand-vu-float-range 0.8 1.2)))) + (s5-0 1) + (s4-0 0) + ) + (while #t + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + 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 2)) + 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! + ) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (+! s4-0 1) + (when (>= s4-0 s5-0) + (if (logtest? (-> self draw status) 8) + (go quicksandlurker-attack) + ) + ) + ) + (orient-to-face-target) + (let ((v1-39 (-> self skel root-channel 0))) + (set! + (-> v1-39 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + ) + (let ((v1-42 (-> self skel root-channel 0))) + (set! (-> v1-42 num-func) num-func-identity) + (set! (-> v1-42 frame-num) 0.0) + ) + (suspend) + ) + ) + (none) + ) + :post + quicksandlurker-post + ) + +(defbehavior quicksandlurker-spit quicksandlurker () + (let ((gp-0 (new-stack-vector0))) + (let ((s5-0 (new-stack-vector0))) + (set! + (-> gp-0 quad) + (-> + (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 9)) + quad + ) + ) + (vector-! s5-0 (target-pos 5) gp-0) + (let ((f1-0 (vector-xz-length s5-0))) + (set! (-> s5-0 y) (fmin (-> s5-0 y) (* 0.5 f1-0))) + ) + (vector-normalize! s5-0 49152.0) + (spawn-quicksandlurker-missile self gp-0 s5-0 (-> self entity)) + ) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 + (the-as part-tracker s5-1) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 199) + -1 + #f + #f + #f + gp-0 + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + +(defstate quicksandlurker-attack (quicksandlurker) + :event + quicksandlurker-default-event-handler + :trans + quicksandlurker-check-hide-transition + :code + (behavior () + (let ((gp-0 #f) + (f30-0 51.0) + ) + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (orient-to-face-target) + (when (and (not gp-0) (>= (ja-aframe-num 0) f30-0)) + (set! gp-0 #t) + (quicksandlurker-spit) + ) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (go quicksandlurker-track) + (none) + ) + :post + quicksandlurker-post + ) + +(defstate quicksandlurker-victory (quicksandlurker) + :event + quicksandlurker-default-event-handler + :trans + quicksandlurker-check-hide-transition + :code + (behavior () + (ja-channel-push! 1 60) + (cond + ((rand-vu-percent? 0.5) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + 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 6)) + 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! + ) + ) + ) + ) + (else + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> a0-5 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-5 param 1) 1.0) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 param 0) + (the float (+ (-> a0-6 frame-group data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (go quicksandlurker-track) + (none) + ) + :post + quicksandlurker-post + ) + +(defstate quicksandlurker-hide (quicksandlurker) + :event + quicksandlurker-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :exit + (behavior () + (restore-collide-with-as (-> self root-override)) + (none) + ) + :trans + (behavior () + (if (not *target*) + (go quicksandlurker-wait) + ) + (let ((a0-0 (-> self nav)) + (a1-0 (-> *target* control trans)) + ) + (cond + ((or (if (dummy-16 a0-0 a1-0) + #t + ) + (and + *target* + (>= + 16384.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (go quicksandlurker-popup) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 0.75) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 0.75) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-5 (method-of-type part-tracker activate))) + (t9-5 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 201) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (clear-collide-with-as (-> self root-override)) + (while #t + (orient-to-face-target) + (suspend) + ) + (none) + ) + :post + quicksandlurker-post + ) + +(defstate quicksandlurker-popup (quicksandlurker) + :trans + quicksandlurker-check-hide-transition + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 202) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (orient-to-face-target) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go quicksandlurker-track) + (none) + ) + :post + quicksandlurker-post + ) + +(defstate quicksandlurker-die (quicksandlurker) + :event + (the-as + (function process int symbol event-message-block object :behavior quicksandlurker) + process-drawable-death-event-handler + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 60) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 9)) + 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 9)) + 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! + ) + ) + ) + (dummy-18 self) + (none) + ) + :post + quicksandlurker-post + ) + +(defmethod + init-from-entity! + quicksandlurker + ((obj quicksandlurker) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let + ((s4-0 + (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)) + ) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 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 0.0 0.0 8192.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 1) + (set! (-> s2-0 transform-index) 3) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4096.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 1) + (set! (-> s2-1 transform-index) 5) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 4096.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-2 prim-core offense) 2) + (set! (-> s2-2 transform-index) 5) + (set-vector! (-> s2-2 local-sphere) 0.0 -2048.0 0.0 5324.8) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set! + (-> obj root-override trans y) + (+ -2048.0 (-> obj root-override trans y)) + ) + (set! (-> obj original-position quad) (-> obj root-override trans quad)) + (set! (-> obj theta-angle) (rand-vu-float-range 0.0 65536.0)) + (set! (-> obj bob-angle) (rand-vu-float-range 0.0 65536.0)) + (set! (-> obj radial-offset) 4096.0) + (set! (-> obj y-offset) -6553.6) + (set-yaw-angle-clear-roll-pitch! + (-> obj root-override) + (rand-vu-float-range 0.0 65536.0) + ) + (initialize-skeleton obj *quicksandlurker-sg* '()) + (set! + (-> obj nav) + (new 'process 'nav-control (-> obj root-override) 16 40960.0) + ) + (logior! + (-> obj nav flags) + (nav-control-flags display-marks bit3 bit5 bit6 bit7) + ) + (set! + (-> obj fact) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! + (-> obj mud-entity) + (entity-actor-lookup (-> obj entity) 'water-actor 0) + ) + (go quicksandlurker-idle) + (none) + ) + + + + diff --git a/goal_src/levels/ogre/flying-lurker.gc b/goal_src/levels/ogre/flying-lurker.gc index b95b820177..b8168692f6 100644 --- a/goal_src/levels/ogre/flying-lurker.gc +++ b/goal_src/levels/ogre/flying-lurker.gc @@ -40,283 +40,172 @@ (defstate plunger-lurker-plunge (plunger-lurker) :code (behavior () - (set-setting! *setting-control* self 'allow-progress #f 0.0 0) - (logclear! (-> self mask) (process-mask actor-pause)) - (process-entity-status! self (entity-perm-status bit-3) #t) - (while (or (not *target*) (logtest? (-> *target* state-flags) #x8008)) - (suspend) - ) - (while (not (process-grab? *target*)) - (suspend) - ) - (let* ((gp-0 (get-process *default-dead-pool* manipy #x4000)) - (gp-1 (ppointer->handle (when gp-0 - (let - ((t9-4 (method-of-type manipy activate))) - (t9-4 - (the-as manipy gp-0) - self - 'manipy - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - gp-0 - manipy-init - (-> self entity extra trans) - (-> self entity) - *ogrecam-sg* - #f - ) - (-> gp-0 ppointer) - ) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (while (or (not *target*) (logtest? (-> *target* state-flags) #x8008)) + (suspend) + ) + (while (not (process-grab? *target*)) + (suspend) + ) + (let* ((gp-0 (get-process *default-dead-pool* manipy #x4000)) + (gp-1 + (ppointer->handle + (when gp-0 + (let ((t9-4 (method-of-type manipy activate))) + (t9-4 (the-as manipy gp-0) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 manipy-init (-> self entity extra trans) (-> self entity) *ogrecam-sg* #f) + (-> gp-0 ppointer) ) - ) - ) - (let - ((s5-0 (the-as othercam (get-process *default-dead-pool* othercam #x4000))) - ) - (ppointer->handle (when s5-0 - (let ((t9-7 (method-of-type othercam activate))) - (t9-7 - s5-0 - (-> gp-1 process 0) - 'othercam - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-0 - othercam-init-by-other - (-> gp-1 process 0) - 4 - #f - #t - ) - (-> s5-0 ppointer) - ) - ) - ) - (send-event - (handle->process gp-1) - 'eval - (lambda :behavior manipy () (let ((v0-0 (logior (-> self draw status) 32))) - (set! (-> self draw status) v0-0) - v0-0 - ) - ) - ) - (let ((a1-9 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-9 from) self) - (set! (-> a1-9 num-params) 1) - (set! (-> a1-9 message) 'clone-and-kill-links) - (set! (-> a1-9 param 0) (the-as uint (process->handle self))) - (let ((t9-10 send-event-function) - (v1-34 (-> self alt-actor)) - ) - (t9-10 (if v1-34 - (-> v1-34 extra process) - ) - a1-9 - ) - ) - ) - (send-event (-> gp-1 process 0) 'clone-copy-trans #f) - (send-event (-> gp-1 process 0) 'anim-mode 'clone-anim) - (ja-play-spooled-anim - (new 'static 'spool-anim - :name "plunger-lurker-blowup" - :index 7 - :parts 4 - :command-list - '( - ((the binteger 200) - alive - "tntbarrel-223" - ) - ((the binteger 200) - alive - "tntbarrel-222" - ) - ((the binteger 200) - alive - "tntbarrel-221" - ) - ((the binteger 200) - alive - "tntbarrel-220" - ) - ((the binteger 200) - alive - "tntbarrel-224" - ) - ((the binteger 200) - alive - "tntbarrel-219" - ) - ((the binteger 200) - alive - "tntbarrel-246" - ) - ((the binteger 200) - alive - "tntbarrel-249" - ) - ((the binteger 200) - alive - "tntbarrel-250" - ) - ((the binteger 200) - alive - "tntbarrel-251" - ) - ((the binteger 200) - alive - "tntbarrel-225" - ) - ((the binteger 201) - joint - "cameraB" - ) - ((the binteger 220) - send-event - "tntbarrel-223" - 'die-big - ) - ((the binteger 230) - send-event - "tntbarrel-222" - 'die-big - ) - ((the binteger 240) - send-event - "tntbarrel-221" - 'die-big - ) - ((the binteger 240) - send-event - "tntbarrel-220" - 'die-big - ) - ((the binteger 245) - send-event - "tntbarrel-224" - 'die-big - ) - ((the binteger 250) - send-event - "tntbarrel-219" - 'die-big - ) - ((the binteger 251) - joint - "cameraA" - ) - ((the binteger 260) - send-event - "tntbarrel-246" - 'die-big - ) - ((the binteger 325) - send-event - "tntbarrel-249" - 'die-big - ) - ((the binteger 380) - send-event - "tntbarrel-250" - 'die-big - ) - ((the binteger 410) - send-event - "tntbarrel-251" - 'die-big - ) - ((the binteger 420) - blackout - (the binteger 30) - ) - ((the binteger 421) - joint - "cameraB" - ) - ((the binteger 430) send-event "tntbarrel-225" 'die-big) - ) - ) - (the-as art-joint-anim #f) - (the-as art-joint-anim (-> self draw art-group data 4)) - (the-as (function process-drawable symbol) false-func) - ) - (if (handle->process gp-1) - (deactivate (-> gp-1 process 0)) - ) - ) - (let ((a1-14 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-14 from) self) - (set! (-> a1-14 num-params) 0) - (set! (-> a1-14 message) 'reset) - (let ((t9-15 send-event-function) - (v1-56 (-> self alt-actor)) - ) - (t9-15 (if v1-56 - (-> v1-56 extra process) + ) ) - a1-14 - ) - ) - ) - (process-release? *target*) - (suspend) - 0 - (let ((a1-15 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-15 from) self) - (set! (-> a1-15 num-params) 2) - (set! (-> a1-15 message) 'attack-invinc) - (set! (-> a1-15 param 0) (the-as uint #f)) - (let - ((a0-37 - (new 'static 'array uint32 26 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x20 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 - #x0 + ) + (let ((s5-0 (the-as othercam (get-process *default-dead-pool* othercam #x4000)))) + (ppointer->handle (when s5-0 + (let ((t9-7 (method-of-type othercam activate))) + (t9-7 s5-0 (-> gp-1 process 0) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 othercam-init-by-other (-> gp-1 process 0) 4 #f #t) + (-> s5-0 ppointer) + ) + ) ) - ) + (send-event + (handle->process gp-1) + 'eval + (lambda :behavior manipy () (let ((v0-0 (logior (-> self draw status) 32))) + (set! (-> self draw status) v0-0) + v0-0 + ) + ) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 1) + (set! (-> a1-9 message) 'clone-and-kill-links) + (set! (-> a1-9 param 0) (the-as uint (process->handle self))) + (let ((t9-10 send-event-function) + (v1-34 (-> self alt-actor)) + ) + (t9-10 + (if v1-34 + (-> v1-34 extra process) + ) + a1-9 + ) + ) + ) + (send-event (-> gp-1 process 0) 'clone-copy-trans #f) + (send-event (-> gp-1 process 0) 'anim-mode 'clone-anim) + (ja-play-spooled-anim + (new 'static 'spool-anim + :name "plunger-lurker-blowup" + :index 7 + :parts 4 + :command-list + '(((the binteger 200) alive "tntbarrel-223") + ((the binteger 200) alive "tntbarrel-222") + ((the binteger 200) alive "tntbarrel-221") + ((the binteger 200) alive "tntbarrel-220") + ((the binteger 200) alive "tntbarrel-224") + ((the binteger 200) alive "tntbarrel-219") + ((the binteger 200) alive "tntbarrel-246") + ((the binteger 200) alive "tntbarrel-249") + ((the binteger 200) alive "tntbarrel-250") + ((the binteger 200) alive "tntbarrel-251") + ((the binteger 200) alive "tntbarrel-225") + ((the binteger 201) joint "cameraB") + ((the binteger 220) send-event "tntbarrel-223" 'die-big) + ((the binteger 230) send-event "tntbarrel-222" 'die-big) + ((the binteger 240) send-event "tntbarrel-221" 'die-big) + ((the binteger 240) send-event "tntbarrel-220" 'die-big) + ((the binteger 245) send-event "tntbarrel-224" 'die-big) + ((the binteger 250) send-event "tntbarrel-219" 'die-big) + ((the binteger 251) joint "cameraA") + ((the binteger 260) send-event "tntbarrel-246" 'die-big) + ((the binteger 325) send-event "tntbarrel-249" 'die-big) + ((the binteger 380) send-event "tntbarrel-250" 'die-big) + ((the binteger 410) send-event "tntbarrel-251" 'die-big) + ((the binteger 420) blackout (the binteger 30)) + ((the binteger 421) joint "cameraB") + ((the binteger 430) send-event "tntbarrel-225" 'die-big) + ) + ) + (the-as art-joint-anim #f) + (the-as art-joint-anim (-> self draw art-group data 4)) + (the-as (function process-drawable symbol) false-func) + ) + (if (handle->process gp-1) + (deactivate (-> gp-1 process 0)) + ) ) - (set! (-> a0-37 17) (the-as uint 'instant-death)) - (set! (-> a1-15 param 1) (the-as uint a0-37)) - ) - (send-event-function *target* a1-15) - ) - (dummy-18 self) - (deactivate self) - (while #t + (let ((a1-14 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-14 from) self) + (set! (-> a1-14 num-params) 0) + (set! (-> a1-14 message) 'reset) + (let ((t9-15 send-event-function) + (v1-56 (-> self alt-actor)) + ) + (t9-15 + (if v1-56 + (-> v1-56 extra process) + ) + a1-14 + ) + ) + ) + (process-release? *target*) (suspend) + 0 + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) self) + (set! (-> a1-15 num-params) 2) + (set! (-> a1-15 message) 'attack-invinc) + (set! (-> a1-15 param 0) (the-as uint #f)) + (let ((a0-37 (new 'static 'array uint32 26 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x20 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + #x0 + ) + ) + ) + (set! (-> a0-37 17) (the-as uint 'instant-death)) + (set! (-> a1-15 param 1) (the-as uint a0-37)) + ) + (send-event-function *target* a1-15) + ) + (dummy-18 self) + (deactivate self) + (while #t + (suspend) + ) + (none) ) - (none) - ) :post (the-as (function none :behavior plunger-lurker) ja-post) ) @@ -324,152 +213,83 @@ (defstate plunger-lurker-flee (plunger-lurker) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'attack) - (let ((v0-0 #t)) - (set! (-> self got-hit) v0-0) - v0-0 - ) - ) - ) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'attack) + (let ((v0-0 #t)) + (set! (-> self got-hit) v0-0) + v0-0 + ) + ) + ) + ) ) - ) :trans (behavior () - (when (-> self got-hit) - (close-specific-task! - (game-task plunger-lurker-hit) - (task-status need-hint) - ) - (process-entity-status! self (entity-perm-status complete) #t) - (level-hint-spawn - (game-text-id sidekick-speech-hint-ogre-race) - "sksp0321" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) - (when gp-0 - (let ((t9-4 (method-of-type part-tracker activate))) - (t9-4 - (the-as part-tracker gp-0) + (when (-> self got-hit) + (close-specific-task! (game-task plunger-lurker-hit) (task-status need-hint)) + (process-entity-status! self (entity-perm-status complete) #t) + (level-hint-spawn + (game-text-id sidekick-speech-hint-ogre-race) + "sksp0321" + (the-as entity #f) *entity-pool* - 'part-tracker - (the-as pointer #x70004000) + (game-task none) ) - ) - (run-now-in-process - gp-0 - part-tracker-init - (-> *part-group-id-table* 474) - -1 - #f - #f - #f - (-> self root trans) - ) - (-> gp-0 ppointer) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 part-tracker-init (-> *part-group-id-table* 474) -1 #f #f #f (-> self root trans)) + (-> gp-0 ppointer) + ) + ) + (dummy-18 self) + (deactivate self) ) - ) - (dummy-18 self) - (deactivate self) + (none) ) - (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 + (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) + (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!) ) - -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) - (suspend) - (let ((a0-1 (-> self skel root-channel 0))) - (set! - (-> a0-1 param 0) - (the float (+ (-> a0-1 frame-group data 0 length) -1)) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) ) - (set! (-> a0-1 param 1) 1.0) - (joint-control-channel-group-eval! - a0-1 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (let ((a0-3 (-> self skel root-channel 0))) - (set! - (-> a0-3 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) - ) - (set! - (-> a0-3 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 6)) - data - 0 - length + (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!) ) - -1 - ) ) - ) - (set! (-> a0-3 param 1) 1.0) - (set! (-> a0-3 frame-num) 0.0) - (joint-control-channel-group! - a0-3 - (the-as art-joint-anim (-> self draw art-group data 6)) - 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)) + (while #t + (suspend) ) - (set! (-> a0-4 param 1) 1.0) - (joint-control-channel-group-eval! - a0-4 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) + (none) ) - (while #t - (suspend) - ) - (none) - ) :post (the-as (function none :behavior plunger-lurker) ja-post) ) @@ -477,122 +297,79 @@ (defstate plunger-lurker-idle (plunger-lurker) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('plunge) - (logclear! (-> self mask) (process-mask actor-pause)) - (go plunger-lurker-plunge) + (case arg2 + (('plunge) + (logclear! (-> self mask) (process-mask actor-pause)) + (go plunger-lurker-plunge) + ) ) ) - ) :trans (behavior () - (spool-push *art-control* "plunger-lurker-blowup" 0 self -99.0) - (when - (and - *target* - (< - (vector-vector-distance-squared (-> self root trans) (target-pos 0)) - 6710886400.0 + (spool-push *art-control* "plunger-lurker-blowup" 0 self -99.0) + (when (and *target* (< (vector-vector-distance-squared (-> self root trans) (target-pos 0)) 6710886400.0)) + (logclear! (-> self mask) (process-mask actor-pause)) + (go plunger-lurker-flee) ) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (go plunger-lurker-flee) + (none) ) - (none) - ) :code (behavior () - (while #t - (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 frame-group) - (the-as art-joint-anim (-> self draw art-group data 4)) - ) - (set! - (-> a0-0 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 4)) - data - 0 - length - ) - -1 + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) ) - ) ) - (set! (-> a0-0 param 1) 1.0) - (set! (-> a0-0 frame-num) 0.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim (-> self draw art-group data 4)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-1 (-> self skel root-channel 0))) - (set! - (-> a0-1 param 0) - (the float (+ (-> a0-1 frame-group data 0 length) -1)) - ) - (set! (-> a0-1 param 1) 1.0) - (joint-control-channel-group-eval! - a0-1 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior plunger-lurker) ja-post) ) (defstate plunger-lurker-die (plunger-lurker) :code - (behavior () - (dummy-18 self) - (deactivate self) - (suspend) - 0 - (none) - ) + (behavior () (dummy-18 self) (deactivate self) (suspend) 0 (none)) ) -(defmethod - init-from-entity! - plunger-lurker - ((obj plunger-lurker) (arg0 entity-actor)) +(defmethod init-from-entity! plunger-lurker ((obj plunger-lurker) (arg0 entity-actor)) (stack-size-set! (-> obj main-thread) 512) - (let - ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) - (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) - (set! (-> s3-0 prim-core collide-as) (the-as uint 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 20480.0 -16384.0 40960.0) - (set-root-prim! s4-0 s3-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! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 20480.0 -16384.0 40960.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root) s4-0) ) - (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) - (backup-collide-with-as s4-0) - (set! (-> obj root) s4-0) - ) (process-drawable-from-entity! obj arg0) (initialize-skeleton obj *plunger-lurker-sg* '()) (set! (-> obj alt-actor) (entity-actor-lookup arg0 'alt-actor 0)) (set! (-> obj got-hit) #f) (quaternion-rotate-y! (-> obj root quat) (-> obj root quat) -16384.0) (if (= (get-task-status (game-task plunger-lurker-hit)) (task-status invalid)) - (go plunger-lurker-die) - (go plunger-lurker-idle) - ) + (go plunger-lurker-die) + (go plunger-lurker-idle) + ) (none) ) @@ -638,109 +415,86 @@ (defmethod dummy-20 flying-lurker ((obj flying-lurker)) (with-pp - (let ((s5-0 (-> obj draw shadow-ctrl)) - (s4-0 #f) - ) - (when (-> obj draw shadow) - (when - (or - (logtest? (-> obj draw status) 8) - (< - (vector-vector-xz-distance-squared (-> obj root trans) (camera-pos)) - 10485760000.0 + (let ((s5-0 (-> obj draw shadow-ctrl)) + (s4-0 #f) + ) + (when (-> obj draw shadow) + (when (or + (logtest? (-> obj draw status) 8) + (< (vector-vector-xz-distance-squared (-> obj root trans) (camera-pos)) 10485760000.0) + ) + (let ((s3-1 (new 'stack-no-clear 'collide-tri-result)) + (a1-1 (new 'stack-no-clear 'vector)) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> a1-1 quad) (-> obj root trans quad)) + (set! (-> a1-1 y) (+ -8192.0 (-> a1-1 y))) + (set-vector! a2-0 0.0 -81920.0 0.0 1.0) + (when (>= (dummy-10 *collide-cache* a1-1 a2-0 8192.0 1 pp s3-1 1) 0.0) + (set! (-> s3-1 intersect w) 8192.0) + (when (and + (sphere-in-view-frustum? (the-as sphere (-> s3-1 intersect))) + (< 822083600.0 (vector-vector-distance-squared (-> s3-1 intersect) (camera-pos))) + ) + (set! s4-0 #t) + (let ((v1-17 s5-0)) + (set! (-> v1-17 settings flags) (logand -33 (-> v1-17 settings flags))) + ) + 0 + (let ((v1-19 s5-0)) + (set! (-> v1-19 settings bot-plane w) (- (+ -8192.0 (-> s3-1 intersect y)))) + ) + 0 + (let ((v1-21 s5-0)) + (set! (-> v1-21 settings top-plane w) (- (+ 6144.0 (-> s3-1 intersect y)))) + ) + 0 + (let ((s2-2 (new 'stack-no-clear 'bounding-box))) + (let ((s1-1 (new 'stack-no-clear 'vector))) + (vector<-cspace! s1-1 (-> obj node-list data 4)) + (vector+float! (-> s2-2 min) s1-1 -18432.0) + (vector+float! (-> s2-2 max) s1-1 18432.0) + ) + (add-spheres! s2-2 (the-as (pointer sphere) (-> s3-1 intersect)) 1) + (let ((f0-17 (* 0.5 (vector-vector-distance (-> s2-2 min) (-> s2-2 max))))) + (set-vector! + (-> obj draw bounds) + (* 0.5 (+ (-> s2-2 min x) (-> s2-2 max x))) + (* 0.5 (+ (-> s2-2 min y) (-> s2-2 max y))) + (* 0.5 (+ (-> s2-2 min z) (-> s2-2 max z))) + 1.0 + ) + (vector-! (-> obj draw bounds) (-> obj draw bounds) (-> obj root trans)) + (set! (-> obj draw bounds w) f0-17) + ) + ) + (set! (-> obj draw origin-joint-index) (the-as uint 0)) + 0 + ) + ) + ) + ) ) - ) - (let ((s3-1 (new 'stack-no-clear 'collide-mesh-cache-tri)) - (a1-1 (new 'stack-no-clear 'vector)) - (a2-0 (new 'stack-no-clear 'vector)) - ) - (set! (-> a1-1 quad) (-> obj root trans quad)) - (set! (-> a1-1 y) (+ -8192.0 (-> a1-1 y))) - (set-vector! a2-0 0.0 -81920.0 0.0 1.0) - (when (>= (dummy-10 *collide-cache* a1-1 a2-0 8192.0 1 pp s3-1 1) 0.0) - (set! (-> s3-1 normal w) 8192.0) - (when - (and - (sphere-in-view-frustum? (the-as sphere (-> s3-1 normal))) - (< - 822083600.0 - (vector-vector-distance-squared (-> s3-1 normal) (camera-pos)) - ) - ) - (set! s4-0 #t) - (let ((v1-17 s5-0)) - (set! - (-> v1-17 settings flags) - (logand -33 (-> v1-17 settings flags)) - ) - ) - 0 - (let ((v1-19 s5-0)) - (set! - (-> v1-19 settings bot-plane w) - (- (+ -8192.0 (-> s3-1 normal y))) - ) - ) - 0 - (let ((v1-21 s5-0)) - (set! - (-> v1-21 settings top-plane w) - (- (+ 6144.0 (-> s3-1 normal y))) - ) - ) - 0 - (let ((s2-2 (new 'stack-no-clear 'bounding-box))) - (let ((s1-1 (new 'stack-no-clear 'vector))) - (vector<-cspace! s1-1 (-> obj node-list data 4)) - (vector+float! (-> s2-2 min) s1-1 -18432.0) - (vector+float! (-> s2-2 max) s1-1 18432.0) - ) - (add-spheres! s2-2 (the-as (pointer sphere) (-> s3-1 normal)) 1) - (let - ((f0-17 (* 0.5 (vector-vector-distance (-> s2-2 min) (-> s2-2 max)))) - ) - (set-vector! - (-> obj draw bounds) - (* 0.5 (+ (-> s2-2 min x) (-> s2-2 max x))) - (* 0.5 (+ (-> s2-2 min y) (-> s2-2 max y))) - (* 0.5 (+ (-> s2-2 min z) (-> s2-2 max z))) - 1.0 - ) - (vector-! - (-> obj draw bounds) - (-> obj draw bounds) - (-> obj root trans) - ) - (set! (-> obj draw bounds w) f0-17) - ) - ) - (set! (-> obj draw origin-joint-index) (the-as uint 0)) - 0 - ) + (when (not s4-0) + (logior! (-> s5-0 settings flags) 32) + 0 + (set! (-> obj draw bounds quad) (-> obj default-bounds quad)) + (set! (-> obj draw origin-joint-index) (the-as uint 4)) ) - ) ) - ) - (when (not s4-0) - (logior! (-> s5-0 settings flags) 32) - 0 - (set! (-> obj draw bounds quad) (-> obj default-bounds quad)) - (set! (-> obj draw origin-joint-index) (the-as uint 4)) - ) + (none) ) - (none) - ) ) (defbehavior flying-lurker-inc-try-count flying-lurker () (when (not (-> self try-counted)) - (set! (-> self try-counted) #t) - (let ((gp-0 (-> self entity extra perm))) - (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) - (set! (-> gp-0 user-int8 0) (seekl (-> gp-0 user-int8 0) 255 1)) - (set! (-> self try-count) (the-as uint (-> gp-0 user-int8 0))) + (set! (-> self try-counted) #t) + (let ((gp-0 (-> self entity extra perm))) + (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) + (set! (-> gp-0 user-int8 0) (seekl (-> gp-0 user-int8 0) 255 1)) + (set! (-> self try-count) (the-as uint (-> gp-0 user-int8 0))) + ) ) - ) 0 (none) ) @@ -751,138 +505,95 @@ (defstate flying-lurker-die (flying-lurker) :code - (behavior () - (dummy-18 self) - (deactivate self) - (none) - ) + (behavior () (dummy-18 self) (deactivate self) (none)) ) (defstate flying-lurker-sleep (flying-lurker) :code (behavior () - (process-entity-status! self (entity-perm-status bit-3) #f) - (logior! (-> self draw status) 2) - (while #t - (suspend) + (process-entity-status! self (entity-perm-status bit-3) #f) + (logior! (-> self draw status) 2) + (while #t + (suspend) + ) + (none) ) - (none) - ) ) (defbehavior first? flying-lurker () (not (-> self link prev)) ) -(defbehavior - flying-lurker-calc-speed flying-lurker - ((arg0 meters) (arg1 meters) (arg2 meters) (arg3 meters)) - (let - ((s4-1 - (vector-! - (new 'stack-no-clear 'vector) - (target-pos 0) - (-> self root trans) - ) - ) - (s3-0 (new 'stack-no-clear 'vector)) - ) - (set! (-> s3-0 quad) (-> self tangent quad)) - 0.0 - (let ((f30-0 (vector-length s4-1))) - (set! (-> s4-1 y) 0.0) - (set! (-> s3-0 y) 0.0) - (let ((f28-0 (vector-dot s4-1 s3-0))) - (let - ((f26-0 - (* - (path-distance (-> self path)) - (/ - (the - float - (- (-> *display* game-frame-counter) (-> self race-start-time)) - ) - (-> self race-seconds) - ) - ) +(defbehavior flying-lurker-calc-speed flying-lurker ((arg0 meters) (arg1 meters) (arg2 meters) (arg3 meters)) + (let ((s4-1 (vector-! (new 'stack-no-clear 'vector) (target-pos 0) (-> self root trans))) + (s3-0 (new 'stack-no-clear 'vector)) ) - (f0-6 (* (path-distance (-> self path)) (-> self curve-position))) - ) - 0.0 - (let* ((f1-6 (* -81920.0 (the float (-> self rank)))) - (f0-10 (+ (if (< f26-0 f0-6) - (fmax (+ -81920.0 f1-6) (- f26-0 f0-6)) - (fmin (+ 245760.0 f1-6) (- f26-0 f0-6)) - ) - f28-0 - ) + (set! (-> s3-0 quad) (-> self tangent quad)) + 0.0 + (let ((f30-0 (vector-length s4-1))) + (set! (-> s4-1 y) 0.0) + (set! (-> s3-0 y) 0.0) + (let ((f28-0 (vector-dot s4-1 s3-0))) + (let ((f26-0 + (* (path-distance (-> self path)) + (/ (the float (- (-> *display* game-frame-counter) (-> self race-start-time))) (-> self race-seconds)) + ) + ) + (f0-6 (* (path-distance (-> self path)) (-> self curve-position))) ) - (f1-10 (* 0.000012207031 f0-10)) - (f0-12 (fmax -0.5 (fmin 0.5 f1-10))) - ) - (set! (-> self speed) (+ (* (+ 0.5 f0-12) (- arg2 arg3)) arg3)) - ) + 0.0 + (let* ((f1-6 (* -81920.0 (the float (-> self rank)))) + (f0-10 (+ (if (< f26-0 f0-6) + (fmax (+ -81920.0 f1-6) (- f26-0 f0-6)) + (fmin (+ 245760.0 f1-6) (- f26-0 f0-6)) + ) + f28-0 + ) + ) + (f1-10 (* 0.000012207031 f0-10)) + (f0-12 (fmax -0.5 (fmin 0.5 f1-10))) + ) + (set! (-> self speed) (+ (* (+ 0.5 f0-12) (- arg2 arg3)) arg3)) + ) + ) + (set! (-> self y-offset-desired) (fmin 65536.0 (fmax 0.0 (* 1.6 (- 40960.0 (fmin (- f28-0) f30-0)))))) + ) ) - (set! - (-> self y-offset-desired) - (fmin 65536.0 (fmax 0.0 (* 1.6 (- 40960.0 (fmin (- f28-0) f30-0))))) - ) - ) ) - ) (none) ) (defbehavior flying-lurker-move flying-lurker () (+! - (-> self curve-position) - (/ - (the - float - (* - (- - (-> *display* base-frame-counter) - (-> *display* old-base-frame-counter) + (-> self curve-position) + (/ (the float + (* (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter)) (the int (-> self speed))) + ) + (path-distance (-> self path)) ) - (the int (-> self speed)) - ) - ) - (path-distance (-> self path)) ) - ) (set! (-> self curve-position) (fmin 1.0 (fmax 0.0 (-> self curve-position)))) - (eval-path-curve! - (-> self path) - (-> self root trans) - (-> self curve-position) - 'interp - ) + (eval-path-curve! (-> self path) (-> self root trans) (-> self curve-position) 'interp) (cond - ((< (-> self y-offset-desired) (-> self y-offset)) - (set! - (-> self y-vel) - (* 0.25 (- (-> self y-offset-desired) (-> self y-offset))) + ((< (-> self y-offset-desired) (-> self y-offset)) + (set! (-> self y-vel) (* 0.25 (- (-> self y-offset-desired) (-> self y-offset)))) + (set! (-> self y-vel) (fmax -436.90668 (-> self y-vel))) + (+! (-> self y-offset) (-> self y-vel)) + (when (>= (-> self y-offset-desired) (-> self y-offset)) + (set! (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-vel) 0.0) + ) ) - (set! (-> self y-vel) (fmax -436.90668 (-> self y-vel))) - (+! (-> self y-offset) (-> self y-vel)) - (when (>= (-> self y-offset-desired) (-> self y-offset)) - (set! (-> self y-offset) (-> self y-offset-desired)) - (set! (-> self y-vel) 0.0) + ((< (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-vel) (* 0.5 (- (-> self y-offset-desired) (-> self y-offset)))) + (set! (-> self y-vel) (fmin 436.90668 (-> self y-vel))) + (+! (-> self y-offset) (-> self y-vel)) + (when (>= (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-vel) 0.0) + ) ) ) - ((< (-> self y-offset) (-> self y-offset-desired)) - (set! - (-> self y-vel) - (* 0.5 (- (-> self y-offset-desired) (-> self y-offset))) - ) - (set! (-> self y-vel) (fmin 436.90668 (-> self y-vel))) - (+! (-> self y-offset) (-> self y-vel)) - (when (>= (-> self y-offset) (-> self y-offset-desired)) - (set! (-> self y-offset) (-> self y-offset-desired)) - (set! (-> self y-vel) 0.0) - ) - ) - ) (+! (-> self root trans y) (-> self y-offset)) (set! (-> self root trans y) (+ 12288.0 (-> self root trans y))) (none) @@ -890,45 +601,41 @@ (defbehavior flying-lurker-rotate flying-lurker () (let ((gp-0 (new 'stack-no-clear 'matrix))) - (let ((s5-0 (new 'stack-no-clear 'matrix))) - (let ((s3-0 (new 'stack-no-clear 'vector)) - (s4-0 (new 'stack-no-clear 'vector)) + (let ((s5-0 (new 'stack-no-clear 'matrix))) + (let ((s3-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (TODO-RENAME-14 (-> self path) (-> self tangent) (-> self curve-position)) + (eval-path-curve! + (-> self path) + s3-0 + (+ (/ 12288.0 (path-distance (-> self path))) (-> self curve-position)) + 'interp ) - (TODO-RENAME-14 (-> self path) (-> self tangent) (-> self curve-position)) - (eval-path-curve! - (-> self path) - s3-0 - (+ (/ 12288.0 (path-distance (-> self path))) (-> self curve-position)) - 'interp + (eval-path-curve! + (-> self path) + s4-0 + (+ (/ 4096.0 (path-distance (-> self path))) (-> self curve-position)) + 'interp + ) + (vector-! s3-0 s3-0 (-> self root trans)) + (vector-! s4-0 s4-0 (-> self root trans)) + (set! (-> s3-0 y) 0.0) + (set! (-> s4-0 y) 0.0) + (vector-normalize! s3-0 1.0) + (vector-normalize! s4-0 1.0) + (vector-cross! s4-0 s4-0 s3-0) + (set! (-> self anim-blend) (asin (-> s4-0 y))) + ) + (set! (-> self anim-blend) (* 0.0010986328 (-> self anim-blend))) + (set! (-> self anim-blend) (fmax -1.0 (fmin 1.0 (-> self anim-blend)))) + (set! (-> self anim-blend) (sin (* 16384.0 (-> self anim-blend)))) + (forward-down->inv-matrix gp-0 (-> self tangent) (new 'static 'vector :y -1.0)) + (matrix-rotate-z! s5-0 (* -10922.667 (-> self anim-blend))) + (matrix*! gp-0 s5-0 gp-0) ) - (eval-path-curve! - (-> self path) - s4-0 - (+ (/ 4096.0 (path-distance (-> self path))) (-> self curve-position)) - 'interp - ) - (vector-! s3-0 s3-0 (-> self root trans)) - (vector-! s4-0 s4-0 (-> self root trans)) - (set! (-> s3-0 y) 0.0) - (set! (-> s4-0 y) 0.0) - (vector-normalize! s3-0 1.0) - (vector-normalize! s4-0 1.0) - (vector-cross! s4-0 s4-0 s3-0) - (set! (-> self anim-blend) (asin (-> s4-0 y))) - ) - (set! (-> self anim-blend) (* 0.0010986328 (-> self anim-blend))) - (set! (-> self anim-blend) (fmax -1.0 (fmin 1.0 (-> self anim-blend)))) - (set! (-> self anim-blend) (sin (* 16384.0 (-> self anim-blend)))) - (forward-down->inv-matrix - gp-0 - (-> self tangent) - (new 'static 'vector :y -1.0) - ) - (matrix-rotate-z! s5-0 (* -10922.667 (-> self anim-blend))) - (matrix*! gp-0 s5-0 gp-0) + (matrix->quaternion (-> self root quat) gp-0) ) - (matrix->quaternion (-> self root quat) gp-0) - ) ) (defbehavior flying-lurker-calc-anim-speed flying-lurker () @@ -937,499 +644,407 @@ (f0-3 (+ -15.0 f0-2)) (f1-3 (* 0.13333334 f0-3)) ) - (fmin 1.5 (fmax 0.9 f1-3)) - ) + (fmin 1.5 (fmax 0.9 f1-3)) + ) ) (defstate flying-lurker-fly (flying-lurker) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'clone-and-kill-links) - (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) 'sleep) - (let ((t9-0 send-event-function) - (v1-3 (-> self link next)) - ) - (t9-0 (if v1-3 - (-> v1-3 extra process) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'clone-and-kill-links) + (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) 'sleep) + (let ((t9-0 send-event-function) + (v1-3 (-> self link next)) + ) + (t9-0 + (if v1-3 + (-> v1-3 extra process) + ) + a1-1 ) - a1-1 + ) + ) + (go flying-lurker-clone (the-as handle (-> arg3 param 0)) "") + ) + ((= v1-0 'die) + (let ((v1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-7 from) arg0) + (set! (-> v1-7 num-params) arg1) + (set! (-> v1-7 message) arg2) + (set! (-> v1-7 param 0) (-> arg3 param 0)) + (set! (-> v1-7 param 1) (-> arg3 param 1)) + (set! (-> v1-7 param 2) (-> arg3 param 2)) + (set! (-> v1-7 param 3) (-> arg3 param 3)) + (set! (-> v1-7 param 4) (-> arg3 param 4)) + (set! (-> v1-7 param 5) (-> arg3 param 5)) + (set! (-> v1-7 param 6) (-> arg3 param 6)) + (let ((t9-2 send-event-function) + (a1-3 (-> self link next)) + ) + (t9-2 + (if a1-3 + (-> a1-3 extra process) + ) + v1-7 + ) + ) + ) + (dummy-18 self) + (deactivate self) + ) + ((= v1-0 'sleep) + (let ((v1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-12 from) arg0) + (set! (-> v1-12 num-params) arg1) + (set! (-> v1-12 message) arg2) + (set! (-> v1-12 param 0) (-> arg3 param 0)) + (set! (-> v1-12 param 1) (-> arg3 param 1)) + (set! (-> v1-12 param 2) (-> arg3 param 2)) + (set! (-> v1-12 param 3) (-> arg3 param 3)) + (set! (-> v1-12 param 4) (-> arg3 param 4)) + (set! (-> v1-12 param 5) (-> arg3 param 5)) + (set! (-> v1-12 param 6) (-> arg3 param 6)) + (let ((t9-5 send-event-function) + (a1-5 (-> self link next)) + ) + (t9-5 + (if a1-5 + (-> a1-5 extra process) + ) + v1-12 + ) + ) + ) + (go flying-lurker-sleep) + ) + ((= v1-0 'reset) + (let ((v1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-15 from) arg0) + (set! (-> v1-15 num-params) arg1) + (set! (-> v1-15 message) arg2) + (set! (-> v1-15 param 0) (-> arg3 param 0)) + (set! (-> v1-15 param 1) (-> arg3 param 1)) + (set! (-> v1-15 param 2) (-> arg3 param 2)) + (set! (-> v1-15 param 3) (-> arg3 param 3)) + (set! (-> v1-15 param 4) (-> arg3 param 4)) + (set! (-> v1-15 param 5) (-> arg3 param 5)) + (set! (-> v1-15 param 6) (-> arg3 param 6)) + (let ((t9-7 send-event-function) + (a1-7 (-> self link next)) + ) + (t9-7 + (if a1-7 + (-> a1-7 extra process) + ) + v1-15 + ) + ) + ) + (deactivate self) ) ) - ) - (go - flying-lurker-clone - (the-as handle (-> arg3 param 0)) - "" - ) - ) - ((= v1-0 'die) - (let ((v1-7 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-7 from) arg0) - (set! (-> v1-7 num-params) arg1) - (set! (-> v1-7 message) arg2) - (set! (-> v1-7 param 0) (-> arg3 param 0)) - (set! (-> v1-7 param 1) (-> arg3 param 1)) - (set! (-> v1-7 param 2) (-> arg3 param 2)) - (set! (-> v1-7 param 3) (-> arg3 param 3)) - (set! (-> v1-7 param 4) (-> arg3 param 4)) - (set! (-> v1-7 param 5) (-> arg3 param 5)) - (set! (-> v1-7 param 6) (-> arg3 param 6)) - (let ((t9-2 send-event-function) - (a1-3 (-> self link next)) - ) - (t9-2 (if a1-3 - (-> a1-3 extra process) - ) - v1-7 - ) - ) - ) - (dummy-18 self) - (deactivate self) - ) - ((= v1-0 'sleep) - (let ((v1-12 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-12 from) arg0) - (set! (-> v1-12 num-params) arg1) - (set! (-> v1-12 message) arg2) - (set! (-> v1-12 param 0) (-> arg3 param 0)) - (set! (-> v1-12 param 1) (-> arg3 param 1)) - (set! (-> v1-12 param 2) (-> arg3 param 2)) - (set! (-> v1-12 param 3) (-> arg3 param 3)) - (set! (-> v1-12 param 4) (-> arg3 param 4)) - (set! (-> v1-12 param 5) (-> arg3 param 5)) - (set! (-> v1-12 param 6) (-> arg3 param 6)) - (let ((t9-5 send-event-function) - (a1-5 (-> self link next)) - ) - (t9-5 (if a1-5 - (-> a1-5 extra process) - ) - v1-12 - ) - ) - ) - (go flying-lurker-sleep) - ) - ((= v1-0 'reset) - (let ((v1-15 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-15 from) arg0) - (set! (-> v1-15 num-params) arg1) - (set! (-> v1-15 message) arg2) - (set! (-> v1-15 param 0) (-> arg3 param 0)) - (set! (-> v1-15 param 1) (-> arg3 param 1)) - (set! (-> v1-15 param 2) (-> arg3 param 2)) - (set! (-> v1-15 param 3) (-> arg3 param 3)) - (set! (-> v1-15 param 4) (-> arg3 param 4)) - (set! (-> v1-15 param 5) (-> arg3 param 5)) - (set! (-> v1-15 param 6) (-> arg3 param 6)) - (let ((t9-7 send-event-function) - (a1-7 (-> self link next)) - ) - (t9-7 (if a1-7 - (-> a1-7 extra process) - ) - v1-15 - ) - ) - ) - (deactivate self) - ) - ) - ) + ) + ) ) - ) :enter (behavior () - (process-entity-status! self (entity-perm-status bit-3) #t) - (set! (-> self draw status) (logand -3 (-> self draw status))) - (none) - ) + (process-entity-status! self (entity-perm-status bit-3) #t) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) :trans (behavior () - (dummy-20 self) - (when (not (movie?)) - (flying-lurker-calc-speed - (meters 15.0) - (meters 30.0) - (meters 0.11666667) - (meters 0.083333336) - ) - (flying-lurker-move) - (flying-lurker-rotate) - (when - (and - (-> self alt-actor) - (or - (< - (vector-vector-distance-squared - (-> self root trans) - (-> self alt-actor extra trans) - ) - 6710886400.0 - ) - (and - *target* - (< - 4194304000000.0 - (vector-vector-distance-squared (-> self root trans) (target-pos 0)) - ) - ) - ) - ) - (dummy-30 (-> self alt-actor) (entity-perm-status dead) #f) - (entity-birth-no-kill (-> self alt-actor)) - (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) 'plunge) - (let ((t9-10 send-event-function) - (v1-13 (-> self alt-actor)) + (dummy-20 self) + (when (not (movie?)) + (flying-lurker-calc-speed (meters 15.0) (meters 30.0) (meters 0.11666667) (meters 0.083333336)) + (flying-lurker-move) + (flying-lurker-rotate) + (when (and + (-> self alt-actor) + (or + (< (vector-vector-distance-squared (-> self root trans) (-> self alt-actor extra trans)) 6710886400.0) + (and *target* (< 4194304000000.0 (vector-vector-distance-squared (-> self root trans) (target-pos 0)))) + ) + ) + (dummy-30 (-> self alt-actor) (entity-perm-status dead) #f) + (entity-birth-no-kill (-> self alt-actor)) + (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) 'plunge) + (let ((t9-10 send-event-function) + (v1-13 (-> self alt-actor)) + ) + (t9-10 + (if v1-13 + (-> v1-13 extra process) + ) + a1-4 + ) ) - (t9-10 (if v1-13 - (-> v1-13 extra process) - ) - a1-4 + ) ) - ) ) - ) + (none) ) - (none) - ) :code (behavior () - (while #t - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 5) - ) - ) - (ja-channel-push! 1 60) - (let ((v1-8 (-> self skel root-channel 0))) - (set! - (-> v1-8 frame-group) - (the-as art-joint-anim (-> self draw art-group data 5)) - ) - ) - ) - (let ((gp-0 (-> self skel root-channel 0))) - (set! (-> gp-0 param 0) (flying-lurker-calc-anim-speed)) - (joint-control-channel-group-eval! - gp-0 - (the-as art-joint-anim #f) - num-func-loop! - ) - ) - (suspend) - (when - (>= - (- (-> *display* base-frame-counter) (-> self last-look-time)) - (-> self time-to-next-look) - ) - (ja-channel-push! 1 60) - (let ((a0-12 (-> self skel root-channel 0))) - (set! - (-> a0-12 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) - ) - (set! - (-> a0-12 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 6)) - data - 0 - length + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-8 (-> self skel root-channel 0))) + (set! (-> v1-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) ) - -1 - ) ) - ) - (set! (-> a0-12 param 1) 1.0) - (set! (-> a0-12 frame-num) 0.0) - (joint-control-channel-group! - a0-12 - (the-as art-joint-anim (-> self draw art-group data 6)) - num-func-seek! - ) - ) - (until (ja-done? 0) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 param 0) (flying-lurker-calc-anim-speed)) + (joint-control-channel-group-eval! gp-0 (the-as art-joint-anim #f) num-func-loop!) + ) (suspend) - (let ((a0-13 (-> self skel root-channel 0))) - (set! - (-> a0-13 param 0) - (the float (+ (-> a0-13 frame-group data 0 length) -1)) - ) - (set! (-> a0-13 param 1) 1.0) - (joint-control-channel-group-eval! - a0-13 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (set! (-> self last-look-time) (-> *display* base-frame-counter)) - (let* ((f30-0 300.0) - (f28-0 3.0) - (f26-0 5.0) - (v1-41 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-42 (the-as float (logior #x3f800000 v1-41))) + (when (>= (- (-> *display* base-frame-counter) (-> self last-look-time)) (-> self time-to-next-look)) + (ja-channel-push! 1 60) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-12 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-12 param 1) 1.0) + (set! (-> a0-12 frame-num) 0.0) + (joint-control-channel-group! a0-12 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1))) + (set! (-> a0-13 param 1) 1.0) + (joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-seek!) ) - (set! - (-> self time-to-next-look) - (the int (* f30-0 (+ f28-0 (* f26-0 (+ -1.0 v1-42))))) - ) + ) + (set! (-> self last-look-time) (-> *display* base-frame-counter)) + (let* ((f30-0 300.0) + (f28-0 3.0) + (f26-0 5.0) + (v1-41 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-42 (the-as float (logior #x3f800000 v1-41))) + ) + (set! (-> self time-to-next-look) (the int (* f30-0 (+ f28-0 (* f26-0 (+ -1.0 v1-42)))))) + ) + ) ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior flying-lurker) ja-post) ) -(defbehavior - flying-lurker-handler flying-lurker - ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('fly-away) +(defbehavior flying-lurker-handler flying-lurker ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('fly-away) (when (-> self link next) - (entity-birth-no-kill (-> self link next)) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 2) - (set! (-> a1-1 message) 'fly-away) - (set! - (-> a1-1 param 0) - (the-as uint (/ (the-as int (-> arg3 param 0)) 16)) - ) - (set! (-> a1-1 param 1) (-> arg3 param 1)) - (let ((t9-1 send-event-function) - (v1-11 (-> self link next)) - ) - (t9-1 (if v1-11 - (-> v1-11 extra process) + (entity-birth-no-kill (-> self link next)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'fly-away) + (set! (-> a1-1 param 0) (the-as uint (/ (the-as int (-> arg3 param 0)) 16))) + (set! (-> a1-1 param 1) (-> arg3 param 1)) + (let ((t9-1 send-event-function) + (v1-11 (-> self link next)) ) - a1-1 + (t9-1 + (if v1-11 + (-> v1-11 extra process) + ) + a1-1 + ) + ) ) - ) ) - ) (let* ((v1-14 (-> arg3 param 0)) (a0-4 (-> arg3 param 1)) (v1-15 (logand v1-14 3)) ) - (set! (-> self rank) (the-as int v1-15)) - (cond - ((< 15 (the-as int a0-4)) - (cond + (set! (-> self rank) (the-as int v1-15)) + (cond + ((< 15 (the-as int a0-4)) + (cond + ((zero? v1-15) + (set! (-> self race-seconds) 33000.0) + ) + ((= v1-15 1) + (set! (-> self race-seconds) 34500.0) + ) + (else + (set! (-> self race-seconds) 36000.0) + ) + ) + ) + ((< 10 (the-as int a0-4)) + (cond + ((zero? v1-15) + (set! (-> self race-seconds) 31800.0) + ) + ((= v1-15 1) + (set! (-> self race-seconds) 33300.0) + ) + (else + (set! (-> self race-seconds) 34800.0) + ) + ) + ) + ((< 5 (the-as int a0-4)) + (cond + ((zero? v1-15) + (set! (-> self race-seconds) 30600.0) + ) + ((= v1-15 1) + (set! (-> self race-seconds) 32100.0) + ) + (else + (set! (-> self race-seconds) 33600.0) + ) + ) + ) ((zero? v1-15) - (set! (-> self race-seconds) 33000.0) + (set! (-> self race-seconds) 30000.0) ) ((= v1-15 1) - (set! (-> self race-seconds) 34500.0) + (set! (-> self race-seconds) 31500.0) ) (else - (set! (-> self race-seconds) 36000.0) - ) + (set! (-> self race-seconds) 33000.0) + ) ) - ) - ((< 10 (the-as int a0-4)) - (cond - ((zero? v1-15) - (set! (-> self race-seconds) 31800.0) - ) - ((= v1-15 1) - (set! (-> self race-seconds) 33300.0) - ) - (else - (set! (-> self race-seconds) 34800.0) - ) - ) - ) - ((< 5 (the-as int a0-4)) - (cond - ((zero? v1-15) - (set! (-> self race-seconds) 30600.0) - ) - ((= v1-15 1) - (set! (-> self race-seconds) 32100.0) - ) - (else - (set! (-> self race-seconds) 33600.0) - ) - ) - ) - ((zero? v1-15) - (set! (-> self race-seconds) 30000.0) - ) - ((= v1-15 1) - (set! (-> self race-seconds) 31500.0) - ) - (else - (set! (-> self race-seconds) 33000.0) - ) ) - ) (logclear! (-> self mask) (process-mask actor-pause)) (set! (-> self race-start-time) (-> *display* game-frame-counter)) (go flying-lurker-fly) ) - ) + ) ) (defbehavior flying-lurker-play-intro flying-lurker () (logclear! (-> self mask) (process-mask actor-pause)) (close-specific-task! (game-task plunger-lurker-hit) (task-status unknown)) - (while - (and - *target* - (logtest? (-> *target* control unknown-surface00 flags) 2048) - (zero? (logand (-> *target* control status) 1)) + (while (and + *target* + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + (suspend) ) - (suspend) - ) (while (not (process-grab? *target*)) - (suspend) - ) - (kill-current-level-hint '(notice) '() 'exit) - (while - (or - (-> *setting-control* current talking) - (-> *setting-control* current spooling) - (-> *setting-control* current hint) - (!= (-> *level* loading-level) (-> *level* level-default)) + (suspend) + ) + (kill-current-level-hint '(notice) '() 'exit) + (while (or + (-> *setting-control* current talking) + (-> *setting-control* current spooling) + (-> *setting-control* current hint) + (!= (-> *level* loading-level) (-> *level* level-default)) + ) + (suspend) ) - (suspend) - ) (suspend) (kill-current-level-hint '() '() 'die) (suspend) (let* ((gp-0 (get-process *default-dead-pool* manipy #x4000)) - (gp-1 (ppointer->handle (when gp-0 - (let ((t9-5 (method-of-type manipy activate))) - (t9-5 - (the-as manipy gp-0) - self - 'manipy - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - gp-0 - manipy-init - (-> self entity extra trans) - (-> self entity) - *ogrecam-sg* - #f - ) - (-> gp-0 ppointer) - ) - ) - ) - ) - (let - ((s5-0 (the-as othercam (get-process *default-dead-pool* othercam #x4000)))) - (ppointer->handle (when s5-0 - (let ((t9-8 (method-of-type othercam activate))) - (t9-8 - s5-0 - (-> gp-1 process 0) - 'othercam - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-0 - othercam-init-by-other - (-> gp-1 process 0) - 4 - #f - #t - ) - (-> s5-0 ppointer) - ) - ) - ) - (send-event - (handle->process gp-1) - 'eval - (lambda :behavior manipy () (let ((v0-0 (logior (-> self draw status) 32))) - (set! (-> self draw status) v0-0) - v0-0 - ) - ) - ) - (send-event (-> gp-1 process 0) 'clone-copy-trans #f) - (send-event (-> gp-1 process 0) 'anim-mode 'clone-anim) - (let ((a1-12 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-12 from) self) - (set! (-> a1-12 num-params) 2) - (set! (-> a1-12 message) 'clone) - (set! (-> a1-12 param 0) (the-as uint (process->handle self))) - (set! (-> a1-12 param 1) (the-as uint 2)) - (let ((t9-13 send-event-function) - (v1-58 (-> self link next)) - ) - (t9-13 (if v1-58 - (-> v1-58 extra process) + (gp-1 + (ppointer->handle + (when gp-0 + (let ((t9-5 (method-of-type manipy activate))) + (t9-5 (the-as manipy gp-0) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 manipy-init (-> self entity extra trans) (-> self entity) *ogrecam-sg* #f) + (-> gp-0 ppointer) + ) ) - a1-12 + ) + ) + (let ((s5-0 (the-as othercam (get-process *default-dead-pool* othercam #x4000)))) + (ppointer->handle (when s5-0 + (let ((t9-8 (method-of-type othercam activate))) + (t9-8 s5-0 (-> gp-1 process 0) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 othercam-init-by-other (-> gp-1 process 0) 4 #f #t) + (-> s5-0 ppointer) + ) + ) ) - ) + (send-event + (handle->process gp-1) + 'eval + (lambda :behavior manipy () (let ((v0-0 (logior (-> self draw status) 32))) + (set! (-> self draw status) v0-0) + v0-0 + ) + ) + ) + (send-event (-> gp-1 process 0) 'clone-copy-trans #f) + (send-event (-> gp-1 process 0) 'anim-mode 'clone-anim) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 2) + (set! (-> a1-12 message) 'clone) + (set! (-> a1-12 param 0) (the-as uint (process->handle self))) + (set! (-> a1-12 param 1) (the-as uint 2)) + (let ((t9-13 send-event-function) + (v1-58 (-> self link next)) + ) + (t9-13 + (if v1-58 + (-> v1-58 extra process) + ) + a1-12 + ) + ) + ) + (ja-play-spooled-anim + (new 'static 'spool-anim :name "flying-lurker-intro" :index 7 :parts 2 :command-list '()) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (if (handle->process gp-1) + (deactivate (-> gp-1 process 0)) + ) ) - (ja-play-spooled-anim - (new 'static 'spool-anim - :name "flying-lurker-intro" - :index 7 - :parts 2 - :command-list '() - ) - (the-as art-joint-anim #f) - (the-as art-joint-anim #f) - (the-as (function process-drawable symbol) false-func) - ) - (if (handle->process gp-1) - (deactivate (-> gp-1 process 0)) - ) - ) (process-release? *target*) (let ((gp-2 (get-process *default-dead-pool* process #x4000))) - (when gp-2 - (let ((t9-18 (method-of-type process activate))) - (t9-18 gp-2 self 'process (the-as pointer #x70004000)) - ) - (run-next-time-in-process - gp-2 - (lambda :behavior process - () - (let ((gp-0 (-> *display* base-frame-counter))) - (until (>= (- (-> *display* base-frame-counter) gp-0) 30) - (suspend) + (when gp-2 + (let ((t9-18 (method-of-type process activate))) + (t9-18 gp-2 self 'process (the-as pointer #x70004000)) ) - ) - (level-hint-spawn - (game-text-id assistant-voicebox-intro-ogre-race) - "asstvb24" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - (none) + (run-next-time-in-process gp-2 (lambda :behavior process + () + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 30) + (suspend) + ) + ) + (level-hint-spawn + (game-text-id assistant-voicebox-intro-ogre-race) + "asstvb24" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (none) + ) + ) + (-> gp-2 ppointer) ) - ) - (-> gp-2 ppointer) ) - ) (none) ) @@ -1437,51 +1052,45 @@ :event flying-lurker-handler :exit - (behavior () - (clear-pending-settings-from-process *setting-control* self 'allow-progress) - (none) - ) + (behavior () (clear-pending-settings-from-process *setting-control* self 'allow-progress) (none)) :code (behavior () - (when (play-movie?) - (set-setting! *setting-control* self 'allow-progress #f 0.0 0) - (flying-lurker-play-intro) - ) - (flying-lurker-inc-try-count) - (ja-channel-set! 1) - (let ((v1-6 (-> self skel root-channel 0))) - (set! - (-> v1-6 frame-group) - (the-as art-joint-anim (-> self draw art-group data 5)) - ) - ) - (let* ((v1-8 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-9 (the-as float (logior #x3f800000 v1-8))) - (f0-2 (+ -1.0 v1-9)) + (when (play-movie?) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (flying-lurker-play-intro) + ) + (flying-lurker-inc-try-count) + (ja-channel-set! 1) + (let ((v1-6 (-> self skel root-channel 0))) + (set! (-> v1-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + ) + (let* ((v1-8 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-9 (the-as float (logior #x3f800000 v1-8))) + (f0-2 (+ -1.0 v1-9)) + ) + (cond + ((< 0.8333333 f0-2) + (send-event self 'fly-away 18 (-> self try-count)) + ) + ((< 0.6666667 f0-2) + (send-event self 'fly-away 33 (-> self try-count)) + ) + ((< 0.5 f0-2) + (send-event self 'fly-away 258 (-> self try-count)) + ) + ((< 0.33333334 f0-2) + (send-event self 'fly-away 288 (-> self try-count)) + ) + ((< 0.16666667 f0-2) + (send-event self 'fly-away 513 (-> self try-count)) + ) + (else + (send-event self 'fly-away 528 (-> self try-count)) ) - (cond - ((< 0.8333333 f0-2) - (send-event self 'fly-away 18 (-> self try-count)) + ) ) - ((< 0.6666667 f0-2) - (send-event self 'fly-away 33 (-> self try-count)) - ) - ((< 0.5 f0-2) - (send-event self 'fly-away 258 (-> self try-count)) - ) - ((< 0.33333334 f0-2) - (send-event self 'fly-away 288 (-> self try-count)) - ) - ((< 0.16666667 f0-2) - (send-event self 'fly-away 513 (-> self try-count)) - ) - (else - (send-event self 'fly-away 528 (-> self try-count)) - ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior flying-lurker) ja-post) ) @@ -1489,344 +1098,268 @@ (defstate flying-lurker-clone (flying-lurker) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'die) - (let ((v1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-1 from) arg0) - (set! (-> v1-1 num-params) arg1) - (set! (-> v1-1 message) arg2) - (set! (-> v1-1 param 0) (-> arg3 param 0)) - (set! (-> v1-1 param 1) (-> arg3 param 1)) - (set! (-> v1-1 param 2) (-> arg3 param 2)) - (set! (-> v1-1 param 3) (-> arg3 param 3)) - (set! (-> v1-1 param 4) (-> arg3 param 4)) - (set! (-> v1-1 param 5) (-> arg3 param 5)) - (set! (-> v1-1 param 6) (-> arg3 param 6)) - (let ((t9-0 send-event-function) - (a1-1 (-> self link next)) - ) - (t9-0 (if a1-1 - (-> a1-1 extra process) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'die) + (let ((v1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-1 from) arg0) + (set! (-> v1-1 num-params) arg1) + (set! (-> v1-1 message) arg2) + (set! (-> v1-1 param 0) (-> arg3 param 0)) + (set! (-> v1-1 param 1) (-> arg3 param 1)) + (set! (-> v1-1 param 2) (-> arg3 param 2)) + (set! (-> v1-1 param 3) (-> arg3 param 3)) + (set! (-> v1-1 param 4) (-> arg3 param 4)) + (set! (-> v1-1 param 5) (-> arg3 param 5)) + (set! (-> v1-1 param 6) (-> arg3 param 6)) + (let ((t9-0 send-event-function) + (a1-1 (-> self link next)) + ) + (t9-0 + (if a1-1 + (-> a1-1 extra process) + ) + v1-1 ) - v1-1 - ) - ) - ) - (dummy-18 self) - (deactivate self) - ) - ((= v1-0 'sleep) - (let ((v1-6 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-6 from) arg0) - (set! (-> v1-6 num-params) arg1) - (set! (-> v1-6 message) arg2) - (set! (-> v1-6 param 0) (-> arg3 param 0)) - (set! (-> v1-6 param 1) (-> arg3 param 1)) - (set! (-> v1-6 param 2) (-> arg3 param 2)) - (set! (-> v1-6 param 3) (-> arg3 param 3)) - (set! (-> v1-6 param 4) (-> arg3 param 4)) - (set! (-> v1-6 param 5) (-> arg3 param 5)) - (set! (-> v1-6 param 6) (-> arg3 param 6)) - (let ((t9-3 send-event-function) - (a1-3 (-> self link next)) ) - (t9-3 (if a1-3 - (-> a1-3 extra process) - ) - v1-6 + ) + (dummy-18 self) + (deactivate self) ) - ) - ) - (go flying-lurker-sleep) - ) - ((= v1-0 'reset) - (let ((v1-9 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-9 from) arg0) - (set! (-> v1-9 num-params) arg1) - (set! (-> v1-9 message) arg2) - (set! (-> v1-9 param 0) (-> arg3 param 0)) - (set! (-> v1-9 param 1) (-> arg3 param 1)) - (set! (-> v1-9 param 2) (-> arg3 param 2)) - (set! (-> v1-9 param 3) (-> arg3 param 3)) - (set! (-> v1-9 param 4) (-> arg3 param 4)) - (set! (-> v1-9 param 5) (-> arg3 param 5)) - (set! (-> v1-9 param 6) (-> arg3 param 6)) - (let ((t9-5 send-event-function) - (a1-5 (-> self link next)) + ((= v1-0 'sleep) + (let ((v1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-6 from) arg0) + (set! (-> v1-6 num-params) arg1) + (set! (-> v1-6 message) arg2) + (set! (-> v1-6 param 0) (-> arg3 param 0)) + (set! (-> v1-6 param 1) (-> arg3 param 1)) + (set! (-> v1-6 param 2) (-> arg3 param 2)) + (set! (-> v1-6 param 3) (-> arg3 param 3)) + (set! (-> v1-6 param 4) (-> arg3 param 4)) + (set! (-> v1-6 param 5) (-> arg3 param 5)) + (set! (-> v1-6 param 6) (-> arg3 param 6)) + (let ((t9-3 send-event-function) + (a1-3 (-> self link next)) + ) + (t9-3 + (if a1-3 + (-> a1-3 extra process) + ) + v1-6 + ) ) - (t9-5 (if a1-5 - (-> a1-5 extra process) - ) - v1-9 + ) + (go flying-lurker-sleep) ) + ((= v1-0 'reset) + (let ((v1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-9 from) arg0) + (set! (-> v1-9 num-params) arg1) + (set! (-> v1-9 message) arg2) + (set! (-> v1-9 param 0) (-> arg3 param 0)) + (set! (-> v1-9 param 1) (-> arg3 param 1)) + (set! (-> v1-9 param 2) (-> arg3 param 2)) + (set! (-> v1-9 param 3) (-> arg3 param 3)) + (set! (-> v1-9 param 4) (-> arg3 param 4)) + (set! (-> v1-9 param 5) (-> arg3 param 5)) + (set! (-> v1-9 param 6) (-> arg3 param 6)) + (let ((t9-5 send-event-function) + (a1-5 (-> self link next)) + ) + (t9-5 + (if a1-5 + (-> a1-5 extra process) + ) + v1-9 + ) + ) + ) + (deactivate self) + ) + (else + (flying-lurker-handler arg0 arg1 arg2 arg3) + ) ) - ) - (deactivate self) - ) - (else - (flying-lurker-handler arg0 arg1 arg2 arg3) - ) - ) - ) + ) + ) ) - ) :exit - (behavior () - (ja-channel-set! 0) - (none) - ) + (behavior () (ja-channel-set! 0) (none)) :code - (behavior ((arg0 handle) (arg1 string)) - (clone-anim arg0 3 #t arg1) - (none) - ) + (behavior ((arg0 handle) (arg1 string)) (clone-anim arg0 3 #t arg1) (none)) ) (defstate flying-lurker-idle (flying-lurker) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('saw-player) - (set! (-> self take-off) #t) - (when (-> self link prev) - (entity-birth-no-kill (-> self link prev)) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) arg0) - (set! (-> a1-1 num-params) arg1) - (set! (-> a1-1 message) arg2) - (set! (-> a1-1 param 0) (-> arg3 param 0)) - (set! (-> a1-1 param 1) (-> arg3 param 1)) - (set! (-> a1-1 param 2) (-> arg3 param 2)) - (set! (-> a1-1 param 3) (-> arg3 param 3)) - (set! (-> a1-1 param 4) (-> arg3 param 4)) - (set! (-> a1-1 param 5) (-> arg3 param 5)) - (set! (-> a1-1 param 6) (-> arg3 param 6)) - (let ((t9-1 send-event-function) - (v1-13 (-> self link prev)) - ) - (t9-1 (if v1-13 - (-> v1-13 extra process) - ) - a1-1 + (case arg2 + (('saw-player) + (set! (-> self take-off) #t) + (when (-> self link prev) + (entity-birth-no-kill (-> self link prev)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) arg0) + (set! (-> a1-1 num-params) arg1) + (set! (-> a1-1 message) arg2) + (set! (-> a1-1 param 0) (-> arg3 param 0)) + (set! (-> a1-1 param 1) (-> arg3 param 1)) + (set! (-> a1-1 param 2) (-> arg3 param 2)) + (set! (-> a1-1 param 3) (-> arg3 param 3)) + (set! (-> a1-1 param 4) (-> arg3 param 4)) + (set! (-> a1-1 param 5) (-> arg3 param 5)) + (set! (-> a1-1 param 6) (-> arg3 param 6)) + (let ((t9-1 send-event-function) + (v1-13 (-> self link prev)) + ) + (t9-1 + (if v1-13 + (-> v1-13 extra process) + ) + a1-1 + ) + ) + ) + ) + ) + (('clone) + (when (-> self link next) + (entity-birth-no-kill (-> self link next)) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'clone) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! (-> a1-2 param 1) (+ (-> arg3 param 1) -1)) + (let ((t9-3 send-event-function) + (v1-25 (-> self link next)) + ) + (t9-3 + (if v1-25 + (-> v1-25 extra process) + ) + a1-2 + ) + ) + ) + ) + (case (-> arg3 param 1) + ((2) + (go flying-lurker-clone (the-as handle (-> arg3 param 0)) "flying-lurker-b-") + ) + ((1) + (go flying-lurker-clone (the-as handle (-> arg3 param 0)) "flying-lurker-c-") ) ) - ) ) - ) - (('clone) - (when (-> self link next) - (entity-birth-no-kill (-> self link next)) - (let ((a1-2 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 2) - (set! (-> a1-2 message) 'clone) - (set! (-> a1-2 param 0) (-> arg3 param 0)) - (set! (-> a1-2 param 1) (+ (-> arg3 param 1) -1)) - (let ((t9-3 send-event-function) - (v1-25 (-> self link next)) - ) - (t9-3 (if v1-25 - (-> v1-25 extra process) - ) - a1-2 - ) + (else + (flying-lurker-handler arg0 arg1 arg2 arg3) ) - ) ) - (case (-> arg3 param 1) - ((2) - (go - flying-lurker-clone - (the-as handle (-> arg3 param 0)) - "flying-lurker-b-" - ) - ) - ((1) - (go - flying-lurker-clone - (the-as handle (-> arg3 param 0)) - "flying-lurker-c-" - ) - ) - ) - ) - (else - (flying-lurker-handler arg0 arg1 arg2 arg3) - ) ) - ) :exit - (behavior () - (set! (-> self draw status) (logand -3 (-> self draw status))) - (none) - ) + (behavior () (set! (-> self draw status) (logand -3 (-> self draw status))) (none)) :trans (behavior () - (spool-push *art-control* "flying-lurker-intro" 0 self -99.0) - (if (and (-> self take-off) (first?)) - (go flying-lurker-start) + (spool-push *art-control* "flying-lurker-intro" 0 self -99.0) + (if (and (-> self take-off) (first?)) + (go flying-lurker-start) + ) + (none) ) - (none) - ) :code (behavior () - (local-vars (gp-0 int) (f30-0 float)) - 1.0 - 0 - (cond - ((not (-> self link next)) - (set! f30-0 0.9) - (set! gp-0 0) - ) - ((not (-> self link prev)) - (set! f30-0 1.0) - (set! gp-0 5) - ) - (else - (set! f30-0 1.2) - (set! gp-0 11) - ) - ) - (while #t + (local-vars (gp-0 int) (f30-0 float)) + 1.0 + 0 (cond - ((play-movie?) - (ja-channel-set! 0) - (if - (= - (get-task-status (game-task plunger-lurker-hit)) - (task-status invalid) - ) - (go flying-lurker-die) + ((not (-> self link next)) + (set! f30-0 0.9) + (set! gp-0 0) ) - (when - (and - *target* - (>= - 172032.0 - (vector-vector-xz-distance - (-> self root trans) - (-> *target* control trans) - ) - ) + ((not (-> self link prev)) + (set! f30-0 1.0) + (set! gp-0 5) + ) + (else + (set! f30-0 1.2) + (set! gp-0 11) ) - (process-grab? *target*) - (let ((s5-0 (-> *display* base-frame-counter))) - (until (>= (- (-> *display* base-frame-counter) s5-0) 300) + ) + (while #t + (cond + ((play-movie?) + (ja-channel-set! 0) + (if (= (get-task-status (game-task plunger-lurker-hit)) (task-status invalid)) + (go flying-lurker-die) + ) + (when (and *target* (>= 172032.0 (vector-vector-xz-distance (-> self root trans) (-> *target* control trans)))) + (process-grab? *target*) + (let ((s5-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s5-0) 300) + (suspend) + ) + ) + (process-release? *target*) + (send-event self 'saw-player) + ) (suspend) + 0 ) - ) - (process-release? *target*) - (send-event self 'saw-player) - ) - (suspend) - 0 - ) - (else - (let ((v1-27 (-> self skel root-channel 0))) - (set! - (-> v1-27 frame-group) - (the-as art-joint-anim (-> self draw art-group data 5)) - ) - ) - (let ((a0-9 (-> self skel root-channel 0))) - (set! - (-> a0-9 frame-group) - (the-as art-joint-anim (-> self draw art-group data 5)) - ) - (set! - (-> a0-9 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 5)) - data - 0 - length - ) - -1 + (else + (let ((v1-27 (-> self skel root-channel 0))) + (set! (-> v1-27 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) f30-0) + (set! (-> a0-9 frame-num) (the float gp-0)) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (if (and *target* (>= 172032.0 (vector-vector-xz-distance (-> self root trans) (-> *target* control trans)))) + (send-event self 'saw-player) + ) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) f30-0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! gp-0 0) ) - ) ) - (set! (-> a0-9 param 1) f30-0) - (set! (-> a0-9 frame-num) (the float gp-0)) - (joint-control-channel-group! - a0-9 - (the-as art-joint-anim (-> self draw art-group data 5)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (if - (and - *target* - (>= - 172032.0 - (vector-vector-xz-distance - (-> self root trans) - (-> *target* control trans) - ) - ) - ) - (send-event self 'saw-player) - ) - (suspend) - (let ((a0-12 (-> self skel root-channel 0))) - (set! - (-> a0-12 param 0) - (the float (+ (-> a0-12 frame-group data 0 length) -1)) - ) - (set! (-> a0-12 param 1) f30-0) - (joint-control-channel-group-eval! - a0-12 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (set! gp-0 0) ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior flying-lurker) ja-post) ) -(defmethod - init-from-entity! - flying-lurker - ((obj flying-lurker) (arg0 entity-actor)) +(defmethod init-from-entity! flying-lurker ((obj flying-lurker) (arg0 entity-actor)) (stack-size-set! (-> obj main-thread) 512) (set! (-> obj root) (new 'process 'trsqv)) (process-drawable-from-entity! obj arg0) (initialize-skeleton obj *flying-lurker-sg* '()) (set! (-> obj link) (new 'process 'actor-link-info obj)) (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0)) - (logior! - (-> obj path flags) - (path-control-flag display draw-line draw-point draw-text) - ) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) (set! (-> obj root pause-adjust-distance) 122880.0) (set! (-> obj curve-position) 0.0) (cond - ((play-movie?) - (eval-path-curve! - (-> obj path) - (-> obj root trans) - (-> obj curve-position) - 'interp + ((play-movie?) + (eval-path-curve! (-> obj path) (-> obj root trans) (-> obj curve-position) 'interp) + (TODO-RENAME-14 (-> obj path) (-> obj tangent) (-> obj curve-position)) + (quaternion-identity! (-> obj root quat)) ) - (TODO-RENAME-14 (-> obj path) (-> obj tangent) (-> obj curve-position)) - (quaternion-identity! (-> obj root quat)) + (else + (flying-lurker-move) + (flying-lurker-rotate) + ) ) - (else - (flying-lurker-move) - (flying-lurker-rotate) - ) - ) (set! (-> obj y-offset) 0.0) (set! (-> obj y-vel) 0.0) (set! (-> obj last-look-time) 0) @@ -1836,29 +1369,20 @@ (set! (-> obj take-off) #f) (set-vector! (-> obj default-bounds) 0.0 8192.0 0.0 24576.0) (set! (-> obj draw bounds quad) (-> obj default-bounds quad)) - (set! - (-> obj draw shadow-ctrl) - (new - 'process - 'shadow-control - 131072.0 - 151552.0 - 614400.0 - (the-as float 60) - 409600.0 - ) - ) + (set! (-> obj draw shadow-ctrl) + (new 'process 'shadow-control 131072.0 151552.0 614400.0 (the-as float 60) 409600.0) + ) (let ((v1-27 (-> obj draw shadow-ctrl))) - (set! (-> v1-27 settings flags) (logand -33 (-> v1-27 settings flags))) - ) + (set! (-> v1-27 settings flags) (logand -33 (-> v1-27 settings flags))) + ) 0 (set! (-> obj alt-actor) (entity-actor-lookup arg0 'alt-actor 0)) (set! (-> obj shadow-backup) (-> obj draw shadow)) (set! (-> obj try-counted) #f) (if (= (get-task-status (game-task plunger-lurker-hit)) (task-status invalid)) - (go flying-lurker-die) - (go flying-lurker-idle) - ) + (go flying-lurker-die) + (go flying-lurker-idle) + ) (none) ) diff --git a/goal_src/levels/robocave/spider-egg.gc b/goal_src/levels/robocave/spider-egg.gc index 6a111eb8f0..37d9b92b17 100644 --- a/goal_src/levels/robocave/spider-egg.gc +++ b/goal_src/levels/robocave/spider-egg.gc @@ -5,3 +5,528 @@ ;; name in dgo: spider-egg ;; dgos: L1, ROB +(define-extern *spider-egg-unbroken-sg* skeleton-group) +(define-extern *spider-egg-broken-sg* skeleton-group) + +(declare-type spider-egg process-drawable) + +(define-extern spider-egg-idle (state symbol spider-egg)) ;; unknown type +(define-extern spider-egg-hatch (state spider-egg)) ;; unknown type +(define-extern spider-egg-die (state spider-egg)) ;; unknown type + +;; DECOMP BEGINS + +(deftype spider-egg (process-drawable) + ((root-override collide-shape-moving :offset 112) + (notify-actor entity-actor :offset-assert 176) + (broken-look lod-set :inline :offset-assert 180) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xd5 + :flag-assert #x14007000d5 + ) + + +(defskelgroup *spider-egg-unbroken-sg* spider-egg + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1 0 2) + :longest-edge (meters 0) + ) + +(defskelgroup *spider-egg-broken-sg* spider-egg + 5 + -1 + ((6 (meters 20)) (7 (meters 40)) (8 (meters 999999))) + :bounds (static-spherem 0 1 0 2) + :longest-edge (meters 0) + ) + +(defstate spider-egg-idle (spider-egg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 none)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'touch) + (dummy-55 + (-> self root-override) + arg0 + (the-as touching-shapes-entry (-> arg3 param 0)) + 0.7 + 6144.0 + 16384.0 + ) + ) + ((= v1-0 'can-spawn?) + (return (the-as object #t)) + v0-0 + ) + ((= v1-0 'notify-spawned) + (go spider-egg-hatch) + ) + ((= v1-0 'attack) + (go spider-egg-die) + ) + ) + ) + ) + ) + :enter + (behavior ((arg0 symbol)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :code + (behavior ((arg0 symbol)) + (let ((f30-0 (rand-vu-float-range 0.8 1.2))) + (cond + (arg0 + (ja-channel-set! 1) + (let ((gp-1 (-> self skel root-channel 0))) + (set! + (-> gp-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + (set! + (-> gp-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 9)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-1 param 1) f30-0) + (set! + (-> gp-1 frame-num) + (rand-vu-float-range + 0.0 + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + (joint-control-channel-group! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) f30-0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (ja-channel-push! 1 60) + ) + ) + (while #t + (let ((gp-2 (rand-vu-int-range 2 6))) + (dotimes (s5-0 gp-2) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + (set! + (-> a0-9 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 9)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-9 param 1) f30-0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! + a0-9 + (the-as art-joint-anim (-> self draw art-group data 9)) + 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) f30-0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (ja-channel-push! 1 30) + (let ((a0-13 (-> self skel root-channel 0))) + (set! + (-> a0-13 frame-group) + (the-as art-joint-anim (-> self draw art-group data 13)) + ) + (set! + (-> a0-13 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 13)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-13 param 1) 1.0) + (set! (-> a0-13 frame-num) 0.0) + (joint-control-channel-group! + a0-13 + (the-as art-joint-anim (-> self draw art-group data 13)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-14 (-> self skel root-channel 0))) + (set! + (-> a0-14 param 0) + (the float (+ (-> a0-14 frame-group data 0 length) -1)) + ) + (set! (-> a0-14 param 1) 1.0) + (joint-control-channel-group-eval! + a0-14 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (ja-channel-push! 1 30) + ) + ) + (none) + ) + :post + (the-as (function none :behavior spider-egg) ja-post) + ) + +(defstate spider-egg-hatch (spider-egg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 symbol)) + (case arg2 + (('can-spawn?) + (return (the-as object #f)) + v0-0 + ) + ) + ) + :code + (behavior () + (dummy-18 self) + (logclear! (-> self mask) (process-mask actor-pause)) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 324) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (lods-assign! (-> self draw) (-> self broken-look)) + (ja-channel-push! 1 60) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-8 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-8 param 1) 1.0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! + a0-8 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (logior! (-> self draw status) 2) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior spider-egg) ja-post) + ) + +(defstate spider-egg-die (spider-egg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 symbol)) + (case arg2 + (('can-spawn?) + (return (the-as object #f)) + v0-0 + ) + ) + ) + :code + (behavior () + (dummy-18 self) + (logclear! (-> self mask) (process-mask actor-pause)) + (when (-> self notify-actor) + (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) 'notify) + (set! (-> a1-0 param 0) (the-as uint 'die)) + (let ((t9-1 send-event-function) + (v1-9 (-> self notify-actor)) + ) + (t9-1 (if v1-9 + (-> v1-9 extra process) + ) + a1-0 + ) + ) + ) + ) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 325) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (lods-assign! (-> self draw) (-> self broken-look)) + (ja-channel-push! 1 30) + (clear-collide-with-as (-> self root-override)) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 frame-group) + (the-as art-joint-anim (-> self draw art-group data 12)) + ) + (set! + (-> a0-9 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 12)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! + a0-9 + (the-as art-joint-anim (-> self draw art-group data 12)) + 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! + ) + ) + ) + (logior! (-> self draw status) 2) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior spider-egg) ja-post) + ) + +(defmethod init-from-entity! spider-egg ((obj spider-egg) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (set! (-> obj mask) (logior (process-mask attackable) (-> 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) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 2048.0 0.0 3686.4) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) 4096.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *spider-egg-unbroken-sg* '()) + (dummy-9 + (-> obj broken-look) + *spider-egg-broken-sg* + (-> obj draw art-group) + (-> obj entity) + ) + (set-vector! (-> obj root-override scale) 0.4 0.4 0.4 1.0) + (if (not (dummy-60 (-> obj root-override) 12288.0 40960.0 #t (the-as uint 1))) + (go process-drawable-art-error "no ground") + ) + (set! + (-> obj root-override trans y) + (+ -409.6 (-> obj root-override trans y)) + ) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (set! (-> s4-1 quad) (-> obj root-override surface-normal quad)) + (+! (-> s4-1 x) (rand-vu-float-range -0.2 0.2)) + (+! (-> s4-1 z) (rand-vu-float-range -0.2 0.2)) + (vector-normalize! s4-1 1.0) + (quaternion-axis-angle! + (-> obj root-override quat) + (-> s4-1 x) + (-> s4-1 y) + (-> s4-1 z) + (rand-vu-float-range 0.0 65536.0) + ) + ) + (dummy-47 (-> obj root-override)) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (if (> (entity-actor-count arg0 'alt-actor) 0) + (set! (-> obj notify-actor) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj notify-actor) #f) + ) + (go spider-egg-idle #t) + (none) + ) + + + + diff --git a/goal_src/levels/snow/snow-bumper.gc b/goal_src/levels/snow/snow-bumper.gc index 74255e55b6..07a44fb80b 100644 --- a/goal_src/levels/snow/snow-bumper.gc +++ b/goal_src/levels/snow/snow-bumper.gc @@ -5,3 +5,675 @@ ;; name in dgo: snow-bumper ;; dgos: L1, SNO +(define-extern *snow-bumper-sg* skeleton-group) + +(declare-type snow-bumper process-drawable) + +(define-extern snow-bumper-spawn-fuel-cell (state snow-bumper)) ;; unknown type +(define-extern snow-bumper-inactive-idle (state snow-bumper)) ;; unknown type +(define-extern snow-bumper-active-far-idle (state snow-bumper)) ;; unknown type +(define-extern snow-bumper-deactivate (state snow-bumper)) ;; unknown type +(define-extern snow-bumper-active-close-idle (state snow-bumper)) ;; unknown type + +;; DECOMP BEGINS + +(deftype snow-bumper (process-drawable) + ((bumper-id int32 :offset-assert 176) + (base-shove-ry float :offset-assert 180) + (max-shove-diff-ry float :offset-assert 184) + (part2 sparticle-launch-control :offset-assert 188) + (last-shoved-player-time uint64 :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xc8 + :flag-assert #x16006000c8 + (:methods + (dummy-20 (_type_) none 20) + (shove-player (_type_ process-drawable) none 21) + ) + ) + + +(defskelgroup *snow-bumper-sg* snow-bumper + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 2.2 0 3.4) + :longest-edge (meters 0) + ) + +(set! + (-> *part-group-id-table* 519) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-snow-bumper-idle" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 1893 :fade-after (meters 90.0) :falloff-to (meters 90.0) :period 25 :length 10) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! + (-> *part-id-table* 1893) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 15.0) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-z 0.0) + (sp-flt spt-scale-x (meters 1.5)) + (sp-flt spt-scale-y (meters 6.0)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 64.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-vel-y (meters 0.013333334)) + (sp-flt spt-scalevel-x (meters 0.0038461538)) + (sp-flt spt-scalevel-y (meters -0.03076923)) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 25) + (sp-cpuinfo-flags bit2 bit3 bit14) + (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 5.0)) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-group-id-table* 520) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-snow-bumper-shove" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 1895)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! + (-> *part-id-table* 1895) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 16.0) + (sp-flt spt-x (meters 5.5)) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-z 0.0) + (sp-flt spt-scale-x (meters 2.0)) + (sp-flt spt-scale-y (meters 6.0)) + (sp-rnd-flt spt-r 64.0 32.0 1.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-flt spt-vel-x (meters 0.033333335)) + (sp-flt spt-scalevel-x (meters 0.008333334)) + (sp-flt spt-scalevel-y (meters 0.2)) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 25) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 45.0) 1.0) + (sp-end) + ) + ) + ) + +(defmethod shove-player snow-bumper ((obj snow-bumper) (arg0 process-drawable)) + (with-pp + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-! s5-0 (-> arg0 root trans) (-> obj root trans)) + (set! (-> s5-0 y) 0.0) + (vector-normalize! s5-0 1.0) + (let* ((f0-3 (atan (-> s5-0 x) (-> s5-0 z))) + (f30-0 (-> obj base-shove-ry)) + (f28-0 (-> obj max-shove-diff-ry)) + (f0-4 (deg- f0-3 f30-0)) + ) + (when (< f28-0 (fabs f0-4)) + (let ((f30-1 (if (>= f0-4 0.0) + (+ f30-0 f28-0) + (- f30-0 f28-0) + ) + ) + ) + (set-vector! s5-0 (sin f30-1) 0.0 (cos f30-1) 1.0) + ) + ) + ) + (let ((f0-12 (+ -16384.0 (atan (-> s5-0 x) (-> s5-0 z))))) + (set! + (-> *part-id-table* 1895 init-specs 17 initial-valuef) + (+ -4096.0 f0-12) + ) + ) + (spawn (-> obj part2) (-> obj root trans)) + (let ((s3-1 (new 'stack-no-clear 'vector))) + (vector-normalize-copy! s3-1 s5-0 32768.0) + (vector+! s3-1 s3-1 (-> obj root trans)) + (vector-! s5-0 s3-1 (-> arg0 root trans)) + ) + (let ((f30-3 (vector-xz-length s5-0))) + (vector-normalize! s5-0 1.0) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) pp) + (set! (-> a1-12 num-params) 2) + (set! (-> a1-12 message) 'shove) + (set! (-> a1-12 param 0) (the-as uint #f)) + (let ((v1-16 (new 'static 'attack-info :mask #xc2))) + (set! (-> v1-16 vector quad) (-> s5-0 quad)) + (set! (-> v1-16 shove-up) 4096.0) + (set! (-> v1-16 shove-back) f30-3) + (set! (-> a1-12 param 1) (the-as uint v1-16)) + ) + (if (send-event-function *target* a1-12) + (set! + (-> obj last-shoved-player-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ) + ) + (none) + ) + ) + +(defstate snow-bumper-active-far-idle (snow-bumper) + :trans + (behavior () + (if + (and + *target* + (>= + 135895450000.0 + (vector-vector-xz-distance-squared (-> self root trans) (target-pos 0)) + ) + ) + (go snow-bumper-active-close-idle) + ) + 0 + (none) + ) + :code + (behavior () + (transform-post) + (suspend) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate snow-bumper-active-close-idle (snow-bumper) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack 'bonk) + (when (= (-> arg0 type) target) + (let ((gp-0 (-> arg3 param 0))) + (when + (and + (>= + 6144.0 + (vector-vector-xz-distance (-> self root trans) (target-pos 0)) + ) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry gp-0) + (the-as collide-shape-moving (-> self root)) + (the-as uint 1) + ) + ) + (close-specific-task! (game-task snow-bumpers) (task-status need-hint)) + (go snow-bumper-deactivate) + ) + ) + ) + ) + ) + ) + :trans + (behavior () + (cond + (*target* + (let* ((gp-0 (target-pos 0)) + (f30-0 (vector-vector-xz-distance (-> self root trans) gp-0)) + (f28-0 (- (-> gp-0 y) (-> self root trans y))) + ) + (if (< 368640.0 f30-0) + (go snow-bumper-active-far-idle) + ) + (if + (and + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self last-shoved-player-time)) + ) + 150 + ) + (>= 20480.0 f30-0) + (>= f28-0 -4096.0) + (>= 11059.2 f28-0) + ) + (shove-player self *target*) + ) + ) + ) + (else + (go snow-bumper-active-far-idle) + ) + ) + (spawn (-> self part) (-> self root trans)) + (update! (-> self sound)) + (none) + ) + :code + (behavior () + (transform-post) + (suspend) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate snow-bumper-deactivate (snow-bumper) + :exit + (behavior () + (stop! (-> self sound)) + (logior! (-> self mask) (process-mask actor-pause)) + (none) + ) + :trans + (the-as (function none :behavior snow-bumper) rider-trans) + :code + (behavior () + (local-vars (sv-16 symbol)) + (logclear! (-> self mask) (process-mask actor-pause)) + (sound-play-by-name + (static-sound-name "bumper-pwr-dwn") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) 0.05) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (spawn (-> self part) (-> self root trans)) + (update! (-> self sound)) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 param 0) + (the float (+ (-> a0-6 frame-group data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 0.05) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (stop! (-> self sound)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (suspend) + ) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-10 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-10 param 1) 0.02) + (set! (-> a0-10 frame-num) 0.0) + (joint-control-channel-group! + a0-10 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-11 (-> self skel root-channel 0))) + (set! + (-> a0-11 param 0) + (the float (+ (-> a0-11 frame-group data 0 length) -1)) + ) + (set! (-> a0-11 param 1) 0.02) + (joint-control-channel-group-eval! + a0-11 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (set! sv-16 (the-as symbol #f)) + (apply-all (-> self link) actor-link-subtask-complete-hook (& sv-16)) + (when sv-16 + (save-reminder + (get-task-control (game-task snow-bumpers)) + (-> self bumper-id) + 0 + ) + (go snow-bumper-spawn-fuel-cell) + ) + (go snow-bumper-inactive-idle) + (none) + ) + :post + (the-as (function none :behavior snow-bumper) rider-post) + ) + +(defstate snow-bumper-spawn-fuel-cell (snow-bumper) + :code + (behavior () + (ja-channel-set! 1) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! + (-> gp-0 frame-num) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + ) + (transform-post) + (if (not (task-complete? *game-info* (-> self entity extra perm task))) + (birth-pickup-at-point + (-> self root trans) + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #t + self + (the-as fact-info #f) + ) + ) + (until (not (-> self child)) + (suspend) + ) + (go snow-bumper-inactive-idle) + (none) + ) + ) + +(defstate snow-bumper-inactive-idle (snow-bumper) + :code + (behavior () + (set! (-> self root nav-radius) 6963.2) + (ja-channel-set! 1) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! + (-> gp-0 frame-num) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + ) + (transform-post) + (suspend) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +(defmethod deactivate snow-bumper ((obj snow-bumper)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(defmethod relocate snow-bumper ((obj snow-bumper) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (the-as + snow-bumper + ((the-as + (function process-drawable int process-drawable) + (find-parent-method snow-bumper 7) + ) + obj + arg0 + ) + ) + ) + +(defmethod init-from-entity! snow-bumper ((obj snow-bumper) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (set! (-> obj last-shoved-player-time) (the-as uint 0)) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! + (-> s4-0 no-reaction) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 2) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set-vector! (-> s3-0 local-sphere) 0.0 9011.2 0.0 13926.4) + (set-root-prim! s4-0 s3-0) + (let + ((s2-0 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 1) + ) + ) + ) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 3)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 6) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4915.2) + (append-prim s3-0 s2-0) + ) + (let + ((s2-1 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 1) + (the-as uint 2) + ) + ) + ) + (set! (-> s2-1 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 3) + (set-vector! (-> s2-1 local-sphere) 0.0 8192.0 0.0 11878.4) + (append-prim s3-0 s2-1) + ) + ) + (set! (-> s4-0 nav-radius) 20480.0) + (backup-collide-with-as s4-0) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-bumper-sg* '()) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 519) obj) + ) + (set! + (-> obj part2) + (create-launch-control (-> *part-group-id-table* 520) obj) + ) + (nav-mesh-connect obj (-> obj root) (the-as nav-control #f)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj bumper-id) (+ (actor-count-before (-> obj link)) 1)) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "snow-bumper") + :volume #x400 + :fo-max 40 + ) + (-> obj root 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 3)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (transform-post) + (set! (-> obj base-shove-ry) 0.0) + (set! (-> obj max-shove-diff-ry) 32768.0) + (set! sv-16 (new 'static 'res-tag)) + (let + ((v1-52 + (res-lump-data (-> obj entity) 'rotmin (pointer float) :tag-ptr (& sv-16)) + ) + ) + (when v1-52 + (set! (-> obj base-shove-ry) (-> v1-52 0)) + (set! (-> obj max-shove-diff-ry) (-> v1-52 1)) + ) + ) + (cond + ((and + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status complete)) + ) + (if + (and + (= + (get-reminder (get-task-control (game-task snow-bumpers)) 0) + (-> obj bumper-id) + ) + (not (task-complete? *game-info* (-> obj entity extra perm task))) + ) + (go snow-bumper-spawn-fuel-cell) + (go snow-bumper-inactive-idle) + ) + ) + (else + (go snow-bumper-active-far-idle) + ) + ) + (none) + ) + + + + diff --git a/goal_src/levels/snow/snow-obs.gc b/goal_src/levels/snow/snow-obs.gc index 89020c1c48..0f5fd7e366 100644 --- a/goal_src/levels/snow/snow-obs.gc +++ b/goal_src/levels/snow/snow-obs.gc @@ -5,3 +5,13 @@ ;; name in dgo: snow-obs ;; dgos: L1, SNO +;; TODO - for snow-ram +(define-extern *snowcam-sg* skeleton-group) +(deftype snowcam (pov-camera) + ((seq uint64 :offset-assert 224) + ) + :method-count-assert 30 + :size-assert #xe8 + :heap-base #x80 + :flag-assert #x1e008000e8 + ) diff --git a/goal_src/levels/snow/snow-ram-boss.gc b/goal_src/levels/snow/snow-ram-boss.gc index e28535eabf..d1aba120d1 100644 --- a/goal_src/levels/snow/snow-ram-boss.gc +++ b/goal_src/levels/snow/snow-ram-boss.gc @@ -5,3 +5,27 @@ ;; name in dgo: snow-ram-boss ;; dgos: L1, SNO +;; TODO - for snow-ram +(deftype ram-boss (nav-enemy) + ((parent-override (pointer ram) :score 100 :offset 12) + (facing-y float :offset-assert 400) + (player-dir-y float :offset-assert 404) + (last-turn-speed float :offset-assert 408) + (frustration int32 :offset-assert 412) + (dead? symbol :offset-assert 416) + (has-shield? symbol :offset-assert 420) + (proj-stoked basic :offset-assert 424) + (proj-status uint64 :offset-assert 432) + (part2 sparticle-launch-control :offset-assert 440) + (proj-last-thrown-time uint64 :offset-assert 448) + (nav-enemy-patrol-timeout uint64 :offset-assert 456) + (proj-launch-vec vector :inline :offset-assert 464) + (local-throw-point vector :inline :offset-assert 480) + (shield-jmod joint-mod-set-local :offset-assert 496) + ) + :method-count-assert 76 + :size-assert #x1f4 + :heap-base #x190 + :flag-assert #x4c019001f4 + ) +(define-extern ram-boss-init-by-other (function basic nav-enemy symbol none :behavior ram-boss)) diff --git a/goal_src/levels/snow/snow-ram-h.gc b/goal_src/levels/snow/snow-ram-h.gc index 23d222b606..e3eb172b54 100644 --- a/goal_src/levels/snow/snow-ram-h.gc +++ b/goal_src/levels/snow/snow-ram-h.gc @@ -8,7 +8,8 @@ ;; DECOMP BEGINS (deftype ram (process-drawable) - ((ram-id int32 :offset-assert 176) + ((root-override collide-shape-moving :offset 112) + (ram-id int32 :offset-assert 176) (give-fuel-cell? symbol :offset-assert 180) (give-fuel-cell-anim spool-anim :offset-assert 184) (part2 sparticle-launch-control :offset-assert 188) @@ -20,9 +21,9 @@ :size-assert #xe0 :flag-assert #x17007000e0 (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) + (dummy-20 (_type_) object 20) + (dummy-21 (_type_) object 21) + (dummy-22 (_type_) symbol 22) ) ) diff --git a/goal_src/levels/snow/snow-ram.gc b/goal_src/levels/snow/snow-ram.gc index da521b7901..24058722f8 100644 --- a/goal_src/levels/snow/snow-ram.gc +++ b/goal_src/levels/snow/snow-ram.gc @@ -5,3 +5,789 @@ ;; name in dgo: snow-ram ;; dgos: L1, SNO +(define-extern *ram-sg* skeleton-group) + +(declare-type ram process-drawable) + +(define-extern ram-fun-idle (state ram)) ;; unknown type +(define-extern ram-idle (state ram)) ;; unknown type +(define-extern ram-give-fuel-cell (state ram)) ;; unknown type + +;; DECOMP BEGINS + +(defskelgroup *ram-sg* ram + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 5 0 8.5) + :longest-edge (meters 7.7) + ) + +(set! + (-> *part-group-id-table* 526) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-ram-hit-wall" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1921) + (sp-item 1922 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! + (-> *part-id-table* 1920) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-rnd-flt spt-num 64.0 16.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 16.0 1.0) + (sp-rnd-flt spt-g 128.0 48.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-flt spt-scalevel-x (meters -0.00066666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -20.48 13.653334 1.0) + (sp-rnd-flt spt-friction 0.92 0.05 1.0) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit0 bit3 bit12) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 170.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 180.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1922) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 100.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -0.60952383) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2 bit3 bit12) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 180.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1921) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 6.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 100.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 96.0) + (sp-flt spt-fade-a -2.1333334) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! + (-> *part-group-id-table* 527) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-ram-wheel-puffs" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 1923 :fade-after (meters 70.0) :falloff-to (meters 70.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! + (-> *part-id-table* 1923) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-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 1.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 100.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.26666668) + (sp-flt spt-accel-y -1.3653333) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-end) + ) + ) + ) + +(defmethod dummy-20 ram ((obj ram)) + (let ((gp-0 (-> obj part))) + (when (nonzero? gp-0) + (let ((a2-0 (-> obj node-list data 8 bone transform)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set-vector! s5-0 0.0 0.0 -49152.0 1.0) + (vector-matrix*! s5-0 s5-0 a2-0) + (set! + (-> *part-id-table* 1920 init-specs 16 initial-valuef) + (+ 16384.0 (-> obj orient-ry)) + ) + (spawn gp-0 s5-0) + ) + ) + ) + ) + +(defmethod dummy-21 ram ((obj ram)) + (let ((gp-0 (-> obj part2))) + (let ((s3-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s3-0 (-> obj node-list data 5)) + (set-vector! s4-0 13312.0 -5324.8 0.0 1.0) + (vector-rotate-around-y! s4-0 s4-0 (-> obj orient-ry)) + (vector+! s4-0 s4-0 s3-0) + (spawn gp-0 s4-0) + (set-vector! s4-0 -13312.0 -5324.8 0.0 1.0) + (vector-rotate-around-y! s4-0 s4-0 (-> obj orient-ry)) + (vector+! s4-0 s4-0 s3-0) + (spawn gp-0 s4-0) + ) + (let ((s3-1 (new 'stack-no-clear 'vector)) + (s4-1 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s3-1 (-> obj node-list data 6)) + (set-vector! s4-1 13312.0 -5324.8 0.0 1.0) + (vector-rotate-around-y! s4-1 s4-1 (-> obj orient-ry)) + (vector+! s4-1 s4-1 s3-1) + (spawn gp-0 s4-1) + (set-vector! s4-1 -13312.0 -5324.8 0.0 1.0) + (vector-rotate-around-y! s4-1 s4-1 (-> obj orient-ry)) + (vector+! s4-1 s4-1 s3-1) + (spawn gp-0 s4-1) + ) + ) + ) + +(defmethod dummy-22 ram ((obj ram)) + (process-entity-status! obj (entity-perm-status complete) #t) + (let ((v1-0 (alt-actor-list-subtask-incomplete-count obj))) + (cond + ((zero? v1-0) + (let ((v1-3 (-> obj entity extra perm))) + (logior! (-> v1-3 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-3 user-int8 2) 1) + ) + (if (not (task-complete? *game-info* (-> obj entity extra perm task))) + (return #t) + ) + ) + ((= v1-0 1) + (close-specific-task! (game-task snow-ram) (task-status need-reminder)) + ) + (else + (close-specific-task! (game-task snow-ram) (task-status need-reminder-a)) + ) + ) + ) + #f + ) + +(defstate ram-idle (ram) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (when + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> self root-override) + (the-as uint 1) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'attack) + (set! (-> a1-3 param 0) (-> arg3 param 0)) + (let ((v1-7 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-7 shove-up) 2048.0) + (set! (-> v1-7 shove-back) 8192.0) + (set! (-> a1-3 param 1) (the-as uint v1-7)) + ) + (send-event-function arg0 a1-3) + ) + ) + ) + ) + ) + :exit + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (none) + ) + :trans + (behavior () + (rider-trans) + (if (-> self give-fuel-cell-anim) + (spool-push *art-control* (-> self give-fuel-cell-anim name) 0 self -99.0) + ) + (none) + ) + :code + (behavior () + (local-vars (sv-16 symbol)) + (ja-channel-push! 1 22) + (while #t + (sound-play-by-name + (static-sound-name "set-ram") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + 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 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((gp-1 #f)) + (sound-play-by-name + (static-sound-name "slam-crash") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-8 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-8 param 1) 1.0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! + a0-8 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (let ((f30-0 (ja-aframe-num 0))) + (when (and (not gp-1) (>= f30-0 61.0)) + (set! gp-1 #t) + (dummy-20 self) + ) + (if (and (>= f30-0 62.0) (< f30-0 97.0)) + (dummy-21 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! + ) + ) + ) + ) + (logior! (-> self mask) (process-mask actor-pause)) + (set! sv-16 (the-as symbol #f)) + (apply-function-forward (-> self link) actor-link-dead-hook (& sv-16)) + (when (or sv-16 (nonzero? (-> self root-override riders num-riders))) + (let ((v1-67 (-> self entity extra perm))) + (logior! (-> v1-67 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-67 user-int8 0) 1) + ) + (send-event (ppointer->process (-> self child)) 'jump) + (go ram-fun-idle) + ) + ) + (none) + ) + :post + (the-as (function none :behavior ram) rider-post) + ) + +(defstate ram-fun-idle (ram) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (when (= (-> arg0 type) ram-boss) + (if (dummy-22 self) + (go ram-give-fuel-cell) + ) + ) + ) + ) + ) + :trans + (behavior () + (if (-> self give-fuel-cell-anim) + (spool-push *art-control* (-> self give-fuel-cell-anim name) 0 self -99.0) + ) + (none) + ) + :code + (behavior () + (if (-> self give-fuel-cell?) + (go ram-give-fuel-cell) + ) + (ja-channel-push! 1 0) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +(defstate ram-give-fuel-cell (ram) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (if (and (= (-> arg0 type) snowcam) (= (-> arg3 param 0) 'die)) + (go ram-fun-idle) + ) + ) + ) + ) + :exit + (behavior () + (process-entity-status! self (entity-perm-status bit-3) #f) + (logior! (-> self mask) (process-mask actor-pause)) + (none) + ) + :code + (behavior () + (set! (-> self give-fuel-cell?) #f) + (ja-channel-push! 1 0) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (when + (and + (not (task-complete? *game-info* (-> self entity extra perm task))) + (-> self give-fuel-cell-anim) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (let* + ((gp-1 (the-as snowcam (get-process *default-dead-pool* snowcam #x4000))) + (v1-14 (when gp-1 + (let ((t9-6 (method-of-type snowcam activate))) + (t9-6 gp-1 self 'snowcam (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + pov-camera-init-by-other + (-> self root-override trans) + *snowcam-sg* + (-> self give-fuel-cell-anim) + 0 + self + '() + ) + (-> gp-1 ppointer) + ) + ) + ) + (set! (-> (the-as (pointer snowcam) v1-14) 0 seq) (the-as uint 1)) + ) + (sound-play-by-name + (static-sound-name "cell-prize") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + ) + (go ram-fun-idle) + (none) + ) + ) + +(defmethod deactivate ram ((obj ram)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(defmethod relocate ram ((obj ram) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (the-as ram ((method-of-type process-drawable relocate) obj arg0)) + ) + +(defmethod init-from-entity! ram ((obj ram) (arg0 entity-actor)) + (set! (-> obj give-fuel-cell?) #f) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! + (-> s4-0 no-reaction) + (the-as + (function collide-shape-moving collide-shape-intersect vector vector none) + nothing + ) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 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-vector! (-> s3-0 local-sphere) 0.0 20480.0 0.0 34816.0) + (set-root-prim! s4-0 s3-0) + (let + ((s2-0 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 1) + ) + ) + ) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 8) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 20480.0) + (append-prim s3-0 s2-0) + ) + (let + ((s2-1 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 1) + (the-as uint 2) + ) + ) + ) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 3)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 3) + (set-vector! (-> s2-1 local-sphere) 0.0 20480.0 0.0 34816.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 4)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 0) + (set! (-> s2-2 transform-index) 3) + (set-vector! (-> s2-2 local-sphere) -4096.0 28672.0 12288.0 2252.8) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) 20480.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *ram-sg* '()) + (logior! (-> obj skel status) 1) + (ja-post) + (dummy-47 (-> obj root-override)) + (set! (-> obj orient-ry) (quaternion-y-angle (-> obj root-override quat))) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 526) obj) + ) + (set! + (-> obj part2) + (create-launch-control (-> *part-group-id-table* 527) obj) + ) + (set! (-> obj ram-id) (res-lump-value arg0 'extra-id int)) + (case (-> obj ram-id) + ((1) + (set! + (-> obj give-fuel-cell-anim) + (new 'static 'spool-anim + :name "snowcam-ram-boss-in-cave-fuel-cell" + :index 7 + :parts 1 + :command-list '() + ) + ) + (set-vector! + (-> obj fuel-cell-dest-pos) + 3137396.8 + 803676.2 + -13560558.0 + 1.0 + ) + ) + ((2) + (set! + (-> obj give-fuel-cell-anim) + (new 'static 'spool-anim + :name "snowcam-ram-boss-ice-pond-fuel-cell" + :index 8 + :parts 1 + :command-list '() + ) + ) + (set-vector! + (-> obj fuel-cell-dest-pos) + 2790289.5 + 1058152.5 + -13639766.0 + 1.0 + ) + ) + ((3) + (set! + (-> obj give-fuel-cell-anim) + (new 'static 'spool-anim + :name "snowcam-ram-boss-snow-ball-fuel-cell" + :index 9 + :parts 1 + :command-list '() + ) + ) + (set-vector! + (-> obj fuel-cell-dest-pos) + 4208423.0 + 1037348.9 + -13591491.0 + 1.0 + ) + ) + (else + (set! (-> obj give-fuel-cell-anim) #f) + ) + ) + (let ((s4-1 #f)) + (if (nonzero? (-> obj entity extra perm user-int8 0)) + (set! s4-1 #t) + ) + (let ((s3-1 (= (res-lump-value arg0 'mode uint128) 1))) + (when (not s3-1) + (when + (and + (-> obj entity) + (logtest? + (-> obj entity extra perm status) + (entity-perm-status complete) + ) + ) + (set! s3-1 #t) + (if + (and + (nonzero? (-> obj entity extra perm user-int8 2)) + (not (task-complete? *game-info* (-> obj entity extra perm task))) + ) + (birth-pickup-at-point + (-> obj fuel-cell-dest-pos) + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + ) + (go ram-fun-idle) + ) + ) + (cond + ((and (not s3-1) (has-nav-mesh? arg0)) + (cond + (s4-1 + (let ((s5-1 (get-process *default-dead-pool* ram-boss #x4000))) + (when s5-1 + (let ((t9-28 (method-of-type ram-boss activate))) + (t9-28 + (the-as ram-boss s5-1) + obj + 'ram-boss + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + ram-boss-init-by-other + (-> obj entity) + obj + #t + ) + (-> s5-1 ppointer) + ) + ) + (go ram-fun-idle) + ) + (else + (let ((s5-2 (get-process *default-dead-pool* ram-boss #x4000))) + (when s5-2 + (let ((t9-32 (method-of-type ram-boss activate))) + (t9-32 + (the-as ram-boss s5-2) + obj + 'ram-boss + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-2 + ram-boss-init-by-other + (-> obj entity) + obj + #f + ) + (-> s5-2 ppointer) + ) + ) + (go ram-idle) + ) + ) + ) + (else + (go ram-fun-idle) + ) + ) + ) + ) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/bully.gc b/goal_src/levels/sunken/bully.gc index a07db419ef..f0f812e66d 100644 --- a/goal_src/levels/sunken/bully.gc +++ b/goal_src/levels/sunken/bully.gc @@ -5,3 +5,1103 @@ ;; name in dgo: bully ;; dgos: L1, SUN, SUNKEN +(declare-type bully process-drawable) + +(define-extern *bully-sg* skeleton-group) +(define-extern *bully-broken-cage-sg* skeleton-group) + +;; DECOMP BEGINS + +(deftype bully-broken-cage (process-drawable) + ((parent-override (pointer bully) :offset 12) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + (bully-broken-cage-explode bully-broken-cage) + ) + ) + + +(deftype bully (process-drawable) + ((root-override collide-shape-moving :offset 112) + (fact-override fact-info-enemy :offset 144) + (hit-player? symbol :offset-assert 176) + (bounced? symbol :offset-assert 180) + (bounce-volume int32 :offset-assert 184) + (facing-ry float :offset-assert 188) + (travel-ry float :offset-assert 192) + (speed-u float :offset-assert 196) + (spin-vel float :offset-assert 200) + (travel-speed float :offset-assert 204) + (reaction-delay uint64 :offset-assert 208) + (start-spin-time uint64 :offset-assert 216) + (slow-down uint64 :offset-assert 224) + (hit-player-time uint64 :offset-assert 232) + (neck joint-mod :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 21 + :size-assert #xf4 + :flag-assert #x15009000f4 + (:methods + (dummy-20 (_type_) float 20) + ) + (:states + bully-die + (bully-idle symbol) + bully-notice + bully-start-spinning + bully-stop-spinning + ) + ) + + +(defskelgroup *bully-sg* bully + 0 + 5 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1.5 0 3) + :longest-edge (meters 0) + :shadow 4 + ) + +(defskelgroup *bully-broken-cage-sg* bully + 14 + -1 + ((15 (meters 999999))) + :bounds (static-spherem 0 2 0 6) + :longest-edge (meters 0) + ) + +(define + *bully-shadow-control* + (new 'static 'shadow-control :settings (new 'static 'shadow-settings + :center + (new 'static 'vector :w (the-as float #x9)) + :shadow-dir + (new 'static 'vector :y -1.0 :w 614400.0) + :bot-plane (new 'static 'plane :y 1.0 :w 10240.0) + :top-plane (new 'static 'plane :y 1.0 :w -2048.0) + :fade-dist 245760.0 + ) + ) + ) + +(set! (-> *part-group-id-table* 454) (new 'static 'sparticle-launch-group + :length 5 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-bully-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 5 + (sp-item 2871) + (sp-item 2872) + (sp-item 2873) + (sp-item 2874) + (sp-item 2875) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 2871) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.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-rnd-flt spt-r 128.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-flt spt-accel-y 2.7306666) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2 bit12) + (sp-int-plain-rnd spt-next-time 30 59 1) + (sp-launcher-by-id spt-next-launcher 2876) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2876) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.0666667) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 2872) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters 1.5)) + (sp-rnd-flt spt-scale-x (meters 6.0) (meters 3.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.3) (meters 1.0) 1.0) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 2877) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2877) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -2.1333334) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 2873) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-scale-x (meters 12.0)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 196.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 196.0) + (sp-flt spt-a 48.0) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2874) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :index #x6 :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (meters 0.25) (meters 1.5) 1.0) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.00048828125) 2457.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.3)) + (sp-flt spt-r 160.0) + (sp-flt spt-g 160.0) + (sp-flt spt-b 160.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.06666667) 1.0) + (sp-flt spt-rotvel-x (degrees 1.2)) + (sp-flt spt-rotvel-y (degrees 2.4)) + (sp-rnd-int-flt spt-rotvel-z (degrees 0.0) 2 436.90668) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2878) + (sp-rnd-flt spt-conerot-x (degrees 40.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2878) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-scalevel-x (meters -0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -3.4) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2875) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :index #x5 :page #x2)) + (sp-flt spt-num 16.5) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (meters 0.25) (meters 1.5) 1.0) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-int-flt spt-scale-x (meters 0.3) 1 4096.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.3)) + (sp-flt spt-r 100.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 100.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.06666667) 1.0) + (sp-flt spt-rotvel-x (degrees 1.2)) + (sp-flt spt-rotvel-y (degrees 2.4)) + (sp-rnd-int-flt spt-rotvel-z (degrees 0.0) 3 436.90668) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2878) + (sp-rnd-flt spt-conerot-x (degrees 40.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(defstate bully-broken-cage-explode (bully-broken-cage) + :code + (behavior ((arg0 bully-broken-cage)) + (ja-channel-push! 1 0) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior bully-broken-cage) ja-post) + ) + +(defbehavior bully-broken-cage-init-by-other bully-broken-cage ((arg0 entity)) + (set! (-> self entity) arg0) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> self parent-override 0 root-override trans quad)) + (quaternion-copy! (-> self root quat) (-> self parent-override 0 root-override quat)) + (set! (-> self root scale quad) (-> self parent-override 0 root-override scale quad)) + (let ((a0-13 self)) + (initialize-skeleton a0-13 *bully-broken-cage-sg* '()) + (go bully-broken-cage-explode a0-13) + ) + (none) + ) + +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 48] +;; WARN: disable def twice: 148. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 229] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 248] +(defbehavior bully-default-event-handler bully ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 none)) + (let ((v1-0 arg2)) + (the-as + object + (when (or (= v1-0 'touch) (= v1-0 'touched) (= v1-0 'attack)) + (cond + ((= (-> arg0 type) bully) + (let ((v1-3 (new 'stack-no-clear 'vector))) + (vector-! v1-3 (-> self root-override trans) (-> (the-as process-drawable arg0) root trans)) + (set! (-> self travel-ry) (atan (-> v1-3 x) (-> v1-3 z))) + ) + (set! (-> self bounced?) #t) + (set! v0-0 (the-as none 100)) + (set! (-> self bounce-volume) (the-as int v0-0)) + v0-0 + ) + ((= (-> arg0 type) target) + (cond + ((= (-> arg3 param 1) 'flop) + (go bully-die) + (return (the-as object #t)) + v0-0 + ) + ((or (= arg2 'touch) (= arg2 'attack)) + (cond + ((>= (- (-> (target-pos 0) y) (-> self root-override trans y)) 6144.0) + (let* ((f0-6 (fmax 0.6 (* 0.000023935356 (-> self travel-speed)))) + (f28-0 (* 8192.0 f0-6)) + (f30-0 (* 8192.0 f0-6)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s4-0 (target-pos 0) (-> self root-override trans)) + (let ((f26-0 (atan (-> s4-0 x) (-> s4-0 z)))) + (when (< 0.0 (-> self travel-speed)) + (let ((f0-11 (deg- f26-0 (-> self travel-ry)))) + (if (< (fabs f0-11) 8192.0) + (set! f26-0 (if (>= f0-11 0.0) + (+ 8192.0 f26-0) + (+ -8192.0 f26-0) + ) + ) + ) + ) + ) + (set-vector! s4-0 (* (sin f26-0) f28-0) 0.0 (* (cos f26-0) f28-0) 1.0) + ) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 2) + (set! (-> a1-8 message) 'shove) + (set! (-> a1-8 param 0) (-> arg3 param 0)) + (let ((v1-23 (new 'static 'attack-info :mask #x82))) + (set! (-> v1-23 shove-up) f30-0) + (set! (-> v1-23 vector quad) (-> s4-0 quad)) + (set! (-> a1-8 param 1) (the-as uint v1-23)) + ) + (when (send-event-function arg0 a1-8) + (level-hint-spawn + (game-text-id sunken-bully-dive-hint) + "sksp0131" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (set! (-> self bounced?) #t) + (set! v0-0 (the-as none 100)) + (set! (-> self bounce-volume) (the-as int v0-0)) + v0-0 + ) + ) + ) + ) + (else + (let ((f0-21 (fmax 0.6 (* 0.000023935356 (-> self travel-speed)))) + (a1-10 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 2) + (set! (-> a1-10 message) 'attack) + (set! (-> a1-10 param 0) (-> arg3 param 0)) + (let ((v1-29 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-29 shove-up) (* 12288.0 f0-21)) + (set! (-> v1-29 shove-back) (* 16384.0 f0-21)) + (set! (-> a1-10 param 1) (the-as uint v1-29)) + ) + (when (send-event-function arg0 a1-10) + (level-hint-spawn + (game-text-id sunken-bully-dive-hint) + "sksp0131" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (set! (-> self hit-player?) #t) + (set! (-> self bounced?) #t) + (set! (-> self bounce-volume) 100) + (set! (-> self hit-player-time) (the-as uint (-> *display* base-frame-counter))) + (dummy-54 (-> self root-override) 2 0) + ) + ) + ) + ) + ) + ) + ) + (else + (when (= arg2 'touched) + (cond + ((= (-> arg0 type) target) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 2) + (set! (-> a1-13 message) 'attack) + (set! (-> a1-13 param 0) (-> arg3 param 0)) + (let ((a0-26 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-26 mode) 'explode) + (set! (-> a1-13 param 1) (the-as uint a0-26)) + ) + (send-event-function arg0 a1-13) + ) + ) + (else + (let ((a1-14 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-14 from) self) + (set! (-> a1-14 num-params) 4) + (set! (-> a1-14 message) 'attack) + (set! (-> a1-14 param 0) (-> arg3 param 0)) + (set! (-> a1-14 param 1) (the-as uint 'explode)) + (let ((v1-48 (+ *global-attack-id* 1))) + (set! *global-attack-id* v1-48) + (set! (-> a1-14 param 2) (the-as uint v1-48)) + ) + (set! (-> a1-14 param 3) (the-as uint 0)) + (send-event-function arg0 a1-14) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + +(defbehavior bully-post bully () + (when (and + (-> self hit-player?) + (or (not *target*) (and + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self hit-player-time))) 15) + ) + ) + ) + (dummy-54 (-> self root-override) 2 2) + (set! (-> self hit-player?) #f) + ) + (transform-post) + (none) + ) + +(defmethod dummy-20 bully ((obj bully)) + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (set-vector! + (-> obj root-override transv) + (* (sin (-> obj travel-ry)) (-> obj travel-speed)) + 0.0 + (* (cos (-> obj travel-ry)) (-> obj travel-speed)) + 1.0 + ) + (let ((s5-1 #f)) + (dummy-28 (-> obj nav) 2560) + (let ((v1-4 (-> obj nav travel))) + (.lvf vf1 (&-> (-> obj root-override transv) quad)) + (let ((f0-8 (-> *display* seconds-per-frame))) + (.mov at-0 f0-8) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-4 quad) vf1) + ) + (let ((s4-0 (new 'stack-no-clear 'check-vector-collision-with-nav-spheres-info))) + (when (>= (dummy-23 (-> obj nav) (-> obj nav travel) s4-0) 0.0) + (let ((s5-2 (new 'stack-no-clear 'vector))) + (set! (-> s5-2 quad) (-> s4-0 normal quad)) + (set! (-> s5-2 y) 0.0) + (vector-normalize! s5-2 1.0) + (vector-reflect! (-> obj root-override transv) (-> obj root-override transv) s5-2) + ) + (set! (-> obj travel-ry) (atan (-> obj root-override transv x) (-> obj root-override transv z))) + (+! (-> obj travel-ry) (rand-vu-float-range -910.2222 910.2222)) + (vector-reset! (-> obj root-override transv)) + (set! s5-1 #t) + (set! (-> obj bounced?) #t) + (set! (-> obj bounce-volume) 100) + ) + ) + (when (not s5-1) + (vector-normalize-copy! (-> obj nav travel) (-> obj root-override transv) 2048.0) + (let ((s5-3 (new 'stack 'clip-travel-vector-to-mesh-return-info))) + (dummy-24 (-> obj nav) 2048.0 s5-3) + (when (and + (-> s5-3 found-boundary) + (>= (* (-> obj travel-speed) (-> *display* seconds-per-frame)) + (vector-vector-xz-distance (-> s5-3 intersection) (-> obj root-override trans)) + ) + ) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector-negate! s4-1 (-> s5-3 boundary-normal)) + (set! (-> s4-1 y) 0.0) + (vector-normalize! s4-1 1.0) + (vector-reflect! (-> obj root-override transv) (-> obj root-override transv) s4-1) + ) + (set! (-> obj travel-ry) (atan (-> obj root-override transv x) (-> obj root-override transv z))) + (+! (-> obj travel-ry) (rand-vu-float-range -910.2222 910.2222)) + (vector-reset! (-> obj root-override transv)) + #t + (set! (-> obj bounced?) #t) + (set! (-> obj bounce-volume) 60) + ) + ) + ) + ) + (let ((f0-25 (+ -36864.0 (-> obj root-override transv y)))) + (set! (-> obj root-override transv y) f0-25) + f0-25 + ) + ) + ) + +(defstate bully-idle (bully) + :event + bully-default-event-handler + :enter + (behavior ((arg0 symbol)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self reaction-delay) (the-as uint (rand-vu-int-range 0 105))) + (set! (-> self travel-speed) 0.0) + (shut-down! (-> self neck)) + (let ((v1-5 (-> self draw shadow-ctrl))) + (logior! (-> v1-5 settings flags) 32) + ) + 0 + (none) + ) + :exit + (behavior () + (let ((v1-1 (-> self draw shadow-ctrl))) + (set! (-> v1-1 settings flags) (logand -33 (-> v1-1 settings flags))) + ) + 0 + (none) + ) + :trans + (behavior () + (when (and + (and *target* (>= (-> self fact-override idle-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self reaction-delay))) + ) + (start-hint-timer (game-text-id sunken-bully-dive-hint)) + (go bully-notice) + ) + (none) + ) + :code + (behavior ((arg0 symbol)) + (ja-channel-push! 1 22) + (cond + (arg0 + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-1 frame-num) + (rand-vu-float-range 0.0 (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + ) + (else + (let ((gp-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + ) + ) + (while #t + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + :post + bully-post + ) + +(defstate bully-notice (bully) + :event + bully-default-event-handler + :trans + (behavior () + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core)) + 'attacking + self + ) + ) + (set-target! (-> self neck) (target-pos 5)) + ) + (none) + ) + :code + (behavior () + (set! (-> self travel-speed) 0.0) + (ja-channel-push! 1 22) + (set-vector! (-> self root-override transv) 0.0 (rand-vu-float-range 61440.0 90112.0) 0.0 1.0) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> gp-1 param 0) (ja-aframe 13.0 0)) + (set! (-> gp-1 param 1) 1.0) + (set! (-> gp-1 frame-num) 0.0) + (joint-control-channel-group! gp-1 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (ja-aframe 13.0 0)) + (set! (-> gp-2 param 1) 1.0) + (joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (until (logtest? (-> self root-override status) 1) + (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!) + ) + (+! (-> self root-override transv y) (* -545996.8 (-> *display* seconds-per-frame))) + (dummy-59 (-> self root-override) (-> self root-override transv) (the-as uint 1) 12288.0 #f #f #f) + (when *target* + (let ((gp-3 (new 'stack-no-clear 'vector))) + (vector-! gp-3 (target-pos 0) (-> self root-override trans)) + (seek-toward-heading-vec! (-> self root-override) gp-3 524288.0 30) + ) + (set! (-> self facing-ry) (quaternion-y-angle (-> self root-override quat))) + ) + (suspend) + ) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-14 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! a0-14 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) (the float (+ (-> a0-15 frame-group data 0 length) -1))) + (set! (-> a0-15 param 1) 1.0) + (joint-control-channel-group-eval! a0-15 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go bully-start-spinning) + (none) + ) + :post + bully-post + ) + +(defstate bully-start-spinning (bully) + :event + bully-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self start-spin-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self slow-down) (the-as uint (rand-vu-int-range 1200 2400))) + (set! (-> self speed-u) 0.2) + (set! (-> self bounced?) #f) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (if *target* + (vector-! gp-0 (target-pos 0) (-> self root-override trans)) + (vector-z-quaternion! gp-0 (-> self root-override quat)) + ) + (set! (-> self travel-ry) (atan (-> gp-0 x) (-> gp-0 z))) + ) + (+! (-> self travel-ry) (rand-vu-float-range -910.2222 910.2222)) + (none) + ) + :trans + (behavior () + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core)) + 'attacking + self + ) + ) + (set-target! (-> self neck) (target-pos 5)) + ) + (cond + ((>= (- (-> *display* base-frame-counter) (the-as int (-> self start-spin-time))) + (the-as int (-> self slow-down)) + ) + (set! (-> self speed-u) (seek (-> self speed-u) 0.0 (* 0.5555556 (-> *display* seconds-per-frame)))) + (if (= (-> self speed-u) 0.0) + (go bully-stop-spinning) + ) + ) + (else + (set! (-> self speed-u) (seek (-> self speed-u) 1.0 (* 0.5555556 (-> *display* seconds-per-frame)))) + ) + ) + (set! (-> self spin-vel) (* 196608.0 (-> self speed-u))) + (set! (-> self travel-speed) (* 41779.2 (-> self speed-u))) + (+! (-> self facing-ry) (* (-> self spin-vel) (-> *display* seconds-per-frame))) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 (-> self facing-ry)) + (dummy-20 self) + (dummy-59 (-> self root-override) (-> self root-override transv) (the-as uint 1) 8192.0 #f #f #f) + (dummy-27 (-> self nav)) + (none) + ) + :code + (behavior () + (local-vars (v1-34 symbol) (v1-52 symbol)) + (ja-channel-push! 1 60) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self bounced?) #f) + (ja-channel-push! 1 60) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (until v1-34 + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-34 (or (ja-done? 0) (-> self bounced?))) + ) + (when (-> self bounced?) + (sound-play-by-name + (static-sound-name "bully-bounce") + (new-sound-id) + (the int (* 10.24 (the float (-> self bounce-volume)))) + 0 + 0 + 1 + #t + ) + (until (not (-> self bounced?)) + (set! (-> self bounced?) #f) + (ja-channel-push! 1 60) + (let ((gp-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + (until v1-52 + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-52 (or (ja-done? 0) (-> self bounced?))) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((gp-3 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-identity + ) + (set! (-> gp-3 frame-num) 0.0) + ) + ) + (none) + ) + :post + bully-post + ) + +(defstate bully-stop-spinning (bully) + :event + bully-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self reaction-delay) (the-as uint (rand-vu-int-range 600 900))) + (set! (-> self travel-speed) 0.0) + (set! (-> self bounced?) #f) + (none) + ) + :trans + (behavior () + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core)) + 'attacking + self + ) + ) + (set-target! (-> self neck) (target-pos 5)) + ) + (none) + ) + :code + (behavior () + (local-vars (v1-17 symbol) (v1-35 symbol)) + (let ((gp-0 2)) + (ja-channel-push! 1 60) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self reaction-delay))) + (cond + ((>= gp-0 0) + (+! gp-0 -1) + (let ((s5-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s5-0 + (the-as art-joint-anim (-> self draw art-group data 13)) + num-func-identity + ) + (set! (-> s5-0 frame-num) 0.0) + ) + ) + (else + (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 5)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + ) + ) + (until v1-17 + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-17 (or (ja-done? 0) (-> self bounced?))) + ) + (when (-> self bounced?) + (sound-play-by-name + (static-sound-name "bully-bounce") + (new-sound-id) + (the int (* 10.24 (the float (-> self bounce-volume)))) + 0 + 0 + 1 + #t + ) + (set! gp-0 0) + (until (not (-> self bounced?)) + (set! (-> self bounced?) #f) + (ja-channel-push! 1 60) + (let ((s5-3 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s5-3 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-identity + ) + (set! (-> s5-3 frame-num) 0.0) + ) + (until v1-35 + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1))) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-35 (or (ja-done? 0) (-> self bounced?))) + ) + ) + (ja-channel-push! 1 60) + ) + ) + ) + (if (or (not *target*) (< (-> self fact-override idle-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + (go bully-idle #f) + ) + (go bully-start-spinning) + (none) + ) + :post + bully-post + ) + +(defstate bully-die (bully) + :code + (behavior () + (dummy-18 self) + (shut-down! (-> self neck)) + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((gp-0 (get-process *default-dead-pool* bully-broken-cage #x4000))) + (when gp-0 + (let ((t9-3 (method-of-type bully-broken-cage activate))) + (t9-3 (the-as bully-broken-cage gp-0) self 'bully-broken-cage (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 bully-broken-cage-init-by-other (-> self entity)) + (-> gp-0 ppointer) + ) + ) + (spawn (-> self part) (-> self root-override trans)) + (clear-collide-with-as (-> self root-override)) + (drop-pickup (-> self fact-override) #t *entity-pool* (-> self fact-override) 0) + (ja-channel-push! 1 22) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-10 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (set! (-> a0-10 frame-num) 0.0) + (joint-control-channel-group! a0-10 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1))) + (set! (-> a0-11 param 1) 1.0) + (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (increment-success-for-hint (game-text-id sunken-bully-dive-hint)) + (logior! (-> self draw status) 2) + (while (-> self child) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior bully) transform-post) + ) + +(defmethod relocate bully ((obj bully) (arg0 int)) + (if (nonzero? (-> obj neck)) + (&+! (-> obj neck) arg0) + ) + (the-as + bully + ((the-as (function process-drawable int process-drawable) (find-parent-method bully 7)) obj arg0) + ) + ) + +(defmethod init-from-entity! bully ((obj bully) (arg0 entity-actor)) + (set! (-> obj hit-player?) #f) + (set! (-> obj bounced?) #f) + (set! (-> obj bounce-volume) 100) + (set! (-> obj spin-vel) 0.0) + (set! (-> obj travel-speed) 0.0) + (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) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 2) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 404)) + (set! (-> s3-0 prim-core action) (the-as uint 3073)) + (set! (-> s3-0 prim-core offense) 2) + (set-vector! (-> s3-0 local-sphere) 0.0 6144.0 0.0 10240.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 3)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 404)) + (set! (-> s2-0 prim-core action) (the-as uint 3073)) + (set! (-> s2-0 prim-core offense) 2) + (set-vector! (-> s2-0 local-sphere) 0.0 4096.0 0.0 6963.2) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 3)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 404)) + (set! (-> s2-1 prim-core action) (the-as uint 3073)) + (set! (-> s2-1 prim-core offense) 2) + (set-vector! (-> s2-1 local-sphere) 0.0 9420.8 0.0 4096.0) + (append-prim s3-0 s2-1) + ) + ) + (set! (-> s4-0 nav-radius) 7680.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (set! (-> obj root-override event-self) 'touched) + (set! (-> obj root-override event-other) 'touch) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *bully-sg* '()) + (set! (-> obj draw shadow-ctrl) *bully-shadow-control*) + (set! (-> obj nav) (new 'process 'nav-control (-> obj root-override) 16 40960.0)) + (logior! (-> obj nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 454) obj)) + (set! (-> obj fact-override) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (let ((v1-49 (new 'process 'joint-mod (joint-mod-handler-mode reset) obj 5))) + (set! (-> obj neck) v1-49) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> v1-49 up) (the-as uint 1)) + (set! (-> v1-49 nose) (the-as uint 2)) + (set! (-> v1-49 ear) (the-as uint 0)) + (set! (-> v1-49 max-dist) 102400.0) + (set! (-> v1-49 ignore-angle) 16384.0) + ) + (transform-post) + (if (not (dummy-60 (-> obj root-override) 12288.0 40960.0 #t (the-as uint 1))) + (go process-drawable-art-error "no ground") + ) + (set! (-> obj facing-ry) (quaternion-y-angle (-> obj root-override quat))) + (go bully-idle #t) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/puffer.gc b/goal_src/levels/sunken/puffer.gc index 132615360b..cb4be8db8d 100644 --- a/goal_src/levels/sunken/puffer.gc +++ b/goal_src/levels/sunken/puffer.gc @@ -5,3 +5,1196 @@ ;; name in dgo: puffer ;; dgos: L1, SUN, SUNKEN +(define-extern *puffer-sg* skeleton-group) +(define-extern *puffer-mean-sg* skeleton-group) + +(declare-type puffer process-drawable) + +(define-extern puffer-idle (state puffer)) ;; unknown type +(define-extern puffer-patrol (state puffer)) ;; unknown type +(define-extern puffer-attack (state puffer)) ;; unknown type +(define-extern puffer-die (state puffer)) ;; unknown type + +;; DECOMP BEGINS + +(deftype puffer (process-drawable) + ((root-override collide-shape-moving :offset 112) + (fact-info-override fact-info-enemy :offset 144) + (path-index int32 :offset-assert 176) + (facing-ry float :offset-assert 180) + (travel-ry float :offset-assert 184) + (travel-speed float :offset-assert 188) + (attack-bottom-y float :offset-assert 192) + (patrol-bottom-y float :offset-assert 196) + (top-y float :offset-assert 200) + (targ-trans-y float :offset-assert 204) + (acc-y float :offset-assert 208) + (travel-turn-speed float :offset-assert 212) + (notice-dist float :offset-assert 216) + (give-up-dist float :offset-assert 220) + (attacking? symbol :offset-assert 224) + (hit-player? symbol :offset-assert 228) + (look-mean? symbol :offset-assert 232) + (cprims-type uint64 :offset-assert 240) + (neck joint-mod :offset-assert 248) + (hit-player-time uint64 :offset-assert 256) + (reaction-delay uint64 :offset-assert 264) + (picked-point-time uint64 :offset-assert 272) + (pick-new-point-delay uint64 :offset-assert 280) + (last-on-screen-time uint64 :offset-assert 288) + (buddy process-drawable :offset-assert 296) + (nice-look lod-set :inline :offset-assert 300) + (mean-look lod-set :inline :offset-assert 336) + (dest-pos vector :inline :offset-assert 384) + (sync sync-info :inline :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 32 + :size-assert #x198 + :flag-assert #x2001300198 + (:methods + (dummy-20 (_type_ vector) none 20) + (dummy-21 (_type_) none 21) + (dummy-22 (_type_) symbol 22) + (dummy-23 (_type_ symbol) symbol 23) + (dummy-24 (_type_ vector) symbol 24) + (dummy-25 (_type_ float) symbol 25) + (dummy-26 (_type_) none 26) + (dummy-27 (_type_) none 27) + (dummy-28 (_type_) none 28) + (flip-look! (_type_ symbol) none 29) + (dummy-30 (_type_) vector 30) + (dummy-31 (_type_) vector 31) + ) + ) + + +(defskelgroup *puffer-sg* puffer + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1 0 5.25) + :longest-edge (meters 1.2) + :shadow 4 + ) + +(defskelgroup *puffer-mean-sg* puffer + 5 + -1 + ((6 (meters 20)) (7 (meters 40)) (8 (meters 999999))) + :bounds (static-spherem 0 1 0 5.25) + :longest-edge (meters 1.2) + :shadow 4 + ) + +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 56] +(defbehavior puffer-default-event-handler puffer ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (when (or (= v1-0 'touch) (= v1-0 'attack)) + (when (and (= arg2 'attack) (!= (-> self cprims-type) 2)) + (let* ((gp-0 arg0) + (v1-7 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) + gp-0 + ) + ) + ) + (when v1-7 + (let ((f0-4 (atan + (- (-> (the-as process-drawable v1-7) root trans x) (-> self root-override trans x)) + (- (-> (the-as process-drawable v1-7) root trans z) (-> self root-override trans z)) + ) + ) + ) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 f0-4) + ) + ) + ) + (go puffer-die) + (return (the-as object #t)) + ) + (when (= (-> arg0 type) target) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 2) + (set! (-> a1-9 message) 'attack) + (set! (-> a1-9 param 0) (-> arg3 param 0)) + (let ((v1-19 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-19 shove-up) 6144.0) + (set! (-> v1-19 shove-back) 10240.0) + (set! (-> a1-9 param 1) (the-as uint v1-19)) + ) + (when (send-event-function arg0 a1-9) + (set! (-> self hit-player?) #t) + (set! (-> self hit-player-time) (the-as uint (-> *display* base-frame-counter))) + (dummy-54 (-> self root-override) 2 0) + ) + ) + ) + ) + ) + ) + ) + +(defbehavior puffer-post puffer () + (when (and + (-> self hit-player?) + (or (not *target*) (and + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self hit-player-time))) 15) + ) + ) + ) + (dummy-54 (-> self root-override) 2 2) + (set! (-> self hit-player?) #f) + ) + (transform-post) + (none) + ) + +(defmethod dummy-28 puffer ((obj puffer)) + (cond + ((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) (logtest? (-> obj draw status) 8)) + (let ((s5-0 (new 'stack-no-clear 'collide-tri-result)) + (a1-0 (new 'stack-no-clear 'vector)) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> a1-0 quad) (-> obj root-override trans quad)) + (set-vector! a2-0 0.0 -40960.0 0.0 1.0) + (cond + ((>= (dummy-10 *collide-cache* a1-0 a2-0 8192.0 2057 obj s5-0 1) 0.0) + (let ((v1-11 (-> obj draw shadow-ctrl))) + (set! (-> v1-11 settings flags) (logand -33 (-> v1-11 settings flags))) + ) + 0 + (let ((v1-14 (-> obj draw shadow-ctrl))) + (set! (-> v1-14 settings bot-plane w) (- (+ -12288.0 (-> s5-0 intersect y)))) + ) + 0 + (let ((v1-17 (-> obj draw shadow-ctrl))) + (set! (-> v1-17 settings top-plane w) (- (+ 4096.0 (-> s5-0 intersect y)))) + ) + 0 + ) + (else + (let ((v1-19 (-> obj draw shadow-ctrl))) + (logior! (-> v1-19 settings flags) 32) + ) + 0 + ) + ) + ) + ) + (else + (let ((v1-21 (-> obj draw shadow-ctrl))) + (logior! (-> v1-21 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +(defmethod dummy-24 puffer ((obj puffer) (arg0 vector)) + (and + (dummy-25 (-> obj nav) arg0 11468.8) + (< (-> arg0 y) (+ (-> obj root-override trans y) (-> obj fact-info-override notice-top))) + ) + ) + +(defmethod dummy-22 puffer ((obj puffer)) + (let* ((a1-0 (-> obj buddy)) + (v1-0 (if a1-0 + (-> a1-0 ppointer 3) + ) + ) + ) + (if (and + v1-0 + (>= 25395.2 + (vector-vector-xz-distance (-> obj root-override trans) (-> (the-as process-drawable v1-0) root trans)) + ) + ) + (return #t) + ) + ) + #f + ) + +(defmethod dummy-25 puffer ((obj puffer) (arg0 float)) + (when *target* + (let ((gp-0 (target-pos 0))) + (when (and + (zero? (logand (-> *target* state-flags) #x80f8)) + (dummy-24 obj gp-0) + (>= (-> gp-0 y) (+ -14336.0 (-> obj attack-bottom-y))) + (>= (+ 2048.0 (-> obj top-y)) (-> gp-0 y)) + ) + (let ((f30-0 (vector-vector-xz-distance gp-0 (-> obj root-override trans)))) + (when (>= arg0 f30-0) + (let* ((a0-4 (-> obj buddy)) + (v1-12 (if a0-4 + (-> a0-4 ppointer 3) + ) + ) + ) + (cond + (v1-12 + (if (not (-> (the-as puffer v1-12) attacking?)) + (return #t) + ) + (if (< f30-0 (vector-vector-xz-distance gp-0 (-> (the-as puffer v1-12) root-override trans))) + (return #t) + ) + ) + (else + (return #t) + ) + ) + ) + ) + ) + ) + ) + ) + #f + ) + +(deftype pick-patrol-point-away-from-buddy-work (structure) + ((best-path-index int32 :offset-assert 0) + (best-rating float :offset-assert 4) + (best-dest vector :inline :offset-assert 16) + (pt-dir vector :inline :offset-assert 32) + (buddy-dir vector :inline :offset-assert 48) + (dest vector :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + + +(defmethod dummy-23 puffer ((obj puffer) (arg0 symbol)) + (local-vars (v1-0 process)) + (set! v1-0 (when arg0 + (let ((a0-1 (-> obj buddy))) + (set! v1-0 (if a0-1 + (-> a0-1 ppointer 3) + ) + ) + ) + (if (not v1-0) + (set! arg0 #f) + ) + v1-0 + ) + ) + (cond + (arg0 + (let ((s4-0 (-> obj path curve num-cverts)) + (s5-0 (new 'stack-no-clear 'inline-array 'vector 5)) + ) + (set! (-> s5-0 0 x) (the-as float -1)) + (vector-! (-> s5-0 3) (-> obj root-override trans) (-> (the-as process-drawable v1-0) root trans)) + (set! (-> s5-0 3 y) 0.0) + (vector-normalize! (-> s5-0 3) 1.0) + (dotimes (s3-0 s4-0) + (eval-path-curve-div! (-> obj path) (-> s5-0 4) (the float s3-0) 'interp) + (vector-! (-> s5-0 2) (-> s5-0 4) (-> obj root-override trans)) + (when (>= (vector-xz-length (-> s5-0 2)) 10240.0) + (set! (-> s5-0 2 y) 0.0) + (vector-normalize! (-> s5-0 2) 1.0) + (let ((f0-6 (vector-dot (-> s5-0 3) (-> s5-0 2)))) + (when (>= f0-6 0.0) + (when (or (< (the-as int (-> s5-0 0 x)) 0) (< (-> s5-0 0 y) f0-6)) + (set! (-> s5-0 0 x) (the-as float s3-0)) + (set! (-> s5-0 0 y) f0-6) + (set! (-> s5-0 1 quad) (-> s5-0 4 quad)) + ) + ) + ) + ) + ) + (when (>= (the-as int (-> s5-0 0 x)) 0) + (set! (-> obj dest-pos quad) (-> s5-0 1 quad)) + (set! (-> obj dest-pos y) (-> obj root-override trans y)) + (return #t) + ) + ) + ) + (else + (let* ((s3-1 (-> obj path curve num-cverts)) + (s4-1 (new 'stack-no-clear 'vector)) + (s5-1 (rand-vu-int-count s3-1)) + ) + (while (nonzero? s3-1) + (+! s3-1 -1) + (eval-path-curve-div! (-> obj path) s4-1 (the float s5-1) 'interp) + (when (>= (vector-vector-xz-distance s4-1 (-> obj root-override trans)) 10240.0) + (set! (-> obj dest-pos quad) (-> s4-1 quad)) + (set! (-> obj dest-pos y) (-> obj root-override trans y)) + (set! (-> obj path-index) s5-1) + (return #t) + ) + ) + ) + ) + ) + #f + ) + +(defmethod dummy-20 puffer ((obj puffer) (arg0 vector)) + (if (-> obj attacking?) + (set! (-> obj travel-speed) + (seek-with-smooth (-> obj travel-speed) 30720.0 (* 8192.0 (-> *display* seconds-per-frame)) 0.125 40.96) + ) + (set! (-> obj travel-speed) + (seek-with-smooth (-> obj travel-speed) 18432.0 (* 2048.0 (-> *display* seconds-per-frame)) 0.125 40.96) + ) + ) + (dummy-27 (-> obj nav)) + (dummy-28 (-> obj nav) -1) + (dummy-13 (-> obj nav) arg0 (-> obj root-override transv)) + (let ((f30-0 (* (vector-xz-length (-> obj nav travel)) (-> *display* frames-per-second)))) + (let ((f0-11 (atan (-> obj nav travel x) (-> obj nav travel z))) + (s5-1 (new 'stack-no-clear 'vector)) + ) + (if (< (-> obj travel-speed) f30-0) + (set! f30-0 (-> obj travel-speed)) + ) + (set! (-> s5-1 quad) (-> obj nav travel quad)) + (set! (-> obj travel-ry) + (deg-seek-smooth + (-> obj travel-ry) + f0-11 + (* (-> obj travel-turn-speed) (-> *display* seconds-per-frame)) + 0.125 + ) + ) + (let* ((f0-16 (* f30-0 (-> *display* seconds-per-frame))) + (f28-0 (* 150.0 f0-16)) + (f26-0 -1.0) + ) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set-vector! s4-0 (* (sin (-> obj travel-ry)) f28-0) 0.0 (* (cos (-> obj travel-ry)) f28-0) 1.0) + (let ((s3-1 (new 'stack 'clip-travel-vector-to-mesh-return-info))) + (set! (-> obj nav travel quad) (-> s4-0 quad)) + (dummy-24 (-> obj nav) f28-0 s3-1) + (if (-> s3-1 found-boundary) + (set! f26-0 (vector-vector-xz-distance (-> s3-1 intersection) (-> obj root-override trans))) + ) + ) + (let ((s3-2 (new 'stack-no-clear 'matrix))) + (when (>= (dummy-23 (-> obj nav) s4-0 (the-as check-vector-collision-with-nav-spheres-info s3-2)) 0.0) + (let ((f0-26 (vector-vector-xz-distance (-> s3-2 vector 1) (-> obj root-override trans)))) + (if (or (< f26-0 0.0) (< f0-26 f26-0)) + (set! f26-0 f0-26) + ) + ) + ) + ) + ) + (when (>= f26-0 0.0) + (let ((f26-1 (- 1.0 (/ f26-0 f28-0)))) + (+! (-> obj travel-ry) (* f26-1 (deg- (atan (-> s5-1 x) (-> s5-1 z)) (-> obj travel-ry)))) + ) + ) + ) + ) + (set-vector! + (-> obj root-override transv) + (* (sin (-> obj travel-ry)) f30-0) + (-> obj root-override transv y) + (* (cos (-> obj travel-ry)) f30-0) + 1.0 + ) + ) + (set! (-> obj facing-ry) + (deg-seek-smooth (-> obj facing-ry) (-> obj travel-ry) (* 32768.0 (-> *display* seconds-per-frame)) 0.125) + ) + (dummy-27 obj) + (none) + ) + +(defmethod dummy-27 puffer ((obj puffer)) + (let ((f30-0 (-> obj patrol-bottom-y))) + (cond + ((-> obj attacking?) + (let ((f30-1 (-> obj attack-bottom-y))) + (set! (-> obj targ-trans-y) (fmax (fmin (+ 4096.0 (-> (target-pos 0) y)) (-> obj top-y)) f30-1)) + ) + (set! (-> obj root-override transv y) + (* 0.125 (-> *display* frames-per-second) (- (-> obj targ-trans-y) (-> obj root-override trans y))) + ) + (when (< 6144.0 (fabs (-> obj root-override transv y))) + (if (>= (-> obj root-override transv y) 0.0) + (set! (-> obj root-override transv y) 6144.0) + (set! (-> obj root-override transv y) -6144.0) + ) + ) + ) + ((< (-> obj root-override trans y) f30-0) + (set! (-> obj targ-trans-y) (* 0.5 (+ (-> obj top-y) (-> obj patrol-bottom-y)))) + (set! (-> obj root-override transv y) + (* 0.125 (-> *display* frames-per-second) (- (-> obj targ-trans-y) (-> obj root-override trans y))) + ) + (when (< 2048.0 (fabs (-> obj root-override transv y))) + (if (>= (-> obj root-override transv y) 0.0) + (set! (-> obj root-override transv y) 2048.0) + (set! (-> obj root-override transv y) -2048.0) + ) + ) + ) + (else + (let ((f0-22 (- (-> obj targ-trans-y) (-> obj root-override trans y)))) + (when (or (and (>= f0-22 0.0) (< (-> obj acc-y) 0.0)) (and (< f0-22 0.0) (>= (-> obj acc-y) 0.0))) + (when (not (-> obj attacking?)) + (cond + ((>= (-> obj acc-y) 0.0) + (if (< f30-0 (-> obj targ-trans-y)) + (set! (-> obj targ-trans-y) (rand-vu-float-range f30-0 (-> obj targ-trans-y))) + ) + ) + (else + (if (< (-> obj targ-trans-y) (-> obj top-y)) + (set! (-> obj targ-trans-y) (rand-vu-float-range (-> obj targ-trans-y) (-> obj top-y))) + ) + ) + ) + ) + (set! (-> obj acc-y) (- (-> obj acc-y))) + ) + ) + (+! (-> obj root-override transv y) (* (-> obj acc-y) (-> *display* seconds-per-frame))) + (let ((f0-37 (* (-> obj root-override transv y) (-> *display* seconds-per-frame)))) + (cond + ((>= f0-37 0.0) + (let ((f1-27 (* 0.0625 (- (-> obj top-y) (-> obj root-override trans y))))) + (if (< f1-27 f0-37) + (set! (-> obj root-override transv y) (* f1-27 (-> *display* frames-per-second))) + ) + ) + ) + (else + (let ((f1-29 (* 0.0625 (- f30-0 (-> obj root-override trans y))))) + (if (< f0-37 f1-29) + (set! (-> obj root-override transv y) (* f1-29 (-> *display* frames-per-second))) + ) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + +(defstate puffer-idle (puffer) + :event + puffer-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self attacking?) #f) + (shut-down! (-> self neck)) + (let ((v1-5 (-> self draw shadow-ctrl))) + (logior! (-> v1-5 settings flags) 32) + ) + 0 + (none) + ) + :code + (behavior () + (while #t + (if (and + (and *target* (>= (-> self fact-info-override idle-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + (logtest? (-> self draw status) 8) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 60) + ) + (go puffer-patrol) + ) + (dummy-26 self) + (suspend) + ) + (none) + ) + :post + puffer-post + ) + +(defstate puffer-patrol (puffer) + :event + puffer-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self attacking?) #f) + (set! (-> self reaction-delay) (the-as uint (rand-vu-int-range 30 105))) + (if (not (dummy-23 self #f)) + (go puffer-idle) + ) + (set! (-> self picked-point-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self pick-new-point-delay) (the-as uint (rand-vu-int-range 900 3000))) + (set! (-> self last-on-screen-time) (the-as uint (-> *display* base-frame-counter))) + (none) + ) + :trans + (behavior () + (if (and + (not (and *target* (>= (-> self fact-info-override idle-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + ) + (go puffer-idle) + ) + (cond + ((logtest? (-> self draw status) 8) + (set! (-> self last-on-screen-time) (the-as uint (-> *display* base-frame-counter))) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-on-screen-time))) 2400) + (go puffer-idle) + ) + ) + ) + (when (dummy-22 self) + (when (dummy-23 self #t) + (set! (-> self picked-point-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self pick-new-point-delay) (the-as uint (rand-vu-int-range 900 3000))) + ) + ) + (if (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self reaction-delay))) + (dummy-25 self (-> self notice-dist)) + ) + (go puffer-attack) + ) + (when (or + (< (vector-vector-xz-distance (-> self root-override trans) (-> self dest-pos)) 8192.0) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self picked-point-time))) + (the-as int (-> self pick-new-point-delay)) + ) + ) + (when (dummy-23 self #f) + (set! (-> self picked-point-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self pick-new-point-delay) (the-as uint (rand-vu-int-range 900 3000))) + ) + ) + (dummy-20 self (-> self dest-pos)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set-vector! gp-0 (sin (-> self facing-ry)) 0.0 (cos (-> self facing-ry)) 1.0) + (set-heading-vec-clear-roll-pitch! (-> self root-override) gp-0) + ) + (vector-v+! (-> self root-override trans) (-> self root-override trans) (-> self root-override transv)) + (dummy-28 self) + (none) + ) + :code + (behavior () + (while #t + (dummy-26 self) + (suspend) + ) + (none) + ) + :post + puffer-post + ) + +(defstate puffer-attack (puffer) + :event + puffer-default-event-handler + :enter + (behavior () + (set! (-> self attacking?) #t) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self travel-turn-speed) 21845.334) + (none) + ) + :exit + (behavior () + (shut-down! (-> self neck)) + (set! (-> self attacking?) #f) + (set! (-> self travel-turn-speed) 16384.0) + (none) + ) + :trans + (behavior () + (if (not (dummy-25 self (-> self give-up-dist))) + (go puffer-patrol) + ) + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core)) + 'attacking + self + ) + ) + (set-target! (-> self neck) (target-pos 5)) + ) + (dummy-20 self (target-pos 0)) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (set-vector! gp-2 (sin (-> self facing-ry)) 0.0 (cos (-> self facing-ry)) 1.0) + (set-heading-vec-clear-roll-pitch! (-> self root-override) gp-2) + ) + (vector-v+! (-> self root-override trans) (-> self root-override trans) (-> self root-override transv)) + (dummy-28 self) + (none) + ) + :code + (behavior () + (while #t + (dummy-26 self) + (suspend) + ) + (none) + ) + :post + puffer-post + ) + +(defstate puffer-die (puffer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'death-start) + (the-as uint (drop-pickup (-> self fact-info-override) #t *entity-pool* (-> self fact-info-override) 0)) + ) + ((= v1-0 'death-end) + (let ((v0-0 (logior (-> self draw status) 2))) + (set! (-> self draw status) v0-0) + v0-0 + ) + ) + ) + ) + ) + ) + :code + (behavior () + (dummy-18 self) + (shut-down! (-> self neck)) + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 22) + (clear-collide-with-as (-> self root-override)) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 15))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 15)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 15)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior puffer) ja-post) + ) + +(defmethod dummy-21 puffer ((obj puffer)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 3) 0))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set-vector! (-> s4-0 local-sphere) 0.0 6144.0 0.0 18432.0) + (set-root-prim! s5-0 s4-0) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core offense) 1) + (set! (-> s3-0 transform-index) 5) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 4096.0) + (append-prim s4-0 s3-0) + ) + (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core offense) 1) + (set! (-> s3-1 transform-index) 3) + (set-vector! (-> s3-1 local-sphere) 0.0 0.0 0.0 4096.0) + (append-prim s4-0 s3-1) + ) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-2 collide-with) (the-as uint 16)) + (set! (-> s3-2 prim-core offense) 1) + (set! (-> s3-2 transform-index) 9) + (set-vector! (-> s3-2 local-sphere) 0.0 0.0 0.0 3072.0) + (append-prim s4-0 s3-2) + ) + ) + (set! (-> s5-0 nav-radius) 12288.0) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + (dummy-30 obj) + 0 + (none) + ) + +(defmethod flip-look! puffer ((obj puffer) (arg0 symbol)) + (when (!= arg0 (-> obj look-mean?)) + (set! (-> obj look-mean?) arg0) + (if arg0 + (lods-assign! (-> obj draw) (-> obj mean-look)) + (lods-assign! (-> obj draw) (-> obj nice-look)) + ) + ) + (none) + ) + +(defmethod dummy-30 puffer ((obj puffer)) + (when (!= (-> obj cprims-type) 1) + (set! (-> obj cprims-type) (the-as uint 1)) + (let ((v1-3 (the-as basic (-> obj root-override root-prim)))) + (set-vector! (-> (the-as collide-shape-prim v1-3) local-sphere) 0.0 6144.0 0.0 18432.0) + (let ((v0-0 (-> (the-as (array collide-shape-prim) v1-3) 17 local-sphere))) + (set! (-> v0-0 x) 0.0) + (set! (-> v0-0 y) 0.0) + (set! (-> v0-0 z) 0.0) + (set! (-> v0-0 w) 4096.0) + v0-0 + ) + ) + ) + ) + +(defmethod dummy-31 puffer ((obj puffer)) + (when (!= (-> obj cprims-type) 2) + (set! (-> obj cprims-type) (the-as uint 2)) + (let ((v1-3 (the-as basic (-> obj root-override root-prim)))) + (set-vector! (-> (the-as collide-shape-prim v1-3) local-sphere) 0.0 6144.0 0.0 18432.0) + (let ((v0-0 (-> (the-as (array collide-shape-prim) v1-3) 17 local-sphere))) + (set! (-> v0-0 x) 0.0) + (set! (-> v0-0 y) 0.0) + (set! (-> v0-0 z) 0.0) + (set! (-> v0-0 w) 7372.8) + v0-0 + ) + ) + ) + ) + +(defmethod dummy-26 puffer ((obj puffer)) + (let ((f30-0 (get-current-phase (-> obj sync)))) + (if (and (< 0.025 f30-0) (< f30-0 0.525)) + (flip-look! obj #f) + (flip-look! obj #t) + ) + (cond + ((< f30-0 0.5) + (cond + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 9) + ) + (cond + ((-> obj attacking?) + (ja-channel-push! 1 60) + (let ((s5-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-0 + (the-as art-joint-anim (-> obj draw art-group data 11)) + num-func-identity + ) + (set! (-> s5-0 frame-num) 0.0) + ) + (let ((a0-10 (-> obj 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! a0-10 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ((ja-done? 0) + (let ((v1-28 (-> obj skel root-channel 0))) + (set! (-> v1-28 num-func) num-func-identity) + (set! (-> v1-28 frame-num) 0.0) + ) + (let ((a0-13 (-> obj skel root-channel 0))) + (set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1))) + (set! (-> a0-13 param 1) 1.0) + (joint-control-channel-group! a0-13 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-14 (-> obj skel root-channel 0))) + (set! (-> a0-14 param 0) (the float (+ (-> a0-14 frame-group data 0 length) -1))) + (set! (-> a0-14 param 1) 1.0) + (joint-control-channel-group-eval! a0-14 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 11) + ) + (cond + ((not (-> obj attacking?)) + (ja-channel-push! 1 60) + (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 9)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (let ((a0-21 (-> obj skel root-channel 0))) + (set! (-> a0-21 param 0) (the float (+ (-> a0-21 frame-group data 0 length) -1))) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group! a0-21 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ((ja-done? 0) + (let ((v1-64 (-> obj skel root-channel 0))) + (set! (-> v1-64 num-func) num-func-identity) + (set! (-> v1-64 frame-num) 0.0) + ) + (let ((a0-24 (-> obj skel root-channel 0))) + (set! (-> a0-24 param 0) (the float (+ (-> a0-24 frame-group data 0 length) -1))) + (set! (-> a0-24 param 1) 1.0) + (joint-control-channel-group! a0-24 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-25 (-> obj skel root-channel 0))) + (set! (-> a0-25 param 0) (the float (+ (-> a0-25 frame-group data 0 length) -1))) + (set! (-> a0-25 param 1) 1.0) + (joint-control-channel-group-eval! a0-25 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 14) + ) + (cond + ((ja-done? 0) + (ja-channel-push! 1 60) + (cond + ((-> obj attacking?) + (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 11)) + num-func-identity + ) + (set! (-> s5-2 frame-num) 0.0) + ) + ) + (else + (let ((s5-3 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-3 + (the-as art-joint-anim (-> obj draw art-group data 9)) + num-func-identity + ) + (set! (-> s5-3 frame-num) 0.0) + ) + ) + ) + (let ((a0-34 (-> obj skel root-channel 0))) + (set! (-> a0-34 param 0) (the float (+ (-> a0-34 frame-group data 0 length) -1))) + (set! (-> a0-34 param 1) 1.0) + (joint-control-channel-group! a0-34 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-35 (-> obj skel root-channel 0))) + (set! (-> a0-35 param 0) (the float (+ (-> a0-35 frame-group data 0 length) -1))) + (set! (-> a0-35 param 1) 1.0) + (joint-control-channel-group-eval! a0-35 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (else + (ja-channel-push! 1 60) + (let ((s5-4 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-4 + (the-as art-joint-anim (-> obj draw art-group data 14)) + num-func-identity + ) + (set! (-> s5-4 frame-num) 0.0) + ) + (let ((a0-38 (-> obj skel root-channel 0))) + (set! (-> a0-38 param 0) (the float (+ (-> a0-38 frame-group data 0 length) -1))) + (set! (-> a0-38 param 1) 1.0) + (joint-control-channel-group! a0-38 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 10) + ) + (cond + ((-> obj attacking?) + (ja-channel-push! 1 60) + (let ((s5-5 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-5 + (the-as art-joint-anim (-> obj draw art-group data 12)) + num-func-identity + ) + (set! (-> s5-5 frame-num) 0.0) + ) + (let ((a0-45 (-> obj skel root-channel 0))) + (set! (-> a0-45 param 0) (the float (+ (-> a0-45 frame-group data 0 length) -1))) + (set! (-> a0-45 param 1) 1.0) + (joint-control-channel-group! a0-45 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ((ja-done? 0) + (let ((v1-142 (-> obj skel root-channel 0))) + (set! (-> v1-142 num-func) num-func-identity) + (set! (-> v1-142 frame-num) 0.0) + ) + (let ((a0-48 (-> obj skel root-channel 0))) + (set! (-> a0-48 param 0) (the float (+ (-> a0-48 frame-group data 0 length) -1))) + (set! (-> a0-48 param 1) 1.0) + (joint-control-channel-group! a0-48 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-49 (-> obj skel root-channel 0))) + (set! (-> a0-49 param 0) (the float (+ (-> a0-49 frame-group data 0 length) -1))) + (set! (-> a0-49 param 1) 1.0) + (joint-control-channel-group-eval! a0-49 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 12) + ) + (cond + ((not (-> obj attacking?)) + (ja-channel-push! 1 60) + (let ((s5-6 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-6 + (the-as art-joint-anim (-> obj draw art-group data 10)) + num-func-identity + ) + (set! (-> s5-6 frame-num) 0.0) + ) + (let ((a0-56 (-> obj skel root-channel 0))) + (set! (-> a0-56 param 0) (the float (+ (-> a0-56 frame-group data 0 length) -1))) + (set! (-> a0-56 param 1) 1.0) + (joint-control-channel-group! a0-56 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ((ja-done? 0) + (let ((v1-178 (-> obj skel root-channel 0))) + (set! (-> v1-178 num-func) num-func-identity) + (set! (-> v1-178 frame-num) 0.0) + ) + (let ((a0-59 (-> obj skel root-channel 0))) + (set! (-> a0-59 param 0) (the float (+ (-> a0-59 frame-group data 0 length) -1))) + (set! (-> a0-59 param 1) 1.0) + (joint-control-channel-group! a0-59 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-60 (-> obj skel root-channel 0))) + (set! (-> a0-60 param 0) (the float (+ (-> a0-60 frame-group data 0 length) -1))) + (set! (-> a0-60 param 1) 1.0) + (joint-control-channel-group-eval! a0-60 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 13) + ) + (cond + ((ja-done? 0) + (ja-channel-push! 1 60) + (let ((s5-7 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-7 + (the-as art-joint-anim (-> obj draw art-group data 10)) + num-func-identity + ) + (set! (-> s5-7 frame-num) 0.0) + ) + (let ((a0-68 (-> obj skel root-channel 0))) + (set! (-> a0-68 param 0) (the float (+ (-> a0-68 frame-group data 0 length) -1))) + (set! (-> a0-68 param 1) 1.0) + (joint-control-channel-group! a0-68 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-69 (-> obj skel root-channel 0))) + (set! (-> a0-69 param 0) (the float (+ (-> a0-69 frame-group data 0 length) -1))) + (set! (-> a0-69 param 1) 1.0) + (joint-control-channel-group-eval! a0-69 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (else + (ja-channel-push! 1 60) + (let ((s5-8 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-8 + (the-as art-joint-anim (-> obj draw art-group data 13)) + num-func-identity + ) + (set! (-> s5-8 frame-num) 0.0) + ) + (let ((a0-72 (-> obj skel root-channel 0))) + (set! (-> a0-72 param 0) (the float (+ (-> a0-72 frame-group data 0 length) -1))) + (set! (-> a0-72 param 1) 1.0) + (joint-control-channel-group! a0-72 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (case (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (((-> obj draw art-group data 10) (-> obj draw art-group data 12)) + (dummy-31 obj) + ) + (else + (dummy-30 obj) + ) + ) + (none) + ) + +(defmethod relocate puffer ((obj puffer) (arg0 int)) + (if (nonzero? (-> obj neck)) + (&+! (-> obj neck) arg0) + ) + (the-as + puffer + ((the-as (function process-drawable int process-drawable) (find-parent-method puffer 7)) obj arg0) + ) + ) + +(defmethod init-from-entity! puffer ((obj puffer) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (set! (-> obj cprims-type) (the-as uint 0)) + (set! (-> obj attacking?) #f) + (set! (-> obj buddy) #f) + (set! (-> obj hit-player?) #f) + (set! (-> obj look-mean?) #f) + (set! (-> obj travel-turn-speed) 16384.0) + (dummy-21 obj) + (process-drawable-from-entity! obj (the-as entity-actor (-> obj entity))) + (initialize-skeleton obj *puffer-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (dummy-9 (-> obj nice-look) *puffer-sg* (-> obj draw art-group) (-> obj entity)) + (dummy-9 (-> obj mean-look) *puffer-mean-sg* (-> obj draw art-group) (-> obj entity)) + (load-params! (-> obj sync) obj (the-as uint 2400) 0.0 0.15 0.15) + (set! (-> obj notice-dist) (res-lump-float arg0 'notice-dist :default 57344.0)) + (set! (-> obj give-up-dist) (+ 20480.0 (-> obj notice-dist))) + (set! (-> obj nav) (new 'process 'nav-control (-> obj root-override) 16 40960.0)) + (logior! (-> obj nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) + (dummy-26 (-> obj nav)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj fact-info-override) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (set! (-> obj draw shadow-ctrl) (new 'process 'shadow-control 0.0 0.0 614400.0 (the-as float 60) 245760.0)) + (if (<= (-> obj path curve num-cverts) 0) + (go process-drawable-art-error "no path") + ) + (set! (-> obj buddy) (the-as process-drawable (entity-actor-lookup arg0 'alt-actor 0))) + (ja-channel-set! 1) + (let ((a0-21 (-> obj skel root-channel 0))) + (set! (-> a0-21 param 0) (the float (+ (-> a0-21 frame-group data 0 length) -1))) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group! a0-21 (the-as art-joint-anim #f) num-func-seek!) + ) + (let ((s4-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-0 + (the-as art-joint-anim (-> obj draw art-group data 9)) + num-func-identity + ) + (set! (-> s4-0 frame-num) 0.0) + ) + (set! (-> obj facing-ry) (quaternion-y-angle (-> obj root-override quat))) + (set! (-> obj travel-ry) (-> obj facing-ry)) + (set! (-> obj travel-speed) 18432.0) + (vector-reset! (-> obj root-override transv)) + (set! (-> obj patrol-bottom-y) (-> obj root-override trans y)) + (let ((f28-0 8192.0) + (f30-0 -8192.0) + ) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-54 (res-lump-data arg0 'distance (pointer float) :tag-ptr (& sv-16)))) + (when v1-54 + (set! f28-0 (-> v1-54 0)) + (set! f30-0 (-> v1-54 1)) + ) + ) + (set! (-> obj top-y) (+ (-> obj patrol-bottom-y) f28-0)) + (set! (-> obj attack-bottom-y) (+ (-> obj patrol-bottom-y) f30-0)) + ) + (set! (-> obj root-override trans y) (rand-vu-float-range (-> obj patrol-bottom-y) (-> obj top-y))) + (set! (-> obj targ-trans-y) (-> obj root-override trans y)) + (set! (-> obj acc-y) 2048.0) + (let ((v1-59 (new 'process 'joint-mod (joint-mod-handler-mode reset) obj 5))) + (set! (-> obj neck) v1-59) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> v1-59 up) (the-as uint 1)) + (set! (-> v1-59 nose) (the-as uint 2)) + (set! (-> v1-59 ear) (the-as uint 0)) + (set! (-> v1-59 max-dist) 102400.0) + (set! (-> v1-59 ignore-angle) 16384.0) + ) + (dummy-47 (-> obj root-override)) + (go puffer-idle) + (none) + ) + + + + diff --git a/goal_src/levels/swamp/swamp-obs.gc b/goal_src/levels/swamp/swamp-obs.gc index a701b68d5d..e5e669c27c 100644 --- a/goal_src/levels/swamp/swamp-obs.gc +++ b/goal_src/levels/swamp/swamp-obs.gc @@ -25,145 +25,129 @@ ;; DECOMP BEGINS -(set! - (-> *part-group-id-table* 289) - (new 'static 'sparticle-launch-group - :length 3 - :duration #x5 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-swamp-spike-up" - :launcher - (new 'static 'inline-array sparticle-group-item 3 - (sp-item 1325 :fade-after (meters 120.0) :falloff-to (meters 120.0)) - (sp-item 1326 :fade-after (meters 120.0) :falloff-to (meters 120.0)) - (sp-item 1327 :fade-after (meters 60.0) :falloff-to (meters 60.0)) - ) - :bounds (new 'static 'sphere :w 32768.0) - ) - ) +(set! (-> *part-group-id-table* 289) (new 'static 'sparticle-launch-group + :length 3 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-spike-up" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 1325 :fade-after (meters 120.0) :falloff-to (meters 120.0)) + (sp-item 1326 :fade-after (meters 120.0) :falloff-to (meters 120.0)) + (sp-item 1327 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) -(set! - (-> *part-id-table* 1325) - (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 16.0) - (sp-rnd-int-flt spt-x (meters -2.0) 2 8192.0) - (sp-flt spt-y (meters 0.75)) - (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 64.0 32.0 1.0) - (sp-rnd-flt spt-g 48.0 24.0 1.0) - (sp-rnd-flt spt-b 48.0 8.0 1.0) - (sp-rnd-flt spt-a 16.0 32.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) - (sp-flt spt-scalevel-x (meters 0.01)) - (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) - (sp-flt spt-friction 0.96) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2) - (sp-int-plain-rnd spt-next-time 30 299 1) - (sp-launcher-by-id spt-next-launcher 1328) - (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-flt spt-rotate-y (degrees -179.3918)) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1325) + (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 16.0) + (sp-rnd-int-flt spt-x (meters -2.0) 2 8192.0) + (sp-flt spt-y (meters 0.75)) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 32.0 1.0) + (sp-rnd-flt spt-g 48.0 24.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 30 299 1) + (sp-launcher-by-id spt-next-launcher 1328) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees -179.3918)) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1328) - (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* 1328) + (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* 1326) - (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 16.0) - (sp-rnd-int-flt spt-x (meters -2.0) 2 8192.0) - (sp-flt spt-y (meters -0.75)) - (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 32.0 16.0 1.0) - (sp-rnd-flt spt-g 36.0 18.0 1.0) - (sp-rnd-flt spt-b 24.0 4.0 1.0) - (sp-rnd-flt spt-a 16.0 32.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) - (sp-flt spt-scalevel-x (meters 0.01)) - (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) - (sp-flt spt-friction 0.96) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2) - (sp-int-plain-rnd spt-next-time 30 299 1) - (sp-launcher-by-id spt-next-launcher 1328) - (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 20.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-flt spt-rotate-y (degrees -179.3918)) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1326) + (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 16.0) + (sp-rnd-int-flt spt-x (meters -2.0) 2 8192.0) + (sp-flt spt-y (meters -0.75)) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-rnd-flt spt-g 36.0 18.0 1.0) + (sp-rnd-flt spt-b 24.0 4.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 30 299 1) + (sp-launcher-by-id spt-next-launcher 1328) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees -179.3918)) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1327) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 23 - (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) - (sp-flt spt-num 8.0) - (sp-rnd-int-flt spt-x (meters -2.0) 2 8192.0) - (sp-flt spt-y (meters 0.25)) - (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.2) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 64.0 16.0 1.0) - (sp-rnd-flt spt-g 48.0 16.0 1.0) - (sp-rnd-flt spt-b 48.0 16.0 1.0) - (sp-flt spt-a 128.0) - (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.026666667) 1.0) - (sp-flt spt-accel-y -13.653334) - (sp-flt spt-friction 0.96) - (sp-int spt-timer 150) - (sp-cpuinfo-flags bit2) - (sp-flt spt-userdata 0.0) - (sp-func spt-func 'check-water-level-drop) - (sp-int spt-next-time 390) - (sp-launcher-by-id spt-next-launcher 1329) - (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 20.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-flt spt-rotate-y (degrees -179.3918)) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1327) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-int-flt spt-x (meters -2.0) 2 8192.0) + (sp-flt spt-y (meters 0.25)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 16.0 1.0) + (sp-rnd-flt spt-g 48.0 16.0 1.0) + (sp-rnd-flt spt-b 48.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.026666667) 1.0) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-int spt-next-time 390) + (sp-launcher-by-id spt-next-launcher 1329) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees -179.3918)) + (sp-end) + ) + ) + ) -(set! - (-> *part-group-id-table* 290) - (new 'static 'sparticle-launch-group - :length 2 - :duration #x5 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-swamp-spike-down" - :launcher - (new 'static 'inline-array sparticle-group-item 2 - (sp-item 1325 :fade-after (meters 120.0) :falloff-to (meters 120.0)) - (sp-item 1326 :fade-after (meters 120.0) :falloff-to (meters 120.0)) - ) - :bounds (new 'static 'sphere :w 32768.0) - ) - ) +(set! (-> *part-group-id-table* 290) (new 'static 'sparticle-launch-group + :length 2 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-spike-down" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1325 :fade-after (meters 120.0) :falloff-to (meters 120.0)) + (sp-item 1326 :fade-after (meters 120.0) :falloff-to (meters 120.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) (deftype swamp-spike (process-drawable) ((root-override collide-shape :offset 112) @@ -189,40 +173,30 @@ :longest-edge (meters 2.5) ) -(defbehavior - swamp-spike-default-event-handler swamp-spike - ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('touch) +(defbehavior swamp-spike-default-event-handler swamp-spike ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) (when (-> self dangerous) - (if - ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg3 param 0)) - (the-as collide-shape-moving (-> self root-override)) - (the-as uint 1) - ) - (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + (if ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint 1) + ) + (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + ) ) - ) ) - ) + ) ) (defun swamp-spike-set-particle-rotation-callback ((arg0 part-tracker)) (let* ((v1-0 (the-as object (-> arg0 userdata))) - (f0-1 - (+ - -65314.562 - (quaternion-y-angle - (-> (the-as (pointer swamp-spike) v1-0) 0 root-override quat) - ) - ) - ) + (f0-1 (+ -65314.562 (quaternion-y-angle (-> (the-as (pointer swamp-spike) v1-0) 0 root-override quat)))) ) - (set! (-> *part-id-table* 1325 init-specs 20 initial-valuef) f0-1) - (set! (-> *part-id-table* 1326 init-specs 20 initial-valuef) f0-1) - (set! (-> *part-id-table* 1327 init-specs 21 initial-valuef) f0-1) - ) + (set! (-> *part-id-table* 1325 init-specs 20 initial-valuef) f0-1) + (set! (-> *part-id-table* 1326 init-specs 20 initial-valuef) f0-1) + (set! (-> *part-id-table* 1327 init-specs 21 initial-valuef) f0-1) + ) 0 (none) ) @@ -230,12 +204,12 @@ (defbehavior swamp-spike-post swamp-spike () (transform-post) (let ((a1-0 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-0 to) (the-as process 1)) - (set! (-> a1-0 from) (the-as process *touching-list*)) - (if (dummy-40 (-> self root-override) a1-0) - (dummy-45 (-> self root-override)) + (set! (-> a1-0 to) (the-as process 1)) + (set! (-> a1-0 from) (the-as process *touching-list*)) + (if (dummy-40 (-> self root-override) a1-0) + (dummy-45 (-> self root-override)) + ) ) - ) (none) ) @@ -244,268 +218,150 @@ swamp-spike-default-event-handler :code (behavior () - (set! (-> self dangerous) #f) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (new 'stack-no-clear 'vector) - (vector-z-quaternion! gp-0 (-> self root-override quat)) - (set! (-> gp-0 w) (- (vector-dot gp-0 (-> self root-override trans)))) - (while #t - (set! (-> self state-time) (-> *display* base-frame-counter)) - (let ((v1-10 (-> self skel root-channel 0))) - (set! - (-> v1-10 frame-group) - (the-as art-joint-anim (-> self draw art-group data 3)) - ) - ) - (until (>= (get-current-phase (-> self sync)) 0.5) - (let ((v1-13 (-> self skel root-channel 0))) - (set! (-> v1-13 num-func) num-func-identity) - (set! (-> v1-13 frame-num) 0.0) - ) - (suspend) - ) - (let - ((s5-0 - (or - (not *target*) - (< - 204800.0 - (vector-vector-distance - (-> self root-override trans) - (-> *target* control trans) - ) - ) - ) - ) - ) - (if - (and - (and - *target* - (>= - 61440.0 - (vector-vector-distance - (-> self root-override trans) - (-> *target* control trans) - ) - ) - ) - *camera* - ) - (set! - s5-0 - (< - (* (vector4-dot gp-0 (target-pos 0)) (vector4-dot gp-0 (camera-pos))) - 0.0 - ) - ) - ) - (cond - (s5-0 - (until (< (get-current-phase (-> self sync)) 0.5) - (suspend) - ) - ) - (else - (let ((a0-11 (-> self skel root-channel 0))) - (set! - (-> a0-11 frame-group) - (the-as art-joint-anim (-> self draw art-group data 5)) - ) - (set! - (-> a0-11 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 5)) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-11 param 1) 1.0) - (set! (-> a0-11 frame-num) 0.0) - (joint-control-channel-group! - a0-11 - (the-as art-joint-anim (-> self draw art-group data 5)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-12 (-> self skel root-channel 0))) - (set! - (-> a0-12 param 0) - (the float (+ (-> a0-12 frame-group data 0 length) -1)) - ) - (set! (-> a0-12 param 1) 1.0) - (joint-control-channel-group-eval! - a0-12 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (when (logtest? (-> self draw status) 8) - (let ((s5-3 (get-process *default-dead-pool* part-tracker #x4000))) - (when s5-3 - (let ((t9-11 (method-of-type part-tracker activate))) - (t9-11 - (the-as part-tracker s5-3) - self - 'part-tracker - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-3 - part-tracker-init - (-> *part-group-id-table* 289) - -1 - swamp-spike-set-particle-rotation-callback - (-> self ppointer) - #f - (-> self root-override trans) - ) - (-> s5-3 ppointer) - ) - ) - ) - (set! (-> self dangerous) #t) - (let ((a0-17 (-> self skel root-channel 0))) - (set! - (-> a0-17 frame-group) - (the-as art-joint-anim (-> self draw art-group data 3)) - ) - (set! - (-> a0-17 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 3)) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-17 param 1) 1.0) - (set! (-> a0-17 frame-num) 0.0) - (joint-control-channel-group! - a0-17 - (the-as art-joint-anim (-> self draw art-group data 3)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-18 (-> self skel root-channel 0))) - (set! - (-> a0-18 param 0) - (the float (+ (-> a0-18 frame-group data 0 length) -1)) - ) - (set! (-> a0-18 param 1) 1.0) - (joint-control-channel-group-eval! - a0-18 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (set! (-> self dangerous) #f) + (set! (-> self dangerous) #f) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (new 'stack-no-clear 'vector) + (vector-z-quaternion! gp-0 (-> self root-override quat)) + (set! (-> gp-0 w) (- (vector-dot gp-0 (-> self root-override trans)))) + (while #t (set! (-> self state-time) (-> *display* base-frame-counter)) - (let ((v1-96 (-> self skel root-channel 0))) - (set! (-> v1-96 num-func) num-func-identity) - (set! - (-> v1-96 frame-num) - (the float (+ (-> v1-96 frame-group data 0 length) -1)) + (let ((v1-10 (-> self skel root-channel 0))) + (set! (-> v1-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) ) - ) - (until (< (get-current-phase (-> self sync)) 0.5) - (suspend) - ) - (when (logtest? (-> self draw status) 8) - (let ((s5-4 (get-process *default-dead-pool* part-tracker #x4000))) - (when s5-4 - (let ((t9-18 (method-of-type part-tracker activate))) - (t9-18 - (the-as part-tracker s5-4) - self - 'part-tracker - (the-as pointer #x70004000) - ) + (until (>= (get-current-phase (-> self sync)) 0.5) + (let ((v1-13 (-> self skel root-channel 0))) + (set! (-> v1-13 num-func) num-func-identity) + (set! (-> v1-13 frame-num) 0.0) ) - (run-now-in-process - s5-4 - part-tracker-init - (-> *part-group-id-table* 290) - -1 - swamp-spike-set-particle-rotation-callback - (-> self ppointer) - #f - (-> self root-override trans) + (suspend) + ) + (let ((s5-0 (or + (not *target*) + (< 204800.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + ) + ) + (if (and + (and *target* (>= 61440.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + *camera* + ) + (set! s5-0 (< (* (vector4-dot gp-0 (target-pos 0)) (vector4-dot gp-0 (camera-pos))) 0.0)) + ) + (cond + (s5-0 + (until (< (get-current-phase (-> self sync)) 0.5) + (suspend) + ) + ) + (else + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-11 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-11 param 1) 1.0) + (set! (-> a0-11 frame-num) 0.0) + (joint-control-channel-group! a0-11 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (when (logtest? (-> self draw status) 8) + (let ((s5-3 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-3 + (let ((t9-11 (method-of-type part-tracker activate))) + (t9-11 (the-as part-tracker s5-3) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-3 + part-tracker-init + (-> *part-group-id-table* 289) + -1 + swamp-spike-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root-override trans) + ) + (-> s5-3 ppointer) + ) + ) + ) + (set! (-> self dangerous) #t) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-17 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-17 param 1) 1.0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! a0-17 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! (-> a0-18 param 0) (the float (+ (-> a0-18 frame-group data 0 length) -1))) + (set! (-> a0-18 param 1) 1.0) + (joint-control-channel-group-eval! a0-18 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self dangerous) #f) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((v1-96 (-> self skel root-channel 0))) + (set! (-> v1-96 num-func) num-func-identity) + (set! (-> v1-96 frame-num) (the float (+ (-> v1-96 frame-group data 0 length) -1))) + ) + (until (< (get-current-phase (-> self sync)) 0.5) + (suspend) + ) + (when (logtest? (-> self draw status) 8) + (let ((s5-4 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-4 + (let ((t9-18 (method-of-type part-tracker activate))) + (t9-18 (the-as part-tracker s5-4) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-4 + part-tracker-init + (-> *part-group-id-table* 290) + -1 + swamp-spike-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root-override trans) + ) + (-> s5-4 ppointer) + ) + ) + ) + (let ((a0-29 (-> self skel root-channel 0))) + (set! (-> a0-29 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-29 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-29 param 1) 1.0) + (set! (-> a0-29 frame-num) 0.0) + (joint-control-channel-group! a0-29 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-30 (-> self skel root-channel 0))) + (set! (-> a0-30 param 0) (the float (+ (-> a0-30 frame-group data 0 length) -1))) + (set! (-> a0-30 param 1) 1.0) + (joint-control-channel-group-eval! a0-30 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) ) - (-> s5-4 ppointer) - ) ) - ) - (let ((a0-29 (-> self skel root-channel 0))) - (set! - (-> a0-29 frame-group) - (the-as art-joint-anim (-> self draw art-group data 4)) - ) - (set! - (-> a0-29 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 4)) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-29 param 1) 1.0) - (set! (-> a0-29 frame-num) 0.0) - (joint-control-channel-group! - a0-29 - (the-as art-joint-anim (-> self draw art-group data 4)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-30 (-> self skel root-channel 0))) - (set! - (-> a0-30 param 0) - (the float (+ (-> a0-30 frame-group data 0 length) -1)) - ) - (set! (-> a0-30 param 1) 1.0) - (joint-control-channel-group-eval! - a0-30 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) ) - ) ) - ) + (none) ) - (none) - ) :post swamp-spike-post ) @@ -513,171 +369,109 @@ (defstate swamp-spike-gate-up (swampgate) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'trigger) - (let ((v0-0 #t)) - (set! (-> self open-gate) v0-0) - v0-0 - ) - ) - ) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'trigger) + (let ((v0-0 #t)) + (set! (-> self open-gate) v0-0) + v0-0 + ) + ) + ) + ) ) - ) :code (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (let ((v1-4 (-> self skel root-channel 0))) - (set! - (-> v1-4 frame-group) - (the-as art-joint-anim (-> self draw art-group data 4)) - ) - ) - (until (-> self open-gate) - (let ((v1-7 (-> self skel root-channel 0))) - (set! (-> v1-7 num-func) num-func-identity) - (set! (-> v1-7 frame-num) 0.0) - ) - (suspend) - ) - (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) - (when gp-0 - (let ((t9-1 (method-of-type part-tracker activate))) - (t9-1 - (the-as part-tracker gp-0) - self - 'part-tracker - (the-as pointer #x70004000) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((v1-4 (-> self skel root-channel 0))) + (set! (-> v1-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) ) - (run-now-in-process - gp-0 - part-tracker-init - (-> *part-group-id-table* 290) - -1 - swamp-spike-set-particle-rotation-callback - (-> self ppointer) - #f - (-> self root-override trans) - ) - (-> gp-0 ppointer) - ) - ) - (let ((a0-7 (-> self skel root-channel 0))) - (set! - (-> a0-7 frame-group) - (the-as art-joint-anim (-> self draw art-group data 4)) - ) - (set! - (-> a0-7 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 4)) - data - 0 - length + (until (-> self open-gate) + (let ((v1-7 (-> self skel root-channel 0))) + (set! (-> v1-7 num-func) num-func-identity) + (set! (-> v1-7 frame-num) 0.0) ) - -1 - ) + (suspend) ) - ) - (set! (-> a0-7 param 1) 1.0) - (set! (-> a0-7 frame-num) 0.0) - (joint-control-channel-group! - a0-7 - (the-as art-joint-anim (-> self draw art-group data 4)) - num-func-seek! - ) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 (the-as part-tracker gp-0) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 290) + -1 + swamp-spike-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go swamp-spike-gate-down) + (none) ) - (until (ja-done? 0) - (suspend) - (let ((a0-8 (-> self skel root-channel 0))) - (set! - (-> a0-8 param 0) - (the float (+ (-> a0-8 frame-group data 0 length) -1)) - ) - (set! (-> a0-8 param 1) 1.0) - (joint-control-channel-group-eval! - a0-8 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (go swamp-spike-gate-down) - (none) - ) :post (the-as (function none :behavior swampgate) swamp-spike-post) ) (defstate swamp-spike-gate-down (swampgate) :code - (behavior () - (process-entity-status! self (entity-perm-status complete) #t) - (dummy-18 self) - (none) - ) + (behavior () (process-entity-status! self (entity-perm-status complete) #t) (dummy-18 self) (none)) :post (the-as (function none :behavior swampgate) swamp-spike-post) ) (defmethod init! swamp-spike ((obj swamp-spike)) - (let - ((s5-0 - (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)) - ) - ) - (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) - (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) - (set! (-> s4-0 collide-with) (the-as uint 16)) - (set! (-> s4-0 prim-core action) (the-as uint 1)) - (set-vector! (-> s4-0 local-sphere) 0.0 20480.0 0.0 24576.0) - (set-root-prim! s5-0 s4-0) - (let - ((s3-0 - (new - 'process - 'collide-shape-prim-mesh - s5-0 - (the-as uint 0) - (the-as uint 1) + (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s4-0 local-sphere) 0.0 20480.0 0.0 24576.0) + (set-root-prim! s5-0 s4-0) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 1)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 20480.0 0.0 24576.0) + (append-prim s4-0 s3-0) ) - ) - ) - (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) - (set! (-> s3-0 collide-with) (the-as uint 16)) - (set! (-> s3-0 prim-core action) (the-as uint 1)) - (set! (-> s3-0 prim-core offense) 4) - (set! (-> s3-0 transform-index) 3) - (set-vector! (-> s3-0 local-sphere) 0.0 20480.0 0.0 24576.0) - (append-prim s4-0 s3-0) - ) - (let - ((s3-1 - (new - 'process - 'collide-shape-prim-mesh - s5-0 - (the-as uint 1) - (the-as uint 0) + (let ((s3-1 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 1) (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) 3) + (set-vector! (-> s3-1 local-sphere) 0.0 20480.0 0.0 24576.0) + (append-prim s4-0 s3-1) ) - ) ) - (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) 3) - (set-vector! (-> s3-1 local-sphere) 0.0 20480.0 0.0 24576.0) - (append-prim s4-0 s3-1) - ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) ) - (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) - (backup-collide-with-as s5-0) - (set! (-> obj root-override) s5-0) - ) (process-drawable-from-entity! obj (the-as entity-actor (-> obj entity))) (initialize-skeleton obj *swamp-spike-sg* '()) (set! (-> obj draw origin-joint-index) (the-as uint 3)) @@ -705,9 +499,9 @@ (defmethod init-from-entity! swampgate ((obj swampgate) (arg0 entity-actor)) (init! obj) (if (logtest? (-> arg0 extra perm status) (entity-perm-status complete)) - (go swamp-spike-gate-down) - (go swamp-spike-gate-up) - ) + (go swamp-spike-gate-down) + (go swamp-spike-gate-up) + ) (none) ) @@ -738,146 +532,85 @@ (defstate balance-plat-idle (balance-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'grow) - (let ((v0-0 #t)) - (set! (-> self got-grow) v0-0) - v0-0 - ) - ) - ) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'grow) + (let ((v0-0 #t)) + (set! (-> self got-grow) v0-0) + v0-0 + ) + ) + ) + ) ) - ) :trans (the-as (function none :behavior balance-plat) rider-trans) :code (behavior () - (while #t - (let ((f30-0 (* -0.025 (+ (-> self y-offset) (-> self y-travel)))) - (f28-0 (* -0.025 (- (-> self y-offset) (-> self y-travel)))) + (while #t + (let ((f30-0 (* -0.025 (+ (-> self y-offset) (-> self y-travel)))) + (f28-0 (* -0.025 (- (-> self y-offset) (-> self y-travel)))) + ) + (cond + ((and (-> self root-override riders) (nonzero? (-> self root-override riders num-riders))) + (send-event *target* 'no-look-around 75) + (set! (-> self y-accel) (fmin 4.096 (fmax -4.096 (+ -0.2048 (-> self y-accel))))) + (set! (-> self y-vel) (fmin f28-0 (fmax f30-0 (+ (-> self y-vel) (-> self y-accel))))) + (send-to-all-after (-> self link) 'grow) + (send-to-all-before (-> self link) 'grow) + ) + ((-> self got-grow) + (set! (-> self got-grow) #f) + (set! (-> self y-accel) (fmin 4.096 (fmax -4.096 (+ 0.2048 (-> self y-accel))))) + (set! (-> self y-vel) (fmin f28-0 (fmax f30-0 (+ (-> self y-vel) (-> self y-accel))))) + ) + ((< (-> self y-offset) 0.0) + (set! (-> self y-accel) + (fmin (fmin 4.096 (fmax -4.096 (+ 0.1024 (-> self y-accel)))) (* -0.0001 (-> self y-offset))) + ) + (set! (-> self y-vel) (fmin f28-0 (fmax f30-0 (+ (-> self y-vel) (-> self y-accel))))) + (set! (-> self y-vel) (* 0.99 (-> self y-vel))) + ) + (else + (set! (-> self y-accel) + (fmin 4.096 (fmax (fmax -4.096 (+ -0.1024 (-> self y-accel))) (* -0.0001 (-> self y-offset)))) + ) + (set! (-> self y-vel) (fmin f28-0 (fmax f30-0 (+ (-> self y-vel) (-> self y-accel))))) + (set! (-> self y-vel) (* 0.99 (-> self y-vel))) + ) ) - (cond - ((and - (-> self root-override riders) - (nonzero? (-> self root-override riders num-riders)) ) - (send-event *target* 'no-look-around 75) - (set! - (-> self y-accel) - (fmin 4.096 (fmax -4.096 (+ -0.2048 (-> self y-accel)))) - ) - (set! - (-> self y-vel) - (fmin f28-0 (fmax f30-0 (+ (-> self y-vel) (-> self y-accel)))) - ) - (send-to-all-after (-> self link) 'grow) - (send-to-all-before (-> self link) 'grow) - ) - ((-> self got-grow) - (set! (-> self got-grow) #f) - (set! - (-> self y-accel) - (fmin 4.096 (fmax -4.096 (+ 0.2048 (-> self y-accel)))) - ) - (set! - (-> self y-vel) - (fmin f28-0 (fmax f30-0 (+ (-> self y-vel) (-> self y-accel)))) - ) - ) - ((< (-> self y-offset) 0.0) - (set! - (-> self y-accel) - (fmin - (fmin 4.096 (fmax -4.096 (+ 0.1024 (-> self y-accel)))) - (* -0.0001 (-> self y-offset)) - ) - ) - (set! - (-> self y-vel) - (fmin f28-0 (fmax f30-0 (+ (-> self y-vel) (-> self y-accel)))) - ) - (set! (-> self y-vel) (* 0.99 (-> self y-vel))) - ) - (else - (set! - (-> self y-accel) - (fmin - 4.096 - (fmax - (fmax -4.096 (+ -0.1024 (-> self y-accel))) - (* -0.0001 (-> self y-offset)) - ) - ) - ) - (set! - (-> self y-vel) - (fmin f28-0 (fmax f30-0 (+ (-> self y-vel) (-> self y-accel)))) - ) - (set! (-> self y-vel) (* 0.99 (-> self y-vel))) - ) + (+! (-> self y-offset) (-> self y-vel)) + (set! (-> self root-override trans y) (+ (-> self y-init) (-> self y-offset))) + (suspend) ) - ) - (+! (-> self y-offset) (-> self y-vel)) - (set! - (-> self root-override trans y) - (+ (-> self y-init) (-> self y-offset)) - ) - (suspend) + (none) ) - (none) - ) :post (the-as (function none :behavior balance-plat) rider-post) ) -(defmethod - init-from-entity! - balance-plat - ((obj balance-plat) (arg0 entity-actor)) +(defmethod init-from-entity! balance-plat ((obj balance-plat) (arg0 entity-actor)) (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) - (let - ((s4-0 - (new - 'process - 'collide-shape-moving - obj - (collide-list-enum usually-hit-by-player) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 40960.0) + (set-root-prim! s4-0 s3-0) ) - ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) ) - (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) - (set! (-> s4-0 reaction) default-collision-reaction) - (set! - (-> s4-0 no-reaction) - (the-as - (function collide-shape-moving collide-shape-intersect vector vector none) - nothing - ) - ) - (dummy-29 s4-0 1) - (let - ((s3-0 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 0) - (the-as uint 0) - ) - ) - ) - (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) - (set! (-> s3-0 collide-with) (the-as uint 16)) - (set! (-> s3-0 prim-core action) (the-as uint 3)) - (set! (-> s3-0 prim-core offense) 4) - (set! (-> s3-0 transform-index) 3) - (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 40960.0) - (set-root-prim! s4-0 s3-0) - ) - (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) - (backup-collide-with-as s4-0) - (set! (-> obj root-override) s4-0) - ) (process-drawable-from-entity! obj arg0) (initialize-skeleton obj *balance-plat-sg* '()) (set! (-> obj link) (new 'process 'actor-link-info obj)) @@ -901,114 +634,102 @@ ) -(set! - (-> *part-group-id-table* 291) - (new 'static 'sparticle-launch-group - :length 3 - :duration #x12c - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-swamp-rock-explosion" - :launcher - (new 'static 'inline-array sparticle-group-item 3 - (sp-item 1330 :period 1500 :length 5) - (sp-item 1331 :period 1500 :length 5) - (sp-item 1332 :period 1500 :length 15) - ) - :bounds (new 'static 'sphere :w 32768.0) - ) - ) +(set! (-> *part-group-id-table* 291) (new 'static 'sparticle-launch-group + :length 3 + :duration #x12c + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rock-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 1330 :period 1500 :length 5) + (sp-item 1331 :period 1500 :length 5) + (sp-item 1332 :period 1500 :length 15) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) -(set! - (-> *part-id-table* 1331) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 12 - (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 15.0)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 130.0) - (sp-flt spt-g 64.0) - (sp-flt spt-b 54.0) - (sp-flt spt-a 128.0) - (sp-flt spt-fade-a -2.1333334) - (sp-int spt-timer 60) - (sp-cpuinfo-flags bit2 bit3) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1331) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 15.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 130.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 54.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.1333334) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1330) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 20 - (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) - (sp-rnd-flt spt-num 16.0 16.0 1.0) - (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.3) 1.0) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 70.0 16.0 1.0) - (sp-rnd-flt spt-g 70.0 16.0 1.0) - (sp-flt spt-b 70.0) - (sp-flt spt-a 128.0) - (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.04) 1.0) - (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) - (sp-flt spt-accel-y -10.922667) - (sp-flt spt-friction 0.99) - (sp-int spt-timer 300) - (sp-cpuinfo-flags bit2) - (sp-flt spt-userdata 0.0) - (sp-func spt-func 'check-water-level-drop) - (sp-rnd-flt spt-conerot-x (degrees 20.0) (degrees 50.000004) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1330) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 16.0 16.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 16.0 1.0) + (sp-rnd-flt spt-g 70.0 16.0 1.0) + (sp-flt spt-b 70.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-accel-y -10.922667) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-rnd-flt spt-conerot-x (degrees 20.0) (degrees 50.000004) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1332) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 21 - (sp-tex spt-texture (new 'static 'texture-id :page #x2)) - (sp-flt spt-num 16.0) - (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) - (sp-rnd-flt spt-scale-x (meters 2.5) (meters 1.5) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 96.0 64.0 1.0) - (sp-rnd-flt spt-g 64.0 48.0 1.0) - (sp-rnd-flt spt-b 64.0 16.0 1.0) - (sp-rnd-flt spt-a 16.0 32.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) - (sp-flt spt-scalevel-x (meters 0.013333334)) - (sp-flt spt-scalevel-y (meters 0.0033333334)) - (sp-flt spt-accel-y -1.0922667) - (sp-flt spt-friction 0.95) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2) - (sp-int-plain-rnd spt-next-time 30 299 1) - (sp-launcher-by-id spt-next-launcher 1333) - (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1332) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (meters 1.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-flt spt-scalevel-y (meters 0.0033333334)) + (sp-flt spt-accel-y -1.0922667) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 30 299 1) + (sp-launcher-by-id spt-next-launcher 1333) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1333) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 2 - (sp-flt spt-fade-a -0.2) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1333) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.2) (sp-end)) + ) + ) (defskelgroup *swamp-rock-sg* swamp-rock 0 @@ -1021,43 +742,21 @@ (defstate swamp-rock-break (swamp-rock) :code (behavior () - (process-entity-status! self (entity-perm-status complete) #t) - (sound-play-by-name - (static-sound-name "rock-break") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) - (when gp-1 - (let ((t9-4 (method-of-type part-tracker activate))) - (t9-4 - (the-as part-tracker gp-1) - *entity-pool* - 'part-tracker - (the-as pointer #x70004000) - ) + (process-entity-status! self (entity-perm-status complete) #t) + (sound-play-by-name (static-sound-name "rock-break") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 part-tracker-init (-> *part-group-id-table* 291) -1 #f #f #f (-> self root trans)) + (-> gp-1 ppointer) + ) ) - (run-now-in-process - gp-1 - part-tracker-init - (-> *part-group-id-table* 291) - -1 - #f - #f - #f - (-> self root trans) - ) - (-> gp-1 ppointer) - ) + (dummy-18 self) + (deactivate self) + (none) ) - (dummy-18 self) - (deactivate self) - (none) - ) :post (the-as (function none :behavior swamp-rock) ja-post) ) @@ -1065,132 +764,78 @@ (defstate swamp-rock-idle (swamp-rock) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('attack) - (if (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) - (go swamp-rock-break) + (case arg2 + (('attack) + (if (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (go swamp-rock-break) + ) ) ) ) - ) :code (behavior () - (transform-post) - (while #t - (logior! (-> self mask) (process-mask sleep)) - (suspend) + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + (none) ) - (none) - ) ) (defmethod init-from-entity! swamp-rock ((obj swamp-rock) (arg0 entity-actor)) (set! (-> obj mask) (logior (process-mask attackable) (-> obj mask))) (let ((f30-0 (res-lump-float arg0 'scale-factor :default 1.0))) - (let - ((s4-0 - (new - 'process - 'collide-shape - obj - (collide-list-enum usually-hit-by-player) - ) - ) - ) - (let - ((s3-0 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 0) - (the-as uint 0) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 (* 4096.0 f30-0) 0.0 (* 4096.0 (* 3.0 f30-0))) + (set-root-prim! s4-0 s3-0) ) - ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root) s4-0) ) - (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) - (set! (-> s3-0 collide-with) (the-as uint 16)) - (set! (-> s3-0 prim-core action) (the-as uint 1)) - (set! (-> s3-0 prim-core offense) 4) - (set! (-> s3-0 transform-index) 3) - (set-vector! - (-> s3-0 local-sphere) - 0.0 - (* 4096.0 f30-0) - 0.0 - (* 4096.0 (* 3.0 f30-0)) - ) - (set-root-prim! s4-0 s3-0) - ) - (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) - (backup-collide-with-as s4-0) - (set! (-> obj root) s4-0) + (process-drawable-from-entity! obj arg0) + (vector-float*! (-> obj root scale) *identity-vector* f30-0) ) - (process-drawable-from-entity! obj arg0) - (vector-float*! (-> obj root scale) *identity-vector* f30-0) - ) (initialize-skeleton obj *swamp-rock-sg* '()) (nav-mesh-connect obj (-> obj root) (the-as nav-control #f)) - (set! - (-> obj part) - (create-launch-control (-> *part-group-id-table* 291) obj) - ) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 291) obj)) (go swamp-rock-idle) (none) ) (defbehavior swamp-rock-init-by-other swamp-rock ((arg0 vector)) (set! (-> self mask) (logior (process-mask attackable) (-> self mask))) - (let - ((s5-0 - (new - 'process - 'collide-shape-moving - self - (collide-list-enum usually-hit-by-player) + (let ((s5-0 (new 'process 'collide-shape-moving self (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 12288.0) + (set-root-prim! s5-0 s4-0) ) - ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> self root) s5-0) ) - (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) - (set! (-> s5-0 reaction) default-collision-reaction) - (set! - (-> s5-0 no-reaction) - (the-as - (function collide-shape-moving collide-shape-intersect vector vector none) - nothing - ) - ) - (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 512)) - (set! (-> s4-0 collide-with) (the-as uint 16)) - (set! (-> s4-0 prim-core action) (the-as uint 1)) - (set! (-> s4-0 prim-core offense) 4) - (set! (-> s4-0 transform-index) 3) - (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 12288.0) - (set-root-prim! s5-0 s4-0) - ) - (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) - (backup-collide-with-as s5-0) - (set! (-> self root) s5-0) - ) (set! (-> self root trans quad) (-> arg0 quad)) (initialize-skeleton self *swamp-rock-sg* '()) (nav-mesh-connect self (-> self root) (the-as nav-control #f)) - (set! - (-> self part) - (create-launch-control (-> *part-group-id-table* 291) self) - ) + (set! (-> self part) (create-launch-control (-> *part-group-id-table* 291) self)) (go swamp-rock-idle) (none) ) @@ -1203,34 +848,32 @@ :longest-edge (meters 0) ) -(define - *tar-plat-constants* - (new 'static 'rigid-body-platform-constants - :drag-factor 2.0 - :buoyancy-factor 1.5 - :max-buoyancy-depth (meters 2.0) - :gravity-factor 1.0 - :gravity (meters 80.0) - :player-weight (meters 60.0) - :player-bonk-factor 0.5 - :player-dive-factor 1.0 - :player-force-distance (meters 2.0) - :player-force-clamp (meters 1000000.0) - :player-force-timeout #x1e - :explosion-force (meters 1000.0) - :linear-damping 0.9 - :angular-damping 0.9 - :control-point-count 4 - :mass 1.0 - :inertial-tensor-x (meters 6.0) - :inertial-tensor-y (meters 2.0) - :inertial-tensor-z (meters 6.0) - :cm-joint-y (meters -2.0) - :idle-distance (meters 50.0) - :platform #t - :sound-name "tar-plat" - ) - ) +(define *tar-plat-constants* (new 'static 'rigid-body-platform-constants + :drag-factor 2.0 + :buoyancy-factor 1.5 + :max-buoyancy-depth (meters 2.0) + :gravity-factor 1.0 + :gravity (meters 80.0) + :player-weight (meters 60.0) + :player-bonk-factor 0.5 + :player-dive-factor 1.0 + :player-force-distance (meters 2.0) + :player-force-clamp (meters 1000000.0) + :player-force-timeout #x1e + :explosion-force (meters 1000.0) + :linear-damping 0.9 + :angular-damping 0.9 + :control-point-count 4 + :mass 1.0 + :inertial-tensor-x (meters 6.0) + :inertial-tensor-y (meters 2.0) + :inertial-tensor-z (meters 6.0) + :cm-joint-y (meters -2.0) + :idle-distance (meters 50.0) + :platform #t + :sound-name "tar-plat" + ) + ) (deftype tar-plat (rigid-body-platform) ((anchor-point vector :inline :offset-assert 736) @@ -1244,26 +887,14 @@ (defmethod TODO-RENAME-22 tar-plat ((obj tar-plat) (arg0 vector) (arg1 float)) - (+ - (-> obj float-height) - (-> obj float-height-offset) - (* - 512.0 - (cos - (* 109.22667 (+ (* 60.0 arg1) (* 0.03 (-> arg0 x)) (* 0.03 (-> arg0 z)))) + (+ (-> obj float-height) + (-> obj float-height-offset) + (* 512.0 (cos (* 109.22667 (+ (* 60.0 arg1) (* 0.03 (-> arg0 x)) (* 0.03 (-> arg0 z)))))) ) - ) - ) ) (defmethod TODO-RENAME-23 tar-plat ((obj tar-plat) (arg0 float)) - ((the-as - (function rigid-body-platform basic none) - (find-parent-method tar-plat 23) - ) - obj - (the-as basic arg0) - ) + ((the-as (function rigid-body-platform basic none) (find-parent-method tar-plat 23)) obj (the-as basic arg0)) (TODO-RENAME-27 obj (-> obj anchor-point)) 0 (none) @@ -1272,17 +903,14 @@ (defstate rigid-body-platform-idle (tar-plat) :virtual #t :enter - (behavior () - (ja-channel-set! 0) - (none) - ) + (behavior () (ja-channel-set! 0) (none)) :code (behavior () - (while #t - (suspend) + (while #t + (suspend) + ) + (none) ) - (none) - ) :post (the-as (function none :behavior tar-plat) ja-post) ) @@ -1291,110 +919,73 @@ :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior tar-plat) - rigid-body-platform-event-handler - ) + (function process int symbol event-message-block object :behavior tar-plat) + rigid-body-platform-event-handler + ) :trans (behavior () - (cond - ((or - (not *target*) - (< - (-> self info idle-distance) - (vector-vector-distance - (-> self root-overlay trans) - (-> *target* control trans) + (cond + ((or (not *target*) (< (-> self info idle-distance) + (vector-vector-distance (-> self root-overlay trans) (-> *target* control trans)) + ) + ) + (let ((f30-1 -2048.0)) + (set! (-> self float-height-offset) + (seek (-> self float-height-offset) f30-1 (* 2048.0 (-> *display* seconds-per-frame))) + ) + (if (= (-> self float-height-offset) f30-1) + (go-virtual rigid-body-platform-idle) + ) + ) + ) + (else + (set! (-> self float-height-offset) + (seek (-> self float-height-offset) 4096.0 (* 2048.0 (-> *display* seconds-per-frame))) + ) ) - ) ) - (let ((f30-1 -2048.0)) - (set! - (-> self float-height-offset) - (seek - (-> self float-height-offset) - f30-1 - (* 2048.0 (-> *display* seconds-per-frame)) - ) - ) - (if (= (-> self float-height-offset) f30-1) - (go-virtual rigid-body-platform-idle) - ) - ) - ) - (else - (set! - (-> self float-height-offset) - (seek - (-> self float-height-offset) - 4096.0 - (* 2048.0 (-> *display* seconds-per-frame)) - ) - ) - ) + (none) ) - (none) - ) :code (behavior () - (ja-channel-push! 1 30) - (let ((v1-2 (-> self skel root-channel 0))) - (set! - (-> v1-2 frame-group) - (the-as art-joint-anim (-> self draw art-group data 3)) - ) + (ja-channel-push! 1 30) + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) + ) + (while #t + (suspend) + ) + (none) ) - (let ((v1-5 (-> self skel root-channel 0))) - (set! (-> v1-5 num-func) num-func-identity) - (set! (-> v1-5 frame-num) 0.0) - ) - (while #t - (suspend) - ) - (none) - ) :post (the-as (function none :behavior tar-plat) rigid-body-platform-post) ) (defmethod TODO-RENAME-30 tar-plat ((obj tar-plat)) - (let - ((s5-0 - (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) - ) - ) - (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) - (set! (-> s5-0 reaction) default-collision-reaction) - (set! - (-> s5-0 no-reaction) - (the-as - (function collide-shape-moving collide-shape-intersect vector vector none) - nothing - ) - ) - (dummy-29 s5-0 1) - (let - ((s4-0 - (new - 'process - 'collide-shape-prim-mesh - s5-0 - (the-as uint 0) - (the-as uint 0) - ) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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 19)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 20480.0) + (set-root-prim! s5-0 s4-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 19)) - (set! (-> s4-0 prim-core offense) 4) - (set! (-> s4-0 transform-index) 3) - (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 20480.0) - (set-root-prim! s5-0 s4-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-overlay) s5-0) ) - (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) - (backup-collide-with-as s5-0) - (set! (-> obj root-overlay) s5-0) - ) 0 (none) ) @@ -1405,26 +996,20 @@ (set! (-> obj float-height) (-> obj entity extra trans y)) (set! (-> obj float-height-offset) -2048.0) (let ((s5-0 (-> obj info control-point-count))) - (dotimes (s4-0 s5-0) - (let ((s3-0 (-> obj control-point-array data s4-0))) - (let ((f26-0 (+ 8192.0 (* 65536.0 (/ (the float s4-0) (the float s5-0))))) - (f28-0 20480.0) - (f30-0 12288.0) - ) - (set! - (-> s3-0 local-pos x) - (fmax (fmin (* f28-0 (sin f26-0)) f30-0) (- f30-0)) - ) - (set! (-> s3-0 local-pos y) 0.0) - (set! - (-> s3-0 local-pos z) - (fmax (fmin (* f28-0 (cos f26-0)) f30-0) (- f30-0)) - ) + (dotimes (s4-0 s5-0) + (let ((s3-0 (-> obj control-point-array data s4-0))) + (let ((f26-0 (+ 8192.0 (* 65536.0 (/ (the float s4-0) (the float s5-0))))) + (f28-0 20480.0) + (f30-0 12288.0) + ) + (set! (-> s3-0 local-pos x) (fmax (fmin (* f28-0 (sin f26-0)) f30-0) (- f30-0))) + (set! (-> s3-0 local-pos y) 0.0) + (set! (-> s3-0 local-pos z) (fmax (fmin (* f28-0 (cos f26-0)) f30-0) (- f30-0))) + ) + (set! (-> s3-0 local-pos w) 1.0) + ) ) - (set! (-> s3-0 local-pos w) 1.0) - ) ) - ) (nav-mesh-connect obj (-> obj root-overlay) (the-as nav-control #f)) (set! (-> obj anchor-point quad) (-> obj root-overlay trans quad)) 0 @@ -1469,56 +1054,42 @@ :virtual #t :code (behavior () - (suspend) - (process-drawable-delay-player 300) - (let* ((gp-0 (get-process *default-dead-pool* pov-camera #x4000)) - (gp-1 (ppointer->handle (when gp-0 - (let - ((t9-2 (method-of-type pov-camera activate)) - ) - (t9-2 - (the-as pov-camera gp-0) - self - 'pov-camera - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - gp-0 - pov-camera-init-by-other - (-> self root trans) - *swampcam-sg* - "swamp-ambush" - 0 - #f - '() - ) - (-> gp-0 ppointer) - ) + (suspend) + (process-drawable-delay-player 300) + (let* ((gp-0 (get-process *default-dead-pool* pov-camera #x4000)) + (gp-1 + (ppointer->handle + (when gp-0 + (let ((t9-2 (method-of-type pov-camera activate))) + (t9-2 (the-as pov-camera gp-0) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 pov-camera-init-by-other (-> self root trans) *swampcam-sg* "swamp-ambush" 0 #f '()) + (-> gp-0 ppointer) ) + ) + ) ) - ) - (while (handle->process (the-as handle gp-1)) - (suspend) - ) + (while (handle->process (the-as handle gp-1)) + (suspend) + ) + ) + (go-virtual battlecontroller-active) + (none) ) - (go-virtual battlecontroller-active) - (none) - ) ) (defstate battlecontroller-die (swamp-battlecontroller) :virtual #t :code (behavior () - (process-entity-status! self (entity-perm-status complete) #t) - ((the-as - (function none :behavior battlecontroller) - (-> (method-of-type battlecontroller battlecontroller-die) code) + (process-entity-status! self (entity-perm-status complete) #t) + ((the-as + (function none :behavior battlecontroller) + (-> (method-of-type battlecontroller battlecontroller-die) code) + ) ) + (none) ) - (none) - ) ) diff --git a/goal_src/levels/village2/assistant-village2.gc b/goal_src/levels/village2/assistant-village2.gc index 32d37403e6..64cf0f8709 100644 --- a/goal_src/levels/village2/assistant-village2.gc +++ b/goal_src/levels/village2/assistant-village2.gc @@ -20,24 +20,21 @@ (defmethod relocate assistant-levitator ((obj assistant-levitator) (arg0 int)) (dotimes (v1-0 4) - (if (nonzero? (-> obj particle v1-0)) - (&+! (-> obj particle v1-0) arg0) + (if (nonzero? (-> obj particle v1-0)) + (&+! (-> obj particle v1-0) arg0) + ) ) - ) - (the-as - assistant-levitator - ((method-of-type process-taskable relocate) obj arg0) - ) + (the-as assistant-levitator ((method-of-type process-taskable relocate) obj arg0)) ) (defmethod deactivate assistant-levitator ((obj assistant-levitator)) (dotimes (s5-0 4) - (let ((a0-1 (-> obj particle s5-0))) - (if (nonzero? a0-1) - (kill-and-free-particles a0-1) - ) + (let ((a0-1 (-> obj particle s5-0))) + (if (nonzero? a0-1) + (kill-and-free-particles a0-1) + ) + ) ) - ) ((method-of-type process-taskable deactivate) obj) (none) ) @@ -61,959 +58,375 @@ (defmethod dummy-52 assistant-levitator ((obj assistant-levitator)) (let ((v1-1 (-> obj draw shadow-ctrl))) - (when v1-1 - (let ((f0-0 (-> obj root-override trans y))) - (let ((a0-2 v1-1)) - (set! (-> a0-2 settings bot-plane w) (- (+ -409.6 f0-0))) + (when v1-1 + (let ((f0-0 (-> obj root-override trans y))) + (let ((a0-2 v1-1)) + (set! (-> a0-2 settings bot-plane w) (- (+ -409.6 f0-0))) + ) + 0 + (let ((a0-4 v1-1)) + (set! (-> a0-4 settings top-plane w) (- (+ 4096.0 f0-0))) + ) + ) + 0 + (set! (-> v1-1 settings flags) (logand -9 (-> v1-1 settings flags))) ) - 0 - (let ((a0-4 v1-1)) - (set! (-> a0-4 settings top-plane w) (- (+ 4096.0 f0-0))) - ) - ) - 0 - (set! (-> v1-1 settings flags) (logand -9 (-> v1-1 settings flags))) ) - ) (none) ) (defmethod draw-npc-shadow assistant-levitator ((obj assistant-levitator)) (-> obj draw shadow-ctrl) (cond - ((and - (-> obj draw shadow) - (zero? (-> obj draw cur-lod)) - (logtest? (-> obj draw status) 8) + ((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)) ) - (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 + ) ) - (else - (let ((v1-14 (-> obj draw shadow-ctrl))) - (logior! (-> v1-14 settings flags) 32) - ) - 0 - ) - ) (none) ) (defmethod play-anim! assistant-bluehut ((obj assistant-bluehut) (arg0 symbol)) (with-pp - (set! (-> obj talk-message) (the-as uint 292)) - (case (current-status (-> obj tasks)) - (((task-status unknown) - (task-status need-hint) - (task-status need-introduction) - ) - (if (not arg0) - (set! (-> obj will-talk) #t) - ) - (case (current-task (-> obj tasks)) - (((game-task village2-levitator)) - (when arg0 - (close-status! (-> obj tasks) (task-status need-introduction)) - (send-event (-> obj sage extra process) 'clone (process->handle obj)) - (send-event - (-> (entity-by-type flutflut-bluehut) extra process) - 'clone - (process->handle obj) + (set! (-> obj talk-message) (the-as uint 292)) + (case (current-status (-> obj tasks)) + (((task-status unknown) (task-status need-hint) (task-status need-introduction)) + (if (not arg0) + (set! (-> obj will-talk) #t) ) - ) - (new 'static 'spool-anim - :name "assistant-village2-introduction" - :index 15 - :parts 16 - :command-list - '( - (0 - send-event - target - draw - #f + (case (current-task (-> obj tasks)) + (((game-task village2-levitator)) + (when arg0 + (close-status! (-> obj tasks) (task-status need-introduction)) + (send-event (-> obj sage extra process) 'clone (process->handle obj)) + (send-event (-> (entity-by-type flutflut-bluehut) extra process) 'clone (process->handle obj)) + ) + (new 'static 'spool-anim + :name "assistant-village2-introduction" + :index 15 + :parts 16 + :command-list + '((0 send-event target draw #f) + (0 kill "villageb-part-33") + ((the binteger 95) send-event target draw #t) + ((the binteger 95) joint "cameraB") + ((the binteger 131) send-event target draw #f) + ((the binteger 131) joint "camera") + ((the binteger 190) setting-reset ocean-off #t) + ((the binteger 190) kill "pontoonten-20") + ((the binteger 190) kill "pontoonten-19") + ((the binteger 190) kill "pontoonten-18") + ((the binteger 190) kill "pontoonten-17") + ((the binteger 190) kill "pontoonten-16") + ((the binteger 190) kill "pontoonten-15") + ((the binteger 190) kill "pontoonten-14") + ((the binteger 190) kill "pontoonten-13") + ((the binteger 190) kill "pontoonten-12") + ((the binteger 190) kill "pontoonten-11") + ((the binteger 190) kill "pontoonten-10") + ((the binteger 190) kill "pontoonten-9") + ((the binteger 190) kill "pontoonten-8") + ((the binteger 190) kill "pontoonten-7") + ((the binteger 190) kill "pontoonten-6") + ((the binteger 190) kill "pontoonfive-3") + ((the binteger 190) kill "pontoonfive-4") + ((the binteger 190) kill "pontoonfive-5") + ((the binteger 190) kill "pontoonfive-6") + ((the binteger 190) kill "pontoonfive-7") + ((the binteger 190) kill "pontoonfive-8") + ((the binteger 190) kill "pontoonfive-12") + ((the binteger 190) kill "pontoonfive-13") + ((the binteger 190) kill "pontoonfive-14") + ((the binteger 190) kill "pontoonfive-15") + ((the binteger 190) kill "pontoonfive-16") + ((the binteger 190) kill "pontoonfive-17") + ((the binteger 190) kill "pontoonfive-18") + ((the binteger 190) kill "pontoonfive-19") + ((the binteger 190) kill "pontoonfive-20") + ((the binteger 190) kill "allpontoons-1") + ((the binteger 190) kill "med-res-level-12") + ((the binteger 190) kill "med-res-level-13") + ((the binteger 190) kill "med-res-level-15") + ((the binteger 190) kill "swamp-blimp-3") + ((the binteger 190) kill "barrel-85") + ((the binteger 190) kill "barrel-86") + ((the binteger 190) kill "money-2844") + ((the binteger 190) kill "money-2845") + ((the binteger 190) kill "money-2846") + ((the binteger 190) kill "money-2847") + ((the binteger 190) kill "money-2848") + ((the binteger 190) kill "money-2849") + ((the binteger 190) kill "money-4923") + ((the binteger 190) kill "money-4924") + ((the binteger 190) kill "money-4925") + ((the binteger 190) kill "money-4926") + ((the binteger 190) kill "money-4927") + ((the binteger 190) kill "eco-27") + ((the binteger 190) kill "sharkey-25") + ((the binteger 190) kill "barrel-117") + ((the binteger 190) kill "barrel-118") + ((the binteger 190) kill "barrel-119") + ((the binteger 190) kill "barrel-120") + ((the binteger 190) kill "barrel-121") + ((the binteger 190) kill "barrel-122") + ((the binteger 190) kill "crate-3129") + ((the binteger 190) kill "crate-3132") + ((the binteger 190) kill "crate-3133") + ((the binteger 190) kill "villageb-part-32") + ((the binteger 190) kill "villageb-part-30") + ((the binteger 190) kill "exit-chamber-dummy-1") + ((the binteger 190) kill "villageb-part-34") + ((the binteger 191) send-event target draw #t) + ((the binteger 191) joint "cameraB") + ((the binteger 241) joint "camera") + ((the binteger 241) send-event target draw #f) + ((the binteger 241) setting-unset ocean-off) + ((the binteger 241) dead "pontoonten-20") + ((the binteger 241) dead "pontoonten-19") + ((the binteger 241) dead "pontoonten-18") + ((the binteger 241) dead "pontoonten-17") + ((the binteger 241) dead "pontoonten-16") + ((the binteger 241) dead "pontoonten-15") + ((the binteger 241) dead "pontoonten-14") + ((the binteger 241) dead "pontoonten-13") + ((the binteger 241) dead "pontoonten-12") + ((the binteger 241) dead "pontoonten-11") + ((the binteger 241) dead "pontoonten-10") + ((the binteger 241) dead "pontoonten-9") + ((the binteger 241) dead "pontoonten-8") + ((the binteger 241) dead "pontoonten-7") + ((the binteger 241) dead "pontoonten-6") + ((the binteger 241) dead "pontoonfive-3") + ((the binteger 241) dead "pontoonfive-4") + ((the binteger 241) dead "pontoonfive-5") + ((the binteger 241) dead "pontoonfive-6") + ((the binteger 241) dead "pontoonfive-7") + ((the binteger 241) dead "pontoonfive-8") + ((the binteger 241) dead "pontoonfive-12") + ((the binteger 241) dead "pontoonfive-13") + ((the binteger 241) dead "pontoonfive-14") + ((the binteger 241) dead "pontoonfive-15") + ((the binteger 241) dead "pontoonfive-16") + ((the binteger 241) dead "pontoonfive-17") + ((the binteger 241) dead "pontoonfive-18") + ((the binteger 241) dead "pontoonfive-19") + ((the binteger 241) dead "pontoonfive-20") + ((the binteger 241) dead "allpontoons-1") + ((the binteger 241) dead "med-res-level-12") + ((the binteger 241) dead "med-res-level-13") + ((the binteger 241) dead "med-res-level-15") + ((the binteger 241) dead "swamp-blimp-3") + ((the binteger 241) dead "barrel-85") + ((the binteger 241) dead "barrel-86") + ((the binteger 241) dead "money-2844") + ((the binteger 241) dead "money-2845") + ((the binteger 241) dead "money-2846") + ((the binteger 241) dead "money-2847") + ((the binteger 241) dead "money-2848") + ((the binteger 241) dead "money-2849") + ((the binteger 241) dead "money-4923") + ((the binteger 241) dead "money-4924") + ((the binteger 241) dead "money-4925") + ((the binteger 241) dead "money-4926") + ((the binteger 241) dead "money-4927") + ((the binteger 241) dead "eco-27") + ((the binteger 241) dead "sharkey-25") + ((the binteger 241) dead "barrel-117") + ((the binteger 241) dead "barrel-118") + ((the binteger 241) dead "barrel-119") + ((the binteger 241) dead "barrel-120") + ((the binteger 241) dead "barrel-121") + ((the binteger 241) dead "barrel-122") + ((the binteger 241) dead "crate-3129") + ((the binteger 241) dead "crate-3132") + ((the binteger 241) dead "crate-3133") + ((the binteger 241) dead "villageb-part-32") + ((the binteger 241) dead "villageb-part-30") + ((the binteger 321) joint "cameraB") + ((the binteger 352) joint "camera") + ((the binteger 383) joint "cameraB") + ((the binteger 411) joint "camera") + ((the binteger 501) joint "cameraB") + ((the binteger 501) send-event target draw #t) + ((the binteger 567) joint "camera") + ((the binteger 634) alive "fireboulder-6") + ((the binteger 635) joint "cameraB") + ((the binteger 701) joint "camera") + ((the binteger 741) joint "cameraB") + ((the binteger 784) joint "camera") + ((the binteger 936) joint "cameraB") + ((the binteger 1065) joint "camera") + ((the binteger 1145) joint "cameraB") + ((the binteger 1241) joint "camera") ) - (0 - kill - "villageb-part-33" - ) - ((the binteger 95) - send-event - target - draw - #t - ) - ((the binteger 95) - joint - "cameraB" - ) - ((the binteger 131) - send-event - target - draw - #f - ) - ((the binteger 131) - joint - "camera" - ) - ((the binteger 190) - setting-reset - ocean-off - #t - ) - ((the binteger 190) - kill - "pontoonten-20" - ) - ((the binteger 190) - kill - "pontoonten-19" - ) - ((the binteger 190) - kill - "pontoonten-18" - ) - ((the binteger 190) - kill - "pontoonten-17" - ) - ((the binteger 190) - kill - "pontoonten-16" - ) - ((the binteger 190) - kill - "pontoonten-15" - ) - ((the binteger 190) - kill - "pontoonten-14" - ) - ((the binteger 190) - kill - "pontoonten-13" - ) - ((the binteger 190) - kill - "pontoonten-12" - ) - ((the binteger 190) - kill - "pontoonten-11" - ) - ((the binteger 190) - kill - "pontoonten-10" - ) - ((the binteger 190) - kill - "pontoonten-9" - ) - ((the binteger 190) - kill - "pontoonten-8" - ) - ((the binteger 190) - kill - "pontoonten-7" - ) - ((the binteger 190) - kill - "pontoonten-6" - ) - ((the binteger 190) - kill - "pontoonfive-3" - ) - ((the binteger 190) - kill - "pontoonfive-4" - ) - ((the binteger 190) - kill - "pontoonfive-5" - ) - ((the binteger 190) - kill - "pontoonfive-6" - ) - ((the binteger 190) - kill - "pontoonfive-7" - ) - ((the binteger 190) - kill - "pontoonfive-8" - ) - ((the binteger 190) - kill - "pontoonfive-12" - ) - ((the binteger 190) - kill - "pontoonfive-13" - ) - ((the binteger 190) - kill - "pontoonfive-14" - ) - ((the binteger 190) - kill - "pontoonfive-15" - ) - ((the binteger 190) - kill - "pontoonfive-16" - ) - ((the binteger 190) - kill - "pontoonfive-17" - ) - ((the binteger 190) - kill - "pontoonfive-18" - ) - ((the binteger 190) - kill - "pontoonfive-19" - ) - ((the binteger 190) - kill - "pontoonfive-20" - ) - ((the binteger 190) - kill - "allpontoons-1" - ) - ((the binteger 190) - kill - "med-res-level-12" - ) - ((the binteger 190) - kill - "med-res-level-13" - ) - ((the binteger 190) - kill - "med-res-level-15" - ) - ((the binteger 190) - kill - "swamp-blimp-3" - ) - ((the binteger 190) - kill - "barrel-85" - ) - ((the binteger 190) - kill - "barrel-86" - ) - ((the binteger 190) - kill - "money-2844" - ) - ((the binteger 190) - kill - "money-2845" - ) - ((the binteger 190) - kill - "money-2846" - ) - ((the binteger 190) - kill - "money-2847" - ) - ((the binteger 190) - kill - "money-2848" - ) - ((the binteger 190) - kill - "money-2849" - ) - ((the binteger 190) - kill - "money-4923" - ) - ((the binteger 190) - kill - "money-4924" - ) - ((the binteger 190) - kill - "money-4925" - ) - ((the binteger 190) - kill - "money-4926" - ) - ((the binteger 190) - kill - "money-4927" - ) - ((the binteger 190) - kill - "eco-27" - ) - ((the binteger 190) - kill - "sharkey-25" - ) - ((the binteger 190) - kill - "barrel-117" - ) - ((the binteger 190) - kill - "barrel-118" - ) - ((the binteger 190) - kill - "barrel-119" - ) - ((the binteger 190) - kill - "barrel-120" - ) - ((the binteger 190) - kill - "barrel-121" - ) - ((the binteger 190) - kill - "barrel-122" - ) - ((the binteger 190) - kill - "crate-3129" - ) - ((the binteger 190) - kill - "crate-3132" - ) - ((the binteger 190) - kill - "crate-3133" - ) - ((the binteger 190) - kill - "villageb-part-32" - ) - ((the binteger 190) - kill - "villageb-part-30" - ) - ((the binteger 190) - kill - "exit-chamber-dummy-1" - ) - ((the binteger 190) - kill - "villageb-part-34" - ) - ((the binteger 191) - send-event - target - draw - #t - ) - ((the binteger 191) - joint - "cameraB" - ) - ((the binteger 241) - joint - "camera" - ) - ((the binteger 241) - send-event - target - draw - #f - ) - ((the binteger 241) - setting-unset - ocean-off - ) - ((the binteger 241) - dead - "pontoonten-20" - ) - ((the binteger 241) - dead - "pontoonten-19" - ) - ((the binteger 241) - dead - "pontoonten-18" - ) - ((the binteger 241) - dead - "pontoonten-17" - ) - ((the binteger 241) - dead - "pontoonten-16" - ) - ((the binteger 241) - dead - "pontoonten-15" - ) - ((the binteger 241) - dead - "pontoonten-14" - ) - ((the binteger 241) - dead - "pontoonten-13" - ) - ((the binteger 241) - dead - "pontoonten-12" - ) - ((the binteger 241) - dead - "pontoonten-11" - ) - ((the binteger 241) - dead - "pontoonten-10" - ) - ((the binteger 241) - dead - "pontoonten-9" - ) - ((the binteger 241) - dead - "pontoonten-8" - ) - ((the binteger 241) - dead - "pontoonten-7" - ) - ((the binteger 241) - dead - "pontoonten-6" - ) - ((the binteger 241) - dead - "pontoonfive-3" - ) - ((the binteger 241) - dead - "pontoonfive-4" - ) - ((the binteger 241) - dead - "pontoonfive-5" - ) - ((the binteger 241) - dead - "pontoonfive-6" - ) - ((the binteger 241) - dead - "pontoonfive-7" - ) - ((the binteger 241) - dead - "pontoonfive-8" - ) - ((the binteger 241) - dead - "pontoonfive-12" - ) - ((the binteger 241) - dead - "pontoonfive-13" - ) - ((the binteger 241) - dead - "pontoonfive-14" - ) - ((the binteger 241) - dead - "pontoonfive-15" - ) - ((the binteger 241) - dead - "pontoonfive-16" - ) - ((the binteger 241) - dead - "pontoonfive-17" - ) - ((the binteger 241) - dead - "pontoonfive-18" - ) - ((the binteger 241) - dead - "pontoonfive-19" - ) - ((the binteger 241) - dead - "pontoonfive-20" - ) - ((the binteger 241) - dead - "allpontoons-1" - ) - ((the binteger 241) - dead - "med-res-level-12" - ) - ((the binteger 241) - dead - "med-res-level-13" - ) - ((the binteger 241) - dead - "med-res-level-15" - ) - ((the binteger 241) - dead - "swamp-blimp-3" - ) - ((the binteger 241) - dead - "barrel-85" - ) - ((the binteger 241) - dead - "barrel-86" - ) - ((the binteger 241) - dead - "money-2844" - ) - ((the binteger 241) - dead - "money-2845" - ) - ((the binteger 241) - dead - "money-2846" - ) - ((the binteger 241) - dead - "money-2847" - ) - ((the binteger 241) - dead - "money-2848" - ) - ((the binteger 241) - dead - "money-2849" - ) - ((the binteger 241) - dead - "money-4923" - ) - ((the binteger 241) - dead - "money-4924" - ) - ((the binteger 241) - dead - "money-4925" - ) - ((the binteger 241) - dead - "money-4926" - ) - ((the binteger 241) - dead - "money-4927" - ) - ((the binteger 241) - dead - "eco-27" - ) - ((the binteger 241) - dead - "sharkey-25" - ) - ((the binteger 241) - dead - "barrel-117" - ) - ((the binteger 241) - dead - "barrel-118" - ) - ((the binteger 241) - dead - "barrel-119" - ) - ((the binteger 241) - dead - "barrel-120" - ) - ((the binteger 241) - dead - "barrel-121" - ) - ((the binteger 241) - dead - "barrel-122" - ) - ((the binteger 241) - dead - "crate-3129" - ) - ((the binteger 241) - dead - "crate-3132" - ) - ((the binteger 241) - dead - "crate-3133" - ) - ((the binteger 241) - dead - "villageb-part-32" - ) - ((the binteger 241) - dead - "villageb-part-30" - ) - ((the binteger 321) - joint - "cameraB" - ) - ((the binteger 352) - joint - "camera" - ) - ((the binteger 383) - joint - "cameraB" - ) - ((the binteger 411) - joint - "camera" - ) - ((the binteger 501) - joint - "cameraB" - ) - ((the binteger 501) - send-event - target - draw - #t - ) - ((the binteger 567) - joint - "camera" - ) - ((the binteger 634) - alive - "fireboulder-6" - ) - ((the binteger 635) - joint - "cameraB" - ) - ((the binteger 701) - joint - "camera" - ) - ((the binteger 741) - joint - "cameraB" - ) - ((the binteger 784) - joint - "camera" - ) - ((the binteger 936) - joint - "cameraB" - ) - ((the binteger 1065) - joint - "camera" - ) - ((the binteger 1145) - joint - "cameraB" - ) - ((the binteger 1241) joint "camera") ) ) - ) - (((game-task sunken-room)) - (when arg0 - (let* ((s5-2 (-> obj tasks)) - (s4-0 (method-of-object s5-2 save-reminder)) - (a1-7 (new 'stack-no-clear 'event-message-block)) - ) - (set! (-> a1-7 from) pp) - (set! (-> a1-7 num-params) 2) - (set! (-> a1-7 message) 'query) - (set! (-> a1-7 param 0) (the-as uint 'pickup)) - (set! (-> a1-7 param 1) (the-as uint 6)) - (s4-0 - s5-2 - (the int (the-as float (send-event-function *target* a1-7))) - 1 - ) + (((game-task sunken-room)) + (when arg0 + (let* ((s5-2 (-> obj tasks)) + (s4-0 (method-of-object s5-2 save-reminder)) + (a1-7 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-7 from) pp) + (set! (-> a1-7 num-params) 2) + (set! (-> a1-7 message) 'query) + (set! (-> a1-7 param 0) (the-as uint 'pickup)) + (set! (-> a1-7 param 1) (the-as uint 6)) + (s4-0 s5-2 (the int (the-as float (send-event-function *target* a1-7))) 1) + ) + (close-status! (-> obj tasks) (task-status need-introduction)) + (let ((s5-3 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj jaws) + (ppointer->handle + (when s5-3 + (let ((t9-10 (method-of-type manipy activate))) + (t9-10 (the-as manipy s5-3) obj 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process s5-3 manipy-init (-> obj root-override trans) (-> obj entity) *jaws-sg* #f) + (-> s5-3 ppointer) + ) + ) + ) + ) + (let ((v1-42 (handle->process (-> obj jaws)))) + (if v1-42 + (set! (-> (the-as manipy v1-42) draw light-index) (the-as uint 1)) + ) + ) + (send-event (handle->process (-> obj jaws)) 'anim-mode 'clone-anim) + (send-event (handle->process (-> obj jaws)) 'center-joint 3) + (send-event (-> (entity-by-type flutflut-bluehut) extra process) 'clone (process->handle obj)) + ) + (new 'static 'spool-anim + :name "assistant-village2-introduction-room" + :index 21 + :parts 10 + :command-list + '(((the binteger 197) joint "cameraB") + ((the binteger 351) joint "camera") + ((the binteger 431) joint "cameraB") + ((the binteger 553) joint "camera") + ((the binteger 631) joint "cameraB") + ((the binteger 842) joint "camera") + ((the binteger 900) joint "cameraB") + ((the binteger 1069) joint "camera") + ) + ) ) - (close-status! (-> obj tasks) (task-status need-introduction)) - (let ((s5-3 (get-process *default-dead-pool* manipy #x4000))) - (set! (-> obj jaws) (ppointer->handle (when s5-3 - (let - ((t9-10 - (method-of-type - manipy - activate - ) - ) - ) - (t9-10 - (the-as manipy s5-3) - obj - 'manipy - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-3 - manipy-init - (-> obj root-override trans) - (-> obj entity) - *jaws-sg* - #f - ) - (-> s5-3 ppointer) - ) - ) - ) - ) - (let ((v1-42 (handle->process (-> obj jaws)))) - (if v1-42 - (set! (-> (the-as manipy v1-42) draw light-index) (the-as uint 1)) - ) - ) - (send-event (handle->process (-> obj jaws)) 'anim-mode 'clone-anim) - (send-event (handle->process (-> obj jaws)) 'center-joint 3) - (send-event - (-> (entity-by-type flutflut-bluehut) extra process) - 'clone - (process->handle obj) - ) - ) - (new 'static 'spool-anim - :name "assistant-village2-introduction-room" - :index 21 - :parts 10 - :command-list - '( - ((the binteger 197) - joint - "cameraB" - ) - ((the binteger 351) - joint - "camera" + (((game-task rolling-robbers)) + (when arg0 + (let* ((s5-5 (-> obj tasks)) + (s4-1 (method-of-object s5-5 save-reminder)) + (a1-17 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-17 from) pp) + (set! (-> a1-17 num-params) 2) + (set! (-> a1-17 message) 'query) + (set! (-> a1-17 param 0) (the-as uint 'pickup)) + (set! (-> a1-17 param 1) (the-as uint 6)) + (s4-1 s5-5 (the int (the-as float (send-event-function *target* a1-17))) 1) + ) + (close-status! (-> obj tasks) (task-status need-introduction)) ) - ((the binteger 431) - joint - "cameraB" + (new 'static 'spool-anim + :name + "assistant-village2-introduction-robbers" + :index 17 + :parts 6 + :command-list + '(((the binteger 55) joint "cameraB") + ((the binteger 145) joint "camera") + ((the binteger 207) joint "cameraB") + ((the binteger 363) joint "camera") + ) ) - ((the binteger 553) - joint - "camera" - ) - ((the binteger 631) - joint - "cameraB" - ) - ((the binteger 842) - joint - "camera" - ) - ((the binteger 900) - joint - "cameraB" - ) - ((the binteger 1069) joint "camera") - ) - ) - ) - (((game-task rolling-robbers)) - (when arg0 - (let* ((s5-5 (-> obj tasks)) - (s4-1 (method-of-object s5-5 save-reminder)) - (a1-17 (new 'stack-no-clear 'event-message-block)) - ) - (set! (-> a1-17 from) pp) - (set! (-> a1-17 num-params) 2) - (set! (-> a1-17 message) 'query) - (set! (-> a1-17 param 0) (the-as uint 'pickup)) - (set! (-> a1-17 param 1) (the-as uint 6)) - (s4-1 - s5-5 - (the int (the-as float (send-event-function *target* a1-17))) - 1 - ) - ) - (close-status! (-> obj tasks) (task-status need-introduction)) - ) - (new 'static 'spool-anim - :name - "assistant-village2-introduction-robbers" - :index 17 - :parts 6 - :command-list - '( - ((the binteger 55) - joint - "cameraB" - ) - ((the binteger 145) - joint - "camera" - ) - ((the binteger 207) - joint - "cameraB" - ) - ((the binteger 363) joint "camera") - ) - ) - ) - (else - (when arg0 - (close-status! (-> obj tasks) (task-status need-introduction)) - (send-event - (-> (entity-by-type flutflut-bluehut) extra process) - 'clone - (process->handle obj) - ) - ) - (new 'static 'spool-anim - :name - "assistant-village2-introduction-flutflut" - :index 19 - :parts 8 - :command-list - '( - ((the binteger 71) - joint - "cameraB" - ) - ((the binteger 308) - joint - "camera" - ) - ((the binteger 426) - joint - "cameraB" - ) - ((the binteger 550) - joint - "camera" - ) - ((the binteger 644) joint "cameraB") - ) - ) - ) - ) - ) - (((task-status need-reminder)) - (set! (-> obj skippable) #t) - (let ((s4-2 (+ (get-reminder (-> obj tasks) 0) 1))) - (if (< (the-as uint 2) (the-as uint s4-2)) - (set! s4-2 0) - ) - (countdown (s3-0 3) - (let ((v1-92 s4-2)) - (cond - ((zero? v1-92) - (if - (!= - (get-task-status (game-task sunken-room)) - (task-status need-reminder) - ) - (set! s4-2 1) - ) - ) - ((= v1-92 1) - (if - (!= - (get-task-status (game-task rolling-robbers)) - (task-status need-reminder) - ) - (set! s4-2 2) - ) ) (else - (if - (!= - (get-task-status (game-task swamp-flutflut)) - (task-status need-reminder) - ) - (set! s4-2 0) + (when arg0 + (close-status! (-> obj tasks) (task-status need-introduction)) + (send-event (-> (entity-by-type flutflut-bluehut) extra process) 'clone (process->handle obj)) + ) + (new 'static 'spool-anim + :name + "assistant-village2-introduction-flutflut" + :index 19 + :parts 8 + :command-list + '(((the binteger 71) joint "cameraB") + ((the binteger 308) joint "camera") + ((the binteger 426) joint "cameraB") + ((the binteger 550) joint "camera") + ((the binteger 644) joint "cameraB") + ) + ) ) - ) ) - ) ) - (if arg0 - (save-reminder (-> obj tasks) s4-2 2) + (((task-status need-reminder)) + (set! (-> obj skippable) #t) + (let ((s4-2 (+ (get-reminder (-> obj tasks) 0) 1))) + (if (< (the-as uint 2) (the-as uint s4-2)) + (set! s4-2 0) + ) + (countdown (s3-0 3) + (let ((v1-92 s4-2)) + (cond + ((zero? v1-92) + (if (!= (get-task-status (game-task sunken-room)) (task-status need-reminder)) + (set! s4-2 1) + ) + ) + ((= v1-92 1) + (if (!= (get-task-status (game-task rolling-robbers)) (task-status need-reminder)) + (set! s4-2 2) + ) + ) + (else + (if (!= (get-task-status (game-task swamp-flutflut)) (task-status need-reminder)) + (set! s4-2 0) + ) + ) + ) + ) + ) + (if arg0 + (save-reminder (-> obj tasks) s4-2 2) + ) + (cond + ((zero? s4-2) + (new 'static 'spool-anim :name "assistant-village2-reminder-1-room" :index 22 :parts 3 :command-list '()) + ) + ((= s4-2 1) + (new 'static 'spool-anim :name "assistant-village2-reminder-1-robbers" :index 18 :parts 3 :command-list '()) + ) + (else + (new 'static 'spool-anim :name "assistant-village2-reminder-1-flutflut" :index 20 :parts 3 :command-list '()) + ) + ) + ) ) - (cond - ((zero? s4-2) - (new 'static 'spool-anim - :name "assistant-village2-reminder-1-room" - :index 22 - :parts 3 - :command-list '() - ) + (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 5) ) - ((= s4-2 1) - (new 'static 'spool-anim - :name "assistant-village2-reminder-1-robbers" - :index 18 - :parts 3 - :command-list '() - ) - ) - (else - (new 'static 'spool-anim - :name - "assistant-village2-reminder-1-flutflut" - :index 20 - :parts 3 - :command-list '() - ) - ) - ) ) - ) - (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 5) - ) ) - ) ) (defmethod get-art-elem assistant-bluehut ((obj assistant-bluehut)) @@ -1022,758 +435,514 @@ (defmethod play-reminder assistant-bluehut ((obj assistant-bluehut)) (cond - ((and (-> obj will-talk) *target*) - (let* ((f30-1 (+ -1552384.0 (-> (target-pos 0) x))) - (f0-3 (+ 6352896.0 (-> (target-pos 0) z) f30-1)) - ) - (< 0.0 f0-3) + ((and (-> obj will-talk) *target*) + (let* ((f30-1 (+ -1552384.0 (-> (target-pos 0) x))) + (f0-3 (+ 6352896.0 (-> (target-pos 0) z) f30-1)) + ) + (< 0.0 f0-3) + ) ) + (else + #f + ) ) - (else - #f - ) - ) ) (defmethod target-above-threshold? assistant-bluehut ((obj assistant-bluehut)) (when (not (play-reminder obj)) - (set! (-> obj im-talking) #f) - (return #f) - ) - (let ((s5-0 (-> obj sage extra process))) - (when (not s5-0) - (let ((v1-7 #t)) - (set! (-> obj im-talking) v1-7) - (return v1-7) - ) - ) - (when (!= (-> (the-as sage-bluehut s5-0) next-state name) 'idle) (set! (-> obj im-talking) #f) (return #f) ) - (when (not (play-reminder (the-as sage-bluehut s5-0))) - (let ((v1-15 #t)) - (set! (-> obj im-talking) v1-15) - (return v1-15) - ) - ) - (let* - ((s4-0 - (vector<-cspace! - (new 'stack-no-clear 'vector) - (-> obj node-list data (-> obj center-joint-index)) - ) - ) - (s3-0 - (vector<-cspace! - (new 'stack-no-clear 'vector) - (-> - (the-as sage-bluehut s5-0) - node-list - data - (-> (the-as sage-bluehut s5-0) center-joint-index) + (let ((s5-0 (-> obj sage extra process))) + (when (not s5-0) + (let ((v1-7 #t)) + (set! (-> obj im-talking) v1-7) + (return v1-7) ) - ) ) - (f0-1 - (- - (vector-vector-distance (target-pos 0) s3-0) - (vector-vector-distance (target-pos 0) s4-0) - ) - ) - ) - (cond - ((< f0-1 -4096.0) + (when (!= (-> (the-as sage-bluehut s5-0) next-state name) 'idle) (set! (-> obj im-talking) #f) (return #f) ) - ((< 4096.0 f0-1) - (let ((v1-24 #t)) - (set! (-> obj im-talking) v1-24) - (return v1-24) - ) + (when (not (play-reminder (the-as sage-bluehut s5-0))) + (let ((v1-15 #t)) + (set! (-> obj im-talking) v1-15) + (return v1-15) + ) ) - (else - (return (-> obj im-talking)) + (let* ((s4-0 (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data (-> obj center-joint-index)))) + (s3-0 (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> (the-as sage-bluehut s5-0) node-list data (-> (the-as sage-bluehut s5-0) center-joint-index)) + ) + ) + (f0-1 (- (vector-vector-distance (target-pos 0) s3-0) (vector-vector-distance (target-pos 0) s4-0))) + ) + (cond + ((< f0-1 -4096.0) + (set! (-> obj im-talking) #f) + (return #f) + ) + ((< 4096.0 f0-1) + (let ((v1-24 #t)) + (set! (-> obj im-talking) v1-24) + (return v1-24) + ) + ) + (else + (return (-> obj im-talking)) + ) + ) ) - ) ) - ) (the-as symbol 0) ) (defmethod TODO-RENAME-43 assistant-bluehut ((obj assistant-bluehut)) - (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))) + (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 + ((= (get-task-status (game-task village2-levitator)) (task-status invalid)) + #f + ) + ((< 0.5 f30-0) + (play-ambient (-> obj ambient) "ASSTLP23" #f (-> obj root-override trans)) + ) + (else + (play-ambient (-> obj ambient) "ASSTLP24" #f (-> obj root-override trans)) ) - (cond - ((= (get-task-status (game-task village2-levitator)) (task-status invalid)) - #f + ) ) - ((< 0.5 f30-0) - (play-ambient (-> obj ambient) "ASSTLP23" #f (-> obj root-override trans)) - ) - (else - (play-ambient (-> obj ambient) "ASSTLP24" #f (-> obj root-override trans)) - ) - ) ) - ) ) (defstate idle (assistant-bluehut) :virtual #t :trans (behavior () - (case (get-task-status (game-task village2-levitator)) - (((task-status need-hint) (task-status need-introduction)) - (send-event self 'play-anim) + (case (get-task-status (game-task village2-levitator)) + (((task-status need-hint) (task-status need-introduction)) + (send-event self 'play-anim) + ) ) + ((-> (method-of-type process-taskable idle) trans)) + (none) ) - ((-> (method-of-type process-taskable idle) trans)) - (none) - ) :code (behavior () - (if (!= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (get-art-elem self) - ) - (ja-channel-push! 1 15) - ) - (while #t - (let ((gp-0 (-> self skel root-channel 0))) - (set! (-> gp-0 frame-group) (the-as art-joint-anim (get-art-elem self))) - (set! - (-> gp-0 param 0) - (the - float - (+ (-> (the-as art-joint-anim (get-art-elem self)) data 0 length) -1) - ) - ) - (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 (get-art-elem self)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-11 (-> self skel root-channel 0))) - (set! - (-> a0-11 param 0) - (the float (+ (-> a0-11 frame-group data 0 length) -1)) - ) - (set! (-> a0-11 param 1) 1.0) - (joint-control-channel-group-eval! - a0-11 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (let* ((v1-24 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-25 (the-as number (logior #x3f800000 v1-24))) - (f0-9 (+ -1.0 (the-as float v1-25))) - ) - (cond - ((< f0-9 0.33333334) - (TODO-RENAME-43 self) - (let ((a0-16 (-> self skel root-channel 0))) - (set! - (-> a0-16 frame-group) - (the-as art-joint-anim (-> self draw art-group data 11)) - ) - (set! - (-> a0-16 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 11)) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-16 param 1) 1.0) - (set! (-> a0-16 frame-num) 0.0) - (joint-control-channel-group! - a0-16 - (the-as art-joint-anim (-> self draw art-group data 11)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-17 (-> self skel root-channel 0))) - (set! - (-> a0-17 param 0) - (the float (+ (-> a0-17 frame-group data 0 length) -1)) - ) - (set! (-> a0-17 param 1) 1.0) - (joint-control-channel-group-eval! - a0-17 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (let ((gp-1 (-> *display* base-frame-counter))) - (while (let* ((s5-1 (-> *display* base-frame-counter)) - (f30-0 300.0) - (f28-0 0.16) - (f26-0 0.17000002) - (v1-55 - (/ (the-as int (rand-uint31-gen *random-generator*)) 256) - ) - (v1-56 (the-as number (logior #x3f800000 v1-55))) - ) - (< - (- - s5-1 - (the - int - (* f30-0 (+ f28-0 (* f26-0 (+ -1.0 (the-as float v1-56))))) - ) - ) - gp-1 - ) - ) - (suspend) - ) - ) - (let ((a0-21 (-> self skel root-channel 0))) - (set! (-> a0-21 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! (-> a0-21 param 0) 0.0) - (set! (-> a0-21 param 1) 1.0) - (set! - (-> a0-21 frame-num) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (joint-control-channel-group! - a0-21 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-22 (-> self skel root-channel 0))) - (set! (-> a0-22 param 0) 0.0) - (set! (-> a0-22 param 1) 1.0) - (joint-control-channel-group-eval! - a0-22 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - ) - ((< f0-9 0.6666667) - (sound-play-by-name - (static-sound-name "welding-loop") - (-> self sound-id) - 1024 - 0 - 0 - 1 - (the-as symbol (target-pos 0)) - ) - (let ((a0-27 (-> self skel root-channel 0))) - (set! - (-> a0-27 frame-group) - (the-as art-joint-anim (-> self draw art-group data 12)) - ) - (set! - (-> a0-27 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 12)) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-27 param 1) 1.0) - (set! (-> a0-27 frame-num) 0.0) - (joint-control-channel-group! - a0-27 - (the-as art-joint-anim (-> self draw art-group data 12)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-28 (-> self skel root-channel 0))) - (set! - (-> a0-28 param 0) - (the float (+ (-> a0-28 frame-group data 0 length) -1)) - ) - (set! (-> a0-28 param 1) 1.0) - (joint-control-channel-group-eval! - a0-28 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (let ((v1-111 (-> self skel root-channel 0))) - (set! - (-> v1-111 frame-group) - (the-as art-joint-anim (-> self draw art-group data 13)) - ) - ) - (let* ((f30-1 2.0) - (v1-113 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-114 (the-as number (logior #x3f800000 v1-113))) + (if (!= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (get-art-elem self) ) - (countdown - (gp-3 (+ (the int (* f30-1 (+ -1.0 (the-as float v1-114)))) 4)) - (let ((a0-35 (-> self skel root-channel 0))) - (set! (-> a0-35 frame-group) (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - ) - (set! - (-> a0-35 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-35 param 1) 1.0) - (set! (-> a0-35 frame-num) 0.0) - (joint-control-channel-group! - a0-35 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (spawn - (-> self part) - (vector<-cspace! - (new 'stack-no-clear 'vector) - (-> self node-list data 30) - ) - ) - (suspend) - (let ((a0-38 (-> self skel root-channel 0))) - (set! - (-> a0-38 param 0) - (the float (+ (-> a0-38 frame-group data 0 length) -1)) - ) - (set! (-> a0-38 param 1) 1.0) - (joint-control-channel-group-eval! - a0-38 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (let ((a0-40 (-> self skel root-channel 0))) - (set! (-> a0-40 frame-group) (if (> (-> self skel active-channels) 0) - (-> - self - skel - root-channel - 0 - frame-group - ) - ) - ) - (set! (-> a0-40 param 0) 0.0) - (set! (-> a0-40 param 1) 1.0) - (set! - (-> a0-40 frame-num) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (joint-control-channel-group! - a0-40 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (spawn - (-> self part) - (vector<-cspace! - (new 'stack-no-clear 'vector) - (-> self node-list data 30) - ) - ) - (suspend) - (let ((a0-43 (-> self skel root-channel 0))) - (set! (-> a0-43 param 0) 0.0) - (set! (-> a0-43 param 1) 1.0) - (joint-control-channel-group-eval! - a0-43 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - ) + (ja-channel-push! 1 15) ) - (let ((a0-45 (-> self skel root-channel 0))) - (set! (-> a0-45 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-45 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-45 param 1) 1.0) - (set! (-> a0-45 frame-num) 0.0) - (joint-control-channel-group! - a0-45 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) + (while #t + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (get-art-elem self))) + (set! (-> gp-0 param 0) (the float (+ (-> (the-as art-joint-anim (get-art-elem self)) data 0 length) -1))) + (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 (get-art-elem self)) num-func-seek!) ) - (until (ja-done? 0) - (spawn - (-> self part) - (vector<-cspace! - (new 'stack-no-clear 'vector) - (-> self node-list data 30) - ) - ) + (until (ja-done? 0) (suspend) - (let ((a0-48 (-> self skel root-channel 0))) - (set! - (-> a0-48 param 0) - (the float (+ (-> a0-48 frame-group data 0 length) -1)) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1))) + (set! (-> a0-11 param 1) 1.0) + (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!) ) - (set! (-> a0-48 param 1) 1.0) - (joint-control-channel-group-eval! - a0-48 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) ) - (sound-stop (-> self sound-id)) - (let ((a0-51 (-> self skel root-channel 0))) - (set! - (-> a0-51 frame-group) - (the-as art-joint-anim (-> self draw art-group data 14)) - ) - (set! - (-> a0-51 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 14)) - data - 0 - length - ) - -1 + (let* ((v1-24 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-25 (the-as number (logior #x3f800000 v1-24))) + (f0-9 (+ -1.0 (the-as float v1-25))) + ) + (cond + ((< f0-9 0.33333334) + (TODO-RENAME-43 self) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-16 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (set! (-> a0-16 frame-num) 0.0) + (joint-control-channel-group! a0-16 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((gp-1 (-> *display* base-frame-counter))) + (while (let* ((s5-1 (-> *display* base-frame-counter)) + (f30-0 300.0) + (f28-0 0.16) + (f26-0 0.17000002) + (v1-55 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-56 (the-as number (logior #x3f800000 v1-55))) + ) + (< (- s5-1 (the int (* f30-0 (+ f28-0 (* f26-0 (+ -1.0 (the-as float v1-56))))))) gp-1) + ) + (suspend) + ) + ) + (let ((a0-21 (-> self skel root-channel 0))) + (set! (-> a0-21 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-21 param 0) 0.0) + (set! (-> a0-21 param 1) 1.0) + (set! (-> a0-21 frame-num) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (joint-control-channel-group! + a0-21 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-22 (-> self skel root-channel 0))) + (set! (-> a0-22 param 0) 0.0) + (set! (-> a0-22 param 1) 1.0) + (joint-control-channel-group-eval! a0-22 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((< f0-9 0.6666667) + (sound-play-by-name + (static-sound-name "welding-loop") + (-> self sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (target-pos 0)) + ) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-27 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 12)) data 0 length) -1)) + ) + (set! (-> a0-27 param 1) 1.0) + (set! (-> a0-27 frame-num) 0.0) + (joint-control-channel-group! a0-27 (the-as art-joint-anim (-> self draw art-group data 12)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! (-> a0-28 param 0) (the float (+ (-> a0-28 frame-group data 0 length) -1))) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! a0-28 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((v1-111 (-> self skel root-channel 0))) + (set! (-> v1-111 frame-group) (the-as art-joint-anim (-> self draw art-group data 13))) + ) + (let* ((f30-1 2.0) + (v1-113 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-114 (the-as number (logior #x3f800000 v1-113))) + ) + (countdown (gp-3 (+ (the int (* f30-1 (+ -1.0 (the-as float v1-114)))) 4)) + (let ((a0-35 (-> self skel root-channel 0))) + (set! (-> a0-35 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-35 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-35 param 1) 1.0) + (set! (-> a0-35 frame-num) 0.0) + (joint-control-channel-group! + a0-35 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (spawn (-> self part) (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 30))) + (suspend) + (let ((a0-38 (-> self skel root-channel 0))) + (set! (-> a0-38 param 0) (the float (+ (-> a0-38 frame-group data 0 length) -1))) + (set! (-> a0-38 param 1) 1.0) + (joint-control-channel-group-eval! a0-38 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-40 (-> self skel root-channel 0))) + (set! (-> a0-40 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-40 param 0) 0.0) + (set! (-> a0-40 param 1) 1.0) + (set! (-> a0-40 frame-num) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (joint-control-channel-group! + a0-40 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (spawn (-> self part) (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 30))) + (suspend) + (let ((a0-43 (-> self skel root-channel 0))) + (set! (-> a0-43 param 0) 0.0) + (set! (-> a0-43 param 1) 1.0) + (joint-control-channel-group-eval! a0-43 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (let ((a0-45 (-> self skel root-channel 0))) + (set! (-> a0-45 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-45 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-45 param 1) 1.0) + (set! (-> a0-45 frame-num) 0.0) + (joint-control-channel-group! + a0-45 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (spawn (-> self part) (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 30))) + (suspend) + (let ((a0-48 (-> self skel root-channel 0))) + (set! (-> a0-48 param 0) (the float (+ (-> a0-48 frame-group data 0 length) -1))) + (set! (-> a0-48 param 1) 1.0) + (joint-control-channel-group-eval! a0-48 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (sound-stop (-> self sound-id)) + (let ((a0-51 (-> self skel root-channel 0))) + (set! (-> a0-51 frame-group) (the-as art-joint-anim (-> self draw art-group data 14))) + (set! (-> a0-51 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 14)) data 0 length) -1)) + ) + (set! (-> a0-51 param 1) 1.0) + (set! (-> a0-51 frame-num) 0.0) + (joint-control-channel-group! a0-51 (the-as art-joint-anim (-> self draw art-group data 14)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-52 (-> self skel root-channel 0))) + (set! (-> a0-52 param 0) (the float (+ (-> a0-52 frame-group data 0 length) -1))) + (set! (-> a0-52 param 1) 1.0) + (joint-control-channel-group-eval! a0-52 (the-as art-joint-anim #f) num-func-seek!) + ) + ) ) ) - ) - (set! (-> a0-51 param 1) 1.0) - (set! (-> a0-51 frame-num) 0.0) - (joint-control-channel-group! - a0-51 - (the-as art-joint-anim (-> self draw art-group data 14)) - num-func-seek! - ) ) - (until (ja-done? 0) - (suspend) - (let ((a0-52 (-> self skel root-channel 0))) - (set! - (-> a0-52 param 0) - (the float (+ (-> a0-52 frame-group data 0 length) -1)) - ) - (set! (-> a0-52 param 1) 1.0) - (joint-control-channel-group-eval! - a0-52 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - ) ) - ) + (none) ) - (none) - ) ) (defstate play-anim (assistant-bluehut) :virtual #t :exit (behavior () - (let ((a0-1 (handle->process (-> self jaws)))) - (if a0-1 - (deactivate a0-1) - ) + (let ((a0-1 (handle->process (-> self jaws)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (send-event (-> self sage extra process) 'end-mode) + (send-event (-> (entity-by-type flutflut-bluehut) extra process) 'end-mode) + ((-> (method-of-type process-taskable play-anim) exit)) + (close-specific-task! (game-task village2-levitator) (task-status need-reminder-a)) + (none) ) - (send-event (-> self sage extra process) 'end-mode) - (send-event (-> (entity-by-type flutflut-bluehut) extra process) 'end-mode) - ((-> (method-of-type process-taskable play-anim) exit)) - (close-specific-task! - (game-task village2-levitator) - (task-status need-reminder-a) - ) - (none) - ) :trans - (behavior () - '() - (none) - ) + (behavior () '() (none)) ) (defmethod should-display? assistant-bluehut ((obj assistant-bluehut)) (cond - ((not - (closed? - (-> obj tasks) - (game-task village2-levitator) - (task-status unknown) - ) + ((not (closed? (-> obj tasks) (game-task village2-levitator) (task-status unknown))) + (dummy-33 obj) + #f ) - (dummy-33 obj) - #f - ) - ((or - (= - (get-task-status (game-task village2-levitator)) - (task-status need-reward-speech) - ) - (sages-kidnapped?) + ((or (= (get-task-status (game-task village2-levitator)) (task-status need-reward-speech)) (sages-kidnapped?)) + #f ) - #f + (else + #t + ) ) - (else - #t - ) - ) ) -(set! - (-> *part-group-id-table* 288) - (new 'static 'sparticle-launch-group - :length 2 - :duration #xbb8 - :linger-duration #x5dc - :name "group-assistant-bluehut-torch" - :launcher - (new 'static 'inline-array sparticle-group-item 2 - (sp-item 1322 :fade-after (meters 30.0) :falloff-to (meters 30.0)) - (sp-item 1323 :fade-after (meters 60.0) :falloff-to (meters 80.0)) - ) - :bounds (new 'static 'sphere :w 61440.0) - ) - ) +(set! (-> *part-group-id-table* 288) (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :name "group-assistant-bluehut-torch" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1322 :fade-after (meters 30.0) :falloff-to (meters 30.0)) + (sp-item 1323 :fade-after (meters 60.0) :falloff-to (meters 80.0)) + ) + :bounds (new 'static 'sphere :w 61440.0) + ) + ) -(set! - (-> *part-id-table* 1322) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 13 - (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) - (sp-rnd-flt spt-num 0.1 1.0 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 3.0) 1.0) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 100.0 28.0 1.0) - (sp-flt spt-g 100.0) - (sp-flt spt-b 80.0) - (sp-rnd-flt spt-a 32.0 64.0 1.0) - (sp-flt spt-fade-a -6.4) - (sp-int spt-timer 10) - (sp-cpuinfo-flags bit2 bit3) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1322) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 100.0 28.0 1.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 80.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-fade-a -6.4) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1323) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 22 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-rnd-flt spt-num 0.1 1.0 1.0) - (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 128.0 128.0 1.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 64.0) - (sp-rnd-flt spt-a 32.0 96.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.08) 1.0) - (sp-flt spt-scalevel-x (meters -0.00016666666)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-g -0.2) - (sp-flt spt-fade-b -0.2) - (sp-flt spt-accel-y -8.192) - (sp-flt spt-friction 0.93) - (sp-int spt-timer 1200) - (sp-cpuinfo-flags bit2) - (sp-flt spt-userdata 140288.0) - (sp-func spt-func 'check-drop-level-assistant-bluehut) - (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 45.0) (degrees 180.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1323) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 0.1 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.08) 1.0) + (sp-flt spt-scalevel-x (meters -0.00016666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.2) + (sp-flt spt-fade-b -0.2) + (sp-flt spt-accel-y -8.192) + (sp-flt spt-friction 0.93) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags bit2) + (sp-flt spt-userdata 140288.0) + (sp-func spt-func 'check-drop-level-assistant-bluehut) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 45.0) (degrees 180.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1324) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 15 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-rnd-flt spt-num 3.0 1.0 1.0) - (sp-rnd-flt spt-scale-x (meters 0.075) (meters 0.075) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 128.0 64.0 1.0) - (sp-flt spt-g 96.0) - (sp-rnd-flt spt-a 32.0 96.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.011666667) (meters 0.0033333334) 1.0) - (sp-flt spt-fade-a -0.85333335) - (sp-flt spt-accel-y -0.68266666) - (sp-int spt-timer 300) - (sp-cpuinfo-flags bit2) - (sp-rnd-flt spt-conerot-x (degrees 50.000004) (degrees 30.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1324) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 3.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.075) (meters 0.075) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-flt spt-g 96.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.011666667) (meters 0.0033333334) 1.0) + (sp-flt spt-fade-a -0.85333335) + (sp-flt spt-accel-y -0.68266666) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 50.000004) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) -(defun - check-drop-level-assistant-bluehut - ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) +(defun check-drop-level-assistant-bluehut ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) (when (< (-> arg2 y) (-> arg1 user-float)) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (sp-kill-particle arg0 arg1) - (let* ((v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-2 (the-as number (logior #x3f800000 v1-1))) - ) - (if (< (+ -1.0 (the-as float v1-2)) 0.25) - (sound-play-by-name - (static-sound-name "water-drop") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (sp-kill-particle arg0 arg1) + (let* ((v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + ) + (if (< (+ -1.0 (the-as float v1-2)) 0.25) + (sound-play-by-name (static-sound-name "water-drop") (new-sound-id) 1024 0 0 1 #t) + ) + ) + (set-vector! gp-0 (-> arg2 x) (-> arg1 user-float) (-> arg2 z) 1.0) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 1324) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) ) - ) - (set-vector! gp-0 (-> arg2 x) (-> arg1 user-float) (-> arg2 z) 1.0) - (sp-launch-particles-var - *sp-particle-system-2d* - (-> *part-id-table* 1324) - gp-0 - (the-as sparticle-launch-state #f) - (the-as sparticle-launch-control #f) - 1.0 - ) ) - ) (none) ) -(defmethod - init-from-entity! - assistant-bluehut - ((obj assistant-bluehut) (arg0 entity-actor)) - (dummy-40 - obj - arg0 - *assistant-village2-sg* - 3 - 31 - (new 'static 'vector :w 4096.0) - 5 - ) - (set! - (-> obj part) - (create-launch-control (-> *part-group-id-table* 288) obj) - ) +(defmethod init-from-entity! assistant-bluehut ((obj assistant-bluehut) (arg0 entity-actor)) + (dummy-40 obj arg0 *assistant-village2-sg* 3 31 (new 'static 'vector :w 4096.0) 5) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 288) obj)) (set! (-> obj tasks) (get-task-control (game-task village2-levitator))) (set! (-> obj jaws) (the-as handle #f)) (set! (-> obj sage) (entity-actor-lookup arg0 'alt-actor 0)) @@ -1784,606 +953,562 @@ (none) ) -(set! - (-> *part-group-id-table* 658) - (new 'static 'sparticle-launch-group - :length 27 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-levitator-blue-beam" - :launcher - (new 'static 'inline-array sparticle-group-item 27 - (sp-item 2673 :fade-after (meters 120.0) :falloff-to (meters 140.0) :binding 2670) - (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2671) - (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2672) - (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2671) - (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2672) - (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2671) - (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2672) - (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2671) - (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2672) - (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2671) - (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2672) - (sp-item 2671 :flags (bit1 start-dead)) - (sp-item 2672 :flags (bit1 start-dead)) - (sp-item 2671 :flags (bit1 start-dead)) - (sp-item 2672 :flags (bit1 start-dead)) - (sp-item 2671 :flags (bit1 start-dead)) - (sp-item 2672 :flags (bit1 start-dead)) - (sp-item 2671 :flags (bit1 start-dead)) - (sp-item 2672 :flags (bit1 start-dead)) - (sp-item 2671 :flags (bit1 start-dead)) - (sp-item 2672 :flags (bit1 start-dead)) - (sp-item 2671 :flags (bit1 start-dead)) - (sp-item 2674 :falloff-to (meters 400.0)) - (sp-item 2675) - (sp-item 2676 :falloff-to (meters 300.0)) - (sp-item 2693 :falloff-to (meters 400.0)) - (sp-item 2694 :falloff-to (meters 400.0)) - ) - :bounds - (new 'static 'sphere :x -81920.0 :y 32768.0 :w 327680.0) - ) - ) +(set! (-> *part-group-id-table* 658) + (new 'static 'sparticle-launch-group + :length 27 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-levitator-blue-beam" + :launcher + (new 'static 'inline-array sparticle-group-item 27 + (sp-item 2673 :fade-after (meters 120.0) :falloff-to (meters 140.0) :binding 2670) + (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2671) + (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2672) + (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2671) + (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2672) + (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2671) + (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2672) + (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2671) + (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2672) + (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2671) + (sp-item 2670 :flags (bit1 start-dead launch-asap) :binding 2672) + (sp-item 2671 :flags (bit1 start-dead)) + (sp-item 2672 :flags (bit1 start-dead)) + (sp-item 2671 :flags (bit1 start-dead)) + (sp-item 2672 :flags (bit1 start-dead)) + (sp-item 2671 :flags (bit1 start-dead)) + (sp-item 2672 :flags (bit1 start-dead)) + (sp-item 2671 :flags (bit1 start-dead)) + (sp-item 2672 :flags (bit1 start-dead)) + (sp-item 2671 :flags (bit1 start-dead)) + (sp-item 2672 :flags (bit1 start-dead)) + (sp-item 2671 :flags (bit1 start-dead)) + (sp-item 2674 :falloff-to (meters 400.0)) + (sp-item 2675) + (sp-item 2676 :falloff-to (meters 300.0)) + (sp-item 2693 :falloff-to (meters 400.0)) + (sp-item 2694 :falloff-to (meters 400.0)) + ) + :bounds + (new 'static 'sphere :x -81920.0 :y 32768.0 :w 327680.0) + ) + ) -(set! - (-> *part-id-table* 2694) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 16 - (sp-tex spt-texture (new 'static 'texture-id :index #x23 :page #x2)) - (sp-rnd-flt spt-num 0.2 2.0 1.0) - (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) - (sp-int spt-rot-x 4) - (sp-rnd-flt spt-rot-z (degrees -1440.0) (degrees 2880.0) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.3) (meters 0.1) 1.0) - (sp-flt spt-r 64.0) - (sp-flt spt-g 64.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-flt spt-fade-a -1.4) - (sp-int spt-timer 90) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-int spt-next-time 10) - (sp-launcher-by-id spt-next-launcher 146) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2694) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x23 :page #x2)) + (sp-rnd-flt spt-num 0.2 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees -1440.0) (degrees 2880.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.3) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 146) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2693) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 16 - (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) - (sp-rnd-flt spt-num 0.2 2.0 1.0) - (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) - (sp-int spt-rot-x 4) - (sp-rnd-flt spt-rot-z (degrees -1440.0) (degrees 2880.0) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.3) (meters 0.1) 1.0) - (sp-flt spt-r 64.0) - (sp-flt spt-g 64.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-flt spt-fade-a -1.4) - (sp-int spt-timer 90) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-int spt-next-time 10) - (sp-launcher-by-id spt-next-launcher 146) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2693) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) + (sp-rnd-flt spt-num 0.2 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees -1440.0) (degrees 2880.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.3) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 146) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2673) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 17 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-rnd-flt spt-num 0.025 0.025 1.0) - (sp-rnd-flt spt-scale-x (meters 3.0) (meters 1.5) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 0.0) - (sp-flt spt-g 0.0) - (sp-rnd-flt spt-b 128.0 128.0 1.0) - (sp-rnd-flt spt-a 32.0 32.0 1.0) - (sp-flt spt-vel-y (meters 0.053333335)) - (sp-flt spt-scalevel-x (meters -0.0033333334)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-int spt-timer 900) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-flt spt-conerot-x (degrees 102.0)) - (sp-flt spt-conerot-y (degrees -90.0)) - (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2673) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 0.025 0.025 1.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 1.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-vel-y (meters 0.053333335)) + (sp-flt spt-scalevel-x (meters -0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-flt spt-conerot-x (degrees 102.0)) + (sp-flt spt-conerot-y (degrees -90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2670) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 19 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-x (meters 0.0) (meters 16.0) 1.0) - (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) - (sp-rnd-flt spt-z 4096.0 2048.0 1.0) - (sp-rnd-flt spt-scale-x (meters 2.2) (meters 0.4) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 0.0) - (sp-flt spt-g 0.0) - (sp-rnd-flt spt-b 128.0 128.0 1.0) - (sp-flt spt-a 128.0) - (sp-rnd-flt spt-omega 0.0 65536.0 1.0) - (sp-rnd-int-flt spt-vel-x (meters -0.026666667) 1 218.45334) - (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.053333335) 1.0) - (sp-flt spt-vel-z (meters 0.0)) - (sp-flt spt-accel-z 0.0) - (sp-int spt-timer 900) - (sp-cpuinfo-flags bit2 bit3 bit7 bit14) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2670) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0.0) (meters 16.0) 1.0) + (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) + (sp-rnd-flt spt-z 4096.0 2048.0 1.0) + (sp-rnd-flt spt-scale-x (meters 2.2) (meters 0.4) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-int-flt spt-vel-x (meters -0.026666667) 1 218.45334) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.053333335) 1.0) + (sp-flt spt-vel-z (meters 0.0)) + (sp-flt spt-accel-z 0.0) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit3 bit7 bit14) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2671) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 16 - (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) - (sp-rnd-flt spt-num 0.2 1.0 1.0) - (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) - (sp-int spt-rot-x 4) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.4) (meters 0.2) 1.0) - (sp-flt spt-r 64.0) - (sp-flt spt-g 64.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-flt spt-fade-a -1.4) - (sp-int spt-timer 90) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-int spt-next-time 10) - (sp-launcher-by-id spt-next-launcher 146) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2671) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) + (sp-rnd-flt spt-num 0.2 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.4) (meters 0.2) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 146) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2672) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 16 - (sp-tex spt-texture (new 'static 'texture-id :index #x23 :page #x2)) - (sp-rnd-flt spt-num 0.2 1.0 1.0) - (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) - (sp-int spt-rot-x 4) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.4) (meters 0.2) 1.0) - (sp-flt spt-r 64.0) - (sp-flt spt-g 64.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-flt spt-fade-a -1.4) - (sp-int spt-timer 90) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-int spt-next-time 10) - (sp-launcher-by-id spt-next-launcher 146) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2672) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x23 :page #x2)) + (sp-rnd-flt spt-num 0.2 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.4) (meters 0.2) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 146) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2674) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 17 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 2.0) - (sp-rnd-flt spt-scale-x (meters 2.0) (meters 0.5) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.6) (meters 0.8) 1.0) - (sp-rnd-flt spt-r 16.0 48.0 1.0) - (sp-rnd-flt spt-g 16.0 48.0 1.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-flt spt-vel-y (meters 0.32)) - (sp-flt spt-scalevel-x (meters 0.005)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-int spt-timer 150) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-flt spt-conerot-x (degrees 102.0)) - (sp-flt spt-conerot-y (degrees -90.0)) - (sp-rnd-flt spt-conerot-radius (meters -1.5) (meters 1.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2674) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.6) (meters 0.8) 1.0) + (sp-rnd-flt spt-r 16.0 48.0 1.0) + (sp-rnd-flt spt-g 16.0 48.0 1.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-y (meters 0.32)) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-flt spt-conerot-x (degrees 102.0)) + (sp-flt spt-conerot-y (degrees -90.0)) + (sp-rnd-flt spt-conerot-radius (meters -1.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2676) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 17 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-scale-x (meters 3.0) (meters 1.5) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 0.0) - (sp-flt spt-g 0.0) - (sp-rnd-flt spt-b 128.0 128.0 1.0) - (sp-rnd-flt spt-a 32.0 32.0 1.0) - (sp-flt spt-vel-y (meters 0.10666667)) - (sp-flt spt-scalevel-x (meters 0.0016666667)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-flt spt-conerot-x (degrees 102.0)) - (sp-flt spt-conerot-y (degrees -90.0)) - (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2676) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 1.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-vel-y (meters 0.10666667)) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-flt spt-conerot-x (degrees 102.0)) + (sp-flt spt-conerot-y (degrees -90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2675) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 13 - (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-scale-x (meters 2.0) (meters 4.0) 1.0) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 64.0 64.0 1.0) - (sp-rnd-flt spt-g 64.0 64.0 1.0) - (sp-rnd-flt spt-b 128.0 128.0 1.0) - (sp-flt spt-a 128.0) - (sp-flt spt-fade-a -5.12) - (sp-int spt-timer 20) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2675) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -5.12) + (sp-int spt-timer 20) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) -(set! - (-> *part-group-id-table* 659) - (new 'static 'sparticle-launch-group - :length 3 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-levitator-blue-beam-impact" - :launcher - (new 'static 'inline-array sparticle-group-item 3 - (sp-item 2695) - (sp-item 2696 :fade-after (meters 200.0) :falloff-to (meters 200.0)) - (sp-item 2677) - ) - :bounds (new 'static 'sphere :w 139264.0) - ) - ) +(set! (-> *part-group-id-table* 659) (new 'static 'sparticle-launch-group + :length 3 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-levitator-blue-beam-impact" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 2695) + (sp-item 2696 :fade-after (meters 200.0) :falloff-to (meters 200.0)) + (sp-item 2677) + ) + :bounds (new 'static 'sphere :w 139264.0) + ) + ) -(set! - (-> *part-id-table* 2696) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 23 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-rnd-flt spt-num 2.0 6.0 1.0) - (sp-rnd-flt spt-y (meters -0.5) (meters 1.0) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.6) (meters 1.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 0.0 32.0 1.0) - (sp-rnd-flt spt-g 64.0 64.0 1.0) - (sp-flt spt-b 255.0) - (sp-rnd-flt spt-a 32.0 96.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.10666667) 1.0) - (sp-flt spt-scalevel-x (meters -0.005)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-r -0.26666668) - (sp-flt spt-fade-g -1.0666667) - (sp-flt spt-fade-b 0.0) - (sp-rnd-flt spt-accel-y -1.3653333 -1.3653333 1.0) - (sp-flt spt-friction 0.95) - (sp-int-plain-rnd spt-timer 60 59 1) - (sp-cpuinfo-flags bit0 bit2 bit3 bit14) - (sp-rnd-flt spt-conerot-x (degrees 50.000004) (degrees 120.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 30.0) (degrees 120.0) 1.0) - (sp-rnd-flt spt-conerot-radius (meters -0.5) (meters 0.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2696) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 2.0 6.0 1.0) + (sp-rnd-flt spt-y (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 1.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.005)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.26666668) + (sp-flt spt-fade-g -1.0666667) + (sp-flt spt-fade-b 0.0) + (sp-rnd-flt spt-accel-y -1.3653333 -1.3653333 1.0) + (sp-flt spt-friction 0.95) + (sp-int-plain-rnd spt-timer 60 59 1) + (sp-cpuinfo-flags bit0 bit2 bit3 bit14) + (sp-rnd-flt spt-conerot-x (degrees 50.000004) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 30.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters -0.5) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2695) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 16 - (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) - (sp-rnd-flt spt-rot-z (degrees 180.0) (degrees 360.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 255.0) - (sp-flt spt-g 255.0) - (sp-flt spt-b 255.0) - (sp-flt spt-a 128.0) - (sp-flt spt-fade-a -5.12) - (sp-int spt-timer 10) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 1440.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 1440.0) 1.0) - (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2695) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 180.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -5.12) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 1440.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 1440.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2677) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 16 - (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-scale-x (meters 6.0) (meters 6.0) 1.0) - (sp-rnd-flt spt-rot-z (degrees 180.0) (degrees 360.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 0.0) - (sp-rnd-flt spt-g 16.0 64.0 1.0) - (sp-rnd-flt spt-b 128.0 128.0 1.0) - (sp-flt spt-a 128.0) - (sp-flt spt-fade-a -5.12) - (sp-int spt-timer 10) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 1440.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 1440.0) 1.0) - (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2677) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 6.0) (meters 6.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 180.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 16.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -5.12) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 1440.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 1440.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-group-id-table* 660) - (new 'static 'sparticle-launch-group - :length 38 - :duration #x384 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-levitator-on-big" - :launcher - (new 'static 'inline-array sparticle-group-item 38 - (sp-item 2751 :fade-after (meters 100.0) :falloff-to (meters 100.0) :binding 2750) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) - (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) - (sp-item 2797 :flags (bit1 start-dead)) - (sp-item 2798 :flags (bit1 start-dead)) - (sp-item 2797 :flags (bit1 start-dead)) - (sp-item 2798 :flags (bit1 start-dead)) - (sp-item 2797 :flags (bit1 start-dead)) - (sp-item 2798 :flags (bit1 start-dead)) - (sp-item 2797 :flags (bit1 start-dead)) - (sp-item 2798 :flags (bit1 start-dead)) - (sp-item 2797 :flags (bit1 start-dead)) - (sp-item 2798 :flags (bit1 start-dead)) - (sp-item 2797 :flags (bit1 start-dead)) - (sp-item 2798 :flags (bit1 start-dead)) - (sp-item 2797 :flags (bit1 start-dead)) - (sp-item 2798 :flags (bit1 start-dead)) - (sp-item 2797 :flags (bit1 start-dead)) - (sp-item 2798 :flags (bit1 start-dead)) - (sp-item 2797 :flags (bit1 start-dead)) - (sp-item 2798 :flags (bit1 start-dead)) - (sp-item 2797 :flags (bit1 start-dead)) - (sp-item 2798 :flags (bit1 start-dead)) - (sp-item 2797 :flags (bit1 start-dead)) - (sp-item 2798 :flags (bit1 start-dead)) - (sp-item 2678) - ) - :bounds (new 'static 'sphere :w 262144.0) - ) - ) +(set! (-> *part-group-id-table* 660) + (new 'static 'sparticle-launch-group + :length 38 + :duration #x384 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-levitator-on-big" + :launcher + (new 'static 'inline-array sparticle-group-item 38 + (sp-item 2751 :fade-after (meters 100.0) :falloff-to (meters 100.0) :binding 2750) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2797) + (sp-item 2750 :flags (bit1 start-dead launch-asap) :binding 2798) + (sp-item 2797 :flags (bit1 start-dead)) + (sp-item 2798 :flags (bit1 start-dead)) + (sp-item 2797 :flags (bit1 start-dead)) + (sp-item 2798 :flags (bit1 start-dead)) + (sp-item 2797 :flags (bit1 start-dead)) + (sp-item 2798 :flags (bit1 start-dead)) + (sp-item 2797 :flags (bit1 start-dead)) + (sp-item 2798 :flags (bit1 start-dead)) + (sp-item 2797 :flags (bit1 start-dead)) + (sp-item 2798 :flags (bit1 start-dead)) + (sp-item 2797 :flags (bit1 start-dead)) + (sp-item 2798 :flags (bit1 start-dead)) + (sp-item 2797 :flags (bit1 start-dead)) + (sp-item 2798 :flags (bit1 start-dead)) + (sp-item 2797 :flags (bit1 start-dead)) + (sp-item 2798 :flags (bit1 start-dead)) + (sp-item 2797 :flags (bit1 start-dead)) + (sp-item 2798 :flags (bit1 start-dead)) + (sp-item 2797 :flags (bit1 start-dead)) + (sp-item 2798 :flags (bit1 start-dead)) + (sp-item 2797 :flags (bit1 start-dead)) + (sp-item 2798 :flags (bit1 start-dead)) + (sp-item 2678) + ) + :bounds (new 'static 'sphere :w 262144.0) + ) + ) -(set! - (-> *part-id-table* 2678) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 18 - (sp-tex spt-texture (new 'static 'texture-id :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-x (meters -0.001) (meters 0.002) 1.0) - (sp-rnd-flt spt-y (meters -0.001) (meters 0.002) 1.0) - (sp-rnd-flt spt-z -4.096 8.192 1.0) - (sp-flt spt-scale-x (meters 9.0)) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 0.0) - (sp-rnd-flt spt-g 0.0 128.0 1.0) - (sp-flt spt-b 255.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-flt spt-vel-y (meters 0.0)) - (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) - (sp-flt spt-fade-a -3.2) - (sp-int spt-timer 40) - (sp-cpuinfo-flags bit2 bit3) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2678) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-y (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-z -4.096 8.192 1.0) + (sp-flt spt-scale-x (meters 9.0)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 128.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-vel-y (meters 0.0)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 40) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2751) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 12 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 0.5) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 255.0) - (sp-rnd-flt spt-b 128.0 128.0 1.0) - (sp-rnd-flt spt-a 32.0 32.0 1.0) - (sp-flt spt-scalevel-x (meters -0.0033333334)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-int spt-timer 900) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2751) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2750) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 19 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-x (meters 0.0) (meters 16.0) 1.0) - (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) - (sp-flt spt-z 12288.0) - (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.2) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 0.0) - (sp-rnd-flt spt-g 0.0 128.0 1.0) - (sp-rnd-flt spt-b 128.0 128.0 1.0) - (sp-flt spt-a 128.0) - (sp-rnd-flt spt-omega 0.0 65536.0 1.0) - (sp-rnd-int-flt spt-vel-x (meters -0.026666667) 1 218.45334) - (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.053333335) 1.0) - (sp-flt spt-vel-z (meters 0.0)) - (sp-flt spt-accel-z 0.0) - (sp-int spt-timer 900) - (sp-cpuinfo-flags bit2 bit3 bit7 bit14) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2750) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters 0.0) (meters 16.0) 1.0) + (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) + (sp-flt spt-z 12288.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 128.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-int-flt spt-vel-x (meters -0.026666667) 1 218.45334) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.053333335) 1.0) + (sp-flt spt-vel-z (meters 0.0)) + (sp-flt spt-accel-z 0.0) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit3 bit7 bit14) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2797) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 16 - (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) - (sp-rnd-flt spt-num 0.2 0.4 1.0) - (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) - (sp-int spt-rot-x 4) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) - (sp-flt spt-r 64.0) - (sp-flt spt-g 64.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-flt spt-fade-a -1.4) - (sp-int spt-timer 90) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-int spt-next-time 10) - (sp-launcher-by-id spt-next-launcher 146) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2797) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) + (sp-rnd-flt spt-num 0.2 0.4 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 146) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2798) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 16 - (sp-tex spt-texture (new 'static 'texture-id :index #x24 :page #x2)) - (sp-rnd-flt spt-num 0.2 0.4 1.0) - (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) - (sp-int spt-rot-x 4) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) - (sp-flt spt-r 64.0) - (sp-flt spt-g 64.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-flt spt-fade-a -1.4) - (sp-int spt-timer 90) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-int spt-next-time 10) - (sp-launcher-by-id spt-next-launcher 146) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2798) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x24 :page #x2)) + (sp-rnd-flt spt-num 0.2 0.4 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 3.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.4) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 146) + (sp-end) + ) + ) + ) -(set! - (-> *part-group-id-table* 661) - (new 'static 'sparticle-launch-group - :length 1 - :duration #x384 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-levitator-on-small" - :launcher - (new 'static 'inline-array sparticle-group-item 1 (sp-item 2679)) - :bounds (new 'static 'sphere :w 262144.0) - ) - ) +(set! (-> *part-group-id-table* 661) (new 'static 'sparticle-launch-group + :length 1 + :duration #x384 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-levitator-on-small" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2679)) + :bounds (new 'static 'sphere :w 262144.0) + ) + ) -(set! - (-> *part-id-table* 2679) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 18 - (sp-tex spt-texture (new 'static 'texture-id :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-x (meters -0.001) (meters 0.002) 1.0) - (sp-rnd-flt spt-y (meters -0.001) (meters 0.002) 1.0) - (sp-rnd-flt spt-z -4.096 8.192 1.0) - (sp-flt spt-scale-x (meters 6.0)) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 0.0) - (sp-rnd-flt spt-g 0.0 128.0 1.0) - (sp-flt spt-b 255.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-flt spt-vel-y (meters 0.0)) - (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) - (sp-flt spt-fade-a -3.2) - (sp-int spt-timer 40) - (sp-cpuinfo-flags bit2 bit3) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2679) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-y (meters -0.001) (meters 0.002) 1.0) + (sp-rnd-flt spt-z -4.096 8.192 1.0) + (sp-flt spt-scale-x (meters 6.0)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 128.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-vel-y (meters 0.0)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 40) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) (defbehavior assistant-levitator-blue-glow assistant-levitator () (let ((gp-0 (new 'stack-no-clear 'vector))) - (set-vector! gp-0 -17408.0 -2048.0 2048.0 1.0) - (vector+! gp-0 gp-0 (-> self entity extra trans)) - (spawn (-> self particle 2) gp-0) - (set-vector! gp-0 -38912.0 6144.0 4096.0 1.0) - (vector+! gp-0 gp-0 (-> self entity extra trans)) - (spawn (-> self particle 3) gp-0) - ) + (set-vector! gp-0 -17408.0 -2048.0 2048.0 1.0) + (vector+! gp-0 gp-0 (-> self entity extra trans)) + (spawn (-> self particle 2) gp-0) + (set-vector! gp-0 -38912.0 6144.0 4096.0 1.0) + (vector+! gp-0 gp-0 (-> self entity extra trans)) + (spawn (-> self particle 3) gp-0) + ) (none) ) @@ -2391,644 +1516,436 @@ (let ((s5-0 (new 'stack-no-clear 'vector)) (gp-0 (new 'stack-no-clear 'vector)) ) - (let ((s4-0 (new 'stack-no-clear 'vector))) - (set! (-> gp-0 quad) (-> self boulder extra trans quad)) - (let ((v1-3 (-> self boulder extra process))) - (if v1-3 - (vector<-cspace! gp-0 (-> (the-as fireboulder v1-3) node-list data 4)) - ) - ) - (set-vector! s5-0 -49152.0 10240.0 5529.6 1.0) - (vector+! s5-0 s5-0 (-> self entity extra trans)) - (vector-! s4-0 gp-0 s5-0) - (let ((t2-0 (new 'stack-no-clear 'collide-mesh-cache-tri))) - 0.0 - (when - (>= - (dummy-10 *collide-cache* s5-0 s4-0 6144.0 16 (the-as process #f) t2-0 1) - 0.0 - ) - (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) 'shove) - (set! (-> a1-7 param 0) (the-as uint #f)) - (let ((v1-13 (new 'static 'attack-info :mask #xc0))) - (set! (-> v1-13 shove-up) 8192.0) - (set! (-> v1-13 shove-back) 12288.0) - (set! (-> a1-7 param 1) (the-as uint v1-13)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self boulder extra trans quad)) + (let ((v1-3 (-> self boulder extra process))) + (if v1-3 + (vector<-cspace! gp-0 (-> (the-as fireboulder v1-3) node-list data 4)) + ) ) - (send-event-function *target* a1-7) - ) - ) - ) - (vector-normalize! s4-0 (+ -20480.0 (vector-length s4-0))) - (vector+! gp-0 s5-0 s4-0) - (let ((f30-1 (vector-y-angle s4-0)) - (f0-11 (- 16384.0 (vector-x-angle s4-0))) + (set-vector! s5-0 -49152.0 10240.0 5529.6 1.0) + (vector+! s5-0 s5-0 (-> self entity extra trans)) + (vector-! s4-0 gp-0 s5-0) + (let ((t2-0 (new 'stack-no-clear 'collide-tri-result))) + 0.0 + (when (>= (dummy-10 *collide-cache* s5-0 s4-0 6144.0 16 (the-as process #f) t2-0 1) 0.0) + (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) 'shove) + (set! (-> a1-7 param 0) (the-as uint #f)) + (let ((v1-13 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-13 shove-up) 8192.0) + (set! (-> v1-13 shove-back) 12288.0) + (set! (-> a1-7 param 1) (the-as uint v1-13)) + ) + (send-event-function *target* a1-7) + ) ) - (set! (-> *part-id-table* 2674 init-specs 14 initial-valuef) f30-1) - (set! (-> *part-id-table* 2674 init-specs 13 initial-valuef) f0-11) - (set! (-> *part-id-table* 2676 init-specs 14 initial-valuef) f30-1) - (set! (-> *part-id-table* 2676 init-specs 13 initial-valuef) f0-11) - (set! (-> *part-id-table* 2673 init-specs 14 initial-valuef) f30-1) - (set! (-> *part-id-table* 2673 init-specs 13 initial-valuef) f0-11) - ) + ) + (vector-normalize! s4-0 (+ -20480.0 (vector-length s4-0))) + (vector+! gp-0 s5-0 s4-0) + (let ((f30-1 (vector-y-angle s4-0)) + (f0-11 (- 16384.0 (vector-x-angle s4-0))) + ) + (set! (-> *part-id-table* 2674 init-specs 14 initial-valuef) f30-1) + (set! (-> *part-id-table* 2674 init-specs 13 initial-valuef) f0-11) + (set! (-> *part-id-table* 2676 init-specs 14 initial-valuef) f30-1) + (set! (-> *part-id-table* 2676 init-specs 13 initial-valuef) f0-11) + (set! (-> *part-id-table* 2673 init-specs 14 initial-valuef) f30-1) + (set! (-> *part-id-table* 2673 init-specs 13 initial-valuef) f0-11) + ) + ) + (spawn (-> self particle 0) s5-0) + (spawn (-> self particle 1) gp-0) ) - (spawn (-> self particle 0) s5-0) - (spawn (-> self particle 1) gp-0) - ) (none) ) -(defmethod - play-anim! - assistant-levitator - ((obj assistant-levitator) (arg0 symbol)) +(defmethod play-anim! assistant-levitator ((obj assistant-levitator) (arg0 symbol)) (with-pp - (case (current-status (-> obj tasks)) - (((task-status need-reward-speech)) - (when arg0 - (close-current! (-> obj tasks)) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) pp) - (set! (-> a1-1 num-params) 1) - (set! (-> a1-1 message) 'clone) - (set! (-> a1-1 param 0) (the-as uint (process->handle obj))) - (let ((t9-2 send-event-function) - (v1-10 (-> obj boulder)) - ) - (t9-2 (if v1-10 - (-> v1-10 extra process) - ) - a1-1 - ) - ) - ) - ) - (new 'static 'spool-anim - :name "assistant-village2-resolution" - :index 16 - :parts 7 - :command-list - '( - ((the binteger 196) - joint - "cameraB" + (case (current-status (-> obj tasks)) + (((task-status need-reward-speech)) + (when arg0 + (close-current! (-> obj tasks)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) pp) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'clone) + (set! (-> a1-1 param 0) (the-as uint (process->handle obj))) + (let ((t9-2 send-event-function) + (v1-10 (-> obj boulder)) + ) + (t9-2 + (if v1-10 + (-> v1-10 extra process) + ) + a1-1 + ) + ) + ) + ) + (new 'static 'spool-anim + :name "assistant-village2-resolution" + :index 16 + :parts 7 + :command-list + '(((the binteger 196) joint "cameraB") + ((the binteger 241) joint "camera") + ((the binteger 286) joint "cameraB") + ((the binteger 436) joint "camera") + ((the binteger 526) joint "cameraB") + ((the binteger 581) joint "camera") + ((the binteger 639) joint "cameraB") + ((the binteger 715) joint "camera") ) - ((the binteger 241) - joint - "camera" - ) - ((the binteger 286) - joint - "cameraB" - ) - ((the binteger 436) - joint - "camera" - ) - ((the binteger 526) - joint - "cameraB" - ) - ((the binteger 581) - joint - "camera" - ) - ((the binteger 639) - joint - "cameraB" - ) - ((the binteger 715) 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 5) + ) ) - (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 5) - ) ) - ) ) (defmethod get-art-elem assistant-levitator ((obj assistant-levitator)) (if (= (get-task-status (game-task village2-levitator)) (task-status invalid)) - (-> obj draw art-group data 9) - (-> obj draw art-group data 5) - ) + (-> obj draw art-group data 9) + (-> obj draw art-group data 5) + ) ) (defstate play-anim (assistant-levitator) :virtual #t :exit (behavior () - (let ((a1-0 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-0 from) self) - (set! (-> a1-0 num-params) 0) - (set! (-> a1-0 message) 'stop-cloning) - (let ((t9-0 send-event-function) - (v1-1 (-> self boulder)) - ) - (t9-0 (if v1-1 - (-> v1-1 extra process) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'stop-cloning) + (let ((t9-0 send-event-function) + (v1-1 (-> self boulder)) ) - a1-0 + (t9-0 + (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) ) - ) + ((-> (method-of-type process-taskable play-anim) exit)) + (none) ) - ((-> (method-of-type process-taskable play-anim) exit)) - (none) - ) :trans (behavior () - (assistant-levitator-blue-glow) - (if (< 200.0 (ja-aframe-num 0)) - (assistant-levitator-blue-beam) + (assistant-levitator-blue-glow) + (if (< 200.0 (ja-aframe-num 0)) + (assistant-levitator-blue-beam) + ) + ((-> (method-of-type process-taskable play-anim) trans)) + (none) ) - ((-> (method-of-type process-taskable play-anim) trans)) - (none) - ) ) (defstate hidden (assistant-levitator) :virtual #t :trans (behavior () - ((-> (method-of-type process-taskable hidden) trans)) - (when (and (cond - ((and - *target* - (>= - 61440.0 - (vector-vector-distance - (-> self root-override trans) - (-> *target* control trans) - ) - ) - ) - #t - ) - (else + ((-> (method-of-type process-taskable hidden) trans)) + (when (and + (cond + ((and *target* (>= 61440.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + #t + ) + (else (set! (-> self state-time) (-> *display* base-frame-counter)) #f ) - ) - (and - (closed? - (-> self tasks) - (game-task village2-levitator) - (task-status need-introduction) - ) - (not - (closed? - (-> self tasks) - (game-task village2-levitator) - (task-status need-reward-speech) - ) - ) - (not (movie?)) - (not (level-hint-displayed?)) - (not + ) (and - *cheat-mode* - (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) - ) + (closed? (-> self tasks) (game-task village2-levitator) (task-status need-introduction)) + (not (closed? (-> self tasks) (game-task village2-levitator) (task-status need-reward-speech))) + (not (movie?)) + (not (level-hint-displayed?)) + (not (and *cheat-mode* (cpad-hold? 0 l3))) + (< (- (-> *display* base-frame-counter) (-> self state-time)) 3000) + ) + ) + (hide-hud) + (kill-current-level-hint '() '(sidekick voicebox) 'exit) + (when (and + (seen-text? *game-info* (game-text-id village2-not-enough-cells-levitator)) + (hud-hidden?) + (can-grab-display? self) + (not (-> *setting-control* current hint)) + ) + (let ((gp-0 + (new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning)) + ) + ) + (let ((v1-28 gp-0)) + (set! (-> v1-28 width) (the float 448)) + ) + (let ((v1-29 gp-0)) + (set! (-> v1-29 height) (the float 80)) + ) + (let ((v1-30 gp-0)) + (set! (-> v1-30 scale) 0.8) + ) + (set! (-> gp-0 flags) (font-flags shadow kerning middle large)) + (print-game-text + (lookup-text! *common-text* (game-text-id villlage2-levitator-cell-req-text) #f) + gp-0 + #f + 128 + 22 ) - (< (- (-> *display* base-frame-counter) (-> self state-time)) 3000) - ) ) - (hide-hud) - (kill-current-level-hint '() '(sidekick voicebox) 'exit) - (when - (and - (seen-text? - *game-info* - (game-text-id village2-not-enough-cells-levitator) - ) - (hud-hidden?) - (can-grab-display? self) - (not (-> *setting-control* current hint)) - ) - (let - ((gp-0 - (new - 'stack - 'font-context - *font-default-matrix* - 32 - 160 - 0.0 - (font-color default) - (font-flags shadow kerning) - ) ) - ) - (let ((v1-28 gp-0)) - (set! (-> v1-28 width) (the float 448)) - ) - (let ((v1-29 gp-0)) - (set! (-> v1-29 height) (the float 80)) - ) - (let ((v1-30 gp-0)) - (set! (-> v1-30 scale) 0.8) - ) - (set! (-> gp-0 flags) (font-flags shadow kerning middle large)) - (print-game-text - (lookup-text! - *common-text* - (game-text-id villlage2-levitator-cell-req-text) - #f + (level-hint-spawn + (game-text-id village2-not-enough-cells-levitator) + "asstvb71" + (the-as entity #f) + *entity-pool* + (game-task none) ) - gp-0 - #f - 128 - 22 - ) ) - ) - (level-hint-spawn - (game-text-id village2-not-enough-cells-levitator) - "asstvb71" - (the-as entity #f) - *entity-pool* - (game-task none) - ) + (none) ) - (none) - ) ) -(defmethod - target-above-threshold? - assistant-levitator - ((obj assistant-levitator)) - (= - (get-task-status (game-task village2-levitator)) - (task-status need-reward-speech) - ) +(defmethod target-above-threshold? assistant-levitator ((obj assistant-levitator)) + (= (get-task-status (game-task village2-levitator)) (task-status need-reward-speech)) ) (defstate idle (assistant-levitator) :virtual #t :exit - (behavior () - (stop! (-> self sound)) - ((-> (method-of-type process-taskable idle) exit)) - (none) - ) + (behavior () (stop! (-> self sound)) ((-> (method-of-type process-taskable idle) exit)) (none)) :trans (behavior () - (assistant-levitator-blue-glow) - (update! (-> self sound)) - ((-> (method-of-type process-taskable idle) trans)) - (none) - ) + (assistant-levitator-blue-glow) + (update! (-> self sound)) + ((-> (method-of-type process-taskable idle) trans)) + (none) + ) :code (behavior () - (if (!= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (if (!= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (get-art-elem self) + ) + (ja-channel-push! 1 15) + ) + (while #t + (cond + ((= (get-task-status (game-task village2-levitator)) (task-status invalid)) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-8 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! a0-8 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (assistant-levitator-blue-beam) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1))) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (else + (let ((v1-29 (-> self skel root-channel 0))) + (set! (-> v1-29 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) ) - (get-art-elem self) - ) - (ja-channel-push! 1 15) - ) - (while #t - (cond - ((= (get-task-status (game-task village2-levitator)) (task-status invalid)) - (let ((a0-8 (-> self skel root-channel 0))) - (set! - (-> a0-8 frame-group) - (the-as art-joint-anim (-> self draw art-group data 9)) - ) - (set! - (-> a0-8 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 9)) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-8 param 1) 1.0) - (set! (-> a0-8 frame-num) 0.0) - (joint-control-channel-group! - a0-8 - (the-as art-joint-anim (-> self draw art-group data 9)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (assistant-levitator-blue-beam) - (suspend) - (let ((a0-9 (-> self skel root-channel 0))) - (set! - (-> a0-9 param 0) - (the float (+ (-> a0-9 frame-group data 0 length) -1)) - ) - (set! (-> a0-9 param 1) 1.0) - (joint-control-channel-group-eval! - a0-9 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - ) - (else - (let ((v1-29 (-> self skel root-channel 0))) - (set! - (-> v1-29 frame-group) - (the-as art-joint-anim (-> self draw art-group data 5)) - ) - ) - (let* ((f30-0 2.0) - (v1-31 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-32 (the-as number (logior #x3f800000 v1-31))) - ) - (countdown (gp-0 (+ (the int (* f30-0 (+ -1.0 (the-as float v1-32)))) 3)) - (let ((a0-16 (-> self skel root-channel 0))) - (set! (-> a0-16 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-16 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 + (let* ((f30-0 2.0) + (v1-31 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-32 (the-as number (logior #x3f800000 v1-31))) + ) + (countdown (gp-0 (+ (the int (* f30-0 (+ -1.0 (the-as float v1-32)))) 3)) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) ) - ) - ) - (set! (-> a0-16 param 1) 1.0) - (set! (-> a0-16 frame-num) 0.0) - (joint-control-channel-group! - a0-16 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-17 (-> self skel root-channel 0))) - (set! - (-> a0-17 param 0) - (the float (+ (-> a0-17 frame-group data 0 length) -1)) - ) - (set! (-> a0-17 param 1) 1.0) - (joint-control-channel-group-eval! - a0-17 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - ) - ) - (let ((a0-19 (-> self skel root-channel 0))) - (set! - (-> a0-19 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) - ) - (set! - (-> a0-19 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 6)) - 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 6)) - 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! - ) - ) - ) - (let ((v1-89 (-> self skel root-channel 0))) - (set! - (-> v1-89 frame-group) - (the-as art-joint-anim (-> self draw art-group data 7)) - ) - ) - (let* ((f30-1 2.0) - (v1-91 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) - (v1-92 (the-as number (logior #x3f800000 v1-91))) - ) - (countdown (gp-1 (+ (the int (* f30-1 (+ -1.0 (the-as float v1-92)))) 3)) - (let ((a0-27 (-> self skel root-channel 0))) - (set! (-> a0-27 frame-group) (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - ) - (set! - (-> a0-27 param 0) - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 + (set! (-> a0-16 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) ) - ) + (set! (-> a0-16 param 1) 1.0) + (set! (-> a0-16 frame-num) 0.0) + (joint-control-channel-group! + a0-16 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-19 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) 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 6)) 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!) + ) + ) + (let ((v1-89 (-> self skel root-channel 0))) + (set! (-> v1-89 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + ) + (let* ((f30-1 2.0) + (v1-91 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-92 (the-as number (logior #x3f800000 v1-91))) + ) + (countdown (gp-1 (+ (the int (* f30-1 (+ -1.0 (the-as float v1-92)))) 3)) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-27 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-27 param 1) 1.0) + (set! (-> a0-27 frame-num) 0.0) + (joint-control-channel-group! + a0-27 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! (-> a0-28 param 0) (the float (+ (-> a0-28 frame-group data 0 length) -1))) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! a0-28 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (let ((a0-30 (-> self skel root-channel 0))) + (set! (-> a0-30 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-30 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-30 param 1) 1.0) + (set! (-> a0-30 frame-num) 0.0) + (joint-control-channel-group! a0-30 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-31 (-> self skel root-channel 0))) + (set! (-> a0-31 param 0) (the float (+ (-> a0-31 frame-group data 0 length) -1))) + (set! (-> a0-31 param 1) 1.0) + (joint-control-channel-group-eval! a0-31 (the-as art-joint-anim #f) num-func-seek!) + ) + ) ) - (set! (-> a0-27 param 1) 1.0) - (set! (-> a0-27 frame-num) 0.0) - (joint-control-channel-group! - a0-27 - (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-28 (-> self skel root-channel 0))) - (set! - (-> a0-28 param 0) - (the float (+ (-> a0-28 frame-group data 0 length) -1)) - ) - (set! (-> a0-28 param 1) 1.0) - (joint-control-channel-group-eval! - a0-28 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) ) - ) - (let ((a0-30 (-> self skel root-channel 0))) - (set! - (-> a0-30 frame-group) - (the-as art-joint-anim (-> self draw art-group data 8)) - ) - (set! - (-> a0-30 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 8)) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-30 param 1) 1.0) - (set! (-> a0-30 frame-num) 0.0) - (joint-control-channel-group! - a0-30 - (the-as art-joint-anim (-> self draw art-group data 8)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-31 (-> self skel root-channel 0))) - (set! - (-> a0-31 param 0) - (the float (+ (-> a0-31 frame-group data 0 length) -1)) - ) - (set! (-> a0-31 param 1) 1.0) - (joint-control-channel-group-eval! - a0-31 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) ) - ) + (none) ) - (none) - ) ) (defmethod should-display? assistant-levitator ((obj assistant-levitator)) (or - (= - (get-task-status (game-task village2-levitator)) - (task-status need-reward-speech) + (= (get-task-status (game-task village2-levitator)) (task-status need-reward-speech)) + (zero? (get-task-status (game-task village2-levitator))) ) - (zero? (get-task-status (game-task village2-levitator))) - ) ) (defstate just-particles (assistant-levitator) :code (behavior () - (ja-channel-set! 0) - (while #t - (assistant-levitator-blue-glow) - (assistant-levitator-blue-beam) - (update! (-> self sound)) - (suspend) + (ja-channel-set! 0) + (while #t + (assistant-levitator-blue-glow) + (assistant-levitator-blue-beam) + (update! (-> self sound)) + (suspend) + ) + (none) ) - (none) - ) ) -(defmethod - init-from-entity! - assistant-levitator - ((obj assistant-levitator) (arg0 entity-actor)) - (dummy-40 - obj - arg0 - *assistant-village2-sg* - 3 - 31 - (new 'static 'vector :w 4096.0) - 5 - ) +(defmethod init-from-entity! assistant-levitator ((obj assistant-levitator) (arg0 entity-actor)) + (dummy-40 obj arg0 *assistant-village2-sg* 3 31 (new 'static 'vector :w 4096.0) 5) (set! (-> obj tasks) (get-task-control (game-task village2-levitator))) (set! (-> obj boulder) (entity-actor-lookup arg0 'alt-actor 0)) - (set! - (-> obj particle 0) - (create-launch-control (-> *part-group-id-table* 658) obj) - ) - (set! - (-> obj particle 1) - (create-launch-control (-> *part-group-id-table* 659) obj) - ) - (set! - (-> obj particle 2) - (create-launch-control (-> *part-group-id-table* 660) obj) - ) - (set! - (-> obj particle 3) - (create-launch-control (-> *part-group-id-table* 661) obj) - ) - (set! - (-> obj sound) - (new - 'process - 'ambient-sound - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "lev-mach-idle") - :volume #x400 - :fo-max 30 - ) - (-> obj root-override trans) - ) - ) + (set! (-> obj particle 0) (create-launch-control (-> *part-group-id-table* 658) obj)) + (set! (-> obj particle 1) (create-launch-control (-> *part-group-id-table* 659) obj)) + (set! (-> obj particle 2) (create-launch-control (-> *part-group-id-table* 660) obj)) + (set! (-> obj particle 3) (create-launch-control (-> *part-group-id-table* 661) obj)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "lev-mach-idle") + :volume #x400 + :fo-max 30 + ) + (-> obj root-override trans) + ) + ) (if (= (get-task-status (game-task village2-levitator)) (task-status invalid)) - (go just-particles) - (dummy-42 obj) - ) + (go just-particles) + (dummy-42 obj) + ) (none) ) diff --git a/goal_src/levels/village2/swamp-blimp.gc b/goal_src/levels/village2/swamp-blimp.gc index 89cfd40310..8dfa4ef591 100644 --- a/goal_src/levels/village2/swamp-blimp.gc +++ b/goal_src/levels/village2/swamp-blimp.gc @@ -5,3 +5,1844 @@ ;; name in dgo: swamp-blimp ;; dgos: L1, VI2 +(define-extern *swamp-blimp-sg* skeleton-group) +(define-extern *swamp-rope-sg* skeleton-group) +(define-extern *swamp-tetherrock-explode-sg* skeleton-group) +(define-extern *precursor-arm-sg* skeleton-group) +(define-extern *swamp-tetherrock-sg* skeleton-group) + +(declare-type swamp-blimp process-drawable) +(declare-type swamp-rope process-drawable) +(declare-type swamp-tetherrock process-drawable) +(declare-type precursor-arm process-drawable) + +(define-extern swamp-blimp-idle (state swamp-blimp)) ;; unknown type +(define-extern swamp-blimp-bye-bye (state swamp-blimp)) ;; unknown type +(define-extern swamp-rope-idle-rock (state swamp-rope)) ;; unknown type +(define-extern swamp-rope-idle-arm (state swamp-rope)) ;; unknown type +(define-extern swamp-rope-break (state swamp-rope)) ;; unknown type +(define-extern precursor-arm-idle (state precursor-arm)) ;; unknown type +(define-extern precursor-arm-die (state precursor-arm)) ;; unknown type +(define-extern precursor-arm-sink (state precursor-arm)) ;; unknown type +(define-extern swamp-tetherrock-die (state swamp-tetherrock)) ;; unknown type +(define-extern swamp-tetherrock-hide (state swamp-tetherrock)) ;; unknown type +(define-extern swamp-tetherrock-idle (state swamp-tetherrock)) ;; unknown type +(define-extern swamp-tetherrock-break (state swamp-tetherrock)) ;; unknown type + +;; DECOMP BEGINS + +(defskelgroup *swamp-tetherrock-sg* swamp-tetherrock + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 4 0 6) + :longest-edge (meters 0) + ) + +(defskelgroup *swamp-tetherrock-explode-sg* swamp-tetherrock-explode + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 4 0 16) + :longest-edge (meters 0) + ) + +(defskelgroup *precursor-arm-sg* precursor-arm + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 15 0 15) + :longest-edge (meters 0) + ) + +(defskelgroup *swamp-rope-sg* swamp-rope + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 300) + :longest-edge (meters 66) + ) + +(defskelgroup *swamp-blimp-sg* swamp-blimp + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 10 60 0 95) + :longest-edge (meters 40) + ) + +(set! (-> *part-group-id-table* 285) (new 'static 'sparticle-launch-group + :length 4 + :duration #x96 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-tetherrock-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 2065 :period 600 :length 5) + (sp-item 2066 :period 600 :length 40) + (sp-item 2067 :period 600 :length 20) + (sp-item 2068 :period 600 :length 20) + ) + :bounds (new 'static 'sphere :w 65536.0) + ) + ) + +(set! (-> *part-id-table* 2066) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.33) (meters 0.66) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.21333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 29 1) + (sp-launcher-by-id spt-next-launcher 2069) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2069) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.4222223) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2068) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 3.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-flt spt-scale-x (meters 0.4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 16.0)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.04)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2065) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 2.0)) + (sp-flt spt-scale-x (meters 32.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 192.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2067) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 4.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 255.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.026666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-int spt-next-time 42) + (sp-launcher-by-id spt-next-launcher 2070) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2070) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -0.53333336) + (sp-flt spt-fade-b -1.0583333) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2017) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 0.2) + (sp-flt spt-y (meters 0.1)) + (sp-flt spt-scale-x (meters 3.0)) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit4 bit14) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 109) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 287) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-tether-rock-hit" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 1321 :period 15 :length 5)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1321) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 16.0 1.0) + (sp-rnd-flt spt-g 70.0 16.0 1.0) + (sp-flt spt-b 70.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-accel-y -10.922667) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2) + (sp-flt spt-userdata 0.0) + (sp-rnd-flt spt-conerot-x (degrees 20.0) (degrees 50.000004) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(deftype swamp-blimp-bank (basic) + ((arm-index int32 :offset-assert 4) + (pause-before-dropping-arm int32 :offset-assert 8) + (rise-per-break float :offset-assert 12) + (arm-sink-wait float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + + +(define + *SWAMP_BLIMP-bank* + (new 'static 'swamp-blimp-bank :pause-before-dropping-arm #x4b0 :rise-per-break 16384.0 :arm-sink-wait 1500.0) + ) + +(deftype tetherrock-info (structure) + ((rock-camera string :offset-assert 0) + (arm-camera string :offset-assert 4) + (blimp-rp int32 :offset-assert 8) + (other-rp int32 :offset-assert 12) + (connected-to-rock basic :offset-assert 16) + (damping float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + + +(defun tetherrock-get-info ((arg0 entity)) + (case (-> arg0 extra perm task) + (((game-task swamp-tether-1)) + (new 'static 'tetherrock-info + :rock-camera "camera-182" + :arm-camera "camera-187" + :blimp-rp 10 + :other-rp 4 + :connected-to-rock #t + :damping 0.99 + ) + ) + (((game-task swamp-tether-2)) + (new 'static 'tetherrock-info + :rock-camera "camera-183" + :arm-camera "camera-186" + :blimp-rp 6 + :other-rp 4 + :connected-to-rock #t + :damping 0.99 + ) + ) + (((game-task swamp-tether-3)) + (new 'static 'tetherrock-info + :rock-camera "camera-180" + :arm-camera "camera-184" + :blimp-rp 7 + :other-rp 4 + :connected-to-rock #t + :damping 0.99 + ) + ) + (((game-task swamp-tether-4)) + (new 'static 'tetherrock-info + :rock-camera "camera-181" + :arm-camera "camera-185" + :blimp-rp 9 + :other-rp 4 + :connected-to-rock #t + :damping 0.99 + ) + ) + (else + (new 'static 'tetherrock-info + :rock-camera "" + :arm-camera "" + :blimp-rp 8 + :other-rp 4 + :connected-to-rock #f + :damping 0.7 + ) + ) + ) + ) + +(deftype swamp-rope-rand-float (structure) + ((min-time int32 :offset-assert 0) + (max-time int32 :offset-assert 4) + (max-val float :offset-assert 8) + (timer int32 :offset-assert 12) + (value float :offset-assert 16) + ) + :pack-me + :method-count-assert 11 + :size-assert #x14 + :flag-assert #xb00000014 + (:methods + (init! (_type_ int int float) none 9) + (update-timer! (_type_) none 10) + ) + ) + + +(defmethod init! swamp-rope-rand-float ((obj swamp-rope-rand-float) (arg0 int) (arg1 int) (arg2 float)) + (set! (-> obj min-time) arg0) + (set! (-> obj max-time) arg1) + (set! (-> obj max-val) (* 0.5 arg2)) + (set! (-> obj timer) 0) + (set! (-> obj value) 0.0) + 0 + (none) + ) + +(defmethod update-timer! swamp-rope-rand-float ((obj swamp-rope-rand-float)) + (set! (-> obj timer) + (- (-> obj timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (when (<= (-> obj timer) 0) + (set! (-> obj timer) (rand-vu-int-range (-> obj min-time) (-> obj max-time))) + (set! (-> obj value) (rand-vu-float-range (- (-> obj max-val)) (-> obj max-val))) + ) + 0 + (none) + ) + +(deftype swamp-rope-oscillator (structure) + ((target float :offset-assert 0) + (value float :offset-assert 4) + (vel float :offset-assert 8) + (accel float :offset-assert 12) + (vector-overlay vector :inline :offset 0) + (max-vel float :offset-assert 16) + (damping float :offset-assert 20) + ) + :method-count-assert 11 + :size-assert #x18 + :flag-assert #xb00000018 + (:methods + (init! (_type_ float float float float) none 9) + (TODO-RENAME-10 (_type_ float) none 10) + ) + ) + + +(defmethod init! swamp-rope-oscillator ((obj swamp-rope-oscillator) (arg0 float) (arg1 float) (arg2 float) (arg3 float)) + (set! (-> obj target) arg0) + (set! (-> obj value) arg0) + (set! (-> obj vel) 0.0) + (set! (-> obj accel) arg1) + (set! (-> obj max-vel) arg2) + (set! (-> obj damping) arg3) + 0 + (none) + ) + +(defmethod TODO-RENAME-10 swamp-rope-oscillator ((obj swamp-rope-oscillator) (arg0 float)) + (let ((f0-3 (* (- (+ (-> obj target) arg0) (-> obj value)) (* (-> obj accel) (-> *display* time-adjust-ratio))))) + (+! (-> obj vel) f0-3) + ) + (set! (-> obj vel) (fmin (-> obj max-vel) (fmax (- (-> obj max-vel)) (-> obj vel)))) + (set! (-> obj vel) (* (-> obj vel) (-> obj damping))) + (+! (-> obj value) (* (-> obj vel) (-> *display* time-adjust-ratio))) + 0 + (none) + ) + +(deftype swamp-blimp-rand-vector (structure) + ((min-time int32 :offset-assert 0) + (max-time int32 :offset-assert 4) + (xz-max float :offset-assert 8) + (y-max float :offset-assert 12) + (timer int32 :offset-assert 16) + (value vector :inline :offset-assert 32) + ) + :method-count-assert 11 + :size-assert #x30 + :flag-assert #xb00000030 + (:methods + (init! (_type_ int int float float) none 9) + (update-timer! (_type_) none 10) + ) + ) + + +(defmethod init! swamp-blimp-rand-vector ((obj swamp-blimp-rand-vector) (arg0 int) (arg1 int) (arg2 float) (arg3 float)) + (set! (-> obj min-time) arg0) + (set! (-> obj max-time) arg1) + (set! (-> obj xz-max) (* 0.5 arg2)) + (set! (-> obj y-max) (* 0.5 arg3)) + (set! (-> obj timer) 0) + (vector-reset! (-> obj value)) + 0 + (none) + ) + +(defmethod update-timer! swamp-blimp-rand-vector ((obj swamp-blimp-rand-vector)) + (set! (-> obj timer) + (- (-> obj timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (when (<= (-> obj timer) 0) + (set! (-> obj timer) (rand-vu-int-range (-> obj min-time) (-> obj max-time))) + (set! (-> obj value x) (rand-vu-float-range (- (-> obj xz-max)) (-> obj xz-max))) + (set! (-> obj value y) (rand-vu-float-range (- (-> obj y-max)) (-> obj y-max))) + (set! (-> obj value z) (rand-vu-float-range (- (-> obj xz-max)) (-> obj xz-max))) + ) + 0 + (none) + ) + +(deftype swamp-blimp-oscillator (structure) + ((target vector :inline :offset-assert 0) + (value vector :inline :offset-assert 16) + (vel vector :inline :offset-assert 32) + (accel float :offset-assert 48) + (max-vel float :offset-assert 52) + (damping float :offset-assert 56) + ) + :pack-me + :method-count-assert 11 + :size-assert #x3c + :flag-assert #xb0000003c + (:methods + (init! (_type_ vector float float float) none 9) + (TODO-RENAME-10 (_type_ vector) none 10) + ) + ) + + +(defmethod init! swamp-blimp-oscillator ((obj swamp-blimp-oscillator) (arg0 vector) (arg1 float) (arg2 float) (arg3 float)) + (cond + (arg0 + (set! (-> obj target quad) (-> arg0 quad)) + (set! (-> obj value quad) (-> arg0 quad)) + ) + (else + (vector-reset! (-> obj target)) + (vector-reset! (-> obj value)) + ) + ) + (vector-reset! (-> obj vel)) + (set! (-> obj accel) arg1) + (set! (-> obj max-vel) arg2) + (set! (-> obj damping) arg3) + 0 + (none) + ) + +(defmethod TODO-RENAME-10 swamp-blimp-oscillator ((obj swamp-blimp-oscillator) (arg0 vector)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (cond + (arg0 + (vector+! gp-0 (-> obj target) arg0) + (vector-! gp-0 gp-0 (-> obj value)) + ) + (else + (vector-! gp-0 (-> obj target) (-> obj value)) + ) + ) + (vector-float*! gp-0 gp-0 (* (-> obj accel) (-> *display* time-adjust-ratio))) + (vector+! (-> obj vel) (-> obj vel) gp-0) + (let ((f0-2 (vector-length (-> obj vel)))) + (if (< (-> obj max-vel) f0-2) + (vector-float*! (-> obj vel) (-> obj vel) (/ (-> obj max-vel) f0-2)) + ) + ) + (vector-float*! (-> obj vel) (-> obj vel) (-> obj damping)) + (vector-float*! gp-0 (-> obj vel) (-> *display* time-adjust-ratio)) + (vector+! (-> obj value) (-> obj value) gp-0) + ) + 0 + (none) + ) + +(deftype swamp-tetherrock (process-drawable) + ((root-override collide-shape-moving :offset 112) + (tension float :offset-assert 176) + (tension-pt vector :inline :offset-assert 192) + (blimp entity-actor :offset-assert 208) + (rot-at-init quaternion :inline :offset-assert 224) + (hits int32 :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf4 + :flag-assert #x14009000f4 + ) + + +(deftype precursor-arm (process-drawable) + ((root-override collide-shape :offset 112) + (y-init float :offset-assert 176) + (y-offset float :offset-assert 180) + (rot-speed float :offset-assert 184) + (rot-dist float :offset-assert 188) + (rot-base float :offset-assert 192) + (rot-t float :offset-assert 196) + (init-mat matrix :inline :offset-assert 208) + (tension float :offset-assert 272) + ) + :heap-base #xb0 + :method-count-assert 20 + :size-assert #x114 + :flag-assert #x1400b00114 + ) + + +(deftype swamp-rope (process-drawable) + ((parent-override (pointer swamp-blimp) :offset 12) + (parent-rp int32 :offset-assert 176) + (other-entity entity-actor :offset-assert 180) + (other-rp int32 :offset-assert 184) + (old-scale float :offset-assert 188) + (frame swamp-rope-oscillator :inline :offset-assert 192) + (other-pos vector :inline :offset-assert 224) + (scale-base float :offset-assert 240) + (base-vec vector :inline :offset-assert 256) + (scale-t float :offset-assert 272) + (x-t float :offset-assert 276) + (z-t float :offset-assert 280) + (rot-speed float :offset-assert 284) + ) + :heap-base #xb0 + :method-count-assert 21 + :size-assert #x120 + :flag-assert #x1500b00120 + (:methods + (dummy-20 (_type_) basic 20) + ) + ) + + +(defmethod dummy-20 swamp-rope ((obj swamp-rope)) + (and + (-> obj other-entity) + (not (task-closed? (-> obj other-entity extra perm task) (task-status need-reminder))) + ) + ) + +(deftype swamp-blimp (process-drawable) + ((root-override collide-shape-moving :offset 112) + (the-ropes handle 5 :offset-assert 176) + (arm-timer int32 :offset-assert 216) + (trans-at-init vector :inline :offset-assert 224) + (rot-at-init quaternion :inline :offset-assert 240) + (y-vel float :offset-assert 256) + (y-offset float :offset-assert 260) + (y-offset-target float :offset-assert 264) + (main-tilt-rand swamp-blimp-rand-vector :inline :offset-assert 272) + (main-tilt-oscillator swamp-blimp-oscillator :inline :offset-assert 320) + (gondola-tilt-oscillator swamp-blimp-oscillator :inline :offset-assert 384) + (pos-rand swamp-blimp-rand-vector :inline :offset-assert 448) + (pos-oscillator swamp-blimp-oscillator :inline :offset-assert 496) + (scale-rand swamp-rope-rand-float :inline :offset-assert 556) + (scale-oscillator swamp-rope-oscillator :inline :offset-assert 576) + (gondola joint-mod :offset-assert 600) + (bag joint-mod :offset-assert 604) + ) + :heap-base #x1f0 + :method-count-assert 20 + :size-assert #x260 + :flag-assert #x1401f00260 + ) + + +(defmethod relocate swamp-blimp ((obj swamp-blimp) (arg0 int)) + (if (nonzero? (-> obj gondola)) + (&+! (-> obj gondola) arg0) + ) + (if (nonzero? (-> obj bag)) + (&+! (-> obj bag) arg0) + ) + (the-as + swamp-blimp + ((the-as (function process-drawable int process-drawable) (find-parent-method swamp-blimp 7)) obj arg0) + ) + ) + +(defstate swamp-tetherrock-die (swamp-tetherrock) + :code + (behavior () (dummy-18 self) (deactivate self) (suspend) 0 (none)) + ) + +(defstate swamp-tetherrock-hide (swamp-tetherrock) + :code + (behavior () + (clear-collide-with-as (-> self root-override)) + (logior! (-> self draw status) 2) + (while #t + (when (= (get-task-status (-> self entity extra perm task)) (task-status invalid)) + (if (not (-> self child)) + (go swamp-tetherrock-die) + ) + ) + (suspend) + ) + (none) + ) + ) + +(defstate swamp-tetherrock-break (swamp-tetherrock) + :exit + (behavior () + (clear-pending-settings-from-process *setting-control* self 'movie) + (clear-pending-settings-from-process *setting-control* self 'process-mask) + (copy-settings-from-target! *setting-control*) + (none) + ) + :code + (behavior () + (let ((gp-0 (tetherrock-get-info (-> self entity)))) + (hide-hud-quick) + (process-grab? *target*) + (set-setting! *setting-control* self 'movie (the-as symbol (process->ppointer self)) 0.0 0) + (set-setting! *setting-control* self 'process-mask 'set 0.0 #x80800) + (copy-settings-from-target! *setting-control*) + (let* ((s4-0 (get-task-control (game-task swamp-tether-1))) + (s5-0 (+ (get-reminder s4-0 0) 1)) + ) + (save-reminder s4-0 s5-0 0) + (cond + ((= s5-0 1) + (ambient-hint-spawn "gamcam03" (the-as vector #f) *entity-pool* 'camera) + ) + ((= s5-0 2) + (ambient-hint-spawn "gamcam03" (the-as vector #f) *entity-pool* 'camera) + ) + ((= s5-0 3) + (ambient-hint-spawn "gamcam03" (the-as vector #f) *entity-pool* 'camera) + ) + ((= s5-0 4) + (ambient-hint-spawn "gamcam06" (the-as vector #f) *entity-pool* 'camera) + ) + ) + ) + (let ((s5-1 (entity-by-name (-> gp-0 rock-camera)))) + (cam-slave-get-vector-with-offset (the-as entity-actor s5-1) *camera-other-trans* 'trans) + (cam-slave-get-rot (the-as entity-actor s5-1) *camera-other-matrix*) + (set! (-> *camera-other-fov* data) (cam-slave-get-fov s5-1)) + ) + (set! (-> *camera-other-root* quad) (-> self root-override trans quad)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 180) + (set! *camera-look-through-other* 2) + (suspend) + ) + (set! (-> self tension) 0.0) + (close-specific-task! (-> self entity extra perm task) (task-status need-reminder)) + (birth-pickup-at-point + (-> self root-override trans) + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + self + (the-as fact-info #f) + ) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 1) + (set! (-> a1-12 message) 'tetherrock-break-evt) + (set! (-> a1-12 param 0) (the-as uint (-> self entity))) + (let* ((t9-19 send-event-function) + (v1-41 (-> self blimp)) + (s5-2 (t9-19 + (if v1-41 + (-> v1-41 extra process) + ) + a1-12 + ) + ) + ) + (let ((s4-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s4-1 + (let ((t9-21 (method-of-type part-tracker activate))) + (t9-21 (the-as part-tracker s4-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-1 + part-tracker-init + (-> *part-group-id-table* 285) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> s4-1 ppointer) + ) + ) + (logior! (-> self draw status) 32) + (let* ((s4-2 (get-process *default-dead-pool* manipy #x4000)) + (s4-3 (ppointer->handle (when s4-2 + (let ((t9-24 (method-of-type manipy activate))) + (t9-24 (the-as manipy s4-2) *entity-pool* 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-2 + manipy-init + (-> self root-override trans) + (-> self entity) + *swamp-tetherrock-explode-sg* + #f + ) + (-> s4-2 ppointer) + ) + ) + ) + ) + (send-event (handle->process (the-as handle s4-3)) 'anim-mode 'play1) + (send-event (handle->process (the-as handle s4-3)) 'art-joint-anim "swamp-tetherrock-explode-explode" 0) + (send-event (handle->process (the-as handle s4-3)) 'draw #t) + (while (handle->process (the-as handle s4-3)) + (set! *camera-look-through-other* 2) + (suspend) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (set! *camera-look-through-other* 2) + (suspend) + ) + (when (zero? s5-2) + (let ((gp-1 (entity-by-name (-> gp-0 arm-camera)))) + (cam-slave-get-vector-with-offset (the-as entity-actor gp-1) *camera-other-trans* 'trans) + (cam-slave-get-rot (the-as entity-actor gp-1) *camera-other-matrix*) + (set! (-> *camera-other-fov* data) (cam-slave-get-fov gp-1)) + ) + (set! (-> *camera-other-root* quad) (-> self root-override trans quad)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 1500) + (set! *camera-look-through-other* 2) + (suspend) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 1500) + (set! *camera-look-through-other* 2) + (let ((gp-2 (new 'stack-no-clear 'vector)) + (a0-58 (-> self blimp extra process)) + ) + (when a0-58 + (vector-! gp-2 (-> (the-as swamp-blimp a0-58) root-override trans) *camera-other-trans*) + (vector-normalize! gp-2 1.0) + (forward-down->inv-matrix *camera-other-matrix* gp-2 (-> *camera* local-down)) + ) + ) + (suspend) + ) + ) + (process-release? *target*) + (let ((gp-3 (get-process *default-dead-pool* process #x4000))) + (when gp-3 + (let ((t9-37 (method-of-type process activate))) + (t9-37 gp-3 self 'process (the-as pointer #x70004000)) + ) + (run-next-time-in-process + gp-3 + (lambda ((arg0 int)) + (while (or + (-> *setting-control* current ambient) + (-> *setting-control* current hint) + (-> *setting-control* current movie) + ) + (suspend) + ) + (cond + ((= arg0 3) + (level-hint-spawn + (game-text-id swamp-tethers-three-to-go) + "sksp0157" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 2) + (level-hint-spawn + (game-text-id swamp-tethers-two-to-go) + "sksp0158" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 1) + (level-hint-spawn + (game-text-id swamp-tethers-lefts-find-the-last) + "sksp0159" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((zero? arg0) + (level-hint-spawn + (game-text-id swamp-tethers-completion-sage-precursor-arm) + "sagevb04" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (none) + ) + s5-2 + ) + (-> gp-3 ppointer) + ) + ) + ) + ) + ) + (go swamp-tetherrock-hide) + (none) + ) + :post + (the-as (function none :behavior swamp-tetherrock) ja-post) + ) + +(defstate swamp-tetherrock-idle (swamp-tetherrock) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (when (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (+! (-> self hits) 1) + (cond + ((>= (-> self hits) 1) + (go swamp-tetherrock-break) + ) + (else + (let* ((s5-0 arg0) + (gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) + s5-0 + ) + ) + (s5-1 (get-process *default-dead-pool* part-tracker #x4000)) + ) + (when s5-1 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 287) + 150 + #f + #f + #f + (if gp-0 + (-> (the-as process-drawable gp-0) root trans) + (-> self root-override trans) + ) + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (while #t + (let ((s4-0 (new 'static 'vector :y 1.0 :w 1.0)) + (s3-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'quaternion)) + ) + 0.0 + (vector-! s3-0 (-> self tension-pt) (-> self root-override trans)) + (vector-normalize! s3-0 1.0) + (vector-cross! s5-0 s4-0 s3-0) + (let ((f30-0 (asin (vector-normalize-ret-len! s5-0 1.0)))) + (vector-normalize! s5-0 1.0) + (quaternion-vector-angle! gp-0 s5-0 (* (fmin 1820.4445 f30-0) (- 1.0 (-> self tension)))) + ) + (quaternion*! (-> self root-override quat) gp-0 (-> self rot-at-init)) + ) + (if (and *target* (>= 49152.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (level-hint-spawn + (game-text-id swamp-tethers-advice-hint) + "sksp0138" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-tetherrock) transform-post) + ) + +(defmethod init-from-entity! swamp-tetherrock ((obj swamp-tetherrock) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask attackable) (-> obj mask))) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 12288.0 0.0 24576.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *swamp-tetherrock-sg* '()) + (set! (-> obj fact) + (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (set! (-> obj blimp) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj tension) 0.0) + (vector-reset! (-> obj tension-pt)) + (quaternion-copy! (-> obj rot-at-init) (-> obj root-override quat)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (case (get-task-status (-> obj entity extra perm task)) + (((task-status invalid)) + (go swamp-tetherrock-die) + ) + (((task-status need-resolution)) + (birth-pickup-at-point + (-> obj root-override trans) + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + (go swamp-tetherrock-hide) + ) + (else + (go swamp-tetherrock-idle) + ) + ) + (none) + ) + +(defstate precursor-arm-die (precursor-arm) + :code + (behavior () + (dummy-18 self) + (deactivate self) + (while #t + (suspend) + ) + (none) + ) + ) + +(defstate precursor-arm-sink (precursor-arm) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) + (the int (-> *SWAMP_BLIMP-bank* arm-sink-wait)) + ) + (suspend) + ) + (close-specific-task! (-> self entity extra perm task) (task-status need-reminder)) + (close-specific-task! (-> self entity extra perm task) (task-status need-resolution)) + (while #t + (cond + ((< -40960.0 (-> self y-offset)) + (set! (-> self y-offset) (- (-> self y-offset) (* 409.6 (-> *display* time-adjust-ratio)))) + ) + (else + (set! (-> self y-offset) -40960.0) + (dummy-18 self) + (deactivate self) + ) + ) + (set! (-> self root-override trans y) (+ (-> self y-offset) (-> self y-init))) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior precursor-arm) transform-post) + ) + +(defun precursor-arm-slip ((arg0 float)) + (cond + ((>= arg0 1.0) + 1.0 + ) + ((>= 0.0 arg0) + 0.0 + ) + (else + (let ((f0-2 1.0) + (f1-3 (- 1.0 arg0)) + ) + (- f0-2 (* f1-3 f1-3)) + ) + ) + ) + ) + +(defstate precursor-arm-idle (precursor-arm) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('arm-sink-evt) + (go precursor-arm-sink) + ) + ) + ) + :trans + (behavior () + (when (>= (-> self rot-t) 1.0) + (+! (-> self rot-base) (-> self rot-dist)) + (set! (-> self rot-dist) (rand-vu-float-range -16384.0 16384.0)) + (set! (-> self rot-speed) + (/ 1.0 (* 300.0 (+ (* 0.001373291 (fabs (-> self rot-dist))) (rand-vu-float-range 2.0 5.0)))) + ) + (set! (-> self rot-t) 0.0) + ) + (+! (-> self rot-t) (* (-> self rot-speed) (-> *display* time-adjust-ratio))) + (let ((gp-0 (new 'stack-no-clear 'matrix))) + (matrix-rotate-y! + gp-0 + (+ (-> self rot-base) (* (parameter-ease-sin-clamp (-> self rot-t)) (-> self rot-dist))) + ) + (matrix*! gp-0 (-> self init-mat) gp-0) + (matrix->quaternion (-> self root-override quat) gp-0) + ) + (when (< (vector-vector-distance (-> self root-override trans) (camera-pos)) 204800.0) + (let ((a2-1 (new 'static 'vector))) + (set! (-> a2-1 quad) (-> self root-override trans quad)) + (set! (-> a2-1 y) 0.0) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2017) + a2-1 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (set! (-> self tension) 1.5) + (let* ((f26-0 (+ 225.0 (* 150.0 (sin (rand-vu-float-range 0.0 16384.0))))) + (f0-5 (+ 4096.0 (* 8192.0 (sin (rand-vu-float-range 0.0 16384.0))))) + (f30-2 (-> self y-offset)) + (f0-6 (+ f0-5 f30-2)) + (f28-2 (fmin f0-6 (- 57344.0 f0-6))) + ) + (when (< 0.0 f28-2) + (let ((f26-1 (+ f26-0 (* 0.14648438 f28-2)))) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while (< (- (-> *display* base-frame-counter) (-> self state-time)) (the int f26-1)) + (if (< (- f26-1 (the float (- (-> *display* base-frame-counter) (-> self state-time)))) 150.0) + (set! (-> self tension) 0.5) + ) + (set! (-> self y-offset) + (+ f30-2 + (* f28-2 + (precursor-arm-slip (/ (the float (- (-> *display* base-frame-counter) (-> self state-time))) f26-1)) + ) + ) + ) + (set! (-> self root-override trans y) (+ (-> self y-offset) (-> self y-init))) + (suspend) + ) + ) + ) + ) + (suspend) + (let* ((f26-2 (+ 600.0 (* 300.0 (sin (rand-vu-float-range 0.0 16384.0))))) + (f0-26 (* 49152.0 (sin (rand-vu-float-range 0.0 16384.0)))) + (f30-5 (-> self y-offset)) + (f28-4 (- f0-26 f30-5)) + ) + (when (< f28-4 0.0) + (let ((f26-3 (- f26-2 (* 0.036621094 f28-4)))) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while (< (- (-> *display* base-frame-counter) (-> self state-time)) (the int f26-3)) + (if (< (- f26-3 (the float (- (-> *display* base-frame-counter) (-> self state-time)))) 150.0) + (set! (-> self tension) 1.5) + ) + (set! (-> self y-offset) + (+ f30-5 + (* f28-4 + (parameter-ease-sin-clamp (/ (the float (- (-> *display* base-frame-counter) (-> self state-time))) f26-3)) + ) + ) + ) + (set! (-> self root-override trans y) (+ (-> self y-offset) (-> self y-init))) + (suspend) + ) + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior precursor-arm) transform-post) + ) + +(defmethod init-from-entity! precursor-arm ((obj precursor-arm) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (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 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 61440.0 0.0 61440.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *precursor-arm-sg* '()) + (set! (-> obj rot-speed) 0.0) + (set! (-> obj rot-dist) 0.0) + (set! (-> obj rot-base) 0.0) + (set! (-> obj rot-t) 1.0) + (quaternion->matrix (-> obj init-mat) (-> obj root-override quat)) + (set! (-> obj y-offset) 0.0) + (set! (-> obj y-init) (-> obj root-override trans y)) + (set! (-> obj tension) 0.0) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj event-hook) (-> precursor-arm-idle event)) + (if (= (get-task-status (-> obj entity extra perm task)) (task-status invalid)) + (go precursor-arm-die) + (go precursor-arm-idle) + ) + (none) + ) + +(defbehavior swamp-rope-update-bounding-spheres swamp-rope () + (let ((a0-0 (new 'stack-no-clear 'vector))) + (vector-! a0-0 (-> self other-pos) (-> self root trans)) + (vector-float*! a0-0 a0-0 0.5) + (set! (-> self draw bounds quad) (-> a0-0 quad)) + (set! (-> self draw bounds w) (vector-length a0-0)) + ) + 0 + (none) + ) + +(defbehavior swamp-rope-post swamp-rope () + (swamp-rope-update-bounding-spheres) + (ja-post) + 0 + (none) + ) + +(defbehavior swamp-rope-break-code swamp-rope () + (when (or (< 0.001 (fabs (-> self base-vec x))) (< 0.001 (fabs (-> self base-vec z)))) + (set! (-> self base-vec x) + (- (-> self base-vec x) (* 0.02 (-> *display* time-adjust-ratio) (-> self base-vec x))) + ) + (set! (-> self base-vec z) + (- (-> self base-vec z) (* 0.02 (-> *display* time-adjust-ratio) (-> self base-vec z))) + ) + (vector-normalize! (-> self base-vec) 1.0) + ) + (when (< 0.4 (-> self scale-base)) + (let ((f1-13 (fmax 0.002 (* 0.05 (+ -0.4 (-> self scale-base)))))) + (set! (-> self scale-base) (- (-> self scale-base) (* f1-13 (-> *display* time-adjust-ratio)))) + ) + ) + (+! (-> self scale-t) (* 0.005 (-> *display* time-adjust-ratio))) + (+! (-> self x-t) (* 0.004 (-> *display* time-adjust-ratio))) + (+! (-> self z-t) (* 0.003 (-> *display* time-adjust-ratio))) + (let ((f0-19 + (* (sin (+ 32768.0 (* 65536.0 (-> self scale-t)))) (fmax 0.003 (fmin 0.1 (* 0.1 (- 3.0 (-> self scale-t)))))) + ) + ) + (set! (-> self root scale y) (+ (-> self scale-base) f0-19)) + ) + (let ((gp-0 (new 'stack-no-clear 'matrix))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-reset! (-> gp-0 vector 3)) + (vector-reset! s5-0) + (set! (-> s5-0 x) (* (sin (* 65536.0 (-> self x-t))) (fmax 0.01 (fmin 0.1 (* 0.1 (- 10.0 (-> self x-t))))))) + (set! (-> s5-0 z) (* (sin (* 65536.0 (-> self z-t))) (fmax 0.01 (fmin 0.1 (* 0.1 (- 10.0 (-> self z-t))))))) + (vector+! s5-0 s5-0 (-> self base-vec)) + (set! (-> gp-0 vector 1 quad) (-> s5-0 quad)) + (vector-normalize! (-> gp-0 vector 1) 1.0) + (set-vector! + s5-0 + (sin (* (-> self rot-speed) (the float (- (-> *display* base-frame-counter) (-> self state-time))))) + 0.0 + (cos (* (-> self rot-speed) (the float (- (-> *display* base-frame-counter) (-> self state-time))))) + 1.0 + ) + (vector-cross! (the-as vector (-> gp-0 vector)) (-> gp-0 vector 1) s5-0) + ) + (vector-normalize! (the-as vector (-> gp-0 vector)) 1.0) + (vector-cross! (-> gp-0 vector 2) (the-as vector (-> gp-0 vector)) (-> gp-0 vector 1)) + (matrix->quaternion (-> self root quat) gp-0) + ) + ) + +(defstate swamp-rope-break (swamp-rope) + :enter + (behavior () (set! (-> self scale-base) (-> self root scale y)) (none)) + :trans + (behavior () + (vector<-cspace! (-> self root trans) (-> self parent-override 0 node-list data (-> self parent-rp))) + (none) + ) + :code + (behavior () + (let* ((f30-0 18.204445) + (f28-0 9.102222) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + ) + (set! (-> self rot-speed) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2))))) + ) + (let* ((f30-1 3000000.0) + (v1-5 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-6 (the-as number (logior #x3f800000 v1-5))) + ) + (set! (-> self state-time) (the int (* f30-1 (+ -1.0 (the-as float v1-6))))) + ) + (ja-channel-push! 1 150) + (while #t + (let* ((f30-2 0.3) + (f28-1 0.25) + (v1-10 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-11 (the-as number (logior #x3f800000 v1-10))) + (f30-3 (+ f30-2 (* f28-1 (+ -1.0 (the-as float v1-11))))) + ) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) f30-3) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (swamp-rope-break-code) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) f30-3) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (none) + ) + :post + (behavior () + (set! (-> self other-pos quad) (-> self root trans quad)) + (set! (-> self other-pos y) (+ -245760.0 (-> self other-pos y))) + (swamp-rope-post) + (none) + ) + ) + +(defbehavior swamp-rope-trans swamp-rope () + (vector<-cspace! (-> self root trans) (-> self parent-override 0 node-list data (-> self parent-rp))) + (cond + ((not (dummy-20 self)) + (let ((gp-0 (new 'stack-no-clear 'matrix))) + (quaternion->matrix gp-0 (-> self root quat)) + (set! (-> self base-vec quad) (-> gp-0 vector 1 quad)) + ) + (go swamp-rope-break) + ) + (else + (let* ((a0-5 (-> self other-entity)) + (v1-10 (if a0-5 + (-> a0-5 extra process) + ) + ) + ) + (if (and v1-10 (nonzero? (-> (the-as swamp-rope v1-10) root))) + (vector<-cspace! (-> self other-pos) (-> (the-as swamp-rope v1-10) node-list data (-> self other-rp))) + ) + ) + (let ((gp-1 (new 'stack-no-clear 'matrix))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-reset! (-> gp-1 vector 3)) + (vector-! (-> gp-1 vector 1) (-> self root trans) (-> self other-pos)) + (set! (-> self old-scale) (-> self root scale y)) + (set! (-> self root scale y) (* 0.0000020345053 (vector-normalize-ret-len! (-> gp-1 vector 1) 1.0))) + (set-vector! s5-0 0.0 -1.0 0.0 1.0) + (vector-cross! (the-as vector (-> gp-1 vector)) (-> gp-1 vector 1) s5-0) + ) + (vector-normalize! (the-as vector (-> gp-1 vector)) 1.0) + (vector-cross! (-> gp-1 vector 2) (the-as vector (-> gp-1 vector)) (-> gp-1 vector 1)) + (matrix->quaternion (-> self root quat) gp-1) + ) + ) + ) + 0 + (none) + ) + +(defstate swamp-rope-idle-rock (swamp-rope) + :trans + swamp-rope-trans + :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))) + ) + (while #t + (let* ((f0-1 (* 2000.0 (- (-> self old-scale) (-> self root scale y)))) + (f1-3 (+ 0.5 f0-1)) + ) + (set! (-> self frame target) (fmin 1.0 (fmax 0.0 f1-3))) + ) + (TODO-RENAME-10 (-> self frame) 0.0) + (let* ((v1-6 (-> self other-entity)) + (a0-4 (if v1-6 + (-> v1-6 extra process) + ) + ) + ) + (when a0-4 + (set! (-> (the-as swamp-rope a0-4) parent-rp) (the-as int (-> self frame value))) + (set! (-> (the-as swamp-rope a0-4) frame vector-overlay quad) (-> self root trans quad)) + ) + ) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 num-func) num-func-identity) + (set! (-> gp-0 frame-num) (* (-> self frame value) (the float (ja-num-frames 0)))) + ) + (suspend) + ) + (none) + ) + :post + swamp-rope-post + ) + +(defstate swamp-rope-idle-arm (swamp-rope) + :trans + swamp-rope-trans + :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))) + ) + (while #t + (let* ((a0-3 (-> self other-entity)) + (v1-3 (if a0-3 + (-> a0-3 extra process) + ) + ) + ) + (if v1-3 + (set! (-> self frame target) (- 1.0 (-> (the-as swamp-rope v1-3) scale-t))) + ) + ) + (TODO-RENAME-10 (-> self frame) 0.0) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 num-func) num-func-identity) + (set! (-> gp-0 frame-num) (* (-> self frame value) (the float (ja-num-frames 0)))) + ) + (suspend) + ) + (none) + ) + :post + swamp-rope-post + ) + +(defbehavior swamp-rope-init-by-other swamp-rope ((arg0 vector) (arg1 entity-actor)) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg0 quad)) + (initialize-skeleton self *swamp-rope-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self other-entity) arg1) + (when (-> self other-entity) + (set! (-> self other-pos quad) (-> self other-entity extra trans quad)) + (let ((gp-1 (tetherrock-get-info (-> self other-entity)))) + (init! (-> self frame) 0.0 0.002 0.02 (-> gp-1 damping)) + (set! (-> self parent-rp) (-> gp-1 blimp-rp)) + (set! (-> self other-rp) (-> gp-1 other-rp)) + (if (-> gp-1 connected-to-rock) + (go swamp-rope-idle-rock) + (go swamp-rope-idle-arm) + ) + ) + ) + (go swamp-rope-break) + (none) + ) + +(defbehavior blimp-trans swamp-blimp () + (when (< (-> self y-offset) (-> self y-offset-target)) + (+! (-> self y-vel) (* 0.4096 (-> *display* time-adjust-ratio))) + (set! (-> self y-vel) + (fmax 4.096 (fmin (fmin 819.2 (* 0.01 (- (-> self y-offset-target) (-> self y-offset)))) (-> self y-vel))) + ) + (+! (-> self y-offset) (* (-> self y-vel) (-> *display* time-adjust-ratio))) + (when (>= (-> self y-offset) (-> self y-offset-target)) + (set! (-> self y-offset) (-> self y-offset-target)) + (set! (-> self y-vel) 0.0) + ) + ) + (update-timer! (-> self scale-rand)) + (set! (-> self scale-oscillator target) (* 0.9 (-> self scale-oscillator target))) + (TODO-RENAME-10 (-> self scale-oscillator) (-> self scale-rand value)) + (let ((a3-0 (new 'stack-no-clear 'vector))) + (set! (-> a3-0 y) (+ 1.0 (-> self scale-oscillator value))) + (set! (-> a3-0 x) (sqrtf (/ 1.0 (-> a3-0 y)))) + (set! (-> a3-0 z) (-> a3-0 x)) + (set! (-> a3-0 w) 1.0) + (set-trs! (-> self bag) (the-as vector #f) (the-as quaternion #f) a3-0) + ) + (update-timer! (-> self main-tilt-rand)) + (update-timer! (-> self pos-rand)) + (TODO-RENAME-10 (-> self main-tilt-oscillator) (-> self main-tilt-rand value)) + (TODO-RENAME-10 (-> self gondola-tilt-oscillator) (the-as vector #f)) + (TODO-RENAME-10 (-> self pos-oscillator) (-> self pos-rand value)) + (new 'stack-no-clear 'vector) + (let ((gp-0 (new 'stack-no-clear 'quaternion))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + 0.0 + (vector-normalize! (-> self gondola-tilt-oscillator value) 1.0) + (let ((f30-0 (acos (-> self gondola-tilt-oscillator value y)))) + (set-vector! + s5-0 + (-> self gondola-tilt-oscillator value z) + 0.0 + (- (-> self gondola-tilt-oscillator value x)) + 1.0 + ) + (vector-normalize! s5-0 1.0) + (quaternion-vector-angle! gp-0 s5-0 f30-0) + ) + (set-trs! (-> self gondola) (the-as vector #f) gp-0 (the-as vector #f)) + (vector-normalize! (-> self main-tilt-oscillator value) 1.0) + (let ((f30-1 (acos (-> self main-tilt-oscillator value y)))) + (set-vector! s5-0 (-> self main-tilt-oscillator value z) 0.0 (- (-> self main-tilt-oscillator value x)) 1.0) + (vector-normalize! s5-0 1.0) + (quaternion-vector-angle! gp-0 s5-0 f30-1) + ) + ) + (quaternion*! (-> self root-override quat) gp-0 (-> self rot-at-init)) + ) + (quaternion-normalize! (-> self root-override quat)) + (vector+! (-> self root-override trans) (-> self trans-at-init) (-> self pos-oscillator value)) + (let ((f0-34 (+ (-> self root-override trans y) (-> self y-offset)))) + (set! (-> self root-override trans y) f0-34) + f0-34 + ) + ) + +(defstate swamp-blimp-bye-bye (swamp-blimp) + :enter + (behavior () + (let ((gp-0 (entity-actor-lookup (-> self entity) 'alt-actor (-> *SWAMP_BLIMP-bank* arm-index)))) + (when gp-0 + (entity-birth-no-kill gp-0) + (let ((a0-2 (-> gp-0 extra process))) + (if a0-2 + (send-event a0-2 'arm-sink-evt) + ) + ) + ) + ) + (set! (-> self draw force-lod) 0) + 0 + (none) + ) + :trans + (the-as (function none :behavior swamp-blimp) blimp-trans) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-0 (new 'stack-no-clear 'quaternion))) + (quaternion-copy! gp-0 (-> self rot-at-init)) + (while #t + (quaternion-vector-angle! + (-> self rot-at-init) + (new 'static 'vector :y 1.0 :w 1.0) + (* 18.204445 (the float (- (-> *display* base-frame-counter) (-> self state-time)))) + ) + (quaternion*! (-> self rot-at-init) (-> self rot-at-init) gp-0) + (if (< (-> self pos-oscillator target x) 409600.0) + (set! (-> self pos-oscillator target x) (+ 40.96 (-> self pos-oscillator target x))) + ) + (if (< (-> self pos-oscillator target y) 4096000.0) + (set! (-> self pos-oscillator target y) (+ 819.2 (-> self pos-oscillator target y))) + ) + (if (< (-> self pos-oscillator target z) 4096000.0) + (set! (-> self pos-oscillator target z) (+ 1228.8 (-> self pos-oscillator target z))) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-blimp) transform-post) + ) + +(defbehavior swamp-blimp-setup swamp-blimp () + (rlet ((vf0 :class vf)) + (init-vf0-vector) + (let ((gp-0 0)) + (.svf (&-> (-> self gondola-tilt-oscillator) target quad) vf0) + (.svf (&-> (-> self pos-oscillator) target quad) vf0) + (dotimes (s5-0 5) + (let ((s4-0 (handle->process (-> self the-ropes s5-0)))) + (when s4-0 + (cond + ((= s5-0 (-> *SWAMP_BLIMP-bank* arm-index)) + (vector+! + (the-as vector (-> self pos-oscillator)) + (the-as vector (-> self pos-oscillator)) + (-> (the-as swamp-rope s4-0) other-pos) + ) + (vector-! + (the-as vector (-> self pos-oscillator)) + (the-as vector (-> self pos-oscillator)) + (-> self root-override trans) + ) + ) + ((dummy-20 (the-as swamp-rope s4-0)) + (vector+! + (the-as vector (-> self pos-oscillator)) + (the-as vector (-> self pos-oscillator)) + (-> (the-as swamp-rope s4-0) other-pos) + ) + (vector-! + (the-as vector (-> self pos-oscillator)) + (the-as vector (-> self pos-oscillator)) + (-> self trans-at-init) + ) + (+! gp-0 1) + ) + (else + (vector-! + (the-as vector (-> self gondola-tilt-oscillator)) + (the-as vector (-> self gondola-tilt-oscillator)) + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> self node-list data (-> (the-as swamp-rope s4-0) parent-rp)) + ) + ) + (vector+! + (the-as vector (-> self gondola-tilt-oscillator)) + (the-as vector (-> self gondola-tilt-oscillator)) + (-> self root-override trans) + ) + ) + ) + ) + ) + ) + (vector-float*! + (the-as vector (-> self pos-oscillator)) + (the-as vector (-> self pos-oscillator)) + (/ 1.0 (the float (+ gp-0 1))) + ) + (set! (-> self pos-oscillator target y) 0.0) + (set! (-> self scale-oscillator target) -0.2) + (+! (-> self y-offset-target) (-> *SWAMP_BLIMP-bank* rise-per-break)) + (cond + ((zero? gp-0) + (let ((v1-29 (-> self gondola-tilt-oscillator))) + (set! (-> v1-29 target x) 0.0) + (set! (-> v1-29 target y) 1.0) + (set! (-> v1-29 target z) 0.0) + (set! (-> v1-29 target w) 1.0) + ) + (set! (-> self arm-timer) (-> *SWAMP_BLIMP-bank* pause-before-dropping-arm)) + ) + (else + (set! (-> self gondola-tilt-oscillator target y) 0.0) + (vector-normalize! (the-as vector (-> self gondola-tilt-oscillator)) 1.0) + (set! (-> self gondola-tilt-oscillator target y) (the float (+ gp-0 1))) + (vector-normalize! (the-as vector (-> self gondola-tilt-oscillator)) 1.0) + ) + ) + ) + (none) + ) + ) + +(defstate swamp-blimp-idle (swamp-blimp) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'tetherrock-break-evt) + (increment-success-for-hint (game-text-id swamp-tethers-advice-hint)) + (swamp-blimp-setup) + ) + ) + ) + ) + :trans + (the-as (function none :behavior swamp-blimp) blimp-trans) + :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))) + ) + (while #t + (when (< 300 (-> self arm-timer)) + (set! (-> self arm-timer) + (- (-> self arm-timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (if (>= 300 (-> self arm-timer)) + (+! (-> self pos-oscillator target y) (* 16384.0 (-> *display* time-adjust-ratio))) + ) + ) + (when (< 240 (-> self arm-timer)) + (set! (-> self arm-timer) + (- (-> self arm-timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (if (>= 150 (-> self arm-timer)) + (set! (-> self scale-oscillator target) 0.2) + ) + ) + (when (> (-> self arm-timer) 0) + (set! (-> self arm-timer) + (- (-> self arm-timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (when (<= (-> self arm-timer) 0) + (set! (-> self scale-oscillator target) -0.2) + (go swamp-blimp-bye-bye) + ) + ) + (let ((v1-28 (-> self skel root-channel 0))) + (set! (-> v1-28 num-func) num-func-identity) + (set! (-> v1-28 frame-num) 0.0) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-blimp) transform-post) + ) + +(defmethod init-from-entity! swamp-blimp ((obj swamp-blimp) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 409600.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *swamp-blimp-sg* '()) + (quaternion-copy! (-> obj rot-at-init) (-> obj root-override quat)) + (set! (-> obj arm-timer) 0) + (set! (-> obj trans-at-init quad) (-> obj root-override trans quad)) + (set! (-> obj y-vel) 0.0) + (set! (-> obj y-offset) 0.0) + (set! (-> obj y-offset-target) 0.0) + (init! (-> obj main-tilt-rand) 300 900 0.05 0.0) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (set-vector! s5-1 0.0 1.0 0.0 1.0) + (init! (-> obj main-tilt-oscillator) s5-1 0.001 0.01 0.99) + (init! (-> obj gondola-tilt-oscillator) s5-1 0.001 0.01 0.99) + ) + (init! (-> obj pos-rand) 1500 2400 20480.0 4096.0) + (init! (-> obj pos-oscillator) (the-as vector #f) 0.00032768 1638.4 0.995) + (init! (-> obj scale-rand) 1500 2400 0.02) + (init! (-> obj scale-oscillator) 0.0 0.002 0.015 0.99) + (dotimes (v1-38 5) + (set! (-> obj the-ropes v1-38) (the-as handle #f)) + ) + (let ((s5-2 (entity-actor-count (-> obj entity) 'alt-actor))) + (dotimes (s4-1 s5-2) + (let ((s3-1 (entity-actor-lookup (-> obj entity) 'alt-actor s4-1))) + (when s3-1 + (let ((s2-0 (get-process *default-dead-pool* swamp-rope #x4000))) + (set! (-> obj the-ropes s4-1) + (ppointer->handle (when s2-0 + (let ((t9-19 (method-of-type swamp-rope activate))) + (t9-19 (the-as swamp-rope s2-0) obj 'swamp-rope (the-as pointer #x70004000)) + ) + (run-now-in-process s2-0 swamp-rope-init-by-other (-> obj trans-at-init) s3-1) + (-> s2-0 ppointer) + ) + ) + ) + ) + ) + ) + ) + ) + (set! (-> obj gondola) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) obj 5)) + (set! (-> obj bag) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) obj 3)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (swamp-blimp-setup) + (go swamp-blimp-idle) + (none) + ) + +(defun-debug bustarock ((arg0 int)) + (with-pp + (format (clear *temp-string*) "swamp-tetherrock-~D" arg0) + (let ((gp-1 (entity-by-name *temp-string*))) + (when gp-1 + (dotimes (s5-1 5) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) pp) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'attack) + (set! (-> a1-1 param 0) (the-as uint 'eco-yellow)) + (set! (-> a1-1 param 1) (the-as uint 'eco-yellow)) + (let ((t9-3 send-event-function) + (v1-4 gp-1) + ) + (t9-3 + (if v1-4 + (-> v1-4 extra process) + ) + a1-1 + ) + ) + ) + ) + (format #t "found the rock~%") + ) + ) + ) + ) + + + + diff --git a/scripts/update-goal-src.py b/scripts/update-goal-src.py index 962fd146a9..09a63c9b62 100644 --- a/scripts/update-goal-src.py +++ b/scripts/update-goal-src.py @@ -28,7 +28,11 @@ files_with_modifications = [ "cam-master", "generic-obs", "target-snowball", - "default-menu" + "quicksandlurker", + "logic-target", + "default-menu", + "collide-shape", + "cam-states" ] for file in files: diff --git a/sunken-obs.manual_restore_reminder b/sunken-obs.manual_restore_reminder deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/test/decompiler/reference/engine/camera/cam-master_REF.gc b/test/decompiler/reference/engine/camera/cam-master_REF.gc index 17311ef07b..b0a7c9cb05 100644 --- a/test/decompiler/reference/engine/camera/cam-master_REF.gc +++ b/test/decompiler/reference/engine/camera/cam-master_REF.gc @@ -384,7 +384,7 @@ (if *display-cam-los-debug* (format *stdcon* "ride edge~%") ) - (let ((s4-2 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (let ((s4-2 (new 'stack-no-clear 'collide-tri-result)) (gp-5 (new 'stack-no-clear 'vector)) (s5-2 (new 'stack-no-clear 'vector)) ) diff --git a/test/decompiler/reference/engine/camera/cam-states_REF.gc b/test/decompiler/reference/engine/camera/cam-states_REF.gc index 17c781ac8d..e91c0b7806 100644 --- a/test/decompiler/reference/engine/camera/cam-states_REF.gc +++ b/test/decompiler/reference/engine/camera/cam-states_REF.gc @@ -1325,7 +1325,7 @@ (defun cam-string-find-position-rel! ((arg0 vector)) (let ((s5-0 (new 'stack-no-clear 'vector)) (s4-0 (new 'stack-no-clear 'vector)) - (s3-0 (new 'stack-no-clear 'bone)) + (s3-0 (new 'stack-no-clear 'collide-tri-result)) (f30-0 0.0) (s2-0 (new 'stack-no-clear 'matrix)) ) @@ -1344,7 +1344,7 @@ (the-as float 409.6) #x4a09 (the-as process #f) - (the-as collide-mesh-cache-tri s3-0) + s3-0 2 ) 0.0 @@ -2608,7 +2608,7 @@ ;; definition for function cam-string-find-hidden ;; INFO: Return type mismatch int vs none. (defbehavior cam-string-find-hidden camera-slave () - (let ((s4-0 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (let ((s4-0 (new 'stack-no-clear 'collide-tri-result)) (s5-0 (new 'stack-no-clear 'vector)) (gp-0 (new 'stack-no-clear 'vector)) ) @@ -2696,7 +2696,7 @@ (s5-2 (new-stack-vector0)) (gp-2 0) ) - (let ((s4-2 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (let ((s4-2 (new 'stack-no-clear 'collide-tri-result)) (s3-1 (new 'stack-no-clear 'vector)) ) (when *debug-segment* @@ -2748,7 +2748,7 @@ ) (vector+float*! (-> self string-trans) (-> self string-trans) s5-2 f0-24) ) - (vector-! s3-1 (-> self string-trans) (-> s4-2 normal)) + (vector-! s3-1 (-> self string-trans) (-> s4-2 intersect)) (vector-normalize! s3-1 (the-as float 1.0)) (vector-flatten! (-> self velocity) (-> self velocity) s3-1) (set! f30-2 (- f30-2 (* f30-2 f28-1))) @@ -3012,7 +3012,7 @@ (vector+! (-> self desired-pos) (-> self desired-pos) (-> *camera* tpos-curr-adj)) (set! (-> self string-trans quad) (-> self desired-pos quad)) (vector-reset! (-> self velocity)) - (let ((s4-0 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (let ((s4-0 (new 'stack-no-clear 'collide-tri-result)) (s5-0 (new 'stack-no-clear 'vector)) (gp-1 (new 'stack-no-clear 'vector)) ) @@ -3155,7 +3155,7 @@ (s4-0 4) (s2-0 0) ) - (let ((s3-0 (new 'stack-no-clear 'collide-mesh-cache-tri))) + (let ((s3-0 (new 'stack-no-clear 'collide-tri-result))) (while (and (< 0.01 f30-1) (and (< (-> *CAMERA-bank* min-detectable-velocity) (vector-length (-> self velocity))) (> s4-0 0)) @@ -3180,7 +3180,7 @@ (cond ((>= f28-0 0.0) (vector+float*! (-> self trans) (-> self trans) gp-2 f28-0) - (set! (-> s5-0 quad) (-> s3-0 bbox4w min quad)) + (set! (-> s5-0 quad) (-> s3-0 normal quad)) (vector-flatten! (-> self velocity) (-> self velocity) s5-0) (set! f30-1 (- f30-1 (* f30-1 f28-0))) (set! s2-0 1) @@ -3439,7 +3439,7 @@ (let ((f30-2 1.0) (gp-3 (new-stack-vector0)) (s5-3 4) - (s4-3 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (s4-3 (new 'stack-no-clear 'collide-tri-result)) ) (while (and (< 0.01 f30-2) @@ -3457,7 +3457,7 @@ (cond ((>= f28-0 0.0) (vector+float*! (-> self trans) (-> self trans) gp-3 f28-0) - (vector-flatten! (-> self velocity) (-> self velocity) (the-as vector (-> s4-3 bbox4w))) + (vector-flatten! (-> self velocity) (-> self velocity) (-> s4-3 normal)) (set! f30-2 (- f30-2 (* f30-2 f28-0))) (let ((s3-2 (new-stack-vector0))) (vector-! s3-2 (-> self trans) (-> *camera* tpos-curr-adj)) diff --git a/test/decompiler/reference/engine/camera/camera-h_REF.gc b/test/decompiler/reference/engine/camera/camera-h_REF.gc index 60568155b6..9ea602d22e 100644 --- a/test/decompiler/reference/engine/camera/camera-h_REF.gc +++ b/test/decompiler/reference/engine/camera/camera-h_REF.gc @@ -427,57 +427,57 @@ ;; definition of type camera-slave (deftype camera-slave (process) - ((trans vector :inline :offset-assert 112) - (fov float :offset-assert 128) - (fov0 float :offset-assert 132) - (fov1 float :offset-assert 136) - (fov-index cam-index :inline :offset-assert 144) - (tracking cam-rotation-tracker :inline :offset-assert 192) - (view-off-param float :offset-assert 400) - (unknown-symbol symbol :offset 412) - (view-off vector :inline :offset-assert 416) - (min-z-override float :offset-assert 432) - (view-flat vector :inline :offset-assert 448) - (string-vel-dir uint32 :offset-assert 464) - (string-trans vector :inline :offset-assert 480) - (position-spline tracking-spline :inline :offset-assert 496) - (pivot-pt vector :inline :offset-assert 2144) - (pivot-rad float :offset-assert 2160) - (circular-follow vector :inline :offset-assert 2176) - (max-angle-offset float :offset-assert 2192) - (max-angle-curr float :offset-assert 2196) - (options uint32 :offset-assert 2200) - (cam-entity entity :offset-assert 2204) - (velocity vector :inline :offset-assert 2208) - (desired-pos vector :inline :offset-assert 2224) - (time-dist-too-far uint32 :offset-assert 2240) - (los-state slave-los-state :offset-assert 2244) - (good-point vector :inline :offset-assert 2256) - (los-tgt-spline-pt int32 :offset-assert 2272) - (los-tgt-spline-pt-incarnation int32 :offset-assert 2276) - (los-last-pos vector :inline :offset-assert 2288) - (intro-curve curve :inline :offset-assert 2304) - (intro-offset vector :inline :offset-assert 2336) - (intro-t float :offset-assert 2352) - (intro-t-step float :offset-assert 2356) - (outro-exit-value float :offset-assert 2360) - (spline-exists basic :offset-assert 2364) - (spline-curve curve :inline :offset-assert 2368) - (spline-offset vector :inline :offset-assert 2400) - (index cam-index :inline :offset-assert 2416) - (saved-pt vector :inline :offset-assert 2464) - (spline-tt float :offset-assert 2480) - (spline-follow-dist float :offset-assert 2484) - (change-event-from uint32 :offset-assert 2488) - (enter-has-run symbol :offset-assert 2492) - (blend-from-type uint64 :offset-assert 2496) - (blend-to-type uint64 :offset-assert 2504) - (have-phony-joystick basic :offset-assert 2512) - (phony-joystick-x float :offset-assert 2516) - (phony-joystick-y float :offset-assert 2520) - (string-min-val vector :inline :offset-assert 2528) - (string-max-val vector :inline :offset-assert 2544) - (string-val-locked basic :offset-assert 2560) + ((trans vector :inline :offset-assert 112) + (fov float :offset-assert 128) + (fov0 float :offset-assert 132) + (fov1 float :offset-assert 136) + (fov-index cam-index :inline :offset-assert 144) + (tracking cam-rotation-tracker :inline :offset-assert 192) + (view-off-param float :offset-assert 400) + (unknown-symbol symbol :offset 412) + (view-off vector :inline :offset-assert 416) + (min-z-override float :offset-assert 432) + (view-flat vector :inline :offset-assert 448) + (string-vel-dir uint32 :offset-assert 464) + (string-trans vector :inline :offset-assert 480) + (position-spline tracking-spline :inline :offset-assert 496) + (pivot-pt vector :inline :offset-assert 2144) + (pivot-rad float :offset-assert 2160) + (circular-follow vector :inline :offset-assert 2176) + (max-angle-offset float :offset-assert 2192) + (max-angle-curr float :offset-assert 2196) + (options uint32 :offset-assert 2200) + (cam-entity entity :offset-assert 2204) + (velocity vector :inline :offset-assert 2208) + (desired-pos vector :inline :offset-assert 2224) + (time-dist-too-far uint32 :offset-assert 2240) + (los-state slave-los-state :offset-assert 2244) + (good-point vector :inline :offset-assert 2256) + (los-tgt-spline-pt int32 :offset-assert 2272) + (los-tgt-spline-pt-incarnation int32 :offset-assert 2276) + (los-last-pos vector :inline :offset-assert 2288) + (intro-curve curve :inline :offset-assert 2304) + (intro-offset vector :inline :offset-assert 2336) + (intro-t float :offset-assert 2352) + (intro-t-step float :offset-assert 2356) + (outro-exit-value float :offset-assert 2360) + (spline-exists basic :offset-assert 2364) + (spline-curve curve :inline :offset-assert 2368) + (spline-offset vector :inline :offset-assert 2400) + (index cam-index :inline :offset-assert 2416) + (saved-pt vector :inline :offset-assert 2464) + (spline-tt float :offset-assert 2480) + (spline-follow-dist float :offset-assert 2484) + (change-event-from (pointer process-drawable) :offset-assert 2488) + (enter-has-run symbol :offset-assert 2492) + (blend-from-type uint64 :offset-assert 2496) + (blend-to-type uint64 :offset-assert 2504) + (have-phony-joystick basic :offset-assert 2512) + (phony-joystick-x float :offset-assert 2516) + (phony-joystick-y float :offset-assert 2520) + (string-min-val vector :inline :offset-assert 2528) + (string-max-val vector :inline :offset-assert 2544) + (string-val-locked basic :offset-assert 2560) ) :heap-base #x9a0 :method-count-assert 14 diff --git a/test/decompiler/reference/engine/camera/camera_REF.gc b/test/decompiler/reference/engine/camera/camera_REF.gc index 97ca49a4bf..2ea916a6d3 100644 --- a/test/decompiler/reference/engine/camera/camera_REF.gc +++ b/test/decompiler/reference/engine/camera/camera_REF.gc @@ -947,11 +947,11 @@ (cond (*camera* (set! (-> self options) (-> *camera* slave-options)) - (set! (-> self change-event-from) (-> *camera* changer)) + (set! (-> self change-event-from) (the-as (pointer process-drawable) (-> *camera* changer))) ) (else (set! (-> self options) (the-as uint 0)) - (set! (-> self change-event-from) (the-as uint #f)) + (set! (-> self change-event-from) (the-as (pointer process-drawable) #f)) ) ) (cond diff --git a/test/decompiler/reference/engine/collide/collide-cache-h_REF.gc b/test/decompiler/reference/engine/collide/collide-cache-h_REF.gc index 0cf6763950..73be7ecc29 100644 --- a/test/decompiler/reference/engine/collide/collide-cache-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-cache-h_REF.gc @@ -180,7 +180,7 @@ :flag-assert #x2100008670 (:methods (dummy-9 (_type_) none 9) - (dummy-10 (_type_ vector vector float int process collide-mesh-cache-tri int) float 10) + (dummy-10 (_type_ vector vector float int process collide-tri-result int) float 10) (dummy-11 (_type_ collide-using-spheres-params) none 11) (fill-and-probe-using-y-probe (_type_ vector float uint process collide-tri-result uint) float 12) (dummy-13 (_type_ bounding-box uint process-drawable uint) none 13) diff --git a/test/decompiler/reference/engine/debug/part-tester_REF.gc b/test/decompiler/reference/engine/debug/part-tester_REF.gc index 90b04fdca2..9fbeb80d5a 100644 --- a/test/decompiler/reference/engine/debug/part-tester_REF.gc +++ b/test/decompiler/reference/engine/debug/part-tester_REF.gc @@ -20,7 +20,7 @@ (deftype part-tester (process) ((root trsqv :offset-assert 112) (part sparticle-launch-control :offset-assert 116) - (old-group basic :offset-assert 120) + (old-group sparticle-launch-group :offset-assert 120) ) :heap-base #x100 :method-count-assert 14 diff --git a/test/decompiler/reference/engine/game/voicebox_REF.gc b/test/decompiler/reference/engine/game/voicebox_REF.gc new file mode 100644 index 0000000000..d2f6dbe4e9 --- /dev/null +++ b/test/decompiler/reference/engine/game/voicebox_REF.gc @@ -0,0 +1,294 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type camera-voicebox +(deftype camera-voicebox (camera-slave) + () + :heap-base #x9a0 + :method-count-assert 14 + :size-assert #xa04 + :flag-assert #xe09a00a04 + ) + +;; definition for method 3 of type camera-voicebox +(defmethod inspect camera-voicebox ((obj camera-voicebox)) + (let ((t9-0 (method-of-type camera-slave inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition of type voicebox +(deftype voicebox (process-drawable) + ((parent-override (pointer camera-voicebox) :offset 12) + (base-trans vector :inline :offset-assert 176) + (seeker cam-float-seeker :inline :offset-assert 192) + (blend float :offset-assert 216) + (twist float :offset-assert 220) + (hint handle :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 23 + :size-assert #xe8 + :flag-assert #x17008000e8 + (:methods + (enter () _type_ :state 20) + (idle () _type_ :state 21) + (exit () _type_ :state 22) + ) + ) + +;; definition for method 3 of type voicebox +(defmethod inspect voicebox ((obj voicebox)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tbase-trans: ~`vector`P~%" (-> obj base-trans)) + (format #t "~T~Tseeker: #~%" (-> obj seeker)) + (format #t "~T~Tblend: ~f~%" (-> obj blend)) + (format #t "~T~Ttwist: ~f~%" (-> obj twist)) + (format #t "~T~Thint: ~D~%" (-> obj hint)) + obj + ) + +;; failed to figure out what this is: +(defstate empty-state (process) + :code + (the-as (function none :behavior process) nothing) + ) + +;; failed to figure out what this is: +(defskelgroup *voicebox-sg* speaker + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +;; definition for function voicebox-track +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior voicebox-track voicebox () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> gp-0 quad) (-> self parent-override 0 trans quad)) + (set! (-> s5-0 quad) (-> (target-pos 68) quad)) + (when *target* + (let ((a2-0 (vector-z-quaternion! (new-stack-vector0) (-> *target* control unknown-quaternion00)))) + (vector+float*! s5-0 s5-0 a2-0 (* -16384.0 (- 1.0 (-> self blend)))) + ) + ) + (vector-lerp! (-> self root trans) gp-0 s5-0 (-> self blend)) + ) + (+! + (-> self root trans y) + (* 1638.4 (sin (* 54.613335 (the float (mod (-> *display* base-frame-counter) 1200))))) + ) + (let ((gp-1 (new 'stack-no-clear 'quaternion))) + (forward-up->quaternion + gp-1 + (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (target-pos 37) (-> self root trans)) 1.0) + (new 'static 'vector :y 1.0 :w 1.0) + ) + (rotate-toward-orientation! (-> self root) gp-1 65536.0 5461.3335) + ) + (when *target* + (let* ((gp-2 (-> *target* control)) + (s4-2 (-> self root trans)) + (f0-8 + (deg-diff (y-angle gp-2) (vector-y-angle (vector-! (new 'stack-no-clear 'vector) s4-2 (-> gp-2 trans)))) + ) + ) + (if (< 0.0 f0-8) + (set! (-> self twist) (seek (-> self twist) -0.4 (* 0.3 (-> *display* seconds-per-frame)))) + (set! (-> self twist) (seek (-> self twist) 0.4 (* 0.3 (-> *display* seconds-per-frame)))) + ) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 0) + (set! (-> a1-9 message) 'blocked-side?) + (case (send-event-function (ppointer->process (-> self parent-override)) a1-9) + ((1) + (set! (-> self twist) 0.5) + ) + ((2) + (set! (-> self twist) -0.5) + ) + ((3) + (set! (-> self twist) 0.0) + ) + ) + ) + (send-event (ppointer->process (-> self parent-override)) 'joystick (-> self twist) -1.0) + ) + (set! (-> self root scale x) (lerp-scale 1.0 0.0 (-> self blend) 0.8 1.0)) + (set! (-> self root scale y) (-> self root scale x)) + (set! (-> self root scale z) (-> self root scale x)) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate enter (voicebox) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('die) + (go-virtual exit) + ) + ) + ) + :trans + (behavior () + (voicebox-track) + (if (< 0.1 (-> self blend)) + (point-toward-point-clear-roll-pitch! (-> self root) (target-pos 0)) + ) + (none) + ) + :code + (behavior () + (set-setting! *setting-control* self 'sound-flava #f 20.0 6) + (if (and *target* (logtest? (-> *target* control root-prim prim-core action) 512)) + (send-event + (ppointer->process (-> self parent-override)) + 'set-dist + (new 'static 'vector :z 8192.0 :w 1.0) + (new 'static 'vector :y 20480.0 :z 12288.0 :w 1.0) + ) + (send-event + (ppointer->process (-> self parent-override)) + 'set-dist + (new 'static 'vector :z 16384.0 :w 1.0) + (new 'static 'vector :y 20480.0 :z 40960.0 :w 1.0) + ) + ) + (init-cam-float-seeker (-> self seeker) 1.0 0.01 0.022222223 0.1) + (set! (-> self seeker target) 0.0) + (while (< 0.0001 (-> self blend)) + (update! (-> self seeker) 0.0) + (set! (-> self blend) (-> self seeker value)) + (suspend) + ) + (set! (-> self blend) 0.0) + (go-virtual idle) + (none) + ) + :post + (the-as (function none :behavior voicebox) ja-post) + ) + +;; failed to figure out what this is: +(defstate idle (voicebox) + :virtual #t + :event + (-> (method-of-type voicebox enter) event) + :trans + voicebox-track + :code + (behavior () + (while #t + (suspend) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group-eval! a0-0 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior voicebox) ja-post) + ) + +;; failed to figure out what this is: +(defstate exit (voicebox) + :virtual #t + :trans + voicebox-track + :code + (behavior () + (clear-pending-settings-from-process *setting-control* self 'sound-flava) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self seeker target) 1.0) + (while (and (< (-> self blend) 0.9999) (not (and + (not (handle->process (-> self hint))) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 15) + (-> *setting-control* current hint) + ) + ) + ) + (update! (-> self seeker) 0.0) + (set! (-> self blend) (-> self seeker value)) + (suspend) + ) + (set! (-> self blend) 1.0) + (send-event (ppointer->process (-> self parent-override)) 'go empty-state) + (suspend) + 0 + (none) + ) + :post + (the-as (function none :behavior voicebox) ja-post) + ) + +;; definition for function voicebox-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior voicebox-init-by-other voicebox ((arg0 vector) (arg1 handle)) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self hint) arg1) + (set! (-> self root trans quad) (-> arg0 quad)) + (set! (-> self base-trans quad) (-> arg0 quad)) + (initialize-skeleton self *voicebox-sg* '()) + (set! (-> self blend) 1.0) + (go-virtual enter) + (none) + ) + +;; failed to figure out what this is: +(defstate cam-voicebox (camera-voicebox) + :event + (-> cam-string event) + :enter + (-> cam-string enter) + :trans + (behavior () + (if (zero? (logand (-> *camera* master-options) 2)) + (deactivate self) + ) + (none) + ) + :code + (-> cam-string code) + ) + +;; definition for function voicebox-spawn +(defun voicebox-spawn ((arg0 process) (arg1 vector)) + (with-pp + (let* ((s3-0 (get-process *camera-dead-pool* camera-voicebox #x4000)) + (s4-0 (when s3-0 + (let ((t9-1 (method-of-type camera-voicebox activate))) + (t9-1 (the-as camera-voicebox s3-0) arg0 'camera-voicebox (the-as pointer #x70004000)) + ) + (run-now-in-process s3-0 cam-slave-init cam-voicebox #f) + (-> s3-0 ppointer) + ) + ) + ) + (when s4-0 + (let ((s5-1 (get-process *default-dead-pool* voicebox #x4000))) + (when s5-1 + (let ((t9-4 (method-of-type voicebox activate))) + (t9-4 (the-as voicebox s5-1) (ppointer->process s4-0) 'voicebox (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 voicebox-init-by-other arg1 (process->handle pp)) + (-> s5-1 ppointer) + ) + ) + ) + ) + ) + ) diff --git a/test/decompiler/reference/engine/nav/navigate-h_REF.gc b/test/decompiler/reference/engine/nav/navigate-h_REF.gc index 2d8c00a55e..48078ff20b 100644 --- a/test/decompiler/reference/engine/nav/navigate-h_REF.gc +++ b/test/decompiler/reference/engine/nav/navigate-h_REF.gc @@ -377,7 +377,7 @@ (point-in-bounds? (_type_ vector) symbol 10) (dummy-11 (_type_ vector) none 11) (dummy-12 () none 12) - (dummy-13 () none 13) + (dummy-13 (_type_ vector vector) vector 13) (set-current-poly! (_type_ nav-poly) none 14) (set-target-pos! (_type_ vector) none 15) (dummy-16 (_type_ vector) nav-poly 16) @@ -391,7 +391,7 @@ (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) + (dummy-27 (_type_) none 27) (dummy-28 (_type_ int) none 28) (should-display? (_type_) symbol 29) (dummy-30 () none 30) diff --git a/test/decompiler/reference/engine/target/logic-target_REF.gc b/test/decompiler/reference/engine/target/logic-target_REF.gc index 3444d4f0f3..7d12de4f37 100644 --- a/test/decompiler/reference/engine/target/logic-target_REF.gc +++ b/test/decompiler/reference/engine/target/logic-target_REF.gc @@ -1843,9 +1843,9 @@ (-> self control unknown-vector11) (-> self control unknown-vector14) ) - (let ((a1-3 (new 'stack-no-clear 'collide-edge-hold-list))) - (set! (-> a1-3 num-allocs) (the-as uint 1)) - (set! (-> a1-3 num-attempts) (the-as uint *touching-list*)) + (let ((a1-3 (new 'stack-no-clear 'overlaps-others-params))) + (set! (-> a1-3 options) (the-as uint 1)) + (set! (-> a1-3 tlist) *touching-list*) (dummy-40 (-> self control) a1-3) ) (post-flag-setup) @@ -1955,9 +1955,9 @@ (-> self control unknown-vector11) (-> self control unknown-vector14) ) - (let ((a1-2 (new 'stack-no-clear 'collide-edge-hold-list))) - (set! (-> a1-2 num-allocs) (the-as uint 1)) - (set! (-> a1-2 num-attempts) (the-as uint *touching-list*)) + (let ((a1-2 (new 'stack-no-clear 'overlaps-others-params))) + (set! (-> a1-2 options) (the-as uint 1)) + (set! (-> a1-2 tlist) *touching-list*) (dummy-40 (-> self control) a1-2) ) (target-calc-camera-pos) diff --git a/test/decompiler/reference/levels/beach/seagull_REF.gc b/test/decompiler/reference/levels/beach/seagull_REF.gc new file mode 100644 index 0000000000..27a15a2263 --- /dev/null +++ b/test/decompiler/reference/levels/beach/seagull_REF.gc @@ -0,0 +1,1652 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 160) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :name "group-seagull-takeoff" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 663 :fade-after (meters 20.0))) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 665) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-vel-y (meters 0.4)) + (sp-flt spt-accel-y -819.2) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; definition for symbol sound-seagull-squall, type sound-spec +(define + sound-seagull-squall + (new 'static 'sound-spec :num 1.0 :group #x1 :sound-name (static-sound-name "seagulls-2") :volume #x400) + ) + +;; definition of type seagull +(deftype seagull (process-drawable) + ((root-override collide-shape-moving :offset 112) + (index int32 :offset-assert 176) + (flock (pointer seagullflock) :offset-assert 180) + (heading float :offset-assert 184) + (tilt float :offset-assert 188) + (max-tilt float :offset-assert 192) + (angletan float :offset-assert 196) + (target-dist float :offset-assert 200) + (scared int32 :offset-assert 204) + (temp-heading float :offset-assert 208) + (temp-heading-time int32 :offset-assert 212) + (part-time uint64 :offset-assert 216) + (thrust float :offset-assert 224) + (teleport symbol :offset-assert 228) + ) + :heap-base #x80 + :method-count-assert 28 + :size-assert #xe8 + :flag-assert #x1c008000e8 + (:methods + (move-vertically! (_type_ symbol) none 20) + (adjust-heading-around-point-slow! (_type_ float) none 21) + (dummy-22 (_type_) none 22) + (adjust-heading-around-point! (_type_ float) none 23) + (dummy-24 (_type_) none 24) + (dummy-25 (_type_ float) none 25) + (dummy-26 (_type_) symbol 26) + (dummy-27 (_type_) none 27) + ) + (:states + seagull-flying + seagull-idle + (seagull-landing float) + seagull-soaring + seagull-takeoff + ) + ) + +;; definition for method 3 of type seagull +(defmethod inspect seagull ((obj seagull)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tindex: ~D~%" (-> obj index)) + (format #t "~T~Tflock: #x~X~%" (-> obj flock)) + (format #t "~T~Theading: ~f~%" (-> obj heading)) + (format #t "~T~Ttilt: ~f~%" (-> obj tilt)) + (format #t "~T~Tmax-tilt: ~f~%" (-> obj max-tilt)) + (format #t "~T~Tangletan: ~f~%" (-> obj angletan)) + (format #t "~T~Ttarget-dist: ~f~%" (-> obj target-dist)) + (format #t "~T~Tscared: ~D~%" (-> obj scared)) + (format #t "~T~Ttemp-heading: ~f~%" (-> obj temp-heading)) + (format #t "~T~Ttemp-heading-time: ~D~%" (-> obj temp-heading-time)) + (format #t "~T~Tpart-time: ~D~%" (-> obj part-time)) + (format #t "~T~Tthrust: ~f~%" (-> obj thrust)) + (format #t "~T~Tteleport: ~A~%" (-> obj teleport)) + obj + ) + +;; definition of type seagullflock +(deftype seagullflock (process) + ((self-override seagullflock :offset 28) + (path path-control :offset-assert 112) + (trans vector :inline :offset-assert 128) + (bird (pointer seagull) 64 :offset-assert 144) + (birds int32 :offset-assert 400) + (link actor-link-info :offset-assert 404) + (bird-at-waterfall uint64 :offset-assert 408) + (birds-at-waterfall int32 :offset-assert 416) + (target vector :inline :offset-assert 432) + (targetnum int32 :offset-assert 448) + (alert-time uint64 :offset-assert 456) + (teleport-frames int32 :offset-assert 464) + (cam-tracker uint64 :offset-assert 472) + (state-time uint64 :offset-assert 480) + (squall ambient-sound :offset-assert 488) + (max-lift float :offset-assert 492) + ) + :heap-base #x180 + :method-count-assert 17 + :size-assert #x1f0 + :flag-assert #x11018001f0 + (:methods + (create-the-flock! (_type_ vector) (pointer process) 14) + (play-hint (_type_ int) none 15) + (dummy-16 (_type_ seagull) float 16) + ) + (:states + seagullflock-at-waterfall + seagullflock-idle + ) + ) + +;; definition for method 3 of type seagullflock +(defmethod inspect seagullflock ((obj seagullflock)) + (let ((t9-0 (method-of-type process inspect))) + (t9-0 obj) + ) + (format #t "~T~Tpath: ~A~%" (-> obj path)) + (format #t "~T~Ttrans: #~%" (-> obj trans)) + (format #t "~T~Tbird[64] @ #x~X~%" (-> obj bird)) + (format #t "~T~Tbirds: ~D~%" (-> obj birds)) + (format #t "~T~Tlink: ~A~%" (-> obj link)) + (format #t "~T~Tbird-at-waterfall: ~D~%" (-> obj bird-at-waterfall)) + (format #t "~T~Tbirds-at-waterfall: ~D~%" (-> obj birds-at-waterfall)) + (format #t "~T~Ttarget: #~%" (-> obj target)) + (format #t "~T~Ttargetnum: ~D~%" (-> obj targetnum)) + (format #t "~T~Talert-time: ~D~%" (-> obj alert-time)) + (format #t "~T~Tteleport-frames: ~D~%" (-> obj teleport-frames)) + (format #t "~T~Tcam-tracker: ~D~%" (-> obj cam-tracker)) + (format #t "~T~Tstate-time: ~D~%" (-> obj state-time)) + (format #t "~T~Tsquall: ~A~%" (-> obj squall)) + (format #t "~T~Tmax-lift: ~f~%" (-> obj max-lift)) + obj + ) + +;; definition for method 7 of type seagullflock +;; INFO: Return type mismatch process vs seagullflock. +(defmethod relocate seagullflock ((obj seagullflock) (arg0 int)) + (if (nonzero? (-> obj path)) + (&+! (-> obj path) arg0) + ) + (if (nonzero? (-> obj link)) + (&+! (-> obj link) arg0) + ) + (if (nonzero? (-> obj squall)) + (&+! (-> obj squall) arg0) + ) + (the-as seagullflock ((method-of-type process relocate) obj arg0)) + ) + +;; definition for method 10 of type seagullflock +(defmethod deactivate seagullflock ((obj seagullflock)) + (if (nonzero? (-> obj squall)) + (stop! (-> obj squall)) + ) + ((method-of-type process deactivate) obj) + (none) + ) + +;; definition for symbol *seagull-boxes*, type (inline-array air-box) +(define + *seagull-boxes* + (new 'static 'inline-array air-box 10 + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1146880.0 :y 143360.0 :z -1638400.0 :w -0.6427) + (new 'static 'vector :x 286720.0 :z 716800.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1277952.0 :y 14336.0 :z -1306624.0 :w -0.6427) + (new 'static 'vector :x 675840.0 :z 114688.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1474560.0 :y 10240.0 :z -1024000.0 :w -0.6427) + (new 'static 'vector :x 1228800.0 :z 339968.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1822720.0 :y 27033.6 :z -1961984.0 :w -0.6427) + (new 'static 'vector :x 143360.0 :z 245760.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1589248.0 :y 43417.6 :z -1933312.0 :w -0.6427) + (new 'static 'vector :x 204800.0 :z 184320.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1597440.0 :y 24985.6 :z -1757184.0 :w -0.6427) + (new 'static 'vector :x 133120.0 :z 491520.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1323008.0 :y 44236.8 :z -1771520.0 :w -0.6427) + (new 'static 'vector :x 360448.0 :z 221184.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1441792.0 :y 24985.6 :z -1564672.0 :w -0.6427) + (new 'static 'vector :x 81920.0 :z 421888.0 :w -0.766) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -1124352.0 :y 27975.68 :z -1581465.6 :w -0.8533) + (new 'static 'vector :x 204800.0 :z 221184.0 :w -0.5214) + ) + ) + (new 'static 'air-box :vecs (new 'static 'inline-array vector 2 + (new 'static 'vector :x -737280.0 :y 122880.0 :z -1396736.0 :w -0.8533) + (new 'static 'vector :x 475136.0 :z 819200.0 :w -0.5214) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defskelgroup *seagull-sg* seagull + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 2) + :longest-edge (meters 0) + ) + +;; definition for method 25 of type seagull +;; INFO: Return type mismatch int vs none. +(defmethod dummy-25 seagull ((obj seagull) (arg0 float)) + (let ((f1-1 (the float (sar (shl (the int (- arg0 (-> obj heading))) 48) 48))) + (f0-5 (- (-> obj tilt))) + ) + (let ((f2-0 (-> obj max-tilt))) + (set! f0-5 (cond + ((< f1-1 -364.0889) + (if (< (- f2-0) f0-5) + (set! f0-5 (+ -91.022224 f0-5)) + ) + f0-5 + ) + ((< 364.0889 f1-1) + (if (< f0-5 f2-0) + (set! f0-5 (+ 91.022224 f0-5)) + ) + f0-5 + ) + ((< f0-5 0.0) + (+ 91.022224 f0-5) + ) + (else + (+ -91.022224 f0-5) + ) + ) + ) + ) + (set! (-> obj tilt) (- f0-5)) + (set! (-> obj heading) (the float (sar (shl (the int (+ (-> obj heading) (* 0.05 f0-5))) 48) 48))) + ) + 0 + (none) + ) + +;; definition for method 24 of type seagull +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 seagull ((obj seagull)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-! s5-0 (-> obj flock 0 target) (-> obj root-override trans)) + (when (< (vector-dot s5-0 s5-0) 6710886400.0) + (let ((v1-5 (ash 1 (-> obj index)))) + (when (zero? (logand v1-5 (-> obj flock 0 bird-at-waterfall))) + (logior! (-> obj flock 0 bird-at-waterfall) v1-5) + (+! (-> obj flock 0 birds-at-waterfall) 1) + ) + ) + ) + (cond + ((> (-> obj temp-heading-time) 0) + (+! (-> obj temp-heading-time) -1) + (let* ((v1-15 obj) + (f1-2 (the float (sar (shl (the int (- (-> obj temp-heading) (-> v1-15 heading))) 48) 48))) + (f0-7 (- (-> v1-15 tilt))) + ) + (let ((f2-0 (-> v1-15 max-tilt))) + (set! f0-7 (cond + ((< f1-2 -364.0889) + (if (< (- f2-0) f0-7) + (set! f0-7 (+ -91.022224 f0-7)) + ) + f0-7 + ) + ((< 364.0889 f1-2) + (if (< f0-7 f2-0) + (set! f0-7 (+ 91.022224 f0-7)) + ) + f0-7 + ) + ((< f0-7 0.0) + (+ 91.022224 f0-7) + ) + (else + (+ -91.022224 f0-7) + ) + ) + ) + ) + (set! (-> v1-15 tilt) (- f0-7)) + (set! (-> v1-15 heading) (the float (sar (shl (the int (+ (-> v1-15 heading) (* 0.05 f0-7))) 48) 48))) + ) + 0 + ) + (else + (let* ((f0-15 (atan (-> s5-0 x) (-> s5-0 z))) + (v1-18 obj) + (f1-12 (the float (sar (shl (the int (- f0-15 (-> v1-18 heading))) 48) 48))) + (f0-20 (- (-> v1-18 tilt))) + ) + (let ((f2-2 (-> v1-18 max-tilt))) + (set! f0-20 (cond + ((< f1-12 -364.0889) + (if (< (- f2-2) f0-20) + (set! f0-20 (+ -91.022224 f0-20)) + ) + f0-20 + ) + ((< 364.0889 f1-12) + (if (< f0-20 f2-2) + (set! f0-20 (+ 91.022224 f0-20)) + ) + f0-20 + ) + ((< f0-20 0.0) + (+ 91.022224 f0-20) + ) + (else + (+ -91.022224 f0-20) + ) + ) + ) + ) + (set! (-> v1-18 tilt) (- f0-20)) + (set! (-> v1-18 heading) (the float (sar (shl (the int (+ (-> v1-18 heading) (* 0.05 f0-20))) 48) 48))) + ) + 0 + ) + ) + (let ((f0-28 (+ (* (-> s5-0 x) (-> s5-0 x)) (* (-> s5-0 z) (-> s5-0 z))))) + (set! (-> obj angletan) (/ (- (-> s5-0 y)) (sqrtf f0-28))) + (set! (-> obj target-dist) (sqrtf (+ f0-28 (* (-> s5-0 y) (-> s5-0 y))))) + ) + ) + 0 + (none) + ) + +;; definition for function seagull-post +;; INFO: Return type mismatch int vs none. +(defbehavior seagull-post seagull () + (let ((s5-0 (new 'stack-no-clear 'quaternion)) + (gp-0 (new 'stack-no-clear 'quaternion)) + ) + (quaternion-axis-angle! s5-0 0.0 0.0 1.0 (-> self tilt)) + (quaternion-axis-angle! gp-0 0.0 1.0 0.0 (-> self heading)) + (quaternion*! (-> self root-override quat) gp-0 s5-0) + ) + (transform-post) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate seagull-idle (seagull) + :enter + (behavior () + (let* ((v1-0 (-> self flock)) + (f30-0 (dummy-16 + (if v1-0 + (-> v1-0 0 self-override) + ) + self + ) + ) + (f28-0 21845.334) + (f26-0 -0.5) + (v1-5 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-6 (the-as number (logior #x3f800000 v1-5))) + ) + (set! (-> self heading) + (the float (sar (shl (the int (+ f30-0 (* f28-0 (+ f26-0 (+ -1.0 (the-as float v1-6)))))) 48) 48)) + ) + ) + (none) + ) + :trans + (behavior () + (when (nonzero? (-> self scared)) + (+! (-> self scared) -1) + (when (zero? (-> self scared)) + (restore-collide-with-as (-> self root-override)) + (go seagull-takeoff) + ) + ) + (when *target* + (let ((v1-12 (vector-! (new 'stack-no-clear 'vector) (-> *target* control trans) (-> self root-override trans)))) + (when (< (vector-dot v1-12 v1-12) 1677721600.0) + (let ((v1-14 (-> self flock))) + (play-hint + (if v1-14 + (-> v1-14 0 self-override) + ) + (-> self index) + ) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (set! (-> self root-override trans y) (+ 20480.0 (-> self root-override trans y))) + (dummy-60 (-> self root-override) 40960.0 40960.0 #t (the-as uint 1)) + (dummy-47 (-> self root-override)) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) (ja-aframe 0.0 0)) + ) + (while #t + (let* ((f30-0 4.0) + (v1-14 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-15 (the-as number (logior #x3f800000 v1-14))) + (gp-1 (the int (* f30-0 (+ -1.0 (the-as float v1-15))))) + ) + (let* ((f30-1 60.0) + (v1-18 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-19 (the-as number (logior #x3f800000 v1-18))) + (s5-0 (the int (* f30-1 (+ -1.0 (the-as float v1-19))))) + ) + (dotimes (s4-0 s5-0) + (suspend) + ) + ) + (cond + ((zero? gp-1) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> gp-2 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-2 param 1) 1.0) + (set! (-> gp-2 frame-num) (ja-aframe 0.0 0)) + (joint-control-channel-group! gp-2 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-3 param 1) 1.0) + (joint-control-channel-group-eval! gp-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let* ((f30-2 60.0) + (v1-37 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-38 (the-as number (logior #x3f800000 v1-37))) + (gp-4 (the int (* f30-2 (+ -1.0 (the-as float v1-38))))) + ) + (dotimes (s5-1 gp-4) + (suspend) + ) + ) + (let ((gp-5 (-> self skel root-channel 0))) + (set! (-> gp-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> gp-5 param 0) (ja-aframe 10.0 0)) + (set! (-> gp-5 param 1) 1.0) + (set! (-> gp-5 frame-num) (ja-aframe 4.0 0)) + (joint-control-channel-group! gp-5 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-6 (-> self skel root-channel 0))) + (set! (-> gp-6 param 0) (ja-aframe 10.0 0)) + (set! (-> gp-6 param 1) 1.0) + (joint-control-channel-group-eval! gp-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let* ((f30-3 60.0) + (v1-55 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-56 (the-as number (logior #x3f800000 v1-55))) + (gp-7 (the int (* f30-3 (+ -1.0 (the-as float v1-56))))) + ) + (dotimes (s5-2 gp-7) + (suspend) + ) + ) + (let ((gp-8 (-> self skel root-channel 0))) + (set! (-> gp-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> gp-8 param 0) (ja-aframe 14.0 0)) + (set! (-> gp-8 param 1) 1.0) + (set! (-> gp-8 frame-num) (ja-aframe 10.0 0)) + (joint-control-channel-group! gp-8 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-9 (-> self skel root-channel 0))) + (set! (-> gp-9 param 0) (ja-aframe 14.0 0)) + (set! (-> gp-9 param 1) 1.0) + (joint-control-channel-group-eval! gp-9 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((= gp-1 2) + (let ((gp-10 (-> self skel root-channel 0))) + (set! (-> gp-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> gp-10 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-10 param 1) 1.0) + (set! (-> gp-10 frame-num) (ja-aframe 0.0 0)) + (joint-control-channel-group! gp-10 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-11 (-> self skel root-channel 0))) + (set! (-> gp-11 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-11 param 1) 1.0) + (joint-control-channel-group-eval! gp-11 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((= gp-1 3) + (let ((gp-12 (-> self skel root-channel 0))) + (set! (-> gp-12 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> gp-12 param 0) (ja-aframe 8.0 0)) + (set! (-> gp-12 param 1) 1.0) + (set! (-> gp-12 frame-num) (ja-aframe 4.0 0)) + (joint-control-channel-group! gp-12 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-13 (-> self skel root-channel 0))) + (set! (-> gp-13 param 0) (ja-aframe 8.0 0)) + (set! (-> gp-13 param 1) 1.0) + (joint-control-channel-group-eval! gp-13 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((= gp-1 4) + (let ((gp-14 (-> self skel root-channel 0))) + (set! (-> gp-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> gp-14 param 0) (ja-aframe 12.0 0)) + (set! (-> gp-14 param 1) 1.0) + (set! (-> gp-14 frame-num) (ja-aframe 8.0 0)) + (joint-control-channel-group! gp-14 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-15 (-> self skel root-channel 0))) + (set! (-> gp-15 param 0) (ja-aframe 12.0 0)) + (set! (-> gp-15 param 1) 1.0) + (joint-control-channel-group-eval! gp-15 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ) + ) + (none) + ) + :post + seagull-post + ) + +;; definition for method 20 of type seagull +;; INFO: Return type mismatch int vs none. +(defmethod move-vertically! seagull ((obj seagull) (arg0 symbol)) + (let ((f0-0 (-> obj root-override transv y))) + (set! f0-0 (cond + (arg0 + (if (< f0-0 (-> obj flock 0 max-lift)) + (set! f0-0 (+ 12288.0 f0-0)) + ) + f0-0 + ) + (else + (+ -4096.0 f0-0) + ) + ) + ) + (set! (-> obj root-override transv y) f0-0) + ) + 0 + (none) + ) + +;; definition for method 26 of type seagull +(defmethod dummy-26 seagull ((obj seagull)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let* ((f30-0 -4096.0) + (f28-0 8192.0) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + ) + (set! (-> s5-0 x) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2))) (-> obj flock 0 target x))) + ) + (let* ((f30-1 -4096.0) + (f28-1 8192.0) + (v1-7 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-8 (the-as number (logior #x3f800000 v1-7))) + ) + (set! (-> s5-0 y) (+ f30-1 (* f28-1 (+ -1.0 (the-as float v1-8))) (-> obj flock 0 target y))) + ) + (let* ((f30-2 -4096.0) + (f28-2 8192.0) + (v1-13 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-14 (the-as number (logior #x3f800000 v1-13))) + ) + (set! (-> s5-0 z) (+ f30-2 (* f28-2 (+ -1.0 (the-as float v1-14))) (-> obj flock 0 target z))) + ) + (vector-! s5-0 s5-0 (-> obj root-override trans)) + (vector-float*! s5-0 s5-0 0.9) + (TODO-RENAME-28 (-> obj root-override) s5-0) + ) + (set! (-> obj teleport) #f) + #f + ) + +;; definition for method 21 of type seagull +;; INFO: Return type mismatch int vs none. +(defmethod adjust-heading-around-point-slow! seagull ((obj seagull) (arg0 float)) + (let ((f30-1 (* arg0 (sin (-> obj heading)))) + (f0-4 (* arg0 (cos (-> obj heading)))) + ) + (set! (-> obj root-override transv x) (+ (* 0.8 (-> obj root-override transv x)) (* 0.2 f30-1))) + (set! (-> obj root-override transv z) (+ (* 0.8 (-> obj root-override transv z)) (* 0.2 f0-4))) + ) + 0 + (none) + ) + +;; definition for method 23 of type seagull +;; INFO: Return type mismatch int vs none. +(defmethod adjust-heading-around-point! seagull ((obj seagull) (arg0 float)) + (let ((f30-1 (* arg0 (sin (-> obj heading)))) + (f0-4 (* arg0 (cos (-> obj heading)))) + ) + (set! (-> obj root-override transv x) f30-1) + (set! (-> obj root-override transv z) f0-4) + ) + 0 + (none) + ) + +;; definition for method 22 of type seagull +;; INFO: Return type mismatch int vs none. +(defmethod dummy-22 seagull ((obj seagull)) + (set! (-> obj root-override transv y) -8192.0) + 0 + (none) + ) + +;; definition for method 27 of type seagull +(defmethod dummy-27 seagull ((obj seagull)) + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (let ((v1-0 (new 'stack-no-clear 'vector)) + (a0-2 (-> obj root-override trans)) + (s5-0 (-> obj root-override transv)) + (a1-1 (new 'stack-no-clear 'vector)) + ) + (let ((a2-0 v1-0)) + (.lvf vf1 (&-> s5-0 quad)) + (let ((f0-0 (-> *display* seconds-per-frame))) + (.mov at-0 f0-0) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> a2-0 quad) vf1) + ) + (vector+! a1-1 a0-2 v1-0) + (if (points-in-air? a0-2 a1-1 *seagull-boxes* 10) + (dummy-57 (-> obj root-override) (-> obj root-override transv)) + (dummy-33 (-> obj root-override) s5-0 (the-as uint 1)) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate seagull-takeoff (seagull) + :trans + (behavior () + (when (< (+ (-> *display* base-frame-counter) -600) (the-as int (-> self part-time))) + (-> self part) + (-> self root-override root-prim prim-core) + ) + (none) + ) + :code + (behavior () + (set! (-> self part-time) (the-as uint (-> *display* base-frame-counter))) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> gp-0 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 1.0 0)) + (joint-control-channel-group! gp-0 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (>= (ja-frame-num 0) (ja-aframe 2.0 0)) (>= (ja-aframe 3.0 0) (ja-frame-num 0))) + (let* ((v1-13 self) + (a0-7 #t) + (f0-5 (-> v1-13 root-override transv y)) + ) + (set! f0-5 (cond + (a0-7 + (if (< f0-5 (-> v1-13 flock 0 max-lift)) + (set! f0-5 (+ 12288.0 f0-5)) + ) + f0-5 + ) + (else + (+ -4096.0 f0-5) + ) + ) + ) + (set! (-> v1-13 root-override transv y) f0-5) + ) + 0 + (let* ((gp-1 self) + (f28-0 (-> self thrust)) + (f30-2 (* f28-0 (sin (-> gp-1 heading)))) + (f0-10 (* f28-0 (cos (-> gp-1 heading)))) + ) + (set! (-> gp-1 root-override transv x) (+ (* 0.8 (-> gp-1 root-override transv x)) (* 0.2 f30-2))) + (set! (-> gp-1 root-override transv z) (+ (* 0.8 (-> gp-1 root-override transv z)) (* 0.2 f0-10))) + ) + 0 + ) + (dummy-27 self) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (ja-aframe 4.0 0)) + (set! (-> gp-2 param 1) 1.0) + (joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 param 0) (the float (+ (-> a0-19 frame-group data 0 length) -1))) + (set! (-> a0-19 param 1) 1.0) + (joint-control-channel-group! a0-19 (the-as art-joint-anim #f) num-func-seek!) + ) + (ja-channel-push! 1 20) + (go seagull-flying) + (none) + ) + :post + seagull-post + ) + +;; failed to figure out what this is: +(defstate seagull-flying (seagull) + :trans + (behavior () + (when (< (+ (-> *display* base-frame-counter) -600) (the-as int (-> self part-time))) + (-> self part) + (-> self root-override root-prim prim-core) + ) + (none) + ) + :code + (behavior () + (set! (-> self max-tilt) 1820.4445) + (let ((gp-0 0)) + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (when (-> self teleport) + (dummy-26 self) + (suspend) + 0 + ) + (let ((s5-0 self) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s4-0 (-> s5-0 flock 0 target) (-> s5-0 root-override trans)) + (when (< (vector-dot s4-0 s4-0) 6710886400.0) + (let ((v1-24 (ash 1 (-> s5-0 index)))) + (when (zero? (logand v1-24 (-> s5-0 flock 0 bird-at-waterfall))) + (logior! (-> s5-0 flock 0 bird-at-waterfall) v1-24) + (+! (-> s5-0 flock 0 birds-at-waterfall) 1) + ) + ) + ) + (cond + ((> (-> s5-0 temp-heading-time) 0) + (+! (-> s5-0 temp-heading-time) -1) + (let* ((v1-34 s5-0) + (f1-2 (the float (sar (shl (the int (- (-> s5-0 temp-heading) (-> v1-34 heading))) 48) 48))) + (f0-12 (- (-> v1-34 tilt))) + ) + (let ((f2-0 (-> v1-34 max-tilt))) + (set! f0-12 (cond + ((< f1-2 -364.0889) + (if (< (- f2-0) f0-12) + (set! f0-12 (+ -91.022224 f0-12)) + ) + f0-12 + ) + ((< 364.0889 f1-2) + (if (< f0-12 f2-0) + (set! f0-12 (+ 91.022224 f0-12)) + ) + f0-12 + ) + ((< f0-12 0.0) + (+ 91.022224 f0-12) + ) + (else + (+ -91.022224 f0-12) + ) + ) + ) + ) + (set! (-> v1-34 tilt) (- f0-12)) + (set! (-> v1-34 heading) (the float (sar (shl (the int (+ (-> v1-34 heading) (* 0.05 f0-12))) 48) 48))) + ) + 0 + ) + (else + (let* ((f0-20 (atan (-> s4-0 x) (-> s4-0 z))) + (v1-37 s5-0) + (f1-12 (the float (sar (shl (the int (- f0-20 (-> v1-37 heading))) 48) 48))) + (f0-25 (- (-> v1-37 tilt))) + ) + (let ((f2-2 (-> v1-37 max-tilt))) + (set! f0-25 (cond + ((< f1-12 -364.0889) + (if (< (- f2-2) f0-25) + (set! f0-25 (+ -91.022224 f0-25)) + ) + f0-25 + ) + ((< 364.0889 f1-12) + (if (< f0-25 f2-2) + (set! f0-25 (+ 91.022224 f0-25)) + ) + f0-25 + ) + ((< f0-25 0.0) + (+ 91.022224 f0-25) + ) + (else + (+ -91.022224 f0-25) + ) + ) + ) + ) + (set! (-> v1-37 tilt) (- f0-25)) + (set! (-> v1-37 heading) (the float (sar (shl (the int (+ (-> v1-37 heading) (* 0.05 f0-25))) 48) 48))) + ) + 0 + ) + ) + (let ((f0-33 (+ (* (-> s4-0 x) (-> s4-0 x)) (* (-> s4-0 z) (-> s4-0 z))))) + (set! (-> s5-0 angletan) (/ (- (-> s4-0 y)) (sqrtf f0-33))) + (set! (-> s5-0 target-dist) (sqrtf (+ f0-33 (* (-> s4-0 y) (-> s4-0 y))))) + ) + ) + 0 + (let ((v1-42 (>= (ja-frame-num 0) (ja-aframe 3.0 0)))) + (cond + ((and v1-42 (>= (ja-aframe 9.0 0) (ja-frame-num 0))) + (let* ((v1-44 self) + (a0-49 #t) + (f0-38 (-> v1-44 root-override transv y)) + ) + (set! f0-38 (cond + (a0-49 + (if (< f0-38 (-> v1-44 flock 0 max-lift)) + (set! f0-38 (+ 12288.0 f0-38)) + ) + f0-38 + ) + (else + (+ -4096.0 f0-38) + ) + ) + ) + (set! (-> v1-44 root-override transv y) f0-38) + ) + 0 + ) + (else + (let* ((v1-48 self) + (a0-55 #f) + (f0-39 (-> v1-48 root-override transv y)) + ) + (set! f0-39 (cond + (a0-55 + (if (< f0-39 (-> v1-48 flock 0 max-lift)) + (set! f0-39 (+ 12288.0 f0-39)) + ) + f0-39 + ) + (else + (+ -4096.0 f0-39) + ) + ) + ) + (set! (-> v1-48 root-override transv y) f0-39) + ) + 0 + ) + ) + ) + (let* ((s5-1 self) + (f28-0 (-> self thrust)) + (f30-2 (* f28-0 (sin (-> s5-1 heading)))) + (f0-44 (* f28-0 (cos (-> s5-1 heading)))) + ) + (set! (-> s5-1 root-override transv x) (+ (* 0.8 (-> s5-1 root-override transv x)) (* 0.2 f30-2))) + (set! (-> s5-1 root-override transv z) (+ (* 0.8 (-> s5-1 root-override transv z)) (* 0.2 f0-44))) + ) + 0 + (dummy-27 self) + (suspend) + (let ((a0-64 (-> self skel root-channel 0))) + (set! (-> a0-64 param 0) (the float (+ (-> a0-64 frame-group data 0 length) -1))) + (set! (-> a0-64 param 1) 1.0) + (joint-control-channel-group-eval! a0-64 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (+! gp-0 1) + (when (>= gp-0 0) + (when (>= (-> self angletan) 0.1) + (if (< 204800.0 (-> self root-override trans y)) + (go seagull-soaring) + ) + (when (< 57344.0 (-> self root-override trans y)) + (let* ((f30-3 0.8) + (v1-77 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-78 (the-as number (logior #x3f800000 v1-77))) + ) + (if (< f30-3 (+ -1.0 (the-as float v1-78))) + (go seagull-soaring) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + :post + seagull-post + ) + +;; failed to figure out what this is: +(defstate seagull-soaring (seagull) + :trans + (behavior () + (when (< (+ (-> *display* base-frame-counter) -600) (the-as int (-> self part-time))) + (-> self part) + (-> self root-override root-prim prim-core) + ) + (none) + ) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self max-tilt) 4551.1113) + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 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) + (ja-blend-eval) + (when (-> self teleport) + (dummy-26 self) + (suspend) + 0 + ) + (let ((gp-0 self) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s5-0 (-> gp-0 flock 0 target) (-> gp-0 root-override trans)) + (when (< (vector-dot s5-0 s5-0) 6710886400.0) + (let ((v1-26 (ash 1 (-> gp-0 index)))) + (when (zero? (logand v1-26 (-> gp-0 flock 0 bird-at-waterfall))) + (logior! (-> gp-0 flock 0 bird-at-waterfall) v1-26) + (+! (-> gp-0 flock 0 birds-at-waterfall) 1) + ) + ) + ) + (cond + ((> (-> gp-0 temp-heading-time) 0) + (+! (-> gp-0 temp-heading-time) -1) + (let* ((v1-36 gp-0) + (f1-2 (the float (sar (shl (the int (- (-> gp-0 temp-heading) (-> v1-36 heading))) 48) 48))) + (f0-12 (- (-> v1-36 tilt))) + ) + (let ((f2-0 (-> v1-36 max-tilt))) + (set! f0-12 (cond + ((< f1-2 -364.0889) + (if (< (- f2-0) f0-12) + (set! f0-12 (+ -91.022224 f0-12)) + ) + f0-12 + ) + ((< 364.0889 f1-2) + (if (< f0-12 f2-0) + (set! f0-12 (+ 91.022224 f0-12)) + ) + f0-12 + ) + ((< f0-12 0.0) + (+ 91.022224 f0-12) + ) + (else + (+ -91.022224 f0-12) + ) + ) + ) + ) + (set! (-> v1-36 tilt) (- f0-12)) + (set! (-> v1-36 heading) (the float (sar (shl (the int (+ (-> v1-36 heading) (* 0.05 f0-12))) 48) 48))) + ) + 0 + ) + (else + (let* ((f0-20 (atan (-> s5-0 x) (-> s5-0 z))) + (v1-39 gp-0) + (f1-12 (the float (sar (shl (the int (- f0-20 (-> v1-39 heading))) 48) 48))) + (f0-25 (- (-> v1-39 tilt))) + ) + (let ((f2-2 (-> v1-39 max-tilt))) + (set! f0-25 (cond + ((< f1-12 -364.0889) + (if (< (- f2-2) f0-25) + (set! f0-25 (+ -91.022224 f0-25)) + ) + f0-25 + ) + ((< 364.0889 f1-12) + (if (< f0-25 f2-2) + (set! f0-25 (+ 91.022224 f0-25)) + ) + f0-25 + ) + ((< f0-25 0.0) + (+ 91.022224 f0-25) + ) + (else + (+ -91.022224 f0-25) + ) + ) + ) + ) + (set! (-> v1-39 tilt) (- f0-25)) + (set! (-> v1-39 heading) (the float (sar (shl (the int (+ (-> v1-39 heading) (* 0.05 f0-25))) 48) 48))) + ) + 0 + ) + ) + (let ((f0-33 (+ (* (-> s5-0 x) (-> s5-0 x)) (* (-> s5-0 z) (-> s5-0 z))))) + (set! (-> gp-0 angletan) (/ (- (-> s5-0 y)) (sqrtf f0-33))) + (set! (-> gp-0 target-dist) (sqrtf (+ f0-33 (* (-> s5-0 y) (-> s5-0 y))))) + ) + ) + 0 + (let ((v1-44 self)) + (set! (-> v1-44 root-override transv y) -8192.0) + ) + 0 + (let* ((gp-1 self) + (f28-0 (-> self thrust)) + (f30-0 (* f28-0 (sin (-> gp-1 heading)))) + (f0-41 (* f28-0 (cos (-> gp-1 heading)))) + ) + (set! (-> gp-1 root-override transv x) (+ (* 0.8 (-> gp-1 root-override transv x)) (* 0.2 f30-0))) + (set! (-> gp-1 root-override transv z) (+ (* 0.8 (-> gp-1 root-override transv z)) (* 0.2 f0-41))) + ) + 0 + (dummy-27 self) + (when (< (-> self angletan) 0.2) + (if (< (-> self root-override trans y) 40960.0) + (go seagull-flying) + ) + (when (< (-> self root-override trans y) 204800.0) + (if (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (let* ((f30-1 0.99) + (v1-67 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-68 (the-as number (logior #x3f800000 v1-67))) + ) + (< f30-1 (+ -1.0 (the-as float v1-68))) + ) + ) + (go seagull-flying) + ) + ) + ) + (when (< (-> self target-dist) 81920.0) + (when (< 1.0 (-> self angletan)) + (if (< (-> self target-dist) 20480.0) + (go seagull-flying) + ) + ) + (if (and (< 0.4 (-> self angletan)) (>= 1.0 (-> self angletan))) + (go seagull-landing 10.0) + ) + (if (and (>= (-> self angletan) 0.2) (>= 0.4 (-> self angletan))) + (go seagull-landing 5.0) + ) + ) + (suspend) + (let ((a0-54 (-> self skel root-channel 0))) + (set! (-> a0-54 param 0) (the float (+ (-> a0-54 frame-group data 0 length) -1))) + (set! (-> a0-54 param 1) 1.0) + (joint-control-channel-group-eval! a0-54 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + seagull-post + ) + +;; failed to figure out what this is: +(defstate seagull-landing (seagull) + :code + (behavior ((arg0 float)) + (let ((s5-0 (new 'stack 'collide-tri-result))) + 0.0 + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> self root-override transv y) (* 4096.0 (- arg0))) + (set! (-> gp-0 quad) (-> self root-override transv quad)) + (let ((f30-0 (dummy-10 *collide-cache* (-> self root-override trans) gp-0 409.6 1 self s5-0 1))) + (when (or (< f30-0 0.0) (or (< 1.0 f30-0) (nonzero? (-> s5-0 pat mode)))) + (suspend) + (go seagull-soaring) + ) + (vector-float*! gp-0 gp-0 f30-0) + (vector+! gp-0 gp-0 (-> self root-override trans)) + (while (< 0.5 f30-0) + (suspend) + (set! f30-0 (- f30-0 (-> *display* seconds-per-frame))) + (dummy-33 (-> self root-override) (-> self root-override transv) (the-as uint 1)) + (let* ((v1-21 self) + (f1-3 (the float (sar (shl (the int (- (-> self heading) (-> v1-21 heading))) 48) 48))) + (f0-12 (- (-> v1-21 tilt))) + ) + (let ((f2-0 (-> v1-21 max-tilt))) + (set! f0-12 (cond + ((< f1-3 -364.0889) + (if (< (- f2-0) f0-12) + (set! f0-12 (+ -91.022224 f0-12)) + ) + f0-12 + ) + ((< 364.0889 f1-3) + (if (< f0-12 f2-0) + (set! f0-12 (+ 91.022224 f0-12)) + ) + f0-12 + ) + ((< f0-12 0.0) + (+ 91.022224 f0-12) + ) + (else + (+ -91.022224 f0-12) + ) + ) + ) + ) + (set! (-> v1-21 tilt) (- f0-12)) + (set! (-> v1-21 heading) (the float (sar (shl (the int (+ (-> v1-21 heading) (* 0.05 f0-12))) 48) 48))) + ) + 0 + ) + (let ((a0-25 (-> self skel root-channel 0))) + (set! (-> a0-25 param 0) (the float (+ (-> a0-25 frame-group data 0 length) -1))) + (set! (-> a0-25 param 1) 1.0) + (joint-control-channel-group! a0-25 (the-as art-joint-anim #f) num-func-seek!) + ) + (ja-channel-push! 1 40) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-1 frame-num) (ja-aframe 0.0 0)) + ) + (while (< 0.0 f30-0) + (suspend) + (let ((a0-29 (-> self skel root-channel 0))) + (set! (-> a0-29 param 0) (the float (+ (-> a0-29 frame-group data 0 length) -1))) + (set! (-> a0-29 param 1) 1.0) + (joint-control-channel-group-eval! a0-29 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! f30-0 (- f30-0 (-> *display* seconds-per-frame))) + (dummy-33 (-> self root-override) (-> self root-override transv) (the-as uint 1)) + (let* ((v1-48 self) + (f1-13 (the float (sar (shl (the int (- (-> self heading) (-> v1-48 heading))) 48) 48))) + (f0-32 (- (-> v1-48 tilt))) + ) + (let ((f2-2 (-> v1-48 max-tilt))) + (set! f0-32 (cond + ((< f1-13 -364.0889) + (if (< (- f2-2) f0-32) + (set! f0-32 (+ -91.022224 f0-32)) + ) + f0-32 + ) + ((< 364.0889 f1-13) + (if (< f0-32 f2-2) + (set! f0-32 (+ 91.022224 f0-32)) + ) + f0-32 + ) + ((< f0-32 0.0) + (+ 91.022224 f0-32) + ) + (else + (+ -91.022224 f0-32) + ) + ) + ) + ) + (set! (-> v1-48 tilt) (- f0-32)) + (set! (-> v1-48 heading) (the float (sar (shl (the int (+ (-> v1-48 heading) (* 0.05 f0-32))) 48) 48))) + ) + 0 + ) + ) + ) + ) + (while (not (ja-done? 0)) + (suspend) + (let ((a0-43 (-> self skel root-channel 0))) + (set! (-> a0-43 param 0) (the float (+ (-> a0-43 frame-group data 0 length) -1))) + (set! (-> a0-43 param 1) 1.0) + (joint-control-channel-group-eval! a0-43 (the-as art-joint-anim #f) num-func-seek!) + ) + (let* ((v1-59 self) + (f1-23 (the float (sar (shl (the int (- (-> self heading) (-> v1-59 heading))) 48) 48))) + (f0-47 (- (-> v1-59 tilt))) + ) + (let ((f2-4 (-> v1-59 max-tilt))) + (set! f0-47 (cond + ((< f1-23 -364.0889) + (if (< (- f2-4) f0-47) + (set! f0-47 (+ -91.022224 f0-47)) + ) + f0-47 + ) + ((< 364.0889 f1-23) + (if (< f0-47 f2-4) + (set! f0-47 (+ 91.022224 f0-47)) + ) + f0-47 + ) + ((< f0-47 0.0) + (+ 91.022224 f0-47) + ) + (else + (+ -91.022224 f0-47) + ) + ) + ) + ) + (set! (-> v1-59 tilt) (- f0-47)) + (set! (-> v1-59 heading) (the float (sar (shl (the int (+ (-> v1-59 heading) (* 0.05 f0-47))) 48) 48))) + ) + 0 + ) + (go seagull-idle) + (none) + ) + :post + seagull-post + ) + +;; definition for function seagull-reaction +;; INFO: Return type mismatch int vs none. +(defun seagull-reaction ((arg0 collide-shape-moving) (arg1 collide-shape-intersect)) + (let ((s5-0 0)) + (let ((a1-1 (new 'stack-no-clear 'vector))) + (vector-float*! a1-1 (-> arg1 move-vec) (-> arg1 best-u)) + (set! (-> a1-1 y) (-> arg1 move-vec y)) + (TODO-RENAME-28 arg0 a1-1) + ) + (let ((f0-3 (vector-dot (-> arg0 transv) (-> arg1 best-tri normal))) + (v1-6 (new 'stack-no-clear 'vector)) + ) + (vector-float*! v1-6 (-> arg1 best-tri normal) f0-3) + (vector-! (-> arg0 transv) (-> arg0 transv) v1-6) + ) + (let ((v1-7 (-> arg1 best-tri normal)) + (s4-1 (-> arg0 process)) + ) + (set! (-> (the-as seagull s4-1) temp-heading) (atan (-> v1-7 x) (-> v1-7 z))) + (set! (-> (the-as seagull s4-1) temp-heading-time) 300) + ) + (set! (-> arg0 status) (the-as uint (logior s5-0 3))) + ) + (none) + ) + +;; definition for function seagull-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior seagull-init-by-other seagull ((arg0 vector) (arg1 int) (arg2 seagullflock)) + (let ((s3-0 (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player)))) + (set! (-> s3-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s3-0 reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) seagull-reaction) + ) + (set! (-> s3-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s3-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 0)) + (set! (-> s2-0 collide-with) (the-as uint 1)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set-vector! (-> s2-0 local-sphere) 0.0 2048.0 0.0 2048.0) + (set-root-prim! s3-0 s2-0) + ) + (set! (-> s3-0 nav-radius) (* 0.75 (-> s3-0 root-prim local-sphere w))) + (backup-collide-with-as s3-0) + (set! (-> self root-override) s3-0) + ) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (initialize-skeleton self *seagull-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self index) arg1) + (set! (-> self flock) (the-as (pointer seagullflock) (process->ppointer arg2))) + (set! (-> self heading) 0.0) + (set! (-> self tilt) 0.0) + (let* ((f30-0 51200.0) + (f28-0 20480.0) + (v1-23 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-24 (the-as number (logior #x3f800000 v1-23))) + ) + (set! (-> self thrust) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-24))))) + ) + (set! (-> self teleport) #f) + (go seagull-idle) + (none) + ) + +;; definition for method 15 of type seagullflock +;; INFO: Return type mismatch int vs none. +(defmethod play-hint seagullflock ((obj seagullflock) (arg0 int)) + (when (>= (- (-> *display* base-frame-counter) (the-as int (-> obj alert-time))) 1500) + (eval-path-curve-div! (-> obj path) (-> obj target) (the float (-> obj targetnum)) 'interp) + (let ((f0-2 4096.0) + (v1-6 (-> obj targetnum)) + ) + (set! (-> obj max-lift) (* f0-2 (cond + ((= v1-6 1) + 4.0 + ) + ((= v1-6 2) + 4.0 + ) + ((= v1-6 3) + 4.0 + ) + (else + 10.0 + ) + ) + ) + ) + ) + (case (-> obj targetnum) + ((1) + (level-hint-spawn + (game-text-id beach-seagull-chased-one) + "sksp0020" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((2) + (level-hint-spawn + (game-text-id beach-seagull-chased-two) + "sksp0022" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((3) + (level-hint-spawn + (game-text-id beach-seagull-chased-three) + "sksp0023" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((4) + (level-hint-spawn + (game-text-id beach-seagull-chased-four) + "sksp0024" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (let ((v1-16 (-> obj entity extra perm))) + (logior! (-> v1-16 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-16 user-int8 0) (min 2 (-> obj targetnum))) + ) + (+! (-> obj targetnum) 1) + (dotimes (v1-19 (-> obj birds)) + (set! (-> obj bird v1-19 0 scared) (+ (* v1-19 2) 5)) + ) + (set! (-> obj bird arg0 0 scared) 1) + (set! (-> obj bird-at-waterfall) (the-as uint 0)) + (set! (-> obj birds-at-waterfall) 0) + (if (>= (-> obj targetnum) 4) + (set! (-> obj teleport-frames) 1500) + ) + (sound-play-by-name (static-sound-name "seagull-takeoff") (new-sound-id) 1024 0 0 1 #t) + (set! (-> obj alert-time) (the-as uint (-> *display* base-frame-counter))) + ) + (none) + ) + +;; definition for method 16 of type seagullflock +(defmethod dummy-16 seagullflock ((obj seagullflock) (arg0 seagull)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (eval-path-curve-div! (-> obj path) gp-0 (the float (-> obj targetnum)) 'interp) + (vector-! gp-0 gp-0 (-> arg0 root-override trans)) + (atan (-> gp-0 x) (-> gp-0 z)) + ) + ) + +;; failed to figure out what this is: +(defstate seagullflock-at-waterfall (seagullflock) + :code + (behavior () + (local-vars + (a0-2 process) + (a1-0 event-message-block) + (t9-1 (function process-tree event-message-block object)) + ) + (aybabtu 2) + (set! (-> self state-time) (the-as uint (-> *display* base-frame-counter))) + (-> self link next) + (until (t9-1 a0-2 a1-0) + (suspend) + (let ((v1-5 (-> self link next))) + (set! a1-0 (new 'stack-no-clear 'event-message-block)) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'loading) + (set! t9-1 send-event-function) + (set! a0-2 (if v1-5 + (-> v1-5 extra process) + ) + ) + ) + ) + (until (>= (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) (-> self teleport-frames)) + (suspend) + ) + (close-specific-task! (game-task beach-seagull) (task-status need-reminder)) + (dotimes (v1-13 (-> self birds)) + (set! (-> self bird v1-13 0 teleport) #t) + ) + (let ((gp-0 (-> self link next))) + (set-blackout-frames 600) + (suspend) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 0) + (set! (-> a1-6 message) 'trigger) + (let ((t9-4 send-event-function) + (v1-18 gp-0) + ) + (t9-4 + (if v1-18 + (-> v1-18 extra process) + ) + a1-6 + ) + ) + ) + (while (zero? (logand (-> gp-0 extra perm status) (entity-perm-status complete))) + (suspend) + ) + ) + (process-entity-status! self (entity-perm-status dead) #t) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate seagullflock-idle (seagullflock) + :code + (behavior () + (while #t + (if (> (-> self teleport-frames) 0) + (go seagullflock-at-waterfall) + ) + (if (and *target* (>= 102400.0 (vector-vector-distance (-> self trans) (-> *target* control trans)))) + (level-hint-spawn (game-text-id zero) (the-as string #f) (-> self entity) *entity-pool* (game-task none)) + ) + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type seagullflock +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! seagullflock ((obj seagullflock) (arg0 entity-actor)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj targetnum) (+ (-> arg0 extra perm user-int8 0) 1)) + (eval-path-curve-div! (-> obj path) (-> obj trans) (the float (+ (-> obj targetnum) -1)) 'interp) + (set! (-> obj target quad) (-> obj trans quad)) + (set! (-> obj max-lift) 20480.0) + (set! (-> obj birds) 0) + (dotimes (v1-16 64) + (set! (-> obj bird v1-16) (the-as (pointer seagull) #f)) + ) + (create-the-flock! obj (-> obj trans)) + (dotimes (s5-1 20) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (let* ((f30-0 (-> obj trans x)) + (f28-0 4096.0) + (f26-0 10.0) + (v1-22 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-23 (the-as number (logior #x3f800000 v1-22))) + ) + (set! (-> s4-0 x) (+ f30-0 (* f28-0 (* f26-0 (+ -1.0 (the-as float v1-23)))))) + ) + (let* ((f30-1 (-> obj trans z)) + (f28-1 4096.0) + (f26-1 10.0) + (v1-26 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-27 (the-as number (logior #x3f800000 v1-26))) + ) + (set! (-> s4-0 z) (+ f30-1 (* f28-1 (* f26-1 (+ -1.0 (the-as float v1-27)))))) + ) + (set! (-> s4-0 y) (-> obj trans y)) + (set! (-> s4-0 w) 1.0) + (create-the-flock! obj s4-0) + ) + ) + (set! (-> obj squall) (new 'process 'ambient-sound sound-seagull-squall (-> obj trans))) + (set! (-> obj teleport-frames) 0) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (go seagullflock-idle) + (none) + ) + +;; definition for method 14 of type seagullflock +(defmethod create-the-flock! seagullflock ((obj seagullflock) (arg0 vector)) + (if (= (-> obj birds) 64) + (return (the-as (pointer process) #f)) + ) + (let* ((s4-0 (get-process *default-dead-pool* seagull #x4000)) + (v0-0 (when s4-0 + (let ((t9-1 (method-of-type seagull activate))) + (t9-1 (the-as seagull s4-0) obj 'seagull (the-as pointer #x70004000)) + ) + (run-now-in-process s4-0 seagull-init-by-other arg0 (-> obj birds) obj) + (-> s4-0 ppointer) + ) + ) + ) + (set! (-> obj bird (-> obj birds)) (the-as (pointer seagull) v0-0)) + (+! (-> obj birds) 1) + v0-0 + ) + ) + +;; definition (debug) for function beach-rock-trigger +(defun-debug beach-rock-trigger () + (let ((gp-0 600)) + (set! (-> (the-as + seagullflock + (search-process-tree *active-pool* (lambda ((arg0 process)) (= (-> arg0 type) seagullflock))) + ) + teleport-frames + ) + gp-0 + ) + gp-0 + ) + ) diff --git a/test/decompiler/reference/levels/citadel/citb-plat_REF.gc b/test/decompiler/reference/levels/citadel/citb-plat_REF.gc new file mode 100644 index 0000000000..17f918dad3 --- /dev/null +++ b/test/decompiler/reference/levels/citadel/citb-plat_REF.gc @@ -0,0 +1,1541 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defskelgroup *plat-citb-sg* plat-citb + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *plat-eco-citb-unlit-sg* plat-eco-citb + 0 + 8 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *plat-eco-citb-lit-sg* plat-eco-citb + 4 + 8 + ((5 (meters 20)) (6 (meters 40)) (7 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *citb-chain-plat-sg* citb-chain-plat + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +;; definition of type citb-base-plat +(deftype citb-base-plat (process-drawable) + ((root-override collide-shape-moving :offset 112) + (idle-distance float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 25 + :size-assert #xb4 + :flag-assert #x19005000b4 + (:methods + (citb-base-plat-idle () _type_ :state 20) + (dummy-21 (_type_) none 21) + (dummy-22 (_type_) none 22) + (citb-base-plat-active () _type_ :state 23) + (dummy-24 (_type_) none 24) + ) + ) + +;; definition for method 3 of type citb-base-plat +(defmethod inspect citb-base-plat ((obj citb-base-plat)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tidle-distance: ~f~%" (-> obj idle-distance)) + obj + ) + +;; failed to figure out what this is: +(defstate citb-base-plat-idle (citb-base-plat) + :virtual #t + :trans + (behavior () + (if (and *target* (>= (-> self idle-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + (go-virtual citb-base-plat-active) + ) + (none) + ) + :code + (the-as (function none :behavior citb-base-plat) anim-loop) + :post + (the-as (function none :behavior citb-base-plat) ja-post) + ) + +;; failed to figure out what this is: +(defstate citb-base-plat-active (citb-base-plat) + :virtual #t + :trans + (behavior () + (if (or (not *target*) (< (+ 8192.0 (-> self idle-distance)) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + (go-virtual citb-base-plat-idle) + ) + (rider-trans) + (none) + ) + :code + (the-as (function none :behavior citb-base-plat) anim-loop) + :post + (the-as (function none :behavior citb-base-plat) rider-post) + ) + +;; definition for method 21 of type citb-base-plat +;; INFO: Return type mismatch int vs none. +(defmethod dummy-21 citb-base-plat ((obj citb-base-plat)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 20480.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 22 of type citb-base-plat +;; INFO: Return type mismatch int vs none. +(defmethod dummy-22 citb-base-plat ((obj citb-base-plat)) + (initialize-skeleton obj *plat-citb-sg* '()) + 0 + (none) + ) + +;; definition for method 24 of type citb-base-plat +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 citb-base-plat ((obj citb-base-plat)) + (go (method-of-object obj citb-base-plat-idle)) + 0 + (none) + ) + +;; definition for method 11 of type citb-base-plat +(defmethod init-from-entity! citb-base-plat ((obj citb-base-plat) (arg0 entity-actor)) + (dummy-21 obj) + (process-drawable-from-entity! obj arg0) + (set! (-> obj idle-distance) 245760.0) + (dummy-22 obj) + (logior! (-> obj skel status) 1) + (dummy-24 obj) + (none) + ) + +;; definition of type citb-plat-eco +(deftype citb-plat-eco (plat-eco) + () + :heap-base #x100 + :method-count-assert 33 + :size-assert #x165 + :flag-assert #x2101000165 + ) + +;; definition for method 3 of type citb-plat-eco +(defmethod inspect citb-plat-eco ((obj citb-plat-eco)) + (let ((t9-0 (method-of-type plat-eco inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for method 24 of type citb-plat-eco +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 citb-plat-eco ((obj citb-plat-eco)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 12288.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 26 of type citb-plat-eco +;; INFO: Return type mismatch float vs none. +(defmethod dummy-26 citb-plat-eco ((obj citb-plat-eco)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj notice-dist) 8192.0) + (none) + ) + +;; definition for method 23 of type citb-plat-eco +(defmethod get-unlit-skel citb-plat-eco ((obj citb-plat-eco)) + *plat-eco-citb-unlit-sg* + ) + +;; definition for method 27 of type citb-plat-eco +(defmethod get-lit-skel citb-plat-eco ((obj citb-plat-eco)) + *plat-eco-citb-lit-sg* + ) + +;; definition of type citb-plat +(deftype citb-plat (plat) + ((trans-offset vector :inline :offset-assert 272) + ) + :heap-base #xb0 + :method-count-assert 33 + :size-assert #x120 + :flag-assert #x2100b00120 + ) + +;; definition for method 3 of type citb-plat +(defmethod inspect citb-plat ((obj citb-plat)) + (let ((t9-0 (method-of-type plat inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttrans-offset: #~%" (-> obj trans-offset)) + obj + ) + +;; failed to figure out what this is: +(defstate plat-path-active (citb-plat) + :virtual #t + :trans + (behavior () + (set! (-> self path-pos) (if (logtest? (-> self fact options) (fact-options fop3)) + (get-current-phase (-> self sync)) + (get-current-phase-with-mirror (-> self sync)) + ) + ) + (eval-path-curve! (-> self path) (-> self basetrans) (-> self path-pos) 'interp) + (vector+! (-> self basetrans) (-> self basetrans) (-> self trans-offset)) + (if (< (vector-vector-distance (-> self root-override trans) (ear-trans)) 81920.0) + (sound-play-by-name + (static-sound-name "eco-plat-hover") + (-> self sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self root-override trans)) + ) + ) + (plat-trans) + (none) + ) + ) + +;; definition for method 23 of type citb-plat +(defmethod get-unlit-skel citb-plat ((obj citb-plat)) + *plat-citb-sg* + ) + +;; definition for method 24 of type citb-plat +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 citb-plat ((obj citb-plat)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 12288.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 26 of type citb-plat +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-26 citb-plat ((obj citb-plat)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj root-override scale quad) (-> (res-lump-struct (-> obj entity) 'scale vector) quad)) + (let ((f0-0 (-> obj root-override scale x))) + (set! (-> obj root-override root-prim local-sphere w) + (* (-> obj root-override root-prim local-sphere w) f0-0) + ) + (set! (-> obj draw bounds w) (* (-> obj draw bounds w) f0-0)) + ) + (set! (-> obj trans-offset quad) (-> (the-as vector ((method-of-type res-lump get-property-struct) + (-> obj entity) + 'trans-offset + 'interp + -1000000000.0 + *null-vector* + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + quad + ) + ) + 0 + (none) + ) + +;; definition of type citb-stair-plat +(deftype citb-stair-plat (citb-base-plat) + ((idle-height float :offset-assert 180) + (rise-height float :offset-assert 184) + (delay uint64 :offset-assert 192) + (rise symbol :offset-assert 200) + ) + :heap-base #x60 + :method-count-assert 25 + :size-assert #xcc + :flag-assert #x19006000cc + ) + +;; definition for method 3 of type citb-stair-plat +(defmethod inspect citb-stair-plat ((obj citb-stair-plat)) + (let ((t9-0 (method-of-type citb-base-plat inspect))) + (t9-0 obj) + ) + (format #t "~T~Tidle-height: ~f~%" (-> obj idle-height)) + (format #t "~T~Trise-height: ~f~%" (-> obj rise-height)) + (format #t "~T~Tdelay: ~D~%" (-> obj delay)) + (format #t "~T~Trise: ~A~%" (-> obj rise)) + obj + ) + +;; failed to figure out what this is: +(defstate citb-base-plat-idle (citb-stair-plat) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'trigger) + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((v0-0 #t)) + (set! (-> self rise) v0-0) + v0-0 + ) + ) + ) + ) + ) + :trans + (the-as (function none :behavior citb-stair-plat) #f) + :code + (behavior () + (logior! (-> self draw status) 2) + (while (not (-> self rise)) + (suspend) + ) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (set-vector! (-> self draw color-mult) 0.0 0.0 0.0 1.0) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while (< (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self delay))) + (ja-post) + (suspend) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (let ((f30-0 (- 1.0 (* 0.0011111111 (the float (- (-> *display* base-frame-counter) (-> self state-time))))))) + (when (< f30-0 0.0) + (set! (-> self root-override trans y) (-> self rise-height)) + (go-virtual citb-base-plat-active) + ) + (set! (-> self root-override trans y) (lerp (-> self rise-height) (-> self idle-height) (* f30-0 f30-0))) + ) + (let ((f0-12 (fmax 0.0 (fmin 1.0 (* 0.000012207031 (+ 409600.0 (-> self root-override trans y))))))) + (set! (-> self draw color-mult x) f0-12) + (set! (-> self draw color-mult y) f0-12) + (set! (-> self draw color-mult z) f0-12) + ) + (transform-post) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior citb-stair-plat) #f) + ) + +;; failed to figure out what this is: +(defstate citb-base-plat-active (citb-stair-plat) + :virtual #t + :trans + (the-as (function none :behavior citb-stair-plat) #f) + :code + (behavior () + (set! (-> self root-override trans y) (-> self rise-height)) + (suspend) + (dummy-47 (-> self root-override)) + (logior! (-> self mask) (process-mask actor-pause)) + (anim-loop) + (none) + ) + :post + (the-as (function none :behavior citb-stair-plat) ja-post) + ) + +;; definition for method 22 of type citb-stair-plat +;; INFO: Return type mismatch int vs none. +(defmethod dummy-22 citb-stair-plat ((obj citb-stair-plat)) + (initialize-skeleton obj *plat-citb-sg* '()) + (set! (-> obj rise-height) (-> obj root-override trans y)) + (set! (-> obj idle-height) (+ -409600.0 (-> obj rise-height))) + (set! (-> obj root-override trans y) (-> obj idle-height)) + (set! (-> obj rise) #f) + (set! (-> obj delay) (the-as uint (the int (* 300.0 (res-lump-float (-> obj entity) 'delay :default 1.0))))) + (let ((f0-7 1.5)) + (set-vector! (-> obj root-override scale) f0-7 f0-7 f0-7 1.0) + (set! (-> obj root-override root-prim local-sphere w) + (* (-> obj root-override root-prim local-sphere w) f0-7) + ) + (set! (-> obj draw bounds w) (* (-> obj draw bounds w) f0-7)) + ) + 0 + (none) + ) + +;; definition for method 24 of type citb-stair-plat +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 citb-stair-plat ((obj citb-stair-plat)) + (if (and + (task-complete? *game-info* (game-task citadel-sage-blue)) + (task-complete? *game-info* (game-task citadel-sage-red)) + (task-complete? *game-info* (game-task citadel-sage-yellow)) + ) + (go (method-of-object obj citb-base-plat-active)) + (go (method-of-object obj citb-base-plat-idle)) + ) + 0 + (none) + ) + +;; definition for symbol *citb-chain-plat-constants*, type rigid-body-platform-constants +(define *citb-chain-plat-constants* (new 'static 'rigid-body-platform-constants + :drag-factor 2.0 + :buoyancy-factor 2.0 + :max-buoyancy-depth (meters 3.0) + :gravity-factor 1.0 + :gravity (meters 80.0) + :player-weight (meters 35.0) + :player-bonk-factor 1.0 + :player-dive-factor 1.0 + :player-force-distance (meters 1000.0) + :player-force-clamp (meters 1000000.0) + :player-force-timeout #x1e + :explosion-force (meters 1000.0) + :linear-damping 1.0 + :angular-damping 1.0 + :control-point-count 5 + :mass 2.0 + :inertial-tensor-x (meters 10.0) + :inertial-tensor-y (meters 5.0) + :inertial-tensor-z (meters 10.0) + :idle-distance (meters 70.0) + :platform #t + :sound-name "blue-eco-on" + ) + ) + +;; definition of type citb-chain-plat +(deftype citb-chain-plat (rigid-body-platform) + ((orig-trans vector :inline :offset-assert 736) + (orig-quat quaternion :inline :offset-assert 752) + (beam-end vector :inline :offset-assert 768) + (float-offset float :offset-assert 784) + (idle-offset float :offset-assert 788) + ) + :heap-base #x2b0 + :method-count-assert 35 + :size-assert #x318 + :flag-assert #x2302b00318 + ) + +;; definition for method 3 of type citb-chain-plat +(defmethod inspect citb-chain-plat ((obj citb-chain-plat)) + (let ((t9-0 (method-of-type rigid-body-platform inspect))) + (t9-0 obj) + ) + (format #t "~T~Torig-trans: #~%" (-> obj orig-trans)) + (format #t "~T~Torig-quat: #~%" (-> obj orig-quat)) + (format #t "~T~Tbeam-end: #~%" (-> obj beam-end)) + (format #t "~T~Tfloat-offset: ~f~%" (-> obj float-offset)) + (format #t "~T~Tidle-offset: ~f~%" (-> obj idle-offset)) + obj + ) + +;; definition for method 22 of type citb-chain-plat +(defmethod TODO-RENAME-22 citb-chain-plat ((obj citb-chain-plat) (arg0 vector) (arg1 float)) + (+ 12288.0 + (* 2048.0 + (fmax 0.0 (fmin 1.0 (* 0.000024414063 (-> obj float-height-offset)))) + (cos (* 109.22667 (+ (* 60.0 arg1) (* 0.03 (-> arg0 x)) (* 0.03 (-> arg0 z))))) + ) + (-> obj float-height-offset) + (-> obj orig-trans y) + ) + ) + +;; definition for method 27 of type citb-chain-plat +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-27 citb-chain-plat ((obj citb-chain-plat) (arg0 vector)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector-! gp-0 arg0 (-> obj rbody position)) + (set! (-> gp-0 y) 0.0) + (let* ((f0-1 (vector-length gp-0)) + (f1-1 (* 4.0 (fmax 0.0 (fmin 4096.0 (+ -819.2 f0-1))))) + ) + (when (< 0.0 f1-1) + (vector-float*! gp-0 gp-0 (/ f1-1 f0-1)) + (TODO-RENAME-15 (-> obj rbody) gp-0) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 23 of type citb-chain-plat +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-23 citb-chain-plat ((obj citb-chain-plat) (arg0 float)) + ((the-as (function rigid-body-platform float none) (find-parent-method citb-chain-plat 23)) obj arg0) + (TODO-RENAME-27 obj (-> obj orig-trans)) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate rigid-body-platform-idle (citb-chain-plat) + :virtual #t + :trans + (behavior () + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if (and + (and *target* (>= (-> self info idle-distance) + (vector-vector-distance (-> self root-overlay trans) (-> *target* control trans)) + ) + ) + (send-event *target* 'query 'powerup 3) + ) + (go-virtual rigid-body-platform-float) + ) + ) + (none) + ) + :code + (behavior () (anim-loop) (none)) + :post + (the-as (function none :behavior citb-chain-plat) ja-post) + ) + +;; failed to figure out what this is: +(defstate rigid-body-platform-float (citb-chain-plat) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior citb-chain-plat) + rigid-body-platform-event-handler + ) + :enter + (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :exit + (behavior () (stop! (-> self sound)) (none)) + :trans + (behavior () + (cond + ((and + (and + *target* + (>= (-> self info idle-distance) + (vector-vector-distance (-> self root-overlay trans) (-> *target* control trans)) + ) + ) + (send-event *target* 'query 'powerup 3) + ) + (when (< (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (if (rand-vu-percent? 0.05) + (spawn-projectile-blue *target*) + ) + ) + (set! (-> self float-height-offset) + (seek (-> self float-height-offset) (-> self float-offset) (* 8192.0 (-> *display* seconds-per-frame))) + ) + (draw-eco-beam (-> self root-overlay trans) (-> self beam-end)) + (update-trans! (-> self sound) (-> self root-overlay trans)) + (update! (-> self sound)) + ) + (else + (set! (-> self float-height-offset) + (seek (-> self float-height-offset) (-> self idle-offset) (* 16384.0 (-> *display* seconds-per-frame))) + ) + (stop! (-> self sound)) + (if (= (-> self float-height-offset) (-> self idle-offset)) + (go citb-chain-plat-settle) + ) + ) + ) + (none) + ) + :code + (behavior () (anim-loop) (none)) + :post + (the-as (function none :behavior citb-chain-plat) rigid-body-platform-post) + ) + +;; failed to figure out what this is: +(defstate citb-chain-plat-settle (citb-chain-plat) + :trans + (the-as (function none :behavior citb-chain-plat) rider-trans) + :code + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'quaternion)) + ) + (set! (-> gp-0 quad) (-> self root-overlay trans quad)) + (quaternion-copy! s5-0 (-> self root-overlay quat)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while (< (- (-> *display* base-frame-counter) (-> self state-time)) 75) + (let ((f30-0 (* 0.013333334 (the float (- (-> *display* base-frame-counter) (-> self state-time)))))) + (quaternion-slerp! (-> self root-overlay quat) s5-0 (-> self orig-quat) f30-0) + (vector-lerp! (-> self root-overlay trans) gp-0 (-> self orig-trans) f30-0) + ) + (suspend) + ) + ) + (set! (-> self root-overlay trans quad) (-> self orig-trans quad)) + (quaternion-copy! (-> self root-overlay quat) (-> self orig-quat)) + (TODO-RENAME-22 + (-> self rbody) + (-> self root-overlay trans) + (-> self root-overlay quat) + (-> self info linear-damping) + (-> self info angular-damping) + ) + (suspend) + (go-virtual rigid-body-platform-idle) + (none) + ) + :post + (the-as (function none :behavior citb-chain-plat) rider-post) + ) + +;; definition for method 30 of type citb-chain-plat +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-30 citb-chain-plat ((obj citb-chain-plat)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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 0.0 0.0 20480.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-overlay) s5-0) + ) + 0 + (none) + ) + +;; definition for method 31 of type citb-chain-plat +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod TODO-RENAME-31 citb-chain-plat ((obj citb-chain-plat)) + (initialize-skeleton obj *citb-chain-plat-sg* '()) + (set! (-> obj orig-trans quad) (-> obj root-overlay trans quad)) + (quaternion-copy! (-> obj orig-quat) (-> obj root-overlay quat)) + (set! (-> obj beam-end quad) (-> obj orig-trans quad)) + (set! (-> obj beam-end y) (+ -49152.0 (-> obj beam-end y))) + (TODO-RENAME-29 obj *citb-chain-plat-constants*) + (set! (-> obj idle-offset) 0.0) + (set! (-> obj float-offset) (res-lump-float (-> obj entity) 'height-info :default 4096.0)) + (set! (-> obj float-height-offset) (-> obj idle-offset)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "eco-plat-hover") + :volume #x400 + :fo-max 50 + ) + (-> obj root-overlay trans) + ) + ) + (let ((s5-0 (-> obj info control-point-count))) + (dotimes (s4-0 s5-0) + (let ((s3-0 (-> obj control-point-array data s4-0))) + (let ((f30-0 (* 65536.0 (/ (the float s4-0) (the float s5-0))))) + (set! (-> s3-0 local-pos x) (* 16384.0 (sin f30-0))) + (set! (-> s3-0 local-pos y) 0.0) + (set! (-> s3-0 local-pos z) (* 16384.0 (cos f30-0))) + ) + (set! (-> s3-0 local-pos w) 1.0) + ) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *citb-rotatebox-sg* citb-rotatebox + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 -5 0 10) + :longest-edge (meters 0) + ) + +;; definition of type citb-rotatebox +(deftype citb-rotatebox (citb-base-plat) + () + :heap-base #x50 + :method-count-assert 25 + :size-assert #xb4 + :flag-assert #x19005000b4 + ) + +;; definition for method 3 of type citb-rotatebox +(defmethod inspect citb-rotatebox ((obj citb-rotatebox)) + (let ((t9-0 (method-of-type citb-base-plat inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defstate citb-base-plat-active (citb-rotatebox) + :virtual #t + :trans + (the-as (function none :behavior citb-rotatebox) rider-trans) + :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!) + ) + ) + (if (or (not *target*) (< (+ 8192.0 (-> self idle-distance)) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + (go-virtual citb-base-plat-idle) + ) + ) + (none) + ) + ) + +;; definition for method 21 of type citb-rotatebox +;; INFO: Return type mismatch int vs none. +(defmethod dummy-21 citb-rotatebox ((obj citb-rotatebox)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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 40960.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 22 of type citb-rotatebox +;; INFO: Return type mismatch int vs none. +(defmethod dummy-22 citb-rotatebox ((obj citb-rotatebox)) + (initialize-skeleton obj *citb-rotatebox-sg* '()) + 0 + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *citb-donut-sg* citb-donut + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +;; definition of type citb-donut +(deftype citb-donut (citb-base-plat) + ((sync sync-info :inline :offset-assert 180) + ) + :heap-base #x50 + :method-count-assert 25 + :size-assert #xbc + :flag-assert #x19005000bc + ) + +;; definition for method 3 of type citb-donut +(defmethod inspect citb-donut ((obj citb-donut)) + (let ((t9-0 (method-of-type citb-base-plat inspect))) + (t9-0 obj) + ) + (format #t "~T~Tsync: #~%" (-> obj sync)) + obj + ) + +;; failed to figure out what this is: +(defstate citb-base-plat-active (citb-donut) + :virtual #t + :post + (behavior () + (update! (-> self sound)) + (quaternion-axis-angle! + (-> self root-override quat) + 0.0 + 1.0 + 0.0 + (* 65536.0 (get-current-phase (-> self sync))) + ) + (rider-post) + (none) + ) + ) + +;; definition for method 21 of type citb-donut +;; INFO: Return type mismatch int vs none. +(defmethod dummy-21 citb-donut ((obj citb-donut)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 40960.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 22 of type citb-donut +;; INFO: Return type mismatch int vs none. +(defmethod dummy-22 citb-donut ((obj citb-donut)) + (initialize-skeleton obj *citb-donut-sg* '()) + (setup-params! (-> obj sync) (the-as uint 9000) 0.0 0.15 0.15) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "rotate-plat") + :volume #x400 + :fo-max 20 + ) + (-> obj root-override trans) + ) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + 0 + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *citb-stopbox-sg* citb-stopbox + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 -2 0 5.5) + :longest-edge (meters 0) + ) + +;; definition of type citb-stopbox +(deftype citb-stopbox (plat) + () + :heap-base #xa0 + :method-count-assert 33 + :size-assert #x108 + :flag-assert #x2100a00108 + ) + +;; definition for method 3 of type citb-stopbox +(defmethod inspect citb-stopbox ((obj citb-stopbox)) + (let ((t9-0 (method-of-type plat inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defstate plat-path-active (citb-stopbox) + :virtual #t + :trans + (behavior () + (set! (-> self path-pos) (get-current-phase (-> self sync))) + (eval-path-curve! (-> self path) (-> self basetrans) (-> self path-pos) 'interp) + (if (< (vector-vector-distance (-> self root-override trans) (ear-trans)) 81920.0) + (sound-play-by-name + (static-sound-name "eco-plat-hover") + (-> self sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self root-override trans)) + ) + ) + (plat-trans) + (none) + ) + ) + +;; definition for method 23 of type citb-stopbox +(defmethod get-unlit-skel citb-stopbox ((obj citb-stopbox)) + *citb-stopbox-sg* + ) + +;; definition for method 24 of type citb-stopbox +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 citb-stopbox ((obj citb-stopbox)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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 19)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 -8192.0 0.0 22528.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 26 of type citb-stopbox +;; INFO: Return type mismatch int vs none. +(defmethod dummy-26 citb-stopbox ((obj citb-stopbox)) + (logior! (-> obj fact options) (fact-options fop3)) + (logclear! (-> obj mask) (process-mask actor-pause)) + 0 + (none) + ) + +;; definition of type citb-firehose +(deftype citb-firehose (process-drawable) + ((root-override collide-shape :offset 112) + (idle-distance float :offset-assert 176) + (sync sync-info :inline :offset-assert 180) + (last-sync float :offset-assert 188) + (blast-pos vector :inline :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xd0 + :flag-assert #x14006000d0 + ) + +;; definition for method 3 of type citb-firehose +(defmethod inspect citb-firehose ((obj citb-firehose)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tidle-distance: ~f~%" (-> obj idle-distance)) + (format #t "~T~Tsync: #~%" (-> obj sync)) + (format #t "~T~Tlast-sync: ~f~%" (-> obj last-sync)) + (format #t "~T~Tblast-pos: #~%" (-> obj blast-pos)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *citb-firehose-sg* citb-firehose + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 3 0 15) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate citb-firehose-idle (citb-firehose) + :trans + (behavior () + (if (and *target* (>= (-> self idle-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + (go citb-firehose-active) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior citb-firehose) ja-post) + ) + +;; failed to figure out what this is: +(defstate citb-firehose-active (citb-firehose) + :trans + (behavior () + (if (or (not *target*) (< (+ 8192.0 (-> self idle-distance)) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + (go citb-firehose-idle) + ) + (let ((f0-2 (get-current-phase (-> self sync))) + (f1-1 (-> self last-sync)) + ) + (set! (-> self last-sync) f0-2) + (if (< f0-2 f1-1) + (go citb-firehose-blast) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior citb-firehose) ja-post) + ) + +;; definition for function citb-firehose-blast-particles +(defbehavior citb-firehose-blast-particles citb-firehose () + (let ((gp-0 (new 'stack-no-clear 'quaternion))) + (quaternion-identity! gp-0) + (quaternion-rotate-local-x! gp-0 gp-0 -16384.0) + (dotimes (s5-0 16) + (quaternion-rotate-local-z! gp-0 gp-0 2048.0) + (quaternion-copy! *particle-quat* gp-0) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2541) + (-> self blast-pos) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (spawn (-> self part) (-> self blast-pos)) + ) + +;; failed to figure out what this is: +(defstate citb-firehose-blast (citb-firehose) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (let ((v1-4 (new 'static 'attack-info :mask #xe0))) + (set! (-> v1-4 mode) 'damage) + (set! (-> v1-4 shove-back) 24576.0) + (set! (-> v1-4 shove-up) 12288.0) + (set! (-> a1-2 param 1) (the-as uint v1-4)) + ) + (send-event-function arg0 a1-2) + ) + ) + ) + ) + :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 3))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) 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 3)) 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!) + ) + ) + (ja-channel-push! 1 30) + (restore-collide-with-as (-> self root-override)) + (sound-play-by-name + (static-sound-name "eco-torch") + (new-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self blast-pos)) + ) + (dotimes (gp-1 2) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (set! (-> self blast-pos quad) (-> self node-list data 5 bone transform vector 3 quad)) + (citb-firehose-blast-particles) + (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!) + ) + ) + ) + (clear-collide-with-as (-> self root-override)) + (ja-channel-push! 1 30) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-16 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-16 param 1) 1.0) + (set! (-> a0-16 frame-num) 0.0) + (joint-control-channel-group! a0-16 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go citb-firehose-active) + (none) + ) + :post + (the-as (function none :behavior citb-firehose) transform-post) + ) + +;; definition for method 11 of type citb-firehose +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! citb-firehose ((obj citb-firehose) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 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 -61440.0 0.0 36864.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core offense) 2) + (set-vector! (-> s2-0 local-sphere) 0.0 -49152.0 0.0 12288.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core offense) 2) + (set-vector! (-> s2-1 local-sphere) 0.0 -61440.0 0.0 14336.0) + (append-prim s3-0 s2-1) + ) + (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 offense) 2) + (set-vector! (-> s2-2 local-sphere) 0.0 -73728.0 0.0 16384.0) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *citb-firehose-sg* '()) + (load-params! (-> obj sync) obj (the-as uint 900) 0.0 0.15 0.15) + (set! (-> obj idle-distance) 286720.0) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 685) obj)) + (clear-collide-with-as (-> obj root-override)) + (go citb-firehose-idle) + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *citb-exit-plat-sg* citb-exit-plat + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 30) + :longest-edge (meters 0) + ) + +;; definition of type citb-exit-plat +(deftype citb-exit-plat (plat-button) + ((idle-height float :offset-assert 240) + (rise-height float :offset-assert 244) + (activated symbol :offset-assert 248) + ) + :heap-base #x90 + :method-count-assert 33 + :size-assert #xfc + :flag-assert #x21009000fc + ) + +;; definition for method 3 of type citb-exit-plat +(defmethod inspect citb-exit-plat ((obj citb-exit-plat)) + (let ((t9-0 (method-of-type plat-button inspect))) + (t9-0 obj) + ) + (format #t "~T~Tidle-height: ~f~%" (-> obj idle-height)) + (format #t "~T~Trise-height: ~f~%" (-> obj rise-height)) + (format #t "~T~Tactivated: ~A~%" (-> obj activated)) + obj + ) + +;; failed to figure out what this is: +(defstate citb-exit-plat-idle (citb-exit-plat) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (let ((v1-3 (-> self entity extra perm))) + (logior! (-> v1-3 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-3 user-int8 0) 1) + ) + (go citb-exit-plat-rise) + ) + ) + ) + :code + (behavior () + (logior! (-> self draw status) 2) + (clear-collide-with-as (-> self root-override)) + (while #t + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate citb-exit-plat-rise (citb-exit-plat) + :trans + (the-as (function none :behavior citb-exit-plat) rider-trans) + :code + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (restore-collide-with-as (-> self root-override)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (let ((f30-0 (- 1.0 (* 0.0016666667 (the float (- (-> *display* base-frame-counter) (-> self state-time))))))) + (when (< f30-0 0.0) + (set! (-> self root-override trans y) (-> self rise-height)) + (go-virtual plat-button-idle) + ) + (set! (-> self root-override trans y) (lerp (-> self rise-height) (-> self idle-height) (* f30-0 f30-0))) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior citb-exit-plat) rider-post) + ) + +;; definition for function citb-exit-plat-move-player +;; INFO: Return type mismatch int vs none. +(defbehavior citb-exit-plat-move-player citb-exit-plat ((arg0 vector)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-! gp-0 (-> self root-override trans) arg0) + (vector-! s5-0 (-> *target* control trans) (-> self root-override trans)) + (set! (-> s5-0 y) 0.0) + (let ((f30-0 (vector-length s5-0))) + (when (< 122880.0 f30-0) + (vector-normalize! s5-0 1.0) + (vector+*! gp-0 gp-0 s5-0 (- 122880.0 f30-0)) + ) + ) + ) + (TODO-RENAME-28 (-> *target* control) gp-0) + ) + (send-event *target* 'reset-height) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate plat-button-move-downward (citb-exit-plat) + :virtual #t + :trans + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (let ((t9-1 (-> (the-as (state plat-button) (find-parent-method citb-exit-plat 23)) trans))) + (if t9-1 + (t9-1) + ) + ) + (citb-exit-plat-move-player gp-0) + ) + (none) + ) + :post + (the-as (function none :behavior citb-exit-plat) transform-post) + ) + +;; failed to figure out what this is: +(defstate plat-button-move-upward (citb-exit-plat) + :virtual #t + :trans + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (let ((t9-1 (-> (the-as (state plat-button) (find-parent-method citb-exit-plat 24)) trans))) + (if t9-1 + (t9-1) + ) + ) + (citb-exit-plat-move-player gp-0) + ) + (none) + ) + :post + (the-as (function none :behavior citb-exit-plat) transform-post) + ) + +;; definition for method 26 of type citb-exit-plat +(defmethod can-activate? citb-exit-plat ((obj citb-exit-plat)) + (not (movie?)) + ) + +;; definition for method 31 of type citb-exit-plat +(defmethod TODO-RENAME-31 citb-exit-plat ((obj citb-exit-plat)) + (initialize-skeleton obj *citb-exit-plat-sg* '()) + (none) + ) + +;; definition for method 32 of type citb-exit-plat +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-32 citb-exit-plat ((obj citb-exit-plat)) + (if (-> obj activated) + (go (method-of-object obj plat-button-idle)) + (go citb-exit-plat-idle) + ) + 0 + (none) + ) + +;; definition for method 28 of type citb-exit-plat +(defmethod TODO-RENAME-28 citb-exit-plat ((obj citb-exit-plat)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s5-0 1) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 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 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 122880.0) + (set-root-prim! s5-0 s4-0) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 1)))) + (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 -2867.2 0.0 7372.8) + (append-prim s4-0 s3-0) + ) + (let ((s3-1 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 1) (the-as uint 2)))) + (set! (-> s3-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core action) (the-as uint 3)) + (set! (-> s3-1 prim-core offense) 4) + (set! (-> s3-1 transform-index) 3) + (set-vector! (-> s3-1 local-sphere) 0.0 0.0 0.0 122880.0) + (append-prim s4-0 s3-1) + ) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + s5-0 + ) + ) + +;; definition for method 29 of type citb-exit-plat +;; INFO: Return type mismatch int vs symbol. +(defmethod can-target-move? citb-exit-plat ((obj citb-exit-plat)) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj draw light-index) (the-as uint 255)) + (let ((a0-5 (entity-actor-lookup (-> obj entity) 'state-actor 0))) + (set! (-> obj activated) (logtest? (-> a0-5 extra perm status) (entity-perm-status complete))) + ) + (cond + ((= (-> *game-info* current-continue level) 'finalboss) + (let ((v1-8 (-> obj entity extra perm))) + (logior! (-> v1-8 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-8 user-int8 0) 1) + ) + (set! (-> obj activated) #t) + (set! (-> obj path-pos) 0.0) + ) + (else + (set! (-> obj path-pos) 1.0) + ) + ) + (let ((s5-0 (-> obj root-override trans))) + (eval-path-curve! (-> obj path) s5-0 (-> obj path-pos) 'interp) + (vector+! s5-0 s5-0 (-> obj trans-off)) + ) + (set! (-> obj rise-height) (-> obj root-override trans y)) + (set! (-> obj idle-height) (+ -286720.0 (-> obj rise-height))) + (if (-> obj activated) + (set! (-> obj root-override trans y) (-> obj rise-height)) + (set! (-> obj root-override trans y) (-> obj idle-height)) + ) + (set! (-> obj allow-auto-kill) #f) + (process-entity-status! obj (entity-perm-status bit-3) #t) + (the-as symbol 0) + ) diff --git a/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc b/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc index af46f21022..97642e5f26 100644 --- a/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc +++ b/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc @@ -197,7 +197,7 @@ nav-enemy-default-event-handler ;; definition for function babak-with-cannon-compute-ride-point ;; Used lq/sq (defun babak-with-cannon-compute-ride-point ((arg0 mistycannon) (arg1 vector)) - (set! (-> arg1 quad) (-> arg0 root trans quad)) + (set! (-> arg1 quad) (-> arg0 root-override trans quad)) (let ((a1-4 (new 'static 'vector :y 18149.377 :z -17289.217 :w 1.0)) (a2-0 (-> arg0 node-list data 3 bone transform)) ) diff --git a/test/decompiler/reference/levels/common/launcherdoor_REF.gc b/test/decompiler/reference/levels/common/launcherdoor_REF.gc new file mode 100644 index 0000000000..5be5d7d5d7 --- /dev/null +++ b/test/decompiler/reference/levels/common/launcherdoor_REF.gc @@ -0,0 +1,252 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type launcherdoor +(deftype launcherdoor (process-drawable) + ((root-override collide-shape :offset 112) + (notify-player-passed-thru? symbol :offset-assert 176) + (thresh-y float :offset-assert 180) + (open-speed float :offset-assert 184) + (close-speed float :offset-assert 188) + (load-mode symbol :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xc4 + :flag-assert #x14006000c4 + ) + +;; definition for method 3 of type launcherdoor +(defmethod inspect launcherdoor ((obj launcherdoor)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tnotify-player-passed-thru?: ~A~%" (-> obj notify-player-passed-thru?)) + (format #t "~T~Tthresh-y: ~f~%" (-> obj thresh-y)) + (format #t "~T~Topen-speed: ~f~%" (-> obj open-speed)) + (format #t "~T~Tclose-speed: ~f~%" (-> obj close-speed)) + (format #t "~T~Tload-mode: ~A~%" (-> obj load-mode)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *launcherdoor-sg* launcherdoor + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *launcherdoor-maincave-sg* launcherdoor-maincave + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate launcherdoor-closed (launcherdoor) + :code + (behavior ((arg0 symbol)) + (if (not arg0) + (sound-play-by-name (static-sound-name "ldoor-close") (new-sound-id) 1024 0 0 1 #t) + ) + (when *target* + (case (-> *target* current-level name) + (('jungle 'jungleb) + (send-event *target* 'no-load-wait 6000) + ) + ) + ) + (restore-collide-with-as (-> self root-override)) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) 0.0) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + (when arg0 + (let ((v1-22 (-> self skel root-channel 0))) + (set! (-> v1-22 num-func) num-func-identity) + (set! (-> v1-22 frame-num) 0.0) + ) + (set! (-> self draw force-lod) 1) + ) + (suspend) + (while #t + (if (and + *target* + (= (-> *target* control unknown-surface00 name) 'launch-jump) + (< (-> *target* control trans y) (-> self thresh-y)) + ) + (go launcherdoor-open #f) + ) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) 0.0) + (set! (-> a0-13 param 1) (-> self close-speed)) + (joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-seek!) + ) + (suspend) + (when (ja-done? 0) + (set! (-> self draw force-lod) 1) + (when (-> self notify-player-passed-thru?) + (set! (-> self notify-player-passed-thru?) #f) + (let* ((gp-1 (-> self entity)) + (s5-1 (entity-actor-count gp-1 'alt-actor)) + ) + (dotimes (s4-1 s5-1) + (let ((v1-43 (entity-actor-lookup gp-1 'alt-actor s4-1))) + (if v1-43 + (send-event + (if v1-43 + (-> v1-43 extra process) + ) + 'notify + ) + ) + ) + ) + ) + (case (-> self load-mode) + (('jungle) + (load-state-want-levels 'village1 'jungle) + (load-state-want-display-level 'village1 'display) + ) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior launcherdoor) ja-post) + ) + +;; failed to figure out what this is: +(defstate launcherdoor-open (launcherdoor) + :code + (behavior ((arg0 symbol)) + (if (not arg0) + (sound-play-by-name (static-sound-name "ldoor-open") (new-sound-id) 1024 0 0 1 #t) + ) + (set! (-> self draw force-lod) 0) + (clear-collide-with-as (-> self root-override)) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + (when arg0 + (let ((v1-16 (-> self skel root-channel 0))) + (set! (-> v1-16 num-func) num-func-identity) + (set! (-> v1-16 frame-num) (the float (+ (-> v1-16 frame-group data 0 length) -1))) + ) + ) + (while #t + (when (or + (not *target*) + (!= (-> *target* control unknown-surface00 name) 'launch-jump) + (< (+ 4096.0 (-> self root-override trans y)) (-> *target* control trans y)) + ) + (when (and *target* (< (-> self thresh-y) (-> *target* control trans y))) + (let ((a1-3 (res-lump-struct (-> self entity) 'continue-name structure))) + (when a1-3 + (let ((v1-36 (set-continue! *game-info* (the-as basic a1-3)))) + (load-commands-set! *level* (-> v1-36 load-commands)) + ) + ) + ) + (set! (-> self notify-player-passed-thru?) #t) + ) + (go launcherdoor-closed #f) + ) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 param 0) (the float (+ (-> a0-16 frame-group data 0 length) -1))) + (set! (-> a0-16 param 1) (-> self open-speed)) + (joint-control-channel-group-eval! a0-16 (the-as art-joint-anim #f) num-func-seek!) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior launcherdoor) ja-post) + ) + +;; definition for method 11 of type launcherdoor +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! launcherdoor ((obj launcherdoor) (arg0 entity-actor)) + (set! (-> obj notify-player-passed-thru?) #f) + (set! (-> obj open-speed) 4.0) + (set! (-> obj close-speed) 2.0) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 14336.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (cond + ((= (-> (if (-> obj entity) + (-> obj entity extra level) + (-> *level* level-default) + ) + name + ) + 'maincave + ) + (set! (-> obj close-speed) 4.0) + (initialize-skeleton obj *launcherdoor-maincave-sg* '()) + (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 3)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + ) + (else + (initialize-skeleton obj *launcherdoor-sg* '()) + (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) + ) + ) + ) + (transform-post) + (case (-> obj entity extra level name) + (('jungle) + (set! (-> obj draw shadow-mask) (the-as uint 28)) + ) + ) + (set! (-> obj load-mode) (-> (if (-> obj entity) + (-> obj entity extra level) + (-> *level* level-default) + ) + name + ) + ) + (set! (-> obj thresh-y) (+ -81920.0 (-> obj root-override trans y))) + (if (and *target* (= (-> *target* control unknown-surface00 name) 'launch-jump)) + (go launcherdoor-open #t) + (go launcherdoor-closed #t) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/finalboss/robotboss_REF.gc b/test/decompiler/reference/levels/finalboss/robotboss_REF.gc index 74dc5f42be..e6f53c5b4a 100644 --- a/test/decompiler/reference/levels/finalboss/robotboss_REF.gc +++ b/test/decompiler/reference/levels/finalboss/robotboss_REF.gc @@ -3933,7 +3933,7 @@ (when (and arg1 (nonzero? (-> self looping-sound 0))) (update! (-> self looping-sound 0)) (when (and *target* (zero? (logand (-> *target* state-flags) #x80f8))) - (let ((t2-0 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (let ((t2-0 (new 'stack-no-clear 'collide-tri-result)) (a2-0 (new 'stack-no-clear 'vector)) ) (vector-! a2-0 gp-0 s4-0) diff --git a/test/decompiler/reference/levels/jungle/darkvine_REF.gc b/test/decompiler/reference/levels/jungle/darkvine_REF.gc new file mode 100644 index 0000000000..b2b9b3340e --- /dev/null +++ b/test/decompiler/reference/levels/jungle/darkvine_REF.gc @@ -0,0 +1,448 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type darkvine +(deftype darkvine (process-drawable) + ((root-override collide-shape :offset 112) + (speed float :offset-assert 176) + (tip-index int8 :offset-assert 180) + (dangerous symbol :offset-assert 184) + (vulnerable symbol :offset-assert 188) + (hit-player symbol :offset-assert 192) + (touch-time uint64 :offset-assert 200) + (player-attack-id int32 :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xd4 + :flag-assert #x14007000d4 + ) + +;; definition for method 3 of type darkvine +(defmethod inspect darkvine ((obj darkvine)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tspeed: ~f~%" (-> obj speed)) + (format #t "~T~Ttip-index: ~D~%" (-> obj tip-index)) + (format #t "~T~Tdangerous: ~A~%" (-> obj dangerous)) + (format #t "~T~Tvulnerable: ~A~%" (-> obj vulnerable)) + (format #t "~T~Thit-player: ~A~%" (-> obj hit-player)) + (format #t "~T~Ttouch-time: ~D~%" (-> obj touch-time)) + (format #t "~T~Tplayer-attack-id: ~D~%" (-> obj player-attack-id)) + obj + ) + +;; definition for method 12 of type darkvine +(defmethod run-logic? darkvine ((obj darkvine)) + (or + (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or + (and + (nonzero? (-> obj draw)) + (logtest? (-> obj draw status) 8) + (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root-override pause-adjust-distance)) + (vector-vector-distance (-> obj root-override trans) (math-camera-pos)) + ) + ) + (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) + (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) + ) + ) + ) + +;; failed to figure out what this is: +(defskelgroup *darkvine-sg* darkvine + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 2 0 3.5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 175) + (new 'static 'sparticle-launch-group + :length 3 + :duration #x96 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-darkvine-puffs" + :launcher + (new 'static 'inline-array sparticle-group-item 3 (sp-item 800) (sp-item 801) (sp-item 802)) + :bounds + (new 'static 'sphere :y 8192.0 :w 12288.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 800) (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.8) + (sp-rnd-flt spt-x (meters 0.0) (meters 0.5) 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 30.0 20.0 1.0) + (sp-rnd-flt spt-g 25.0 10.0 1.0) + (sp-rnd-flt spt-b 10.0 5.0 1.0) + (sp-rnd-flt spt-a 0.0 32.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.0016666667) (meters 0.0033333334) 1.0) + (sp-flt spt-vel-y (meters 0.013333334)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a 0.1882353) + (sp-flt spt-accel-y -2.048) + (sp-int spt-timer 255) + (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* 802) (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.25) + (sp-rnd-flt spt-x (meters 0.0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.025) (meters 0.2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 45.0 45.0 1.0) + (sp-rnd-flt spt-g 45.0 10.0 1.0) + (sp-rnd-flt spt-b 20.0 6.0 1.0) + (sp-flt spt-a 96.0) + (sp-rnd-flt spt-vel-x (meters 0.0016666667) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-accel-y -2.7306666) + (sp-int spt-timer 375) + (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* 801) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters 0.0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 10.0 6.0 1.0) + (sp-rnd-flt spt-g 40.0 90.0 1.0) + (sp-rnd-flt spt-b 10.0 6.0 1.0) + (sp-flt spt-a 96.0) + (sp-rnd-flt spt-vel-x (meters 0.0016666667) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.013333334) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -1.2) 1 436.90668) + (sp-flt spt-accel-y -1.3653333) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; definition for function darkvine-event-handler +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 50] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 52] +(defbehavior darkvine-event-handler darkvine ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'touch) + (dummy-45 (-> self root-override)) + (when (-> self dangerous) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'attack) + (set! (-> a1-1 param 0) (-> arg3 param 0)) + (set! (-> a1-1 param 1) (the-as uint (new 'static 'attack-info))) + (if (send-event-function arg0 a1-1) + (dummy-54 (-> self root-override) 2 0) + ) + ) + ) + ) + ((= v1-0 'attack) + (let ((v1-10 (-> arg3 param 2))) + (cond + ((!= v1-10 (-> self player-attack-id)) + (set! (-> self player-attack-id) (the-as int v1-10)) + (when (-> self vulnerable) + (dummy-45 (-> self root-override)) + (go darkvine-retreat) + ) + ) + (else + 'push + ) + ) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate darkvine-idle (darkvine) + :event + darkvine-event-handler + :code + (behavior () + (set! (-> self dangerous) #t) + (set! (-> self vulnerable) #t) + (let ((f30-0 0.0)) + (while #t + (if (logtest? (get-reminder (get-task-control (game-task jungle-plant)) 0) 1) + (go darkvine-die #f) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) (-> self speed)) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (if (and (>= (ja-aframe-num 0) 120.0) (>= 180.0 (ja-aframe-num 0))) + (seek-toward-yaw-angle! (-> self root-override) f30-0 32768.0 150) + ) + (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) (-> self speed)) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! f30-0 (if (rand-vu-percent? 0.5) + (+ 16384.0 f30-0) + (+ -16384.0 f30-0) + ) + ) + ) + ) + (none) + ) + :post + (behavior () + (when (and + (-> self hit-player) + (or (not *target*) (>= (- (-> *display* base-frame-counter) (the-as int (-> self touch-time))) 15)) + ) + (dummy-54 (-> self root-override) 2 4) + (set! (-> self hit-player) #f) + ) + (transform-post) + (if *target* + (look-at-enemy! + (-> *target* neck) + (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data (-> self tip-index))) + 'nothing + self + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate darkvine-retreat (darkvine) + :event + darkvine-event-handler + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self dangerous) #f) + (set! (-> self vulnerable) #f) + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 45) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) 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 4)) num-func-seek!) + ) + (until (ja-done? 0) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 800) + (-> self root-override trans) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.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!) + ) + ) + (ja-channel-set! 0) + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 600) + (suspend) + ) + ) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 (the-as part-tracker gp-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 175) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-1 ppointer) + ) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-2) 150) + (suspend) + ) + ) + (set! (-> self dangerous) #t) + (logior! (-> self mask) (process-mask actor-pause)) + (ja-channel-set! 1) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-11 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-11 param 1) 1.0) + (set! (-> a0-11 frame-num) 0.0) + (joint-control-channel-group! a0-11 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go darkvine-idle) + (none) + ) + :post + (-> darkvine-idle post) + ) + +;; failed to figure out what this is: +(defstate darkvine-die (darkvine) + :code + (behavior ((arg0 symbol)) + (logclear! (-> self mask) (process-mask actor-pause)) + (if arg0 + (ja-channel-set! 1) + (ja-channel-push! 1 150) + ) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while (!= (-> self skel root-channel 0) (-> self skel channel)) + (suspend) + ) + (logior! (-> self mask) (process-mask sleep)) + (anim-loop) + (none) + ) + :post + (-> darkvine-idle post) + ) + +;; definition for method 11 of type darkvine +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! darkvine ((obj darkvine) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 4) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3072)) + (set-vector! (-> s3-0 local-sphere) 0.0 8192.0 0.0 16384.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 5) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 3276.8) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 6) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 2867.2) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 7) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 2457.6) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 8) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-3) + ) + ) + (set! (-> s4-0 nav-radius) 2048.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (set! (-> obj tip-index) 8) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *darkvine-sg* '()) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (set! (-> obj hit-player) #f) + (set! (-> obj speed) (rand-vu-float-range 0.95 1.05)) + (if (logtest? (get-reminder (get-task-control (game-task jungle-plant)) 0) 1) + (go darkvine-die #t) + ) + (go darkvine-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/jungle/jungle-mirrors_REF.gc b/test/decompiler/reference/levels/jungle/jungle-mirrors_REF.gc new file mode 100644 index 0000000000..3cfbd38d21 --- /dev/null +++ b/test/decompiler/reference/levels/jungle/jungle-mirrors_REF.gc @@ -0,0 +1,2457 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 176) (new 'static 'sparticle-launch-group + :length 21 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag screen-space) + :name "group-jungle-binoculars" + :launcher + (new 'static 'inline-array sparticle-group-item 21 + (sp-item 803) + (sp-item 804) + (sp-item 805) + (sp-item 806) + (sp-item 807) + (sp-item 808) + (sp-item 809) + (sp-item 810) + (sp-item 811) + (sp-item 812) + (sp-item 813) + (sp-item 814) + (sp-item 815) + (sp-item 816) + (sp-item 817) + (sp-item 818) + (sp-item 819) + (sp-item 820) + (sp-item 821) + (sp-item 822) + (sp-item 823) + ) + :bounds (new 'static 'sphere :w 4096.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 823) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x28 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 1.0)) + (sp-flt spt-rot-z (degrees -45.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-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 0.0)) + (sp-flt spt-conerot-radius (meters 1.45)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 815) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees -15.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 30.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 816) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 15.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 60.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 817) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 75.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 120.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 818) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 105.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 150.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 819) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 165.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 210.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 820) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 195.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 240.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 821) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 255.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 300.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 822) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-flt spt-rot-z (degrees 285.0)) + (sp-flt spt-scale-y (meters 0.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 330.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 811) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x27 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.75)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 0.75)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 0.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 812) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x27 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.75)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 0.75)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 90.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 813) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x27 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.75)) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 0.75)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 180.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 814) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x27 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.75)) + (sp-flt spt-rot-z (degrees 270.0)) + (sp-flt spt-scale-y (meters 0.75)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-flt spt-conerot-z (degrees 270.0)) + (sp-flt spt-conerot-radius (meters 1.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 803) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.9)) + (sp-flt spt-y (meters 2.1)) + (sp-flt spt-scale-x (meters 4.5)) + (sp-flt spt-scale-y (meters 3.0)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 804) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1.11)) + (sp-flt spt-y (meters 2.1)) + (sp-flt spt-scale-x (meters 4.5)) + (sp-flt spt-scale-y (meters 3.0)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 805) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -1.11)) + (sp-flt spt-y (meters 2.1)) + (sp-flt spt-scale-x (meters 3.0)) + (sp-flt spt-rot-z (degrees -90.0)) + (sp-flt spt-scale-y (meters 4.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 806) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 2.9)) + (sp-flt spt-y (meters 2.1)) + (sp-flt spt-scale-x (meters 3.0)) + (sp-flt spt-rot-z (degrees -90.0)) + (sp-flt spt-scale-y (meters 4.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 807) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.9)) + (sp-flt spt-y (meters -2.1)) + (sp-flt spt-scale-x (meters 3.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 4.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 808) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1.11)) + (sp-flt spt-y (meters -2.1)) + (sp-flt spt-scale-x (meters 3.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 4.5)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 809) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -1.11)) + (sp-flt spt-y (meters -2.1)) + (sp-flt spt-scale-x (meters 4.5)) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 3.0)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 810) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x25 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 2.9)) + (sp-flt spt-y (meters -2.1)) + (sp-flt spt-scale-x (meters 4.5)) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 3.0)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 689) + (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :name "group-jungle-binoculars-aligned" + :launcher + (new 'static 'inline-array sparticle-group-item 4 (sp-item 2840) (sp-item 2863) (sp-item 2864) (sp-item 2865)) + :bounds (new 'static 'sphere :w 40960.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2865) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 1.0 5.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 96.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a 0.85333335) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int-plain-rnd spt-next-time 75 74 1) + (sp-launcher-by-id spt-next-launcher 2866) + (sp-rnd-flt spt-conerot-x (degrees -360.0) (degrees 720.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees -1440.0) (degrees 2880.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2866) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.85333335) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2864) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-rnd-flt spt-num 1.0 1.0 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 0.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 96.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters -0.0033333334) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a 4.266667) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int-plain-rnd spt-next-time 15 14 1) + (sp-launcher-by-id spt-next-launcher 2867) + (sp-rnd-flt spt-conerot-x (degrees -360.0) (degrees 720.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees -360.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters -2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2867) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -4.266667) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2863) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 0.15) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 96.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.0125)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.8) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2840) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 11 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 13.0) (meters 5.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 96.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; definition of type periscope +(deftype periscope (process-drawable) + ((root-override collide-shape :offset 112) + (y-offset meters :offset-assert 176) + (y-offset-grips meters :offset-assert 180) + (height meters :offset-assert 184) + (turn degrees :offset-assert 188) + (tilt degrees :offset-assert 192) + (target-turn degrees :offset-assert 196) + (target-tilt degrees :offset-assert 200) + (base vector :inline :offset-assert 208) + (reflector-trans vector :inline :offset-assert 224) + (next-reflector-trans vector :inline :offset-assert 240) + (prev-reflector-trans vector :inline :offset-assert 256) + (old-camera-matrix matrix :inline :offset-assert 272) + (reflector (pointer reflector) :offset-assert 336) + (gauge-rot degrees :offset-assert 340) + (lock-time uint64 :offset-assert 344) + (aligned? symbol :offset-assert 352) + (raised? symbol :offset-assert 356) + (player-touching-grips? symbol :offset-assert 360) + (grips-moving? symbol :offset-assert 364) + (sound-id sound-id :offset-assert 368) + (rise-sound-id sound-id :offset-assert 372) + (grips-sound-id sound-id :offset-assert 376) + (grips joint-mod-set-world :offset-assert 380) + (part-aligned sparticle-launch-control :offset-assert 384) + ) + :heap-base #x120 + :method-count-assert 20 + :size-assert #x184 + :flag-assert #x1401200184 + (:states + periscope-activate + periscope-idle + periscope-player-control + periscope-power-on + periscope-wait-for-player + periscope-wait-for-power-input + ) + ) + +;; definition for method 3 of type periscope +(defmethod inspect periscope ((obj periscope)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Ty-offset: (meters ~m)~%" (-> obj y-offset)) + (format #t "~T~Ty-offset-grips: (meters ~m)~%" (-> obj y-offset-grips)) + (format #t "~T~Theight: (meters ~m)~%" (-> obj height)) + (format #t "~T~Tturn: (deg ~r)~%" (-> obj turn)) + (format #t "~T~Ttilt: (deg ~r)~%" (-> obj tilt)) + (format #t "~T~Ttarget-turn: (deg ~r)~%" (-> obj target-turn)) + (format #t "~T~Ttarget-tilt: (deg ~r)~%" (-> obj target-tilt)) + (format #t "~T~Tbase: ~`vector`P~%" (-> obj base)) + (format #t "~T~Treflector-trans: ~`vector`P~%" (-> obj reflector-trans)) + (format #t "~T~Tnext-reflector-trans: ~`vector`P~%" (-> obj next-reflector-trans)) + (format #t "~T~Tprev-reflector-trans: ~`vector`P~%" (-> obj prev-reflector-trans)) + (format #t "~T~Told-camera-matrix: ~`matrix`P~%" (-> obj old-camera-matrix)) + (format #t "~T~Treflector: #x~X~%" (-> obj reflector)) + (format #t "~T~Tgauge-rot: (deg ~r)~%" (-> obj gauge-rot)) + (format #t "~T~Tlock-time: ~D~%" (-> obj lock-time)) + (format #t "~T~Taligned?: ~A~%" (-> obj aligned?)) + (format #t "~T~Traised?: ~A~%" (-> obj raised?)) + (format #t "~T~Tplayer-touching-grips?: ~A~%" (-> obj player-touching-grips?)) + (format #t "~T~Tgrips-moving?: ~A~%" (-> obj grips-moving?)) + (format #t "~T~Tsound-id: ~D~%" (-> obj sound-id)) + (format #t "~T~Trise-sound-id: ~D~%" (-> obj rise-sound-id)) + (format #t "~T~Tgrips-sound-id: ~D~%" (-> obj grips-sound-id)) + (format #t "~T~Tgrips: ~A~%" (-> obj grips)) + (format #t "~T~Tpart-aligned: ~A~%" (-> obj part-aligned)) + obj + ) + +;; definition for method 7 of type periscope +;; INFO: Return type mismatch process-drawable vs periscope. +(defmethod relocate periscope ((obj periscope) (arg0 int)) + (if (nonzero? (-> obj grips)) + (&+! (-> obj grips) arg0) + ) + (if (nonzero? (-> obj part-aligned)) + (&+! (-> obj part-aligned) arg0) + ) + (the-as periscope ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; definition for method 10 of type periscope +(defmethod deactivate periscope ((obj periscope)) + (if (nonzero? (-> obj part-aligned)) + (kill-and-free-particles (-> obj part-aligned)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition of type reflector +(deftype reflector (process-drawable) + ((parent-override (pointer periscope) :offset 12) + (root-override collide-shape :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + reflector-idle + ) + ) + +;; definition for method 3 of type reflector +(defmethod inspect reflector ((obj reflector)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition of type reflector-origin +(deftype reflector-origin (process-drawable) + ((reflector-trans vector :inline :offset-assert 176) + (next-reflector-trans vector :inline :offset-assert 192) + (reflector uint32 :offset-assert 208) + (next basic :offset-assert 212) + (blocker entity-actor :offset-assert 216) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xdc + :flag-assert #x14007000dc + (:states + reflector-origin-idle + ) + ) + +;; definition for method 3 of type reflector-origin +(defmethod inspect reflector-origin ((obj reflector-origin)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Treflector-trans: ~`vector`P~%" (-> obj reflector-trans)) + (format #t "~T~Tnext-reflector-trans: ~`vector`P~%" (-> obj next-reflector-trans)) + (format #t "~T~Treflector: #x~X~%" (-> obj reflector)) + (format #t "~T~Tnext: ~A~%" (-> obj next)) + (format #t "~T~Tblocker: ~A~%" (-> obj blocker)) + obj + ) + +;; definition of type reflector-mirror +(deftype reflector-mirror (process-drawable) + ((root-override collide-shape :offset 112) + (beam-end vector :inline :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xc0 + :flag-assert #x14005000c0 + (:states + reflector-mirror-broken + reflector-mirror-idle + ) + ) + +;; definition for method 3 of type reflector-mirror +(defmethod inspect reflector-mirror ((obj reflector-mirror)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tbeam-end: #~%" (-> obj beam-end)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *periscope-base-sg* periscope + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 23.5 0 24) + :longest-edge (meters 4.5) + ) + +;; failed to figure out what this is: +(defskelgroup *periscope-mirror-sg* periscope + 4 + 7 + ((5 (meters 20)) (6 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *reflector-mirror-sg* reflector-mirror + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 9 0 9) + :longest-edge (meters 3) + ) + +;; failed to figure out what this is: +(defskelgroup *reflector-mirror-break-sg* reflector-mirror + 4 + 6 + ((5 (meters 999999))) + :bounds (static-spherem 0 9 0 9) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate cam-periscope (camera-slave) + :event + cam-standard-event-handler + :enter + (behavior () + (when (not (-> self enter-has-run)) + (set! (-> (new 'stack-no-clear 'vector) quad) (the-as uint128 0)) + (let ((v1-2 (-> self change-event-from))) + (set! (-> self trans quad) (-> (the-as periscope (-> v1-2 0)) reflector-trans quad)) + (matrix-rotate-yx! + (the-as matrix (-> self tracking)) + (-> (the-as periscope (-> v1-2 0)) turn) + (-> (the-as periscope (-> v1-2 0)) tilt) + ) + ) + (set! (-> self blend-from-type) (the-as uint 0)) + (set! (-> self blend-to-type) (the-as uint 0)) + 0 + ) + (none) + ) + :trans + (behavior () + (if (zero? (logand (-> *camera* master-options) 2)) + (cam-slave-go cam-free-floating) + ) + (none) + ) + :code + (behavior () + (local-vars (sv-32 int) (sv-48 int)) + (let* ((gp-0 (-> self change-event-from)) + (f28-0 (the-as float (-> (the-as periscope (-> gp-0 0)) tilt))) + (f30-0 (the-as float (-> (the-as periscope (-> gp-0 0)) turn))) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (while #t + (when (not (or (paused?) (-> (the-as periscope (-> self change-event-from 0)) aligned?))) + (vector-reset! s5-0) + (when *camera-read-analog* + (let ((f26-0 (analog-input + (the-as int (+ (-> *cpad-list* cpads 0 rightx) -256 (-> *cpad-list* cpads 0 leftx))) + 0.0 + 48.0 + 110.0 + -1.0 + ) + ) + (f0-0 (analog-input + (the-as int (+ (-> *cpad-list* cpads 0 righty) -256 (-> *cpad-list* cpads 0 lefty))) + 0.0 + 48.0 + 110.0 + -1.0 + ) + ) + ) + (set! (-> s5-0 y) (- (-> s5-0 y) (* 136.53334 (- f26-0)))) + (set! (-> s5-0 x) (- (-> s5-0 x) (* 136.53334 (- f0-0)))) + (cond + ((and (= f26-0 0.0) (= f0-0 0.0)) + (sound-stop (-> (the-as periscope (-> gp-0 0)) sound-id)) + ) + (else + (let ((s4-0 sound-play-by-name) + (s3-0 (make-u128 101 (the-as uint #x706f6373656c6574))) + (s2-0 (-> (the-as periscope (-> gp-0 0)) sound-id)) + (s1-0 1024) + (s0-0 0) + ) + (set! sv-32 0) + (set! sv-48 1) + (let ((t2-0 (target-pos 0))) + (the-as int (s4-0 (the-as sound-name s3-0) s2-0 s1-0 s0-0 sv-32 sv-48 (the-as symbol t2-0))) + ) + ) + ) + ) + ) + ) + (cond + ((< 136.53334 (-> s5-0 x)) + (set! (-> s5-0 x) 136.53334) + ) + ((< (-> s5-0 x) -136.53334) + (set! (-> s5-0 x) -136.53334) + ) + ) + (cond + ((< 136.53334 (-> s5-0 y)) + (set! (-> s5-0 y) 136.53334) + ) + ((< (-> s5-0 y) -136.53334) + (set! (-> s5-0 y) -136.53334) + ) + ) + (+! f30-0 (* (-> s5-0 y) (-> *display* time-adjust-ratio))) + (set! f28-0 (fmax -12743.111 (fmin 12743.111 (+ f28-0 (* (-> s5-0 x) (-> *display* time-adjust-ratio)))))) + (matrix-rotate-yx! (the-as matrix (-> self tracking)) f30-0 f28-0) + ) + (suspend) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate reflector-idle (reflector) + :code + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (while #t + (set! (-> gp-0 x) (-> self parent-override 0 tilt)) + (set! (-> gp-0 y) (-> self parent-override 0 turn)) + (set! (-> gp-0 z) 0.0) + (set! (-> gp-0 w) 1.0) + (quaternion-zxy! (-> self root-override quat) gp-0) + (set! (-> self root-override trans quad) + (-> self parent-override 0 node-list data 6 bone transform vector 3 quad) + ) + (ja-post) + (dummy-47 (-> self root-override)) + (suspend) + ) + ) + (none) + ) + ) + +;; definition for function reflector-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior reflector-init-by-other reflector ((arg0 vector)) + (set! (-> self entity) (-> self parent-override 0 entity)) + (let ((s5-0 (new 'process 'collide-shape self (collide-list-enum hit-by-player)))) + (let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 16384.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> self root-override) s5-0) + ) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (initialize-skeleton self *periscope-mirror-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (go reflector-idle) + (none) + ) + +;; definition for function periscope-crosshair +;; Used lq/sq +(defbehavior periscope-crosshair periscope () + (let ((s3-0 (matrix-local->world #f #f)) + (s5-0 (new 'static 'vector4w-4)) + (s4-0 (new 'static 'vector)) + (gp-0 #f) + ) + (set! (-> self turn) (vector-y-angle (-> s3-0 vector 2))) + (set! (-> self tilt) (- (vector-x-angle (-> s3-0 vector 2)))) + (set! (-> s4-0 quad) (-> self next-reflector-trans quad)) + (set! (-> s4-0 w) 1.0) + (init-for-transform *identity-matrix*) + (transform-float-point s4-0 (the-as vector4w (-> s5-0 quad))) + (let* ((v1-1 (-> self link)) + (s4-1 (and (-> v1-1 next) (-> v1-1 next extra process))) + (v1-5 (if (and (nonzero? s4-1) (type-type? (-> s4-1 type) periscope)) + s4-1 + ) + ) + ) + (when (or (not v1-5) (-> (the-as periscope v1-5) raised?)) + (cond + ((>= (-> s5-0 vector 0 z) 0) + (set! (-> s5-0 vector 0 x) (+ (/ (-> s5-0 vector 0 x) 16) -2048)) + (set! (-> s5-0 vector 0 y) (- (- 2048 (/ (-> s5-0 vector 0 y) 16)))) + (let ((v1-15 (abs (-> s5-0 vector 0 x)))) + (cond + ((and (< v1-15 20) (let ((v1-17 (abs (-> s5-0 vector 0 y)))) + (< v1-17 10) + ) + ) + (when (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete)))) + (sound-stop (-> self sound-id)) + (sound-play-by-name + (static-sound-name "beam-connect") + (new-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (target-pos 0)) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (set! gp-0 #t) + ) + (else + (process-entity-status! self (entity-perm-status complete) #f) + ) + ) + ) + ) + (else + (process-entity-status! self (entity-perm-status complete) #f) + ) + ) + ) + ) + (let* ((s5-2 (position-in-front-of-camera! (new 'stack-no-clear 'vector) 40960.0 0.0)) + (v1-28 + (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (-> self next-reflector-trans) s5-2) 20480.0) + ) + (s4-4 (vector+! (new 'stack-no-clear 'vector) s5-2 v1-28)) + ) + (init-for-transform *identity-matrix*) + (let ((v1-30 (transform-float-point s4-4 (new 'stack 'vector4w)))) + (when (>= (-> v1-30 z) 0) + (set! (-> v1-30 x) (+ (/ (-> v1-30 x) 16) -2048)) + (set! (-> v1-30 y) (- (- 2048 (/ (-> v1-30 y) 16)))) + ) + (let ((f0-9 (- (atan (the float (-> v1-30 x)) (the float (- (-> v1-30 y))))))) + (set! (-> self gauge-rot) (deg-seek (-> self gauge-rot) f0-9 (* 131072.0 (-> *display* seconds-per-frame)))) + ) + ) + ) + (let ((f0-13 (-> self gauge-rot))) + (set! (-> *part-id-table* 823 init-specs 3 initial-valuef) (+ -8192.0 f0-13)) + (set! (-> *part-id-table* 823 init-specs 11 initial-valuef) f0-13) + (if gp-0 + (set! (-> *part-id-table* 823 init-specs 1 initial-valuef) 0.0) + (set! (-> *part-id-table* 823 init-specs 1 initial-valuef) 1.0) + ) + (set! (-> *part-id-table* 815 init-specs 3 initial-valuef) (- -2730.6667 f0-13)) + (set! (-> *part-id-table* 815 init-specs 11 initial-valuef) (- 5461.3335 f0-13)) + (set! (-> *part-id-table* 816 init-specs 3 initial-valuef) (- 2730.6667 f0-13)) + (set! (-> *part-id-table* 816 init-specs 11 initial-valuef) (- 10922.667 f0-13)) + (set! (-> *part-id-table* 817 init-specs 3 initial-valuef) (- 13653.333 f0-13)) + (set! (-> *part-id-table* 817 init-specs 11 initial-valuef) (- 21845.334 f0-13)) + (set! (-> *part-id-table* 818 init-specs 3 initial-valuef) (- 19114.666 f0-13)) + (set! (-> *part-id-table* 818 init-specs 11 initial-valuef) (- 27306.666 f0-13)) + (set! (-> *part-id-table* 819 init-specs 3 initial-valuef) (- 30037.334 f0-13)) + (set! (-> *part-id-table* 819 init-specs 11 initial-valuef) (- 38229.332 f0-13)) + (set! (-> *part-id-table* 820 init-specs 3 initial-valuef) (- 35498.668 f0-13)) + (set! (-> *part-id-table* 820 init-specs 11 initial-valuef) (- 43690.668 f0-13)) + (set! (-> *part-id-table* 821 init-specs 3 initial-valuef) (- 46421.332 f0-13)) + (set! (-> *part-id-table* 821 init-specs 11 initial-valuef) (- 54613.332 f0-13)) + (set! (-> *part-id-table* 822 init-specs 3 initial-valuef) (- 51882.668 f0-13)) + (set! (-> *part-id-table* 822 init-specs 11 initial-valuef) (- 60074.668 f0-13)) + (set! (-> *part-id-table* 811 init-specs 3 initial-valuef) (- f0-13)) + (set! (-> *part-id-table* 811 init-specs 11 initial-valuef) (- f0-13)) + (set! (-> *part-id-table* 812 init-specs 3 initial-valuef) (- 16384.0 f0-13)) + (set! (-> *part-id-table* 812 init-specs 11 initial-valuef) (- 16384.0 f0-13)) + (set! (-> *part-id-table* 813 init-specs 3 initial-valuef) (- 32768.0 f0-13)) + (set! (-> *part-id-table* 813 init-specs 11 initial-valuef) (- 32768.0 f0-13)) + (set! (-> *part-id-table* 814 init-specs 3 initial-valuef) (- 49152.0 f0-13)) + (set! (-> *part-id-table* 814 init-specs 11 initial-valuef) (- 49152.0 f0-13)) + ) + (spawn (-> self part) *zero-vector*) + (let ((s4-5 (new 'stack-no-clear 'vector)) + (s3-2 (new 'stack-no-clear 'vector)) + (s5-4 (new 'stack-no-clear 'vector)) + ) + (set! (-> s4-5 quad) (-> (camera-pos) quad)) + (vector-! s3-2 (-> self prev-reflector-trans) s4-5) + (vector-normalize! s3-2 1.0) + (vector+*! s5-4 s4-5 s3-2 20480.0) + (spawn (-> self part-aligned) s5-4) + (when gp-0 + (vector-! s3-2 (-> self next-reflector-trans) s4-5) + (vector-normalize! s3-2 1.0) + (vector+*! s5-4 s4-5 s3-2 20480.0) + (spawn (-> self part-aligned) s5-4) + ) + ) + (set! (-> self aligned?) gp-0) + gp-0 + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 825) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 4.5) + (sp-rnd-flt spt-scale-x (meters 1.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 32.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-vel-y (meters 0.010666667)) + (sp-flt spt-scalevel-x (meters -0.008333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.99999994) (degrees 1.9999999) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.17777778) + (sp-flt spt-fade-a -0.53333336) + (sp-flt spt-accel-y 0.68266666) + (sp-int spt-timer 165) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-z (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 2.3) 1.0) + (sp-end) + ) + ) + ) + +;; definition for function periscope-find-next +;; Used lq/sq +(defbehavior periscope-find-next periscope () + (let ((gp-0 (-> self link next))) + (let ((a0-0 (-> self link prev))) + (when a0-0 + (set! (-> self prev-reflector-trans quad) (-> a0-0 extra trans quad)) + (+! (-> self prev-reflector-trans y) (res-lump-float a0-0 'height-info)) + ) + ) + (cond + (gp-0 + (set! (-> self next-reflector-trans quad) (-> gp-0 extra trans quad)) + (let ((f0-3 (+ (-> self next-reflector-trans y) (res-lump-float gp-0 'height-info)))) + (set! (-> self next-reflector-trans y) f0-3) + f0-3 + ) + ) + (else + (let ((v1-9 (res-lump-struct (-> self entity) 'alt-vector structure)) + (v0-2 (the-as object (-> self next-reflector-trans))) + ) + (set! (-> (the-as vector v0-2) quad) (-> (the-as vector v1-9) quad)) + v0-2 + ) + ) + ) + ) + ) + +;; definition for function periscope-set-target-direction +(defbehavior periscope-set-target-direction periscope ((arg0 vector)) + (let ((f30-0 (vector-xz-length arg0))) + (set! (-> self target-turn) (atan (-> arg0 x) (-> arg0 z))) + (let ((f0-5 (atan (- (-> arg0 y)) f30-0))) + (set! (-> self target-tilt) f0-5) + f0-5 + ) + ) + ) + +;; definition for function periscope-find-aim-at-angles +;; Used lq/sq +(defbehavior periscope-find-aim-at-angles periscope () + (let ((a0-0 (-> self link next)) + (gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (when a0-0 + (set! (-> gp-0 quad) (-> a0-0 extra trans quad)) + (+! (-> gp-0 y) (res-lump-float a0-0 'height-info)) + (vector-! s5-0 gp-0 (-> self reflector-trans)) + (vector-normalize! s5-0 1.0) + (periscope-set-target-direction s5-0) + ) + ) + ) + +;; definition for function periscope-find-reflection-angles +;; Used lq/sq +(defbehavior periscope-find-reflection-angles periscope () + (let ((a0-0 (-> self link next)) + (s2-0 (-> self link prev)) + (s3-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (when (and s2-0 a0-0) + (set! (-> s3-0 quad) (-> a0-0 extra trans quad)) + (+! (-> s3-0 y) (res-lump-float a0-0 'height-info)) + (vector-! s5-0 s3-0 (-> self reflector-trans)) + (vector-normalize! s5-0 1.0) + (set! (-> s3-0 quad) (-> s2-0 extra trans quad)) + (+! (-> s3-0 y) (res-lump-float s2-0 'height-info)) + (vector-! gp-0 s3-0 (-> self reflector-trans)) + (vector-normalize! gp-0 1.0) + (vector+! s4-0 gp-0 s5-0) + (vector-normalize! s4-0 1.0) + (periscope-set-target-direction s4-0) + ) + ) + ) + +;; definition for function periscope-has-power-input? +(defbehavior periscope-has-power-input? periscope () + (let ((v1-1 (-> self link prev))) + (if v1-1 + (logtest? (-> v1-1 extra perm status) (entity-perm-status complete)) + ) + ) + ) + +;; definition for function periscope-draw-beam-impact +;; INFO: Return type mismatch int vs none. +(defbehavior periscope-draw-beam-impact periscope () + (when (periscope-has-power-input?) + (update! (-> self sound)) + (if (logtest? (-> self draw status) 8) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 825) + (-> self reflector-trans) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + 0 + (none) + ) + +;; definition for function periscope-draw-beam +;; INFO: Return type mismatch int vs none. +(defbehavior periscope-draw-beam periscope () + (if (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete))) + (draw-power-beam (-> self reflector-trans) (-> self next-reflector-trans)) + ) + 0 + (none) + ) + +;; definition for function periscope-update-joints +(defbehavior periscope-update-joints periscope () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 to) (the-as process 0.0)) + (set! (-> a1-0 from) (the-as process (-> self turn))) + (set! (-> a1-0 num-params) (the-as int 0.0)) + (set! (-> a1-0 message) (the-as symbol 1.0)) + (quaternion-zxy! (-> self root-override quat) (the-as vector a1-0)) + ) + (set! (-> self root-override trans y) (+ -184320.0 (-> self y-offset) (-> self base y))) + (let ((f0-10 (+ (- (+ (-> self base y) (-> self y-offset)) (-> self height)) (-> self y-offset-grips)))) + (set! (-> self grips transform trans y) f0-10) + f0-10 + ) + ) + +;; definition for function periscope-post +;; INFO: Return type mismatch int vs none. +(defbehavior periscope-post periscope () + (periscope-draw-beam) + (periscope-draw-beam-impact) + (periscope-update-joints) + (ja-post) + (dummy-47 (-> self root-override)) + 0 + (none) + ) + +;; definition for function periscope-test-task-complete? +(defbehavior periscope-test-task-complete? periscope () + (local-vars (sv-16 symbol)) + (set! sv-16 #t) + (apply-all + (-> self link) + (lambda ((arg0 entity-actor) (arg1 (pointer symbol))) + (the-as + object + (when (and (= (-> arg0 etype) periscope) (zero? (logand (-> arg0 extra perm status) (entity-perm-status complete)))) + (set! (-> arg1 0) #f) + #t + ) + ) + ) + (& sv-16) + ) + sv-16 + ) + +;; definition for function peri-beamcam-init-by-other +;; INFO: Return type mismatch object vs (pointer process). +(defun peri-beamcam-init-by-other ((arg0 string)) + (with-pp + (let ((gp-0 (entity-by-name "junglecam-1"))) + (the-as + (pointer process) + (cond + (gp-0 + (cond + ((name= arg0 "reflector-mirror-2") + (let ((s5-1 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-1 + (let ((t9-3 (method-of-type pov-camera activate))) + (t9-3 (the-as pov-camera s5-1) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-1 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "tower1" + 0 + #f + '((0 ambient camera "gamcam14")) + ) + (-> s5-1 ppointer) + ) + ) + ) + ((name= arg0 "periscope-11") + (let ((s5-2 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-2 + (let ((t9-7 (method-of-type pov-camera activate))) + (t9-7 (the-as pov-camera s5-2) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-2 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "tower2" + 0 + #f + '((0 ambient camera "gamcam15") (0 want-force-vis jungle #t) (0 want-force-vis village1 #t)) + ) + (-> s5-2 ppointer) + ) + ) + ) + ((name= arg0 "periscope-12") + (let ((s5-3 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-3 + (let ((t9-11 (method-of-type pov-camera activate))) + (t9-11 (the-as pov-camera s5-3) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-3 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "tower3" + 0 + #f + '((0 ambient camera "gamcam16")) + ) + (-> s5-3 ppointer) + ) + ) + ) + ((name= arg0 "periscope-13") + (let ((s5-4 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-4 + (let ((t9-15 (method-of-type pov-camera activate))) + (t9-15 (the-as pov-camera s5-4) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-4 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "tower4" + 0 + #f + '((0 ambient camera "gamcam17")) + ) + (-> s5-4 ppointer) + ) + ) + ) + ((name= arg0 "periscope-14") + (let ((s5-5 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-5 + (let ((t9-19 (method-of-type pov-camera activate))) + (t9-19 (the-as pov-camera s5-5) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-5 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "tower5" + 0 + #f + '((0 ambient camera "gamcam18") (0 want-force-vis jungle #t) (0 want-force-vis village1 #t)) + ) + (-> s5-5 ppointer) + ) + ) + ) + ((name= arg0 "periscope-15") + (let ((s5-6 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-6 + (let ((t9-23 (method-of-type pov-camera activate))) + (t9-23 (the-as pov-camera s5-6) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-6 + pov-camera-init-by-other + (-> gp-0 extra trans) + *junglecam-sg* + "beamcam" + 0 + #f + '((0 ambient camera "gamcam19") + (0 want-force-vis jungle #t) + (0 want-force-vis village1 #t) + (0 display-level village1 movie) + ) + ) + (-> s5-6 ppointer) + ) + ) + ) + (else + (format #t "ERROR: don't know which peri-beamcam to play for ~S~%" arg0) + ) + ) + ) + (else + (format #t "ERROR: couldn't find junglecam-1 to initialize peri-beamcam~%") + ) + ) + ) + ) + ) + ) + +;; definition for function periscope-debug-trans +;; INFO: Return type mismatch int vs none. +(defbehavior periscope-debug-trans periscope () + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate periscope-idle (periscope) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('activate) + (logclear! (-> self mask) (process-mask actor-pause)) + (go periscope-activate) + ) + ) + ) + :enter + (behavior () (clear-collide-with-as (-> self root-override)) (none)) + :exit + (behavior () + (restore-collide-with-as (-> self root-override)) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) + :trans + periscope-debug-trans + :code + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (set! (-> self raised?) #f) + (set! (-> self y-offset) 0.0) + (set! (-> self y-offset-grips) (+ -20480.0 (-> self height))) + (set! (-> self tilt) 16384.0) + (set! (-> self turn) (+ 18204.445 (-> self target-turn))) + (periscope-update-joints) + (ja-post) + (suspend) + (dummy-47 (-> self root-override)) + (logior! (-> self draw status) 2) + (while #t + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate periscope-activate (periscope) + :exit + (behavior () + (sound-stop (-> self rise-sound-id)) + (sound-play-by-name + (static-sound-name "eco-tower-stop") + (new-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self base)) + ) + (none) + ) + :trans + periscope-debug-trans + :code + (behavior () + (local-vars (v1-13 symbol)) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (link-to-next-and-prev-actor (-> self link)) + (periscope-find-next) + (periscope-find-reflection-angles) + (when (< 61440.0 (-> self height)) + (set! (-> self y-offset) (+ -61440.0 (-> self height))) + (set! (-> self turn) (+ 18204.445 (-> self target-turn))) + ) + (until (and v1-13 (= (-> self turn) (-> self target-turn)) (= (-> self tilt) (-> self target-tilt))) + (sound-play-by-name + (static-sound-name "eco-tower-rise") + (-> self rise-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self base)) + ) + (set! (-> self y-offset) + (seek (-> self y-offset) (-> self height) (* 16384.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self turn) + (seek (-> self turn) (-> self target-turn) (* 7281.778 (-> *display* seconds-per-frame))) + ) + (set! (-> self tilt) + (seek (-> self tilt) (-> self target-tilt) (* 7281.778 (-> *display* seconds-per-frame))) + ) + (set! (-> self raised?) (< (+ -12288.0 (-> self height)) (-> self y-offset))) + (periscope-update-joints) + (suspend) + (set! v1-13 (= (-> self y-offset) (-> self height))) + ) + (set! (-> self raised?) #t) + (go periscope-wait-for-power-input) + (none) + ) + :post + periscope-post + ) + +;; failed to figure out what this is: +(defstate periscope-wait-for-power-input (periscope) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self raised?) #t) + (let ((f30-0 (+ -20480.0 (-> self height)))) + (until (= (-> self y-offset-grips) f30-0) + (set! (-> self y-offset-grips) + (seek (-> self y-offset-grips) f30-0 (* 16384.0 (-> *display* seconds-per-frame))) + ) + (periscope-update-joints) + (suspend) + ) + ) + (dummy-47 (-> self root-override)) + (set! (-> self y-offset) (-> self height)) + (while #t + (if (periscope-has-power-input?) + (go periscope-wait-for-player) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior periscope) ja-post) + ) + +;; definition for function target-close-to-point? +;; INFO: Return type mismatch basic vs symbol. +(defun target-close-to-point? ((arg0 vector) (arg1 float)) + (the-as symbol (and *target* (>= arg1 (vector-vector-distance arg0 (-> *target* control trans))))) + ) + +;; failed to figure out what this is: +(defstate periscope-wait-for-player (periscope) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (when (and *target* (not (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + ) + ) + (when ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint 1) + ) + (let ((v0-0 (the-as object #t))) + (set! (-> self player-touching-grips?) (the-as symbol v0-0)) + v0-0 + ) + ) + ) + ) + (('change-mode) + (level-hint-spawn + (game-text-id jungle-mirrors-tutorial) + "sksp0049" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (go periscope-player-control) + ) + ) + ) + :exit + (behavior () (sound-stop (-> self grips-sound-id)) (none)) + :code + (behavior () + (hide-hud) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self raised?) #t) + (set! (-> self grips-moving?) #t) + (let ((f30-0 8192.0) + (gp-0 (res-lump-value (-> self entity) 'text-id uint128)) + ) + (until (= (-> self y-offset-grips) f30-0) + (if (nonzero? gp-0) + (level-hint-spawn (game-text-id zero) (the-as string #f) (-> self entity) *entity-pool* (game-task none)) + ) + (sound-play-by-name + (static-sound-name "site-moves") + (-> self grips-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self grips transform)) + ) + (set! (-> self y-offset-grips) + (seek (-> self y-offset-grips) f30-0 (* 16384.0 (-> *display* seconds-per-frame))) + ) + (periscope-update-joints) + (suspend) + ) + ) + (set! (-> self grips-moving?) #f) + (set! (-> self player-touching-grips?) #f) + (let ((gp-1 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (while #t + (set! (-> s5-0 quad) (-> self node-list data 4 bone transform vector 3 quad)) + (let ((a0-10 s5-0) + (f30-1 81920.0) + ) + (when (and *target* (>= f30-1 (vector-vector-distance a0-10 (-> *target* control trans)))) + (when (logtest? (-> *target* control status) 1) + (let ((f0-7 (fmax 4096.0 (fmin 12288.0 (+ (- 5120.0 (-> self base y)) (-> *target* control trans y)))))) + (set! (-> self y-offset-grips) + (seek (-> self y-offset-grips) f0-7 (* 16384.0 (-> *display* seconds-per-frame))) + ) + ) + ) + (vector-! gp-1 (target-pos 0) (-> self base)) + (vector-z-quaternion! s4-0 (-> self grips transform quat)) + (quaternion-rotate-y-to-vector! + (-> self grips transform quat) + (-> self grips transform quat) + (the-as quaternion gp-1) + (* 27306.666 (-> *display* seconds-per-frame)) + ) + (vector-z-quaternion! s3-0 (-> self grips transform quat)) + (set! (-> self grips-moving?) (< (vector-dot s4-0 s3-0) (cos 182.04445))) + (periscope-update-joints) + (dummy-47 (-> self root-override)) + (when (and (-> self player-touching-grips?) (not (level-hint-displayed?))) + (set! (-> self player-touching-grips?) #f) + (hide-hud) + (level-hint-surpress!) + (kill-current-level-hint '() '(sidekick voicebox) 'exit) + (when (and (hud-hidden?) (can-grab-display? (the-as process-taskable self))) + (let ((s2-2 + (new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning)) + ) + ) + (let ((v1-43 s2-2)) + (set! (-> v1-43 width) (the float 440)) + ) + (let ((v1-44 s2-2)) + (set! (-> v1-44 height) (the float 80)) + ) + (set! (-> s2-2 flags) (font-flags shadow kerning large)) + (print-game-text (lookup-text! *common-text* (game-text-id press-to-use) #f) s2-2 #f 128 22) + ) + (when (cpad-pressed? 0 circle) + (set! (-> self grips-moving?) #f) + (while #t + (send-event *target* 'change-mode 'periscope self) + (hide-hud) + (suspend) + (hide-hud) + (suspend) + ) + ) + ) + ) + ) + ) + (if (not (periscope-has-power-input?)) + (go periscope-wait-for-power-input) + ) + (suspend) + ) + ) + (none) + ) + :post + (behavior () + (if (-> self grips-moving?) + (sound-play-by-name + (static-sound-name "site-moves") + (-> self grips-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self grips transform)) + ) + (sound-stop (-> self grips-sound-id)) + ) + (periscope-draw-beam-impact) + (ja-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate periscope-player-control (periscope) + :exit + (behavior () + (set! (-> self reflector 0 draw status) (logand -3 (-> self reflector 0 draw status))) + (periscope-find-reflection-angles) + (set! (-> self turn) (-> self target-turn)) + (set! (-> self tilt) (-> self target-tilt)) + (none) + ) + :trans + (behavior () (hide-hud) (none)) + :code + (behavior () + (set! (-> self lock-time) (the-as uint (-> *display* base-frame-counter))) + (link-to-next-and-prev-actor (-> self link)) + (periscope-find-next) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'activate) + (let ((t9-2 send-event-function) + (v1-5 (-> self link)) + ) + (t9-2 (the-as process-tree (and (-> v1-5 next) (-> v1-5 next extra process))) a1-0) + ) + ) + (periscope-find-aim-at-angles) + (set! (-> self turn) (-> self target-turn)) + (set! (-> self tilt) (-> self target-tilt)) + (let ((v1-10 (res-lump-data (-> self entity) 'rotoffset (pointer float)))) + (cond + (v1-10 + (+! (-> self turn) (-> v1-10 0)) + (+! (-> self tilt) (-> v1-10 1)) + ) + (else + (set! (-> self turn) (+ 910.2222 (-> self turn))) + ) + ) + ) + (case (get-aspect-ratio) + (('aspect16x9) + (set! (-> *part-id-table* 823 init-specs 12 initial-valuef) 5120.0) + (set! (-> *part-id-table* 815 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 816 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 817 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 818 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 819 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 820 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 821 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 822 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 811 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 812 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 813 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 814 init-specs 12 initial-valuef) 3276.8) + (set! (-> *part-id-table* 803 init-specs 2 initial-valuef) -10854.4) + (set! (-> *part-id-table* 803 init-specs 3 initial-valuef) 6553.6) + (set! (-> *part-id-table* 804 init-specs 2 initial-valuef) 4546.56) + (set! (-> *part-id-table* 804 init-specs 3 initial-valuef) 6553.6) + (set! (-> *part-id-table* 805 init-specs 2 initial-valuef) -4546.56) + (set! (-> *part-id-table* 805 init-specs 3 initial-valuef) 6553.6) + (set! (-> *part-id-table* 806 init-specs 2 initial-valuef) 10854.4) + (set! (-> *part-id-table* 806 init-specs 3 initial-valuef) 6553.6) + (set! (-> *part-id-table* 807 init-specs 2 initial-valuef) -10854.4) + (set! (-> *part-id-table* 807 init-specs 3 initial-valuef) -6553.6) + (set! (-> *part-id-table* 808 init-specs 2 initial-valuef) 4546.56) + (set! (-> *part-id-table* 808 init-specs 3 initial-valuef) -6553.6) + (set! (-> *part-id-table* 809 init-specs 2 initial-valuef) -4546.56) + (set! (-> *part-id-table* 809 init-specs 3 initial-valuef) -6553.6) + (set! (-> *part-id-table* 810 init-specs 2 initial-valuef) 10854.4) + (set! (-> *part-id-table* 810 init-specs 3 initial-valuef) -6553.6) + ) + (('aspect4x3) + (set! (-> *part-id-table* 823 init-specs 12 initial-valuef) 5939.2) + (set! (-> *part-id-table* 815 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 816 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 817 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 818 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 819 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 820 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 821 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 822 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 811 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 812 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 813 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 814 init-specs 12 initial-valuef) 4096.0) + (set! (-> *part-id-table* 803 init-specs 2 initial-valuef) -11878.4) + (set! (-> *part-id-table* 803 init-specs 3 initial-valuef) 8601.6) + (set! (-> *part-id-table* 804 init-specs 2 initial-valuef) 4546.56) + (set! (-> *part-id-table* 804 init-specs 3 initial-valuef) 8601.6) + (set! (-> *part-id-table* 805 init-specs 2 initial-valuef) -4546.56) + (set! (-> *part-id-table* 805 init-specs 3 initial-valuef) 8601.6) + (set! (-> *part-id-table* 806 init-specs 2 initial-valuef) 11878.4) + (set! (-> *part-id-table* 806 init-specs 3 initial-valuef) 8601.6) + (set! (-> *part-id-table* 807 init-specs 2 initial-valuef) -11878.4) + (set! (-> *part-id-table* 807 init-specs 3 initial-valuef) -8601.6) + (set! (-> *part-id-table* 808 init-specs 2 initial-valuef) 4546.56) + (set! (-> *part-id-table* 808 init-specs 3 initial-valuef) -8601.6) + (set! (-> *part-id-table* 809 init-specs 2 initial-valuef) -4546.56) + (set! (-> *part-id-table* 809 init-specs 3 initial-valuef) -8601.6) + (set! (-> *part-id-table* 810 init-specs 2 initial-valuef) 11878.4) + (set! (-> *part-id-table* 810 init-specs 3 initial-valuef) -8601.6) + ) + ) + (let* ((gp-0 (-> self old-camera-matrix)) + (a2-1 (matrix-local->world #f #f)) + (v1-191 (-> a2-1 vector 0 quad)) + (a0-8 (-> a2-1 vector 1 quad)) + (a1-3 (-> a2-1 vector 2 quad)) + (a2-2 (-> a2-1 vector 3 quad)) + ) + (set! (-> gp-0 vector 0 quad) v1-191) + (set! (-> gp-0 vector 1 quad) a0-8) + (set! (-> gp-0 vector 2 quad) a1-3) + (set! (-> gp-0 vector 3 quad) a2-2) + ) + (send-event *camera* 'change-state cam-periscope 0) + (logior! (-> self reflector 0 draw status) 2) + (suspend) + (while #t + (if (not (-> self aligned?)) + (set! (-> self lock-time) (the-as uint (-> *display* base-frame-counter))) + ) + (periscope-crosshair) + (when (or + (cpad-pressed? 0 triangle x) + (and (-> self aligned?) (>= (- (-> *display* base-frame-counter) (the-as int (-> self lock-time))) 900)) + ) + (sound-stop (-> self sound-id)) + (if (periscope-test-task-complete?) + (close-specific-task! (game-task jungle-lurkerm) (task-status need-reminder)) + ) + (while #t + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 0) + (set! (-> a1-6 message) 'end-mode) + (when (send-event-function *target* a1-6) + (cond + ((and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete))) + (let ((gp-1 (ppointer->handle (peri-beamcam-init-by-other (the-as string (-> self name)))))) + (suspend) + (while (and *target* (= (-> *target* next-state name) 'target-periscope)) + (periscope-crosshair) + (suspend) + ) + (set! (-> self reflector 0 draw status) (logand -3 (-> self reflector 0 draw status))) + (periscope-find-reflection-angles) + (set! (-> self turn) (-> self target-turn)) + (set! (-> self tilt) (-> self target-tilt)) + (set! *camera-init-mat* (-> self old-camera-matrix)) + (send-event *camera* 'change-state *camera-base-mode* 0) + (set! *camera-init-mat* #f) + (while (handle->process (the-as handle gp-1)) + (suspend) + ) + ) + (let ((gp-2 (get-process *default-dead-pool* process #x4000))) + (when gp-2 + (let ((t9-18 (method-of-type process activate))) + (t9-18 gp-2 self 'process (the-as pointer #x70004000)) + ) + (run-next-time-in-process + gp-2 + (lambda ((arg0 string)) + (while (or + (-> *setting-control* current ambient) + (-> *setting-control* current movie) + (-> *setting-control* current hint) + ) + (suspend) + ) + (cond + ((name= arg0 "periscope-11") + (level-hint-spawn + (game-text-id jungle-mirrors-follow-the-beam) + "sksp0053" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((name= arg0 "periscope-12") + (level-hint-spawn + (game-text-id jungle-mirrors-go-to-the-next-tower) + "sksp0052" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((name= arg0 "periscope-15") + (level-hint-spawn + (game-text-id jungle-mirrors-completion-talk-to-mayor) + "sksp0018" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (none) + ) + (-> self name) + ) + (-> gp-2 ppointer) + ) + ) + ) + (else + (set! *camera-init-mat* (-> self old-camera-matrix)) + (send-event *camera* 'change-state *camera-base-mode* 0) + (set! *camera-init-mat* #f) + ) + ) + (if (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete))) + (go periscope-power-on) + (go periscope-wait-for-player) + ) + ) + ) + (suspend) + ) + ) + (suspend) + ) + (none) + ) + :post + (behavior () (periscope-draw-beam) (periscope-update-joints) (ja-post) (none)) + ) + +;; failed to figure out what this is: +(defstate periscope-power-on (periscope) + :trans + periscope-debug-trans + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self y-offset) (-> self height)) + (link-to-next-and-prev-actor (-> self link)) + (periscope-find-reflection-angles) + (set! (-> self turn) (-> self target-turn)) + (set! (-> self tilt) (-> self target-tilt)) + (let ((f30-0 (+ -20480.0 (-> self height)))) + (until (= (-> self y-offset-grips) f30-0) + (set! (-> self y-offset-grips) + (seek (-> self y-offset-grips) f30-0 (* 16384.0 (-> *display* seconds-per-frame))) + ) + (periscope-update-joints) + (sound-play-by-name + (static-sound-name "site-moves") + (-> self grips-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self grips transform)) + ) + (suspend) + ) + ) + (sound-stop (-> self grips-sound-id)) + (ja-post) + (while #t + (suspend) + ) + (none) + ) + :post + periscope-post + ) + +;; definition for method 11 of type periscope +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! periscope ((obj periscope) (arg0 entity-actor)) + (stack-size-set! (-> obj main-thread) 512) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 96256.0 0.0 98304.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (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) 3) + (set-vector! (-> s2-0 local-sphere) 0.0 96256.0 0.0 98304.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 4) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 9216.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 0) + (set! (-> s2-2 transform-index) 4) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 11264.0) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set! (-> obj height) (res-lump-float (-> obj entity) 'height-info)) + (set! (-> obj y-offset) (-> obj height)) + (set! (-> obj y-offset-grips) (+ -20480.0 (-> obj height))) + (set! (-> obj base quad) (-> obj root-override trans quad)) + (set! (-> obj reflector-trans quad) (-> obj base quad)) + (+! (-> obj reflector-trans y) (-> obj height)) + (let ((s5-1 (get-process *default-dead-pool* reflector #x4000))) + (set! (-> obj reflector) + (the-as (pointer reflector) (when s5-1 + (let ((t9-14 (method-of-type reflector activate))) + (t9-14 (the-as reflector s5-1) obj 'reflector (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 reflector-init-by-other (-> obj reflector-trans)) + (-> s5-1 ppointer) + ) + ) + ) + ) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (periscope-find-next) + (initialize-skeleton obj *periscope-base-sg* '()) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 176) obj)) + (set! (-> obj part-aligned) (create-launch-control (-> *part-group-id-table* 689) obj)) + (set! (-> obj grips) (new 'process 'joint-mod-set-world obj 4 #t)) + (transformq-copy! (-> obj grips transform) (the-as transformq (-> obj root-override trans))) + (periscope-find-reflection-angles) + (set! (-> obj turn) (-> obj target-turn)) + (set! (-> obj tilt) (-> obj target-tilt)) + (periscope-update-joints) + (set! (-> obj grips-moving?) #f) + (set! (-> obj sound-id) (new-sound-id)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "eco-beam") + :volume #x400 + :fo-max 50 + ) + (-> obj reflector-trans) + ) + ) + (set! (-> obj rise-sound-id) (new-sound-id)) + (set! (-> obj grips-sound-id) (new-sound-id)) + (set! (-> obj root-override nav-radius) 8192.0) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (cond + ((and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go periscope-power-on) + ) + ((periscope-has-power-input?) + (set! (-> obj y-offset-grips) 8192.0) + (go periscope-wait-for-player) + ) + (else + (go periscope-idle) + ) + ) + (none) + ) + +;; definition for function reflector-origin-update +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior reflector-origin-update reflector-origin ((arg0 entity-actor)) + (when arg0 + (set! (-> self next-reflector-trans quad) (-> arg0 extra trans quad)) + (+! (-> self next-reflector-trans y) (res-lump-float arg0 'height-info)) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate reflector-origin-idle (reflector-origin) + :code + (behavior () + (reflector-origin-update (-> self blocker)) + (while (zero? (logand (-> self blocker extra perm status) (entity-perm-status complete))) + (suspend) + ) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'activate) + (let ((t9-1 send-event-function) + (v1-6 (-> self link)) + ) + (t9-1 (the-as process-tree (and (-> v1-6 next) (-> v1-6 next extra process))) a1-0) + ) + ) + (reflector-origin-update (-> self link next)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector-! gp-0 (-> self next-reflector-trans) (-> self reflector-trans)) + (vector-normalize! gp-0 819200.0) + (vector+! (-> self next-reflector-trans) (-> self reflector-trans) gp-0) + ) + (let ((gp-1 #f)) + (until gp-1 + (let* ((v1-13 (-> self link)) + (s5-0 (and (-> v1-13 next) (-> v1-13 next extra process))) + (v1-17 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) periscope)) + s5-0 + ) + ) + ) + (if v1-17 + (set! gp-1 (-> (the-as periscope v1-17) raised?)) + ) + ) + (suspend) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (reflector-origin-update (-> self link next)) + (while #t + (suspend) + ) + (none) + ) + :post + (behavior () (draw-power-beam (-> self reflector-trans) (-> self next-reflector-trans)) (none)) + ) + +;; definition for method 11 of type reflector-origin +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! reflector-origin ((obj reflector-origin) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj blocker) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj reflector-trans quad) (-> obj root trans quad)) + (go reflector-origin-idle) + (none) + ) + +;; failed to figure out what this is: +(defstate reflector-mirror-idle (reflector-mirror) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (sound-play-by-name (static-sound-name "mirror-smash") (new-sound-id) 1024 0 0 1 #t) + enter-state + (go reflector-mirror-broken) + ) + ) + ) + :exit + (behavior () (stop! (-> self sound)) (none)) + :code + (behavior () + (let ((gp-0 (new-stack-vector0))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (set! (-> gp-0 y) (+ 49152.0 (-> gp-0 y))) + (while #t + (draw-power-beam gp-0 (-> self beam-end)) + (update! (-> self sound)) + (when (logtest? (-> self draw status) 8) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 825) + (-> self beam-end) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (when (and *target* (>= 24576.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (start-hint-timer (game-text-id jungle-mirrors-break-the-mirror-jak)) + (level-hint-spawn + (game-text-id jungle-mirrors-break-the-mirror-jak) + "sksp0050" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior reflector-mirror) ja-post) + ) + +;; failed to figure out what this is: +(defstate reflector-mirror-broken (reflector-mirror) + :code + (behavior () + (local-vars (a0-0 none)) + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (ja-post) + (let ((s5-0 (entity-actor-count (-> self entity) 'alt-actor))) + (dotimes (s4-0 s5-0) + (while (let ((s3-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> s3-0 from) self) + (set! (-> s3-0 num-params) 0) + (set! (-> s3-0 message) 'stop) + (let ((s2-0 send-event-function) + (v1-3 (entity-actor-lookup (-> self entity) 'alt-actor s4-0)) + ) + (not (s2-0 + (if v1-3 + (-> v1-3 extra process) + ) + s3-0 + ) + ) + ) + ) + (suspend) + ) + ) + ) + (when (not a0-0) + (ambient-hint-spawn "gamcam21" (the-as vector #f) *entity-pool* 'camera) + (let* ((gp-1 (get-process *default-dead-pool* manipy #x4000)) + (v1-11 (when gp-1 + (let ((t9-8 (method-of-type manipy activate))) + (t9-8 (the-as manipy gp-1) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + manipy-init + (-> self root-override trans) + (-> self entity) + *reflector-mirror-break-sg* + #f + ) + (-> gp-1 ppointer) + ) + ) + ) + (send-event (ppointer->process v1-11) 'anim-mode 'play1) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-2) 150) + (suspend) + ) + ) + (process-grab? *target*) + (while (or (-> self child) (-> *setting-control* current ambient)) + (suspend) + ) + (process-release? *target*) + (peri-beamcam-init-by-other (the-as string (-> self name))) + (process-entity-status! self (entity-perm-status complete) #t) + (close-specific-task! (game-task jungle-lurkerm) (task-status need-reminder-a)) + (while (-> self child) + (suspend) + ) + ) + (logior! (-> self mask) (process-mask actor-pause)) + (while #t + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type reflector-mirror +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! reflector-mirror ((obj reflector-mirror) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 24576.0 0.0 49152.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 1) + (set-vector! (-> s2-0 local-sphere) 0.0 6144.0 0.0 6963.2) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 1) + (set-vector! (-> s2-1 local-sphere) 0.0 18432.0 0.0 6963.2) + (append-prim s3-0 s2-1) + ) + (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) 1) + (set-vector! (-> s2-2 local-sphere) 0.0 30720.0 0.0 8192.0) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (initialize-skeleton obj *reflector-mirror-sg* '()) + (set-vector! (-> obj beam-end) 1805721.6 167936.0 -932659.2 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 "eco-beam") + :volume #x400 + :fo-max 50 + ) + (-> obj beam-end) + ) + ) + (cond + ((and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + enter-state + #t + (go reflector-mirror-broken) + ) + (else + (go reflector-mirror-idle) + ) + ) + (none) + ) + +;; definition for function draw-power-beam +;; INFO: Return type mismatch int vs none. +(defun draw-power-beam ((arg0 vector) (arg1 vector)) + (when (line-in-view-frustum? arg0 arg1) + (let ((s4-1 (vector-! (new 'stack-no-clear 'vector) arg1 arg0))) + (vector-length s4-1) + (let ((t2-0 (new 'stack-no-clear 'collide-mesh-cache-tri))) + 0.0 + (if (>= (dummy-10 *collide-cache* arg0 s4-1 6144.0 16 (the-as process #f) (the-as collide-tri-result t2-0) 1) 0.0) + (send-event *target* 'get-pickup 3 5.0) + ) + ) + ) + (if (and + (< 4096.0 (vector-vector-distance (camera-pos) arg0)) + (< 4096.0 (vector-vector-distance (camera-pos) arg1)) + ) + (draw-eco-beam arg0 arg1) + ) + ) + 0 + (none) + ) diff --git a/test/decompiler/reference/levels/maincave/dark-crystal_REF.gc b/test/decompiler/reference/levels/maincave/dark-crystal_REF.gc new file mode 100644 index 0000000000..62e410a0d0 --- /dev/null +++ b/test/decompiler/reference/levels/maincave/dark-crystal_REF.gc @@ -0,0 +1,782 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type dark-crystal +(deftype dark-crystal (process-drawable) + ((root-override collide-shape :offset 112) + (crystal-num int32 :offset-assert 176) + (underwater? symbol :offset-assert 180) + (explode-danger-radius float :offset-assert 184) + (lit-color-mult vector :inline :offset-assert 192) + (lit-color-emissive vector :inline :offset-assert 208) + (unlit-color-mult vector :inline :offset-assert 224) + (unlit-color-emissive vector :inline :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 22 + :size-assert #x100 + :flag-assert #x1600900100 + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) symbol 21) + ) + ) + +;; definition for method 3 of type dark-crystal +(defmethod inspect dark-crystal ((obj dark-crystal)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tcrystal-num: ~D~%" (-> obj crystal-num)) + (format #t "~T~Tunderwater?: ~A~%" (-> obj underwater?)) + (format #t "~T~Texplode-danger-radius: ~f~%" (-> obj explode-danger-radius)) + (format #t "~T~Tlit-color-mult: #~%" (-> obj lit-color-mult)) + (format #t "~T~Tlit-color-emissive: #~%" (-> obj lit-color-emissive)) + (format #t "~T~Tunlit-color-mult: #~%" (-> obj unlit-color-mult)) + (format #t "~T~Tunlit-color-emissive: #~%" (-> obj unlit-color-emissive)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *dark-crystal-sg* dark-crystal + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 3.4 0 3.8) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *dark-crystal-explode-sg* dark-crystal + 3 + -1 + ((4 (meters 999999))) + :bounds (static-spherem 0 -15 0 50) + :longest-edge (meters 0) + ) + +;; definition for symbol *dark-crystal-flash-delays*, type (array int32) +(define + *dark-crystal-flash-delays* + (the-as (array int32) + (new 'static 'boxed-array :type int32 :length 9 :allocated-length 9 #xb4 #x96 #x78 90 60 30 15 7 3) + ) + ) + +;; definition for symbol *dark-crystal-exploder-params*, type joint-exploder-static-params +(define + *dark-crystal-exploder-params* + (new 'static 'joint-exploder-static-params + :joints + (new + 'static + 'boxed-array + :type joint-exploder-static-joint-params :length 15 :allocated-length 15 + (new 'static 'joint-exploder-static-joint-params :joint-index 3 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 17 :parent-joint-index -1) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 322) + (new 'static 'sparticle-launch-group + :length 69 + :duration #x4b + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-dark-crystal-gnd-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 69 + (sp-item 2153 :fade-after (meters 100.0) :period 600 :length 5 :binding 296) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2154 :period 600 :length 5) + (sp-item 2155 :period 600 :length 40) + (sp-item 2156 :period 600 :length 20) + (sp-item 2157 :period 600 :length 20) + ) + :bounds (new 'static 'sphere :w 65536.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2153) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-flt spt-scale-x (meters 0.1)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.026666667) 1.0) + (sp-flt spt-accel-y -1.3653333) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 240) + (sp-cpuinfo-flags bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2155) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 24.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.16) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 89 1) + (sp-launcher-by-id spt-next-launcher 2158) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2158) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.0666667) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2157) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 12.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-flt spt-scale-x (meters 0.3)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 12.0)) + (sp-rnd-flt spt-r 64.0 192.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.04)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2154) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 2.0)) + (sp-flt spt-scale-x (meters 24.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2156) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (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-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 323) (new 'static 'sparticle-launch-group + :length 6 + :duration #x4b + :linger-duration #x2ee0 + :flags (sp-group-flag use-local-clock) + :name "group-dark-crystal-water-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 6 + (sp-item 2159 :period 600 :length 5) + (sp-item 2160 :period 600 :length 40) + (sp-item 2161 :period 600 :length 20) + (sp-item 2162 :period 600 :length 20) + (sp-item 2163 :period 600 :length 75) + (sp-item 2164 :period 600 :length 75) + ) + :bounds (new 'static 'sphere :w 65536.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2160) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 24.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.16) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 89 1) + (sp-launcher-by-id spt-next-launcher 2158) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2162) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 12.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-flt spt-scale-x (meters 0.3)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 12.0)) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.04)) + (sp-flt spt-fade-r -1.0666667) + (sp-flt spt-fade-g -2.1333334) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2159) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 2.0)) + (sp-flt spt-scale-x (meters 24.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-g -2.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2161) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 26 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (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-rnd-flt spt-r 128.0 96.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 32.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.2) + (sp-flt spt-fade-g -0.2) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2163) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-x (meters -4.0) (meters 8.0) 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 6.0) 1.0) + (sp-rnd-flt spt-z -16384.0 32768.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.15) (meters 0.05) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.125) (meters 0.025) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.006666667) 1.0) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 12000) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-flt spt-userdata 143360.0) + (sp-func spt-func 'check-water-level-above-and-die) + (sp-int-plain-rnd spt-next-time 30 29 1) + (sp-launcher-by-id spt-next-launcher 2165) + (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* 2165) + (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* 2164) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 4.0) + (sp-rnd-flt spt-x (meters -4.0) (meters 8.0) 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 6.0) 1.0) + (sp-rnd-flt spt-z -16384.0 32768.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.15) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.006666667) 1.0) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 12000) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-flt spt-userdata 143360.0) + (sp-func spt-func 'check-water-level-above-and-die) + (sp-int-plain-rnd spt-next-time 30 29 1) + (sp-launcher-by-id spt-next-launcher 2165) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(defstate dark-crystal-idle (dark-crystal) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (if (= (-> arg0 type) target) + (level-hint-spawn + (game-text-id dark-crystal-run-away) + "sksp0334" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (close-specific-task! (game-task cave-dark-crystals) (task-status need-hint)) + (go dark-crystal-activate) + ) + ) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate dark-crystal-activate (dark-crystal) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (dotimes (gp-0 (-> *dark-crystal-flash-delays* length)) + (sound-play-by-name (static-sound-name "warning") (new-sound-id) 1024 0 0 1 #t) + (set! (-> self draw color-mult quad) (-> self lit-color-mult quad)) + (set! (-> self draw color-emissive quad) (-> self lit-color-emissive quad)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (suspend) + ) + (set! (-> self draw color-mult quad) (-> self unlit-color-mult quad)) + (set! (-> self draw color-emissive quad) (-> self unlit-color-emissive quad)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((s5-1 (-> *dark-crystal-flash-delays* gp-0))) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) s5-1) + (suspend) + ) + ) + ) + (go dark-crystal-explode) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate dark-crystal-explode (dark-crystal) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (logclear! (-> self mask) (process-mask actor-pause)) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (new 'stack 'joint-exploder-tuning 0))) + (when (-> self underwater?) + (set! (-> gp-0 duration) (the-as uint 1200)) + (set! (-> gp-0 gravity) -20480.0) + (set! (-> gp-0 rot-speed) 4.2) + (set-vector! (-> gp-0 fountain-rand-transv-lo) -40960.0 20480.0 -40960.0 1.0) + (set-vector! (-> gp-0 fountain-rand-transv-hi) 40960.0 49152.0 40960.0 1.0) + ) + (let ((s5-0 (get-process *default-dead-pool* joint-exploder #x4000))) + (when s5-0 + (let ((t9-3 (method-of-type joint-exploder activate))) + (t9-3 (the-as joint-exploder s5-0) self 'joint-exploder (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + joint-exploder-init-by-other + *dark-crystal-explode-sg* + 5 + gp-0 + *dark-crystal-exploder-params* + ) + (-> s5-0 ppointer) + ) + ) + ) + (activate! *camera-smush-control* 819.2 37 210 1.0 0.995) + (let ((gp-1 (dummy-21 self))) + (suspend) + (ja-channel-set! 0) + (ja-post) + (logior! (-> self draw status) 2) + (dummy-20 self) + (if (-> self underwater?) + (sound-play-by-name (static-sound-name "water-explosion") (new-sound-id) 1024 0 0 1 #t) + (sound-play-by-name (static-sound-name "crystal-explode") (new-sound-id) 1024 0 0 1 #t) + ) + (let ((s5-3 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-3 + (let ((t9-15 (method-of-type part-tracker activate))) + (t9-15 (the-as part-tracker s5-3) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-3 + part-tracker-init + (if (-> self underwater?) + (-> *part-group-id-table* 323) + (-> *part-group-id-table* 322) + ) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> s5-3 ppointer) + ) + ) + (let ((s5-4 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s5-4) 75) + (suspend) + ) + ) + (if gp-1 + (go dark-crystal-spawn-fuel-cell) + ) + ) + (dummy-18 self) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate dark-crystal-spawn-fuel-cell (dark-crystal) + :event + (the-as + (function process int symbol event-message-block object :behavior dark-crystal) + process-drawable-fuel-cell-handler + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (clear-collide-with-as (-> self root-override)) + (level-hint-spawn + (game-text-id dark-crystal-last-one) + "sksp0327" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (ja-channel-set! 0) + (ja-post) + (logior! (-> self draw status) 2) + (if (not (task-complete? *game-info* (-> self entity extra perm task))) + (birth-pickup-at-point + (-> self root-override trans) + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #t + self + (the-as fact-info #f) + ) + ) + (suspend) + (until (not (-> self child)) + (suspend) + ) + (aybabtu 2) + (dummy-18 self) + (none) + ) + ) + +;; definition for method 20 of type dark-crystal +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod dummy-20 dark-crystal ((obj dark-crystal)) + (when *target* + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> obj root-override trans quad)) + (set! (-> s5-0 y) (+ 6144.0 (-> s5-0 y))) + (set! (-> s3-0 quad) (-> (target-pos 0) quad)) + (set! (-> s3-0 y) (+ 6144.0 (-> s3-0 y))) + (when (>= (-> obj explode-danger-radius) (vector-vector-distance s5-0 s3-0)) + (vector-! s4-0 s3-0 s5-0) + (let ((t2-0 (new 'stack-no-clear 'collide-tri-result))) + (if (< (dummy-10 *collide-cache* s5-0 s4-0 819.2 1 obj t2-0 1) 0.0) + (send-event *target* 'attack #f (new 'static 'attack-info)) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for method 21 of type dark-crystal +(defmethod dummy-21 dark-crystal ((obj dark-crystal)) + (let ((s5-0 #f)) + (when (nonzero? (-> obj crystal-num)) + (let* ((s4-0 (get-task-control (game-task cave-dark-crystals))) + (s3-0 (logior (get-reminder s4-0 3) (ash 1 (-> obj crystal-num)))) + ) + (save-reminder s4-0 s3-0 3) + (when (= s3-0 62) + (set! s5-0 #t) + (process-entity-status! obj (entity-perm-status complete) #t) + ) + ) + ) + s5-0 + ) + ) + +;; definition for method 11 of type dark-crystal +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! dark-crystal ((obj dark-crystal) (arg0 entity-actor)) + (set-vector! (-> obj unlit-color-mult) 0.5 0.5 0.5 1.0) + (set-vector! (-> obj unlit-color-emissive) 0.0 0.0 0.0 0.0) + (set-vector! (-> obj lit-color-mult) 1.0 1.0 1.0 1.0) + (set-vector! (-> obj lit-color-emissive) 1.0 1.0 1.0 0.0) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-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 6963.2 0.0 15564.8) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *dark-crystal-sg* '()) + (set! (-> obj mask) (logior (process-mask attackable) (-> obj mask))) + (set! (-> obj draw color-mult quad) (-> obj unlit-color-mult quad)) + (set! (-> obj draw color-emissive quad) (-> obj unlit-color-emissive quad)) + (set! (-> obj underwater?) (= (res-lump-value arg0 'mode uint128) 1)) + (set! (-> obj explode-danger-radius) (res-lump-float arg0 'extra-radius :default 28672.0)) + (set! (-> obj crystal-num) (res-lump-value arg0 'extra-id int)) + (set-vector! (-> obj root-override scale) 2.0 2.0 2.0 1.0) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go dark-crystal-spawn-fuel-cell) + (go dark-crystal-idle) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/maincave/driller-lurker_REF.gc b/test/decompiler/reference/levels/maincave/driller-lurker_REF.gc new file mode 100644 index 0000000000..0270c05778 --- /dev/null +++ b/test/decompiler/reference/levels/maincave/driller-lurker_REF.gc @@ -0,0 +1,1477 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type driller-lurker +(deftype driller-lurker (process-drawable) + ((root-overeride collide-shape-moving :offset 112) + (hit-player? symbol :offset-assert 176) + (played-drill-sound? symbol :offset-assert 180) + (mode uint64 :offset-assert 184) + (path-u float :offset-assert 192) + (path-units-per-meter float :offset-assert 196) + (path-speed float :offset-assert 200) + (targ-path-speed float :offset-assert 204) + (path-dir float :offset-assert 208) + (path-ry float :offset-assert 212) + (facing-ry float :offset-assert 216) + (drill-rz float :offset-assert 220) + (drill-speed float :offset-assert 224) + (up-blend float :offset-assert 228) + (player-path-u float :offset-assert 232) + (ambient-drilling-u float :offset-assert 236) + (timeout int32 :offset-assert 240) + (neck joint-mod :offset-assert 244) + (drill joint-mod :offset-assert 248) + (sound2 ambient-sound :offset-assert 252) + (last-update-time uint64 :offset-assert 256) + (last-player-path-u-time uint64 :offset-assert 264) + (started-chasing-time uint64 :offset-assert 272) + (hit-player-time uint64 :offset-assert 280) + (player-attack-id uint64 :offset-assert 288) + ) + :heap-base #xc0 + :method-count-assert 28 + :size-assert #x128 + :flag-assert #x1c00c00128 + (:methods + (dummy-20 (_type_ symbol target) symbol 20) + (dummy-21 (_type_) none 21) + (dummy-22 (_type_) none 22) + (dummy-23 (_type_) float 23) + (dummy-24 (_type_) symbol 24) + (dummy-25 (_type_) symbol 25) + (dummy-26 (_type_) symbol 26) + (dummy-27 (_type_) object 27) + ) + ) + +;; definition for method 3 of type driller-lurker +(defmethod inspect driller-lurker ((obj driller-lurker)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Thit-player?: ~A~%" (-> obj hit-player?)) + (format #t "~T~Tplayed-drill-sound?: ~A~%" (-> obj played-drill-sound?)) + (format #t "~T~Tmode: ~D~%" (-> obj mode)) + (format #t "~T~Tpath-u: ~f~%" (-> obj path-u)) + (format #t "~T~Tpath-units-per-meter: ~f~%" (-> obj path-units-per-meter)) + (format #t "~T~Tpath-speed: ~f~%" (-> obj path-speed)) + (format #t "~T~Ttarg-path-speed: ~f~%" (-> obj targ-path-speed)) + (format #t "~T~Tpath-dir: ~f~%" (-> obj path-dir)) + (format #t "~T~Tpath-ry: ~f~%" (-> obj path-ry)) + (format #t "~T~Tfacing-ry: ~f~%" (-> obj facing-ry)) + (format #t "~T~Tdrill-rz: ~f~%" (-> obj drill-rz)) + (format #t "~T~Tdrill-speed: ~f~%" (-> obj drill-speed)) + (format #t "~T~Tup-blend: ~f~%" (-> obj up-blend)) + (format #t "~T~Tplayer-path-u: ~f~%" (-> obj player-path-u)) + (format #t "~T~Tambient-drilling-u: ~f~%" (-> obj ambient-drilling-u)) + (format #t "~T~Ttimeout: ~D~%" (-> obj timeout)) + (format #t "~T~Tneck: ~A~%" (-> obj neck)) + (format #t "~T~Tdrill: ~A~%" (-> obj drill)) + (format #t "~T~Tsound2: ~A~%" (-> obj sound2)) + (format #t "~T~Tlast-update-time: ~D~%" (-> obj last-update-time)) + (format #t "~T~Tlast-player-path-u-time: ~D~%" (-> obj last-player-path-u-time)) + (format #t "~T~Tstarted-chasing-time: ~D~%" (-> obj started-chasing-time)) + (format #t "~T~Thit-player-time: ~D~%" (-> obj hit-player-time)) + (format #t "~T~Tplayer-attack-id: ~D~%" (-> obj player-attack-id)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *driller-lurker-sg* driller-lurker + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1.5 0 7.75) + :longest-edge (meters 2.3) + :shadow 4 + ) + +;; definition for symbol *driller-lurker-shadow-control*, type shadow-control +(define + *driller-lurker-shadow-control* + (new 'static 'shadow-control :settings (new 'static 'shadow-settings + :center + (new 'static 'vector :w (the-as float #x9)) + :shadow-dir + (new 'static 'vector :y -1.0 :w 614400.0) + :bot-plane (new 'static 'plane :y 1.0 :w 4096.0) + :top-plane (new 'static 'plane :y 1.0 :w -2048.0) + :fade-dist 245760.0 + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 331) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-driller-lurker-drilling-debris" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 728 :fade-after (meters 80.0) :falloff-to (meters 80.0)) + (sp-item 2075 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + (sp-item 2076 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + (sp-item 2077 :fade-after (meters 40.0) :falloff-to (meters 40.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 728) (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 4.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (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 1.5) (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 64.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.45714286) + (sp-flt spt-accel-y 2.7306666) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2075) (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 4.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (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 0.5) (meters 0.25) 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 64.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.30476192) + (sp-flt spt-accel-y 2.7306666) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2076) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 4.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (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 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 96.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.10666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int spt-next-time 375) + (sp-launcher-by-id spt-next-launcher 2078) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2078) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.7066667) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2077) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 8.0 8.0 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (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 0.05) (meters 0.15) 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 96.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.10666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 2078) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; definition for function driller-lurker-default-event-handler +;; Used lq/sq +(defbehavior driller-lurker-default-event-handler driller-lurker ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (sv-96 collide-shape-prim)) + (cond + ((= arg2 'attack) + (cond + ((= (-> arg0 type) target) + (let ((v1-3 (-> arg3 param 2))) + (when (!= v1-3 (-> self player-attack-id)) + (set! (-> self player-attack-id) v1-3) + (case (-> self mode) + ((5) + (let ((v1-5 *target*)) + (when (!= (-> arg3 param 1) 'flop) + (let ((f0-4 (atan + (- (-> v1-5 control trans x) (-> self root-overeride trans x)) + (- (-> v1-5 control trans z) (-> self root-overeride trans z)) + ) + ) + ) + (quaternion-axis-angle! (-> self root-overeride quat) 0.0 1.0 0.0 f0-4) + ) + ) + ) + (go driller-lurker-die) + ) + (else + (let ((s4-0 *target*) + (s2-0 #f) + (s3-0 #f) + ) + (let* ((s1-0 (the-as touching-shapes-entry (-> arg3 param 0))) + (s0-0 (-> s1-0 head)) + ) + (while s0-0 + (set! sv-96 (get-touched-prim s0-0 (-> self root-overeride) (the-as touching-prims-entry s1-0))) + (if (and + (logtest? + (-> (get-touched-prim s0-0 (-> s4-0 control) (the-as touching-prims-entry s1-0)) prim-core action) + 1 + ) + (logtest? (-> sv-96 prim-id) 1) + ) + (set! s2-0 #t) + ) + (if (logtest? (-> sv-96 prim-id) 2) + (set! s3-0 #t) + ) + (set! s0-0 (-> s0-0 next)) + ) + ) + (cond + ((or s2-0 (not s3-0)) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack) + (set! (-> a1-6 param 0) (-> arg3 param 0)) + (let ((v1-34 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-34 shove-up) 8192.0) + (set! (-> v1-34 shove-back) 12288.0) + (set! (-> a1-6 param 1) (the-as uint v1-34)) + ) + (when (send-event-function arg0 a1-6) + (set! (-> self hit-player?) #t) + (set! (-> self hit-player-time) (the-as uint (-> *display* base-frame-counter))) + (dummy-54 (-> self root-overeride) 2 0) + (let ((v1-39 (-> self mode))) + (if (or (zero? v1-39) (= v1-39 1) (= v1-39 2)) + (go driller-lurker-chase #t) + ) + ) + ) + ) + ) + (s3-0 + (when (!= (-> arg3 param 1) 'flop) + (let ((f0-11 (atan + (- (-> s4-0 control trans x) (-> self root-overeride trans x)) + (- (-> s4-0 control trans z) (-> self root-overeride trans z)) + ) + ) + ) + (quaternion-axis-angle! (-> self root-overeride quat) 0.0 1.0 0.0 f0-11) + ) + ) + (go driller-lurker-die) + ) + ) + ) + ) + ) + ) + ) + ) + (else + (go driller-lurker-die) + ) + ) + ) + ((= arg2 'touch) + (when (= (-> arg0 type) target) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 2) + (set! (-> a1-11 message) 'attack) + (set! (-> a1-11 param 0) (-> arg3 param 0)) + (let ((v1-57 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-57 shove-up) 8192.0) + (set! (-> v1-57 shove-back) 12288.0) + (set! (-> a1-11 param 1) (the-as uint v1-57)) + ) + (when (send-event-function arg0 a1-11) + (set! (-> self hit-player?) #t) + (set! (-> self hit-player-time) (the-as uint (-> *display* base-frame-counter))) + (dummy-54 (-> self root-overeride) 2 0) + (let ((v1-62 (-> self mode))) + (if (or (zero? v1-62) (= v1-62 1) (= v1-62 2)) + (go driller-lurker-chase #t) + ) + ) + ) + ) + ) + ) + ) + ) + +;; definition for method 20 of type driller-lurker +;; Used lq/sq +(defmethod dummy-20 driller-lurker ((obj driller-lurker) (arg0 symbol) (arg1 target)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-update-time)) + (set! (-> obj last-update-time) (the-as uint v1-1)) + (let* ((f0-0 (-> obj path-speed)) + (f1-1 (seek f0-0 (-> obj targ-path-speed) (* 12288.0 (-> *display* seconds-per-frame)))) + ) + (set! (-> obj path-speed) f1-1) + (when (< 0.0 f1-1) + (let* ((f0-5 (-> obj path-u)) + (f30-0 (* (-> obj path-dir) f1-1 (-> *display* seconds-per-frame))) + (s4-0 #t) + (f0-6 (+ f0-5 (* 0.00024414062 (-> obj path-units-per-meter) f30-0))) + ) + (cond + ((< f0-6 0.0) + (set! s4-0 #f) + (cond + (arg0 + (set! f0-6 (- f0-6)) + (set! (-> obj path-dir) (- (-> obj path-dir))) + (set! (-> obj path-speed) 0.0) + ) + (else + (set! f0-6 0.0) + (set! (-> obj path-speed) 0.0) + ) + ) + ) + ((< 1.0 f0-6) + (set! s4-0 #f) + (cond + (arg0 + (set! f0-6 (- 2.0 f0-6)) + (set! (-> obj path-dir) (- (-> obj path-dir))) + (set! (-> obj path-speed) 0.0) + ) + (else + (set! f0-6 1.0) + (set! (-> obj path-speed) 0.0) + ) + ) + ) + ) + (set! (-> obj path-u) f0-6) + (let ((s3-1 (new 'stack-no-clear 'vector))) + (set! (-> s3-1 quad) (-> obj root-overeride trans quad)) + (eval-path-curve! (-> obj path) (-> obj root-overeride trans) f0-6 'interp) + (when s4-0 + (let ((f0-7 (vector-vector-xz-distance s3-1 (-> obj root-overeride trans)))) + (set! (-> obj path-units-per-meter) (* (/ (fabs f30-0) f0-7) (-> obj path-units-per-meter))) + ) + ) + ) + ) + ) + ) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (TODO-RENAME-14 (-> obj path) s4-1 (-> obj path-u)) + (let ((f0-13 (atan (-> s4-1 x) (-> s4-1 z)))) + (if (< (-> obj path-dir) 0.0) + (set! f0-13 (+ 32768.0 f0-13)) + ) + (set! (-> obj path-ry) f0-13) + ) + ) + (case (-> obj mode) + ((4) + (when *target* + (let ((a0-13 (target-pos 0)) + (v1-26 (new 'stack-no-clear 'vector)) + ) + (vector-! v1-26 a0-13 (-> obj root-overeride trans)) + (let ((f0-16 (atan (-> v1-26 x) (-> v1-26 z)))) + (set! (-> obj facing-ry) + (deg-seek-smooth (-> obj facing-ry) f0-16 (* 32768.0 (-> *display* seconds-per-frame)) 0.25) + ) + ) + ) + (when (< 16384.0 (fabs (deg- (-> obj facing-ry) (-> obj path-ry)))) + (set! (-> obj path-dir) (- (-> obj path-dir))) + (set! (-> obj path-ry) (+ 32768.0 (-> obj path-ry))) + ) + ) + ) + (else + (if (!= (-> obj mode) 1) + (set! (-> obj facing-ry) + (deg-seek-smooth (-> obj facing-ry) (-> obj path-ry) (* 32768.0 (-> *display* seconds-per-frame)) 0.25) + ) + ) + ) + ) + (quaternion-axis-angle! (-> obj root-overeride quat) 0.0 1.0 0.0 (-> obj facing-ry)) + (let ((f30-2 0.0)) + (when *target* + (let ((f0-34 (vector-vector-xz-distance (target-pos 0) (-> obj root-overeride trans)))) + (if (< f0-34 36864.0) + (set! f30-2 (- 1.0 (* 0.00006510417 (fmax 0.0 (+ -21504.0 f0-34))))) + ) + ) + ) + (let ((f28-1 (* 0.0001373291 (fmin 7281.778 (fabs (deg- (-> obj path-ry) (-> obj facing-ry))))))) + (cond + ((< 0.0 f30-2) + (let ((s3-2 (new 'stack-no-clear 'vector))) + (vector-! s3-2 (target-pos 0) (-> obj root-overeride trans)) + (let* ((f1-27 (vector-x-angle s3-2)) + (f1-29 (fmax 728.1778 (fmin 10194.489 f1-27))) + (f0-46 (* 0.000105637766 (+ -728.1778 f1-29))) + (f0-47 (lerp f28-1 f0-46 f30-2)) + ) + (set! (-> obj up-blend) + (seek-with-smooth (-> obj up-blend) f0-47 (* 8192.0 (-> *display* seconds-per-frame)) 0.25 0.01) + ) + ) + ) + ) + (else + (set! (-> obj up-blend) + (seek-with-smooth (-> obj up-blend) f28-1 (* 8192.0 (-> *display* seconds-per-frame)) 0.125 0.01) + ) + ) + ) + ) + ) + (when (and arg1 *target*) + (set-target! (-> obj neck) (target-pos 5)) + (if *target* + (look-at-enemy! (-> *target* neck) (the-as vector (-> obj root-overeride root-prim prim-core)) 'attacking obj) + ) + ) + (let ((f30-3 (-> obj drill-speed))) + (let ((v1-56 (-> obj mode))) + (cond + ((or (= v1-56 2) (zero? v1-56)) + (set! f30-3 (seek f30-3 72817.78 (* 372827.03 (-> *display* seconds-per-frame)))) + ) + ((= v1-56 1) + (set! f30-3 (seek f30-3 276707.56 (* 372827.03 (-> *display* seconds-per-frame)))) + ) + ((or (= v1-56 3) (= v1-56 4)) + (set! f30-3 (if (>= (- (-> *display* base-frame-counter) (the-as int (-> obj started-chasing-time))) 675) + (seek f30-3 0.0 (* 600746.7 (-> *display* seconds-per-frame))) + (seek f30-3 276707.56 (* 372827.03 (-> *display* seconds-per-frame))) + ) + ) + ) + ((= v1-56 5) + (set! f30-3 (if (>= (- (-> *display* base-frame-counter) (the-as int (-> obj started-chasing-time))) 1725) + (seek f30-3 276707.56 (* 372827.03 (-> *display* seconds-per-frame))) + (seek f30-3 0.0 (* 600746.7 (-> *display* seconds-per-frame))) + ) + ) + ) + ) + ) + (set! (-> obj drill-speed) f30-3) + (cond + ((>= f30-3 36408.89) + (update-trans! (-> obj sound) (-> obj root-overeride trans)) + (update! (-> obj sound)) + (set! (-> obj played-drill-sound?) #t) + ) + (else + (when (-> obj played-drill-sound?) + (set! (-> obj played-drill-sound?) #f) + (stop! (-> obj sound)) + ) + ) + ) + (let ((f0-69 (+ (-> obj drill-rz) (* f30-3 (-> *display* seconds-per-frame))))) + (set! (-> obj drill-rz) (- f0-69 (* (the float (the int (/ f0-69 65536.0))) 65536.0))) + ) + ) + (let ((s5-2 (new 'stack-no-clear 'quaternion))) + (quaternion-axis-angle! s5-2 0.0 0.0 1.0 (-> obj drill-rz)) + (set-trs! (-> obj drill) (the-as vector #f) s5-2 (the-as vector #f)) + ) + 0 + ) + ) + (when (and + (-> obj hit-player?) + (or (not *target*) (and + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> obj hit-player-time))) 15) + ) + ) + ) + (dummy-54 (-> obj root-overeride) 2 1) + (set! (-> obj hit-player?) #f) + #f + ) + ) + +;; definition for method 23 of type driller-lurker +(defmethod dummy-23 driller-lurker ((obj driller-lurker)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-player-path-u-time)) + (set! (-> obj last-player-path-u-time) (the-as uint v1-1)) + (cond + (*target* + (let* ((s5-0 (-> obj path)) + (s4-0 (method-of-object s5-0 TODO-RENAME-20)) + ) + (target-pos 0) + (set! (-> obj player-path-u) (s4-0 s5-0)) + ) + ) + (else + (set! (-> obj player-path-u) 0.0) + ) + ) + ) + ) + (-> obj player-path-u) + ) + +;; definition for method 25 of type driller-lurker +(defmethod dummy-25 driller-lurker ((obj driller-lurker)) + (when *target* + (let* ((s5-0 (target-pos 0)) + (f0-1 (- (-> s5-0 y) (-> obj root-overeride trans y))) + ) + (when (and (>= 32768.0 f0-1) (>= f0-1 -2048.0)) + (case (-> obj mode) + ((1) + (if (>= 73728.0 (vector-vector-xz-distance (-> obj root-overeride trans) s5-0)) + (return #t) + ) + ) + (else + (when (>= 102400.0 (vector-vector-xz-distance (-> obj root-overeride trans) s5-0)) + (let ((f0-8 (atan (- (-> s5-0 x) (-> obj root-overeride trans x)) (- (-> s5-0 z) (-> obj root-overeride trans z)))) + ) + (if (>= 20024.889 (fabs (deg- f0-8 (-> obj facing-ry)))) + (return #t) + ) + ) + ) + ) + ) + ) + ) + ) + #f + ) + +;; definition for method 26 of type driller-lurker +(defmethod dummy-26 driller-lurker ((obj driller-lurker)) + (when *target* + (let* ((a1-0 (target-pos 0)) + (f0-1 (- (-> a1-0 y) (-> obj root-overeride trans y))) + ) + (if (and + (< f0-1 40960.0) + (< -10240.0 f0-1) + (< (vector-vector-xz-distance (-> obj root-overeride trans) a1-0) 143360.0) + ) + (return #f) + ) + ) + ) + #t + ) + +;; definition for method 24 of type driller-lurker +(defmethod dummy-24 driller-lurker ((obj driller-lurker)) + (when *target* + (let* ((a1-0 (target-pos 0)) + (f0-1 (- (-> a1-0 y) (-> obj root-overeride trans y))) + ) + (when (and (< f0-1 40960.0) (< -10240.0 f0-1)) + (let ((f0-2 (vector-vector-xz-distance (-> obj root-overeride trans) a1-0))) + (cond + ((>= 17408.0 f0-2) + (return #t) + ) + ((< f0-2 143360.0) + (let ((f0-3 (dummy-23 obj)) + (f1-5 (-> obj path-u)) + ) + (if (>= (* 0.1 (-> obj path-units-per-meter)) (fabs (- f0-3 f1-5))) + (return #t) + ) + ) + ) + ) + ) + ) + ) + ) + #f + ) + +;; definition for method 27 of type driller-lurker +(defmethod dummy-27 driller-lurker ((obj driller-lurker)) + (let ((a2-0 (-> obj node-list data 25 bone transform)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set-vector! s5-0 0.0 0.0 8192.0 1.0) + (vector-matrix*! s5-0 s5-0 a2-0) + (vector-float*! s5-0 s5-0 (/ 1.0 (-> s5-0 w))) + (spawn (-> obj part) s5-0) + ) + ) + +;; failed to figure out what this is: +(defstate driller-lurker-debug-play-anims (driller-lurker) + :code + (behavior () 0 (none)) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +;; failed to figure out what this is: +(defstate driller-lurker-idle-drilling (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior () + (set! (-> self mode) (the-as uint 1)) + (set! (-> self targ-path-speed) 0.0) + (set! (-> self path-speed) 0.0) + (shut-down! (-> self neck)) + (none) + ) + :exit + (behavior () (stop! (-> self sound2)) (none)) + :trans + (behavior () + (if (dummy-25 self) + (go driller-lurker-chase #t) + ) + (dummy-20 self #t (the-as target #f)) + (none) + ) + :code + (behavior () + (update-trans! (-> self sound2) (-> self root-overeride trans)) + (while #t + (set! (-> self timeout) (rand-vu-int-range 4 8)) + (ja-channel-push! 1 60) + (dotimes (gp-0 (-> self timeout)) + (let ((f30-0 (rand-vu-float-range 1.0 1.8))) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 15))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 15)) data 0 length) -1)) + ) + (set! (-> a0-4 param 1) f30-0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim (-> self draw art-group data 15)) num-func-seek!) + ) + (until (ja-done? 0) + (update! (-> self sound2)) + (if (and (>= (ja-aframe-num 0) 7.0) (>= 13.0 (ja-aframe-num 0))) + (dummy-27 self) + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1))) + (set! (-> a0-9 param 1) f30-0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (stop! (-> self sound2)) + (ja-channel-push! 1 60) + (cond + ((zero? (rand-vu-int-count 2)) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + ) + (else + (let ((gp-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + ) + ) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 param 0) (the float (+ (-> a0-16 frame-group data 0 length) -1))) + (set! (-> a0-16 param 1) 1.0) + (joint-control-channel-group! a0-16 (the-as art-joint-anim #f) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +;; failed to figure out what this is: +(defstate driller-lurker-patrol (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior () + (set! (-> self mode) (the-as uint 2)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self timeout) (rand-vu-int-range 900 3600)) + (set! (-> self targ-path-speed) 15360.0) + (if (>= 4096.0 (-> self path-speed)) + (set! (-> self targ-path-speed) 15360.0) + ) + (shut-down! (-> self neck)) + (none) + ) + :trans + (behavior () + (if (dummy-25 self) + (go driller-lurker-chase #t) + ) + (dummy-20 self #t (the-as target #f)) + (none) + ) + :code + (behavior () + (ja-channel-push! 2 60) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (let ((a0-2 (-> self skel root-channel 1))) + (set! (-> a0-2 frame-interp) (-> self up-blend)) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-2 param 0) 0.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-chan) + ) + (while #t + (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!) + ) + (when (= (ja-group-size) 2) + (let ((a0-4 (-> self skel root-channel 1))) + (set! (-> a0-4 frame-interp) (-> self up-blend)) + (set! (-> a0-4 param 0) 0.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-chan) + ) + ) + (when (ja-done? 0) + (if (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self timeout)) + (>= 546.13336 (fabs (deg- (-> self path-ry) (-> self facing-ry)))) + ) + (go driller-lurker-patrol-pause) + ) + (let ((v1-34 (-> self skel root-channel 0))) + (set! (-> v1-34 num-func) num-func-identity) + (set! (-> v1-34 frame-num) 0.0) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +;; failed to figure out what this is: +(defstate driller-lurker-patrol-pause (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior () + (set! (-> self mode) (the-as uint 2)) + (set! (-> self path-speed) 0.0) + (set! (-> self targ-path-speed) 0.0) + (shut-down! (-> self neck)) + (none) + ) + :trans + (behavior () + (if (dummy-25 self) + (go driller-lurker-chase #t) + ) + (dummy-20 self #t (the-as target #f)) + (none) + ) + :code + (behavior () + (set! (-> self timeout) (rand-vu-int-range 2 4)) + (let ((s5-0 -1)) + (dotimes (gp-0 (-> self timeout)) + (let ((v1-0 (rand-vu-int-count 3))) + (if (= v1-0 s5-0) + (set! v1-0 (mod (+ v1-0 1) 3)) + ) + (set! s5-0 v1-0) + (cond + ((zero? v1-0) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((s4-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s4-0 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> s4-0 frame-num) 0.0) + ) + ) + ((= v1-0 1) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((s4-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + ) + ((= v1-0 2) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((s4-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s4-2 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-identity + ) + (set! (-> s4-2 frame-num) 0.0) + ) + ) + ) + ) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 param 0) (the float (+ (-> a0-27 frame-group data 0 length) -1))) + (set! (-> a0-27 param 1) 1.0) + (joint-control-channel-group! a0-27 (the-as art-joint-anim #f) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! (-> a0-28 param 0) (the float (+ (-> a0-28 frame-group data 0 length) -1))) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! a0-28 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (go driller-lurker-patrol) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +;; failed to figure out what this is: +(defstate driller-lurker-chase (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior ((arg0 symbol)) + (if arg0 + (set! (-> self started-chasing-time) (the-as uint (-> *display* base-frame-counter))) + ) + (set! (-> self mode) (the-as uint 3)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self targ-path-speed) 23552.0) + (none) + ) + :trans + (behavior () + (if (dummy-24 self) + (go driller-lurker-attack) + ) + (if (dummy-26 self) + (go driller-lurker-patrol) + ) + (if (>= (- (-> *display* base-frame-counter) (the-as int (-> self started-chasing-time))) 900) + (go driller-lurker-jammed-standing) + ) + (let* ((gp-0 (-> self path)) + (s5-0 (method-of-object gp-0 TODO-RENAME-20)) + ) + (target-pos 0) + (let ((f0-1 (- (s5-0 gp-0) (-> self path-u)))) + (when (>= (fabs f0-1) (* 0.1 (-> self path-units-per-meter))) + (cond + ((< 0.0 f0-1) + (when (< (-> self path-dir) 0.0) + (set! (-> self path-dir) 1.0) + (set! (-> self path-speed) 0.0) + ) + ) + (else + (when (>= (-> self path-dir) 0.0) + (set! (-> self path-dir) -1.0) + (set! (-> self path-speed) 0.0) + ) + ) + ) + ) + ) + ) + (dummy-20 self #f (the-as target #t)) + (none) + ) + :code + (behavior ((arg0 symbol)) + (ja-channel-push! 2 60) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (let ((a0-3 (-> self skel root-channel 1))) + (set! (-> a0-3 frame-interp) (-> self up-blend)) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-3 param 0) 0.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 12)) + num-func-chan + ) + ) + (while #t + (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!) + ) + (when (= (ja-group-size) 2) + (let ((a0-5 (-> self skel root-channel 1))) + (set! (-> a0-5 frame-interp) (-> self up-blend)) + (set! (-> a0-5 param 0) 0.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-chan) + ) + ) + (when (ja-done? 0) + (let ((v1-27 (-> self skel root-channel 0))) + (set! (-> v1-27 num-func) num-func-identity) + (set! (-> v1-27 frame-num) 0.0) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +;; failed to figure out what this is: +(defstate driller-lurker-attack (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior () + (set! (-> self mode) (the-as uint 4)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self path-speed) 0.0) + (set! (-> self targ-path-speed) 0.0) + (none) + ) + :trans + (behavior () + (cond + ((dummy-24 self) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (go driller-lurker-chase #f) + ) + ) + ) + (if (>= (- (-> *display* base-frame-counter) (the-as int (-> self started-chasing-time))) 900) + (go driller-lurker-jammed-standing) + ) + (dummy-20 self #f (the-as target #t)) + (none) + ) + :code + (behavior () + (ja-channel-push! 2 60) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 13)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (let ((a0-2 (-> self skel root-channel 1))) + (set! (-> a0-2 frame-interp) (-> self up-blend)) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 14))) + (set! (-> a0-2 param 0) 0.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 14)) + num-func-chan + ) + ) + (while #t + (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!) + ) + (when (= (ja-group-size) 2) + (let ((a0-4 (-> self skel root-channel 1))) + (set! (-> a0-4 frame-interp) (-> self up-blend)) + (set! (-> a0-4 param 0) 0.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-chan) + ) + ) + (when (ja-done? 0) + (let ((v1-27 (-> self skel root-channel 0))) + (set! (-> v1-27 num-func) num-func-identity) + (set! (-> v1-27 frame-num) 0.0) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +;; failed to figure out what this is: +(defstate driller-lurker-jammed-standing (driller-lurker) + :event + driller-lurker-default-event-handler + :enter + (behavior () + (set! (-> self mode) (the-as uint 5)) + (set! (-> self path-speed) 0.0) + (set! (-> self targ-path-speed) 0.0) + (shut-down! (-> self neck)) + (none) + ) + :trans + (behavior () (dummy-20 self #f (the-as target #f)) (none)) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self started-chasing-time) (the-as uint (-> *display* base-frame-counter))) + (cond + (*target* + (go driller-lurker-chase #f) + (set! (-> self path-speed) 5888.0) + ) + (else + (set! (-> self path-speed) 7680.0) + (go driller-lurker-patrol) + ) + ) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) transform-post) + ) + +;; failed to figure out what this is: +(defstate driller-lurker-die (driller-lurker) + :event + (the-as + (function process int symbol event-message-block object :behavior driller-lurker) + process-drawable-death-event-handler + ) + :code + (behavior () + (shut-down! (-> self neck)) + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 60) + (clear-collide-with-as (-> self root-overeride)) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1))) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (send-event self 'death-end) + (while (-> self child) + (suspend) + ) + (dummy-18 self) + (none) + ) + :post + (the-as (function none :behavior driller-lurker) ja-post) + ) + +;; definition for method 7 of type driller-lurker +;; INFO: Return type mismatch process-drawable vs driller-lurker. +(defmethod relocate driller-lurker ((obj driller-lurker) (arg0 int)) + (if (nonzero? (-> obj neck)) + (&+! (-> obj neck) arg0) + ) + (if (nonzero? (-> obj drill)) + (&+! (-> obj drill) arg0) + ) + (if (nonzero? (-> obj sound2)) + (&+! (-> obj sound2) arg0) + ) + (the-as + driller-lurker + ((the-as (function process-drawable int process-drawable) (find-parent-method driller-lurker 7)) obj arg0) + ) + ) + +;; definition for method 10 of type driller-lurker +(defmethod deactivate driller-lurker ((obj driller-lurker)) + (if (nonzero? (-> obj sound2)) + (stop! (-> obj sound2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 11 of type driller-lurker +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! driller-lurker ((obj driller-lurker) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (set! (-> obj hit-player?) #f) + (set! (-> obj played-drill-sound?) #f) + (set! (-> obj hit-player-time) (the-as uint 0)) + (set! (-> obj mode) (the-as uint 0)) + (set! (-> obj drill-rz) 0.0) + (set! (-> obj drill-speed) 72817.78) + (set! (-> obj last-update-time) (the-as uint 0)) + (set! (-> obj last-player-path-u-time) (the-as uint 0)) + (set! (-> obj started-chasing-time) (the-as uint 0)) + (set! (-> obj player-attack-id) (the-as uint 0)) + (set! (-> obj ambient-drilling-u) -1.0) + (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) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 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 3073)) + (set! (-> s3-0 prim-core offense) 2) + (set-vector! (-> s3-0 local-sphere) 0.0 11264.0 0.0 22528.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-0 prim-core offense) 1) + (set-vector! (-> s2-0 local-sphere) 0.0 3276.8 0.0 4505.6) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-1 prim-core offense) 1) + (set-vector! (-> s2-1 local-sphere) 0.0 7372.8 0.0 4505.6) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (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 3073)) + (set! (-> s2-2 prim-core offense) 1) + (set-vector! (-> s2-2 local-sphere) 0.0 11468.8 0.0 4505.6) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core offense) 2) + (set! (-> s2-3 transform-index) 25) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 4096.0 3276.8) + (append-prim s3-0 s2-3) + ) + (let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core offense) 2) + (set! (-> s2-4 transform-index) 25) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 5734.4 3686.4) + (append-prim s3-0 s2-4) + ) + (let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-5 collide-with) (the-as uint 16)) + (set! (-> s2-5 prim-core offense) 2) + (set! (-> s2-5 transform-index) 25) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 9420.8 2457.6) + (append-prim s3-0 s2-5) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-overeride) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *driller-lurker-sg* '()) + (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (if (< (-> obj path curve num-cverts) 2) + (go process-drawable-art-error "bad path") + ) + (set! (-> obj fact) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (set! (-> obj draw shadow-ctrl) *driller-lurker-shadow-control*) + (set! (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "drill-idle") + :volume #x400 + :fo-max 40 + ) + (-> obj root-overeride trans) + ) + ) + (set! (-> obj sound2) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "drill-idle2") + :volume #x400 + :fo-max 60 + ) + (-> obj root-overeride trans) + ) + ) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 331) obj)) + (let ((f0-34 (path-distance (-> obj path)))) + (set! (-> obj path-units-per-meter) (/ 4096.0 f0-34)) + ) + (set! (-> obj path-dir) 1.0) + (set! (-> obj path-u) 0.0) + (set! (-> obj path-speed) 15360.0) + (set! (-> obj targ-path-speed) 15360.0) + (set! (-> obj up-blend) 0.0) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-91 + (res-lump-data + arg0 + 'driller-lurker + (pointer float) + :tag-ptr + (the-as (pointer res-tag) (new 'stack-no-clear 'vector)) + ) + ) + ) + (when v1-91 + (set! (-> obj path-u) (fmax 0.0 (fmin 1.0 (-> v1-91 0)))) + (if (< (-> v1-91 1) 0.0) + (set! (-> obj path-dir) -1.0) + ) + (let ((f0-45 (-> v1-91 2))) + (when (!= f0-45 12345.0) + (let ((f30-0 (* 182.04445 f0-45))) + (set! (-> obj ambient-drilling-u) (-> obj path-u)) + (quaternion-axis-angle! (-> obj root-overeride quat) 0.0 1.0 0.0 f30-0) + (set! (-> obj facing-ry) f30-0) + ) + ) + ) + ) + ) + (eval-path-curve! (-> obj path) (-> obj root-overeride trans) (-> obj path-u) 'interp) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (TODO-RENAME-14 (-> obj path) s5-1 (-> obj path-u)) + (let ((f0-51 (atan (-> s5-1 x) (-> s5-1 z)))) + (if (< (-> obj path-dir) 0.0) + (set! f0-51 (+ 32768.0 f0-51)) + ) + (set! (-> obj path-ry) f0-51) + (if (< (-> obj ambient-drilling-u) 0.0) + (set! (-> obj facing-ry) f0-51) + ) + ) + ) + (let ((v1-103 (new 'process 'joint-mod (joint-mod-handler-mode reset) obj 6))) + (set! (-> obj neck) v1-103) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> v1-103 up) (the-as uint 1)) + (set! (-> v1-103 nose) (the-as uint 2)) + (set! (-> v1-103 ear) (the-as uint 0)) + (set! (-> v1-103 max-dist) 102400.0) + (set! (-> v1-103 ignore-angle) 16384.0) + ) + (set! (-> obj drill) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) obj 38)) + (transform-post) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 8192.0 + ) + (if (>= (-> obj ambient-drilling-u) 0.0) + (go driller-lurker-idle-drilling) + (go driller-lurker-patrol) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/maincave/gnawer_REF.gc b/test/decompiler/reference/levels/maincave/gnawer_REF.gc new file mode 100644 index 0000000000..a28eb30690 --- /dev/null +++ b/test/decompiler/reference/levels/maincave/gnawer_REF.gc @@ -0,0 +1,1929 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type gnawer-falling-segment +(deftype gnawer-falling-segment (process-drawable) + ((transv vector :inline :offset-assert 176) + (facing-rot vector :inline :offset-assert 192) + (facing-rotv vector :inline :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 21 + :size-assert #xe0 + :flag-assert #x15007000e0 + (:methods + (falling () _type_ :state 20) + ) + ) + +;; definition for method 3 of type gnawer-falling-segment +(defmethod inspect gnawer-falling-segment ((obj gnawer-falling-segment)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttransv: #~%" (-> obj transv)) + (format #t "~T~Tfacing-rot: #~%" (-> obj facing-rot)) + (format #t "~T~Tfacing-rotv: #~%" (-> obj facing-rotv)) + obj + ) + +;; definition of type gnawer-segment-info +(deftype gnawer-segment-info (structure) + ((num-joints int32 :offset-assert 0) + (joint-index int8 8 :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +;; definition for method 3 of type gnawer-segment-info +(defmethod inspect gnawer-segment-info ((obj gnawer-segment-info)) + (format #t "[~8x] ~A~%" obj 'gnawer-segment-info) + (format #t "~Tnum-joints: ~D~%" (-> obj num-joints)) + (format #t "~Tjoint-index[8] @ #x~X~%" (-> obj joint-index)) + obj + ) + +;; definition of type gnawer-segment +(deftype gnawer-segment (structure) + ((place int32 :offset-assert 0) + (world-pos vector :inline :offset-assert 16) + (anim-to-local-trans-offset vector :inline :offset-assert 32) + (orient-mat matrix :inline :offset-assert 48) + ) + :method-count-assert 9 + :size-assert #x70 + :flag-assert #x900000070 + ) + +;; definition for method 3 of type gnawer-segment +(defmethod inspect gnawer-segment ((obj gnawer-segment)) + (format #t "[~8x] ~A~%" obj 'gnawer-segment) + (format #t "~Tplace: ~D~%" (-> obj place)) + (format #t "~Tworld-pos: #~%" (-> obj world-pos)) + (format #t "~Tanim-to-local-trans-offset: #~%" (-> obj anim-to-local-trans-offset)) + (format #t "~Torient-mat: #~%" (-> obj orient-mat)) + obj + ) + +;; definition of type gnawer-route +(deftype gnawer-route (structure) + ((src-pt-index int32 :offset-assert 0) + (dest-pt-index int32 :offset-assert 4) + (total-travel-time uint64 :offset-assert 8) + (src-ang float :offset-assert 16) + (dest-ang float :offset-assert 20) + (delta-ang float :offset-assert 24) + (surface-dist float :offset-assert 28) + (total-dist float :offset-assert 32) + (src-pt-offset vector :inline :offset-assert 48) + (dest-pt-offset vector :inline :offset-assert 64) + (surface-dir vector :inline :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x60 + :flag-assert #x900000060 + ) + +;; definition for method 3 of type gnawer-route +(defmethod inspect gnawer-route ((obj gnawer-route)) + (format #t "[~8x] ~A~%" obj 'gnawer-route) + (format #t "~Tsrc-pt-index: ~D~%" (-> obj src-pt-index)) + (format #t "~Tdest-pt-index: ~D~%" (-> obj dest-pt-index)) + (format #t "~Ttotal-travel-time: ~D~%" (-> obj total-travel-time)) + (format #t "~Tsrc-ang: ~f~%" (-> obj src-ang)) + (format #t "~Tdest-ang: ~f~%" (-> obj dest-ang)) + (format #t "~Tdelta-ang: ~f~%" (-> obj delta-ang)) + (format #t "~Tsurface-dist: ~f~%" (-> obj surface-dist)) + (format #t "~Ttotal-dist: ~f~%" (-> obj total-dist)) + (format #t "~Tsrc-pt-offset: #~%" (-> obj src-pt-offset)) + (format #t "~Tdest-pt-offset: #~%" (-> obj dest-pt-offset)) + (format #t "~Tsurface-dir: #~%" (-> obj surface-dir)) + obj + ) + +;; definition of type gnawer +(deftype gnawer (process-drawable) + ((root-override collide-shape :offset 112) + (hit-points int32 :offset-assert 176) + (gnawer-id int32 :offset-assert 180) + (total-money int32 :offset-assert 184) + (money-mask uint32 :offset-assert 188) + (eco-green-mask uint32 :offset-assert 192) + (hidden? symbol :offset-assert 196) + (show-damage? symbol :offset-assert 200) + (route-dist float :offset-assert 204) + (speed float :offset-assert 208) + (anim-speed float :offset-assert 212) + (part2 sparticle-launch-control :offset-assert 216) + (sound2 ambient-sound :offset-assert 220) + (last-hit-time uint64 :offset-assert 224) + (post-trans vector :inline :offset-assert 240) + (fall-trans vector :inline :offset-assert 256) + (route gnawer-route :inline :offset-assert 272) + (segments gnawer-segment 10 :inline :offset-assert 368) + ) + :heap-base #x560 + :method-count-assert 31 + :size-assert #x5d0 + :flag-assert #x1f056005d0 + (:methods + (dummy-20 (_type_ int) matrix 20) + (dummy-21 (_type_ int bounding-box symbol float) float 21) + (dummy-22 (_type_ float) symbol 22) + (dummy-23 (_type_) none 23) + (dummy-24 (_type_) none 24) + (dummy-25 (_type_) symbol 25) + (dummy-26 (_type_) none 26) + (dummy-27 (_type_) none 27) + (dummy-28 (_type_ int int) symbol 28) + (dummy-29 (_type_ int vector vector) float 29) + (dummy-30 (_type_ process-drawable) uint 30) + ) + ) + +;; definition for method 3 of type gnawer +(defmethod inspect gnawer ((obj gnawer)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Thit-points: ~D~%" (-> obj hit-points)) + (format #t "~T~Tgnawer-id: ~D~%" (-> obj gnawer-id)) + (format #t "~T~Ttotal-money: ~D~%" (-> obj total-money)) + (format #t "~T~Tmoney-mask: ~D~%" (-> obj money-mask)) + (format #t "~T~Teco-green-mask: ~D~%" (-> obj eco-green-mask)) + (format #t "~T~Thidden?: ~A~%" (-> obj hidden?)) + (format #t "~T~Tshow-damage?: ~A~%" (-> obj show-damage?)) + (format #t "~T~Troute-dist: ~f~%" (-> obj route-dist)) + (format #t "~T~Tspeed: ~f~%" (-> obj speed)) + (format #t "~T~Tanim-speed: ~f~%" (-> obj anim-speed)) + (format #t "~T~Tpart2: ~A~%" (-> obj part2)) + (format #t "~T~Tsound2: ~A~%" (-> obj sound2)) + (format #t "~T~Tlast-hit-time: ~D~%" (-> obj last-hit-time)) + (format #t "~T~Tpost-trans: #~%" (-> obj post-trans)) + (format #t "~T~Tfall-trans: #~%" (-> obj fall-trans)) + (format #t "~T~Troute: #~%" (-> obj route)) + (format #t "~T~Tsegments[10] @ #x~X~%" (-> obj segments)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *gnawer-sg* gnawer + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0.5 0 8) + :longest-edge (meters 0.8) + ) + +;; failed to figure out what this is: +(defskelgroup *gnawer-segment-sg* gnawer + 14 + -1 + ((15 (meters 999999))) + :bounds (static-spherem 0 0 0 2) + :longest-edge (meters 0) + ) + +;; definition for symbol *gnawer-segment-infos*, type (inline-array gnawer-segment-info) +(define + *gnawer-segment-infos* + (new 'static 'inline-array gnawer-segment-info 10 + (new 'static 'gnawer-segment-info + :num-joints 8 + :joint-index + (new 'static 'array int8 8 4 #x1f #xd #x20 #x21 #x22 #x23 #x24) + ) + (new 'static 'gnawer-segment-info :num-joints 3 :joint-index (new 'static 'array int8 8 5 #xe #xf 0 0 0 0 0)) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #x6 #x10 #x11 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #x7 #x12 #x13 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #x8 #x14 #x15 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #x9 #x16 #x17 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #xa #x18 #x19 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #xb #x1a #x1b 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info + :num-joints 3 + :joint-index + (new 'static 'array int8 8 #xc #x1c #x1d 0 0 0 0 0) + ) + (new 'static 'gnawer-segment-info :num-joints 1 :joint-index (new 'static 'array int8 8 #x1e 0 0 0 0 0 0 0)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 329) (new 'static 'sparticle-launch-group + :length 76 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-gnawer-loses-segment" + :launcher + (new 'static 'inline-array sparticle-group-item 76 + (sp-item 727 :binding 2309) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2309 :flags (start-dead)) + (sp-item 2310) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2310) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 2.0) + (sp-flt spt-scale-x (meters 16.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 64.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 192.0 128.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -4.266667) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 727) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 16.0 16.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 64.0 1.0) + (sp-rnd-flt spt-g 0.0 16.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -4.096 -2.7306666 1.0) + (sp-flt spt-friction 0.975) + (sp-int-plain-rnd spt-timer 300 149 1) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 135.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 2.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2309) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x2)) + (sp-rnd-flt spt-num 0.25 0.5 1.0) + (sp-rnd-flt spt-scale-x (meters 0.7) (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 32.0 64.0 1.0) + (sp-rnd-flt spt-g 0.0 16.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -0.42666668) + (sp-flt spt-accel-y -2.7306666) + (sp-int-plain-rnd spt-timer 150 299 1) + (sp-cpuinfo-flags bit2) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 330) (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-gnawer-crumbs" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 2141 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2141) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) + (sp-rnd-flt spt-num 1.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.15) (meters 0.35) 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 64.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 128.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.008333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-flt spt-fade-a -0.16) + (sp-flt spt-accel-y -3.4133334) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(defstate falling (gnawer-falling-segment) + :virtual #t + :trans + (behavior () + (+! (-> self transv y) (* -409600.0 (-> *display* seconds-per-frame))) + (vector-v+! (-> self root trans) (-> self root trans) (-> self transv)) + (+! (-> self facing-rot x) (* (-> self facing-rotv x) (-> *display* seconds-per-frame))) + (set! (-> self facing-rot z) + (deg-seek (-> self facing-rot z) 16384.0 (* (-> self facing-rotv z) (-> *display* seconds-per-frame))) + ) + (quaternion-zxy! (-> self root quat) (-> self facing-rot)) + (set! (-> self root scale x) (seek (-> self root scale x) 0.0 (* 0.5 (-> *display* seconds-per-frame)))) + (set! (-> self root scale y) (-> self root scale x)) + (set! (-> self root scale z) (-> self root scale x)) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 0) + (dotimes (gp-0 1) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 17))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 17)) data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim (-> self draw art-group data 17)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1))) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior gnawer-falling-segment) ja-post) + ) + +;; definition for function gnawer-falling-segment-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior gnawer-falling-segment-init-by-other gnawer-falling-segment ((arg0 gnawer) (arg1 vector) (arg2 vector)) + (set! (-> self entity) (-> arg0 entity)) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 quad)) + (vector-identity! (-> self root scale)) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set-vector! + s5-1 + (+ (-> arg2 x) (rand-vu-float-range -0.2 0.2)) + (+ (-> arg2 y) (rand-vu-float-range -0.2 0.2)) + (+ (-> arg2 z) (rand-vu-float-range -0.2 0.2)) + 1.0 + ) + (vector-normalize! s5-1 1.0) + (set-vector! + s4-0 + (+ (-> arg2 x) (rand-vu-float-range -0.2 0.2)) + (+ (-> arg2 y) (rand-vu-float-range 0.0 0.4)) + (+ (-> arg2 z) (rand-vu-float-range -0.2 0.2)) + 1.0 + ) + (vector-normalize! s4-0 1.0) + (set-heading-vec-clear-roll-pitch! (-> self root) s5-1) + (vector-float*! (-> self transv) s4-0 (rand-vu-float-range 20480.0 40960.0)) + ) + (rot-zxy-from-vector! (-> self facing-rot) s5-1) + ) + (set-vector! + (-> self facing-rotv) + (rand-vu-float-range 5461.3335 16384.0) + 0.0 + (rand-vu-float-range 16384.0 36408.89) + 1.0 + ) + (initialize-skeleton self *gnawer-segment-sg* '()) + (go-virtual falling) + (none) + ) + +;; definition for method 23 of type gnawer +;; INFO: Return type mismatch vector vs none. +;; Used lq/sq +(defmethod dummy-23 gnawer ((obj gnawer)) + (when (not (-> obj hidden?)) + (set! (-> obj hidden?) #t) + (logior! (-> obj draw status) 2) + (logclear! (-> obj mask) (process-mask attackable)) + (set! (-> obj skel postbind-function) #f) + (set! (-> obj root-override trans quad) (-> obj post-trans quad)) + (clear-collide-with-as (-> obj root-override)) + (dotimes (v1-12 10) + (set! (-> obj segments v1-12 world-pos quad) (-> obj post-trans quad)) + ) + (set-vector! (-> obj draw bounds) 0.0 0.0 0.0 12288.0) + ) + (none) + ) + +;; definition for method 26 of type gnawer +;; INFO: Return type mismatch uint vs none. +(defmethod dummy-26 gnawer ((obj gnawer)) + (when (-> obj hidden?) + (set! (-> obj hidden?) #f) + (restore-collide-with-as (-> obj root-override)) + (set! (-> obj skel postbind-function) + (the-as (function pointer int process-drawable none) gnawer-joint-callback) + ) + (set! (-> obj draw status) (logand -3 (-> obj draw status))) + ) + (none) + ) + +;; definition for method 24 of type gnawer +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-24 gnawer ((obj gnawer)) + (local-vars (sv-48 vector) (sv-64 vector)) + (let ((s5-0 0) + (s4-0 0) + ) + (let ((f30-0 -1.0) + (s3-0 (-> obj path curve num-cverts)) + ) + (dotimes (s2-0 3) + (let ((s1-0 (rand-vu-int-count s3-0)) + (s0-0 (rand-vu-int-count s3-0)) + ) + (when (= s1-0 s0-0) + (set! s0-0 (rand-vu-int-count s3-0)) + (if (= s1-0 s0-0) + (set! s0-0 (mod (+ s1-0 1) s3-0)) + ) + ) + (set! sv-48 (new 'stack-no-clear 'vector)) + (set! sv-64 (new 'stack-no-clear 'vector)) + (eval-path-curve-div! (-> obj path) sv-48 (the float s1-0) 'interp) + (eval-path-curve-div! (-> obj path) sv-64 (the float s0-0) 'interp) + (let ((f0-4 (vector-vector-distance sv-48 sv-64))) + (when (< f30-0 f0-4) + (set! f30-0 f0-4) + (set! s5-0 s1-0) + (set! s4-0 s0-0) + ) + ) + ) + ) + ) + (set! (-> obj route src-pt-index) s5-0) + (set! (-> obj route dest-pt-index) s4-0) + ) + (let ((v1-13 (-> obj route src-pt-index)) + (s5-1 (-> obj route dest-pt-index)) + ) + (eval-path-curve-div! (-> obj path) (-> obj route src-pt-offset) (the float v1-13) 'interp) + (eval-path-curve-div! (-> obj path) (-> obj route dest-pt-offset) (the float s5-1) 'interp) + ) + (vector-! (-> obj route src-pt-offset) (-> obj route src-pt-offset) (-> obj post-trans)) + (vector-! (-> obj route dest-pt-offset) (-> obj route dest-pt-offset) (-> obj post-trans)) + (let ((f30-1 (-> obj route src-pt-offset y))) + (set! (-> obj route src-pt-offset y) 0.0) + (vector-normalize! (-> obj route src-pt-offset) 10240.0) + (set! (-> obj route src-pt-offset y) f30-1) + ) + (let ((f30-2 (-> obj route dest-pt-offset y))) + (set! (-> obj route dest-pt-offset y) 0.0) + (vector-normalize! (-> obj route dest-pt-offset) 10240.0) + (set! (-> obj route dest-pt-offset y) f30-2) + ) + (let ((f30-3 (atan (-> obj route src-pt-offset x) (-> obj route src-pt-offset z))) + (f0-15 (atan (-> obj route dest-pt-offset x) (-> obj route dest-pt-offset z))) + ) + (set! (-> obj route src-ang) f30-3) + (set! (-> obj route dest-ang) f0-15) + (let ((f30-4 (deg- f0-15 f30-3))) + 0.0 + (let* ((v0-13 (rand-vu-int-count 100)) + (f0-17 (cond + ((< v0-13 67) + 131072.0 + ) + ((< v0-13 82) + 196608.0 + ) + (else + 65536.0 + ) + ) + ) + ) + (set! (-> obj route delta-ang) (if (>= f30-4 0.0) + (- f30-4 f0-17) + (+ f30-4 f0-17) + ) + ) + ) + ) + ) + (let ((f30-5 (* 0.9817476 (-> obj route delta-ang))) + (f28-0 (- (-> obj route dest-pt-offset y) (-> obj route src-pt-offset y))) + ) + (set-vector! (-> obj route surface-dir) f30-5 f28-0 0.0 1.0) + (vector-normalize! (-> obj route surface-dir) 1.0) + (let ((f0-25 (sqrtf (+ (* f30-5 f30-5) (* f28-0 f28-0))))) + (set! (-> obj route surface-dist) f0-25) + (set! (-> obj route total-dist) (+ 20480.0 f0-25)) + ) + ) + (set! (-> obj route total-travel-time) + (the-as uint (the int (/ (-> obj route total-dist) (* 0.016666668 (-> obj speed))))) + ) + (none) + ) + +;; definition for method 22 of type gnawer +;; Used lq/sq +(defmethod dummy-22 gnawer ((obj gnawer) (arg0 float)) + (let ((s4-0 (new 'stack-no-clear 'bounding-box)) + (a3-0 #t) + (gp-0 #t) + ) + (dotimes (s2-0 10) + (let ((v1-4 (-> obj segments s2-0 place))) + (cond + ((>= v1-4 0) + (let ((f0-1 (- arg0 (* 3891.2 (the float v1-4))))) + (cond + ((< f0-1 0.0) + (set! f0-1 0.0) + (set! gp-0 #f) + ) + ((>= f0-1 (-> obj route total-dist)) + (set! f0-1 (-> obj route total-dist)) + ) + (else + (set! gp-0 #f) + ) + ) + (dummy-21 obj s2-0 s4-0 a3-0 f0-1) + ) + ) + (else + (dummy-20 obj s2-0) + ) + ) + ) + (set! a3-0 #f) + ) + (set-vector! + (-> obj root-override trans) + (* 0.5 (+ (-> s4-0 min x) (-> s4-0 max x))) + (* 0.5 (+ (-> s4-0 min y) (-> s4-0 max y))) + (* 0.5 (+ (-> s4-0 min z) (-> s4-0 max z))) + 1.0 + ) + (let* ((f0-10 (- (-> s4-0 max x) (-> obj root-override trans x))) + (f1-12 (- (-> s4-0 max y) (-> obj root-override trans y))) + (f2-7 (- (-> s4-0 max z) (-> obj root-override trans z))) + (f0-14 (sqrtf (+ (* f0-10 f0-10) (* f1-12 f1-12) (* f2-7 f2-7)))) + (a0-3 (-> obj draw bounds)) + (v1-21 (-> obj root-override root-prim)) + (f0-15 (+ 12288.0 f0-14)) + ) + (vector-reset! a0-3) + (set! (-> a0-3 w) f0-15) + (vector-reset! (-> v1-21 local-sphere)) + (set! (-> v1-21 local-sphere w) f0-15) + (set! (-> v1-21 prim-core world-sphere quad) (-> obj root-override trans quad)) + (set! (-> v1-21 prim-core world-sphere w) f0-15) + ) + gp-0 + ) + ) + +;; definition for method 21 of type gnawer +;; Used lq/sq +(defmethod dummy-21 gnawer ((obj gnawer) (arg0 int) (arg1 bounding-box) (arg2 symbol) (arg3 float)) + (let ((gp-0 (-> obj segments arg0))) + (let ((f0-1 (+ 10240.0 (-> obj route surface-dist)))) + (cond + ((< arg3 10240.0) + (let ((f0-3 (* 0.00009765625 arg3))) + (vector-float*! (-> gp-0 world-pos) (-> obj route src-pt-offset) f0-3) + ) + (set! (-> gp-0 world-pos y) (-> obj route src-pt-offset y)) + (vector+! (-> gp-0 world-pos) (-> gp-0 world-pos) (-> obj post-trans)) + ) + ((< arg3 f0-1) + (let* ((f30-0 (/ (+ -10240.0 arg3) (-> obj route surface-dist))) + (f28-0 (+ (* (-> obj route delta-ang) f30-0) (-> obj route src-ang))) + ) + (set-vector! + (-> gp-0 world-pos) + (* 10240.0 (sin f28-0)) + (lerp (-> obj route src-pt-offset y) (-> obj route dest-pt-offset y) f30-0) + (* 10240.0 (cos f28-0)) + 1.0 + ) + ) + (vector+! (-> gp-0 world-pos) (-> gp-0 world-pos) (-> obj post-trans)) + ) + (else + (let ((f0-19 (- 1.0 (* 0.00009765625 (- arg3 f0-1))))) + (vector-float*! (-> gp-0 world-pos) (-> obj route dest-pt-offset) f0-19) + ) + (set! (-> gp-0 world-pos y) (-> obj route dest-pt-offset y)) + (vector+! (-> gp-0 world-pos) (-> gp-0 world-pos) (-> obj post-trans)) + ) + ) + ) + (cond + (arg2 + (set! (-> arg1 min quad) (-> gp-0 world-pos quad)) + (set! (-> arg1 max quad) (-> gp-0 world-pos quad)) + ) + (else + (add-point! arg1 (the-as vector3s (-> gp-0 world-pos))) + ) + ) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector-! s4-1 (-> gp-0 world-pos) (-> obj post-trans)) + (set! (-> s4-1 y) 0.0) + (vector-normalize! s4-1 1.0) + (let ((f0-24 (atan (-> s4-1 x) (-> s4-1 z))) + (s3-1 (new 'stack-no-clear 'vector)) + ) + (vector-rotate-around-y! s3-1 (-> obj route surface-dir) f0-24) + (set! (-> gp-0 orient-mat vector 1 quad) (-> s4-1 quad)) + (set! (-> gp-0 orient-mat vector 2 quad) (-> s3-1 quad)) + ) + ) + (vector-cross! + (the-as vector (-> gp-0 orient-mat)) + (-> gp-0 orient-mat vector 1) + (-> gp-0 orient-mat vector 2) + ) + (vector-normalize! (the-as vector (-> gp-0 orient-mat)) 1.0) + (set! (-> gp-0 orient-mat vector 0 w) 0.0) + (set! (-> gp-0 orient-mat vector 1 w) 0.0) + (let ((f0-27 0.0)) + (set! (-> gp-0 orient-mat vector 2 w) f0-27) + f0-27 + ) + ) + ) + +;; definition for method 20 of type gnawer +;; Used lq/sq +(defmethod dummy-20 gnawer ((obj gnawer) (arg0 int)) + (let ((v1-3 (-> obj segments arg0)) + (a0-1 (-> obj segments (+ arg0 -1))) + ) + (set! (-> v1-3 world-pos quad) (-> a0-1 world-pos quad)) + (let ((v0-0 (-> v1-3 orient-mat))) + (let* ((a2-3 (-> a0-1 orient-mat)) + (v1-4 (-> a2-3 vector 0 quad)) + (a0-2 (-> a2-3 vector 1 quad)) + (a1-5 (-> a2-3 vector 2 quad)) + (a2-4 (-> a2-3 vector 3 quad)) + ) + (set! (-> v0-0 vector 0 quad) v1-4) + (set! (-> v0-0 vector 1 quad) a0-2) + (set! (-> v0-0 vector 2 quad) a1-5) + (set! (-> v0-0 vector 3 quad) a2-4) + ) + v0-0 + ) + ) + ) + +;; definition for method 25 of type gnawer +(defmethod dummy-25 gnawer ((obj gnawer)) + (dotimes (s5-0 3) + (when (> (-> obj hit-points) 0) + (+! (-> obj hit-points) -1) + (set! (-> obj speed) (+ 4096.0 (-> obj speed))) + (when (> (-> obj hit-points) 0) + (set! (-> obj show-damage?) #t) + (let ((s4-0 (+ (-> obj hit-points) 2))) + (let ((s3-0 (-> obj segments s4-0))) + (let ((s1-0 (new 'stack-no-clear 'vector)) + (s2-0 (-> s3-0 world-pos)) + ) + (vector-! s1-0 s2-0 (-> obj root-override trans)) + (set! (-> s1-0 y) 0.0) + (vector-normalize! s1-0 1.0) + (let ((s0-0 (get-process *default-dead-pool* gnawer-falling-segment #x4000))) + (when s0-0 + (let ((t9-2 (method-of-type gnawer-falling-segment activate))) + (t9-2 (the-as gnawer-falling-segment s0-0) obj 'gnawer-falling-segment (the-as pointer #x70004000)) + ) + (run-now-in-process s0-0 gnawer-falling-segment-init-by-other obj s2-0 s1-0) + (-> s0-0 ppointer) + ) + ) + ) + (set! (-> s3-0 place) -1) + ) + (while (< s4-0 10) + (let ((v1-20 (-> obj segments s4-0))) + (if (>= (-> v1-20 place) 0) + (+! (-> v1-20 place) -1) + ) + ) + (+! s4-0 1) + ) + ) + ) + ) + ) + (close-specific-task! (game-task cave-gnawers) (task-status need-hint)) + (<= (-> obj hit-points) 0) + ) + +;; definition for method 28 of type gnawer +;; INFO: Return type mismatch int vs symbol. +(defmethod dummy-28 gnawer ((obj gnawer) (arg0 int) (arg1 int)) + (when (> arg0 0) + (let* ((v1-1 (rand-vu-int-count arg0)) (a0-2 v1-1)) (until (= a0-2 v1-1) + (let ((a1-2 (ash 1 a0-2))) + (if (zero? (logand a1-2 arg1)) + (return (the-as symbol a1-2)) + ) + ) + (set! a0-2 (mod (+ a0-2 1) arg0)) + ) + ) + ) + (the-as symbol 0) + ) + +;; definition for method 27 of type gnawer +;; INFO: Return type mismatch int vs none. +(defmethod dummy-27 gnawer ((obj gnawer)) + (set! (-> obj eco-green-mask) (the-as uint 0)) + (let ((s4-0 (-> obj path curve num-cverts)) + (s3-0 (get-death-count *game-info* #f)) + (s5-0 (-> obj money-mask)) + ) + (when (and *target* (or + (and (= s3-0 1) (and (>= 1.0 (-> *target* fact-info-target health)) (rand-vu-percent? 0.1))) + (and (< 1 s3-0) (and (>= 2.0 (-> *target* fact-info-target health)) (rand-vu-percent? 0.05))) + ) + ) + (let ((v1-14 (dummy-28 obj s4-0 (the-as int s5-0)))) + (logior s5-0 (the-as uint v1-14)) + (set! (-> obj eco-green-mask) (the-as uint (logior (-> obj eco-green-mask) (the-as uint v1-14)))) + ) + ) + ) + (none) + ) + +;; definition for method 29 of type gnawer +(defmethod dummy-29 gnawer ((obj gnawer) (arg0 int) (arg1 vector) (arg2 vector)) + (let ((s1-0 (-> obj path curve num-cverts)) + (s2-0 (new 'stack-no-clear 'vector)) + ) + 0.0 + 0.0 + (eval-path-curve-div! (-> obj path) s2-0 0.0 'interp) + (let* ((f30-0 (-> s2-0 y)) + (f28-0 f30-0) + ) + (eval-path-curve-div! (-> obj path) s2-0 (the float (+ s1-0 -1)) 'interp) + (let ((f30-1 (fmin f30-0 (-> s2-0 y))) + (f28-1 (fmax f28-0 (-> s2-0 y))) + ) + (eval-path-curve-div! (-> obj path) arg1 (the float arg0) 'interp) + (vector-! arg2 arg1 (-> obj post-trans)) + (let ((f0-9 (+ 16384.0 (* 16384.0 (/ (fmax 0.0 (- (-> arg2 y) f30-1)) (- f28-1 f30-1)))))) + (set! (-> arg2 y) 0.0) + (vector-normalize! arg2 f0-9) + ) + ) + ) + ) + (vector+! arg2 arg2 (-> obj post-trans)) + (let ((f0-11 (+ 4096.0 (-> arg2 y)))) + (set! (-> arg2 y) f0-11) + f0-11 + ) + ) + +;; definition for method 30 of type gnawer +;; Used lq/sq +(defmethod dummy-30 gnawer ((obj gnawer) (arg0 process-drawable)) + (local-vars (sv-48 vector)) + (let ((gp-0 (-> obj entity extra perm))) + (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) + (let ((s5-0 (-> gp-0 user-uint16 0)) + (s2-0 -1) + ) + (let ((f30-0 0.0) + (s1-0 (-> obj path curve num-cverts)) + ) + (dotimes (s0-0 s1-0) + (when (logtest? (ash 1 s0-0) s5-0) + (let ((a2-0 (new 'stack-no-clear 'vector))) + (set! sv-48 (new 'stack-no-clear 'vector)) + (dummy-29 obj s0-0 a2-0 sv-48) + ) + (let* ((t9-1 vector-vector-xz-distance) + (a1-2 (-> arg0 root trans)) + (f0-0 (t9-1 sv-48 a1-2)) + ) + (when (or (< s2-0 0) (< f0-0 f30-0)) + (set! s2-0 s0-0) + (set! f30-0 f0-0) + ) + ) + ) + ) + ) + (when (>= s2-0 0) + (let ((v0-2 (logxor s5-0 (the-as uint (ash 1 s2-0))))) + (set! (-> gp-0 user-int16 0) (the-as int v0-2)) + v0-2 + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate gnawer-chewing-on-post (gnawer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (when (= (-> arg0 type) target) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'shove) + (set! (-> a1-4 param 0) (-> arg3 param 0)) + (let ((v1-6 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-6 shove-up) 6144.0) + (set! (-> v1-6 shove-back) 10240.0) + (set! (-> a1-4 param 1) (the-as uint v1-6)) + ) + (send-event-function arg0 a1-4) + ) + ) + (go gnawer-retreat-into-post) + ) + (('attack) + (sound-play-by-name (static-sound-name "gnawer-dies") (new-sound-id) 1024 -381 0 1 #t) + (go gnawer-retreat-into-post) + ) + ) + ) + :exit + (behavior () (stop! (-> self sound2)) (none)) + :trans + (behavior () + (if (and *target* (>= 81920.0 (vector-vector-distance (target-pos 0) (-> self root-override trans)))) + (go gnawer-retreat-into-post) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (cond + ((zero? (rand-vu-int-count 2)) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-identity + ) + (set! (-> gp-0 frame-num) + (rand-vu-float-range 0.0 (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + ) + (else + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-identity + ) + (set! (-> gp-1 frame-num) + (rand-vu-float-range 0.0 (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (while #t + (let ((gp-2 (rand-vu-int-range 1 2)) + (s4-0 (rand-vu-int-range 1 2)) + ) + (dotimes (s5-0 gp-2) + (dotimes (s3-0 s4-0) + (set! (-> self anim-speed) (rand-vu-float-range 0.8 1.0)) + (ja-channel-push! 1 22) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-13 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-13 param 1) (-> self anim-speed)) + (set! (-> a0-13 frame-num) 0.0) + (joint-control-channel-group! a0-13 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 param 0) (the float (+ (-> a0-14 frame-group data 0 length) -1))) + (set! (-> a0-14 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-14 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (set! s4-0 (rand-vu-int-range 1 2)) + (dotimes (s3-1 s4-0) + (set! (-> self anim-speed) (rand-vu-float-range 0.8 1.0)) + (ja-channel-push! 1 22) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-19 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-19 param 1) (-> self anim-speed)) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! a0-19 (the-as art-joint-anim (-> self draw art-group data 9)) 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) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-20 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ) + (ja-channel-push! 1 22) + (let ((a0-23 (-> self skel root-channel 0))) + (set! (-> a0-23 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-23 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-23 param 1) 1.0) + (set! (-> a0-23 frame-num) 0.0) + (joint-control-channel-group! a0-23 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (let ((gp-3 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-3 (-> self node-list data 34)) + (spawn (-> self part2) gp-3) + ) + (let ((gp-4 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-4 (-> self node-list data 33)) + (spawn (-> self part2) gp-4) + ) + (suspend) + (let ((a0-28 (-> self skel root-channel 0))) + (set! (-> a0-28 param 0) (the float (+ (-> a0-28 frame-group data 0 length) -1))) + (set! (-> a0-28 param 1) 1.0) + (joint-control-channel-group-eval! a0-28 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((gp-5 (rand-vu-int-range 1 4))) + (set! (-> self anim-speed) (rand-vu-float-range 0.8 1.0)) + (dotimes (s5-1 gp-5) + (ja-channel-push! 1 22) + (let ((a0-33 (-> self skel root-channel 0))) + (set! (-> a0-33 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-33 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1)) + ) + (set! (-> a0-33 param 1) (-> self anim-speed)) + (set! (-> a0-33 frame-num) 0.0) + (joint-control-channel-group! a0-33 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!) + ) + (until (ja-done? 0) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector<-cspace! s4-1 (-> self node-list data 34)) + (spawn (-> self part2) s4-1) + ) + (let ((s4-2 (new 'stack-no-clear 'vector))) + (vector<-cspace! s4-2 (-> self node-list data 33)) + (spawn (-> self part2) s4-2) + ) + (update! (-> self sound2)) + (suspend) + (let ((a0-39 (-> self skel root-channel 0))) + (set! (-> a0-39 param 0) (the float (+ (-> a0-39 frame-group data 0 length) -1))) + (set! (-> a0-39 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-39 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (stop! (-> self sound2)) + (let ((a0-42 (-> self skel root-channel 0))) + (set! (-> a0-42 frame-group) (the-as art-joint-anim (-> self draw art-group data 13))) + (set! (-> a0-42 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 13)) data 0 length) -1)) + ) + (set! (-> a0-42 param 1) 1.0) + (set! (-> a0-42 frame-num) 0.0) + (joint-control-channel-group! a0-42 (the-as art-joint-anim (-> self draw art-group data 13)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-43 (-> self skel root-channel 0))) + (set! (-> a0-43 param 0) (the float (+ (-> a0-43 frame-group data 0 length) -1))) + (set! (-> a0-43 param 1) 1.0) + (joint-control-channel-group-eval! a0-43 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior gnawer) transform-post) + ) + +;; failed to figure out what this is: +(defstate gnawer-retreat-into-post (gnawer) + :exit + (behavior () (logior! (-> self mask) (process-mask actor-pause)) (none)) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 22) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 12)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 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 12)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (quaternion-identity! (-> self root-override quat)) + (go gnawer-wait-to-run) + (none) + ) + :post + (the-as (function none :behavior gnawer) transform-post) + ) + +;; failed to figure out what this is: +(defstate gnawer-wait-to-run (gnawer) + :code + (behavior () + (set! (-> self draw origin-joint-index) (the-as uint 0)) + (dummy-23 self) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-0 (rand-vu-int-range 240 360))) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0) + (suspend) + ) + ) + (go gnawer-run) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate gnawer-run (gnawer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('touch) + (when (= (-> arg0 type) target) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'shove) + (set! (-> a1-4 param 0) (-> arg3 param 0)) + (let ((v1-5 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-5 shove-up) 6144.0) + (set! (-> v1-5 shove-back) 10240.0) + (set! (-> a1-4 param 1) (the-as uint v1-5)) + ) + (send-event-function arg0 a1-4) + ) + ) + ) + (('attack) + (cond + ((= (-> arg0 type) target) + (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) + (set! (-> a1-7 param 0) (-> arg3 param 0)) + (let ((v1-10 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-10 shove-up) 6144.0) + (set! (-> v1-10 shove-back) 10240.0) + (set! (-> a1-7 param 1) (the-as uint v1-10)) + ) + (send-event-function arg0 a1-7) + ) + ) + (else + (if (< (- (-> *display* base-frame-counter) (the-as int (-> self last-hit-time))) 150) + (return #f) + ) + (let* ((a2-1 (the-as object (-> arg3 param 0))) + (v1-19 + (-> (get-touched-prim + (-> (the-as touching-shapes-entry a2-1) head) + (-> self root-override) + (the-as touching-prims-entry a2-1) + ) + prim-id + ) + ) + (v1-22 (-> self segments v1-19)) + ) + (spawn (-> self part) (-> v1-22 world-pos)) + ) + (if (dummy-25 self) + (go gnawer-die) + ) + (return #t) + v0-0 + ) + ) + ) + ) + ) + :enter + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self route-dist) 0.0) + (dummy-24 self) + (set! (-> self last-hit-time) (the-as uint (-> *display* base-frame-counter))) + (dummy-26 self) + (none) + ) + :exit + (behavior () (logior! (-> self mask) (process-mask actor-pause)) (stop! (-> self sound)) (none)) + :trans + (behavior () + (+! (-> self route-dist) (* (-> self speed) (-> *display* seconds-per-frame))) + (if (dummy-22 self (-> self route-dist)) + (go gnawer-wait-to-run) + ) + (update! (-> self sound)) + (none) + ) + :code + (behavior () + (local-vars (v1-19 symbol) (v1-35 symbol)) + (ja-channel-set! 1) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (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!) + ) + (while #t + (until v1-19 + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-19 (or (ja-done? 0) (-> self show-damage?))) + ) + (when (-> self show-damage?) + (until (not (-> self show-damage?)) + (set! (-> self show-damage?) #f) + (ja-channel-push! 1 30) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (until v1-35 + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-35 (or (ja-done? 0) (-> self show-damage?))) + ) + ) + (ja-channel-push! 1 30) + ) + (let ((gp-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + ) + (none) + ) + :post + (the-as (function none :behavior gnawer) transform-post) + ) + +;; failed to figure out what this is: +(defstate gnawer-die (gnawer) + :enter + (behavior () + (let ((v1-0 (-> self segments))) + (set! (-> self fall-trans quad) (-> v1-0 0 world-pos quad)) + (vector-! (-> self root-override transv) (-> v1-0 0 world-pos) (-> self post-trans)) + ) + (set! (-> self root-override transv y) 0.0) + (vector-normalize! (-> self root-override transv) 1.0) + (set! (-> self root-override transv y) 0.3) + (vector-normalize! (-> self root-override transv) 32768.0) + (none) + ) + :trans + (behavior () + (+! (-> self root-override transv y) (* -409600.0 (-> *display* seconds-per-frame))) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self fall-trans quad)) + (vector-v+! (-> self fall-trans) (-> self fall-trans) (-> self root-override transv)) + (vector-! gp-0 (-> self fall-trans) gp-0) + (dotimes (v1-6 10) + (let ((a1-3 (-> self segments v1-6))) + (vector+! (-> a1-3 world-pos) (-> a1-3 world-pos) gp-0) + ) + ) + (vector+! (-> self root-override trans) (-> self root-override trans) gp-0) + ) + (spool-push *art-control* "maincavecam-gnawer-fuel-cell" 0 self -1.0) + (none) + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (ja-channel-push! 1 30) + (clear-collide-with-as (-> self root-override)) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1))) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go gnawer-dying-give-pickups) + (none) + ) + :post + (the-as (function none :behavior gnawer) ja-post) + ) + +;; failed to figure out what this is: +(defstate gnawer-dying-give-pickups (gnawer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'notify) + (if (and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) + (dummy-30 self (the-as process-drawable arg0)) + ) + ) + ) + ) + ) + :trans + (behavior () (spool-push *art-control* "maincavecam-gnawer-fuel-cell" 0 self -1.0) (none)) + :code + (behavior () + (local-vars (sv-128 symbol)) + (clear-collide-with-as (-> self root-override)) + (set! (-> self skel postbind-function) #f) + (ja-channel-set! 0) + (ja-post) + (logior! (-> self draw status) 2) + (process-entity-status! self (entity-perm-status complete) #t) + (dummy-27 self) + (let ((v1-10 (-> self entity extra perm))) + (logior! (-> v1-10 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-10 user-int16 0) (the-as int (-> self money-mask))) + ) + (dotimes (gp-0 (-> self path curve num-cverts)) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (dummy-29 self gp-0 s4-0 s5-0) + (let ((a1-2 7)) + (let ((v1-14 (ash 1 gp-0))) + (cond + ((logtest? v1-14 (-> self eco-green-mask)) + (set! a1-2 4) + ) + ((logtest? v1-14 (-> self money-mask)) + (set! a1-2 5) + ) + ) + ) + (let ((v1-19 (birth-pickup-at-point s4-0 (the-as pickup-type a1-2) 1.0 #f self (the-as fact-info #f)))) + (send-event (ppointer->process v1-19) 'jump s5-0) + ) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 15) + (suspend) + ) + ) + (set! sv-128 (the-as symbol #f)) + (apply-all (-> self link) actor-link-subtask-complete-hook (& sv-128)) + (when sv-128 + (save-reminder (get-task-control (game-task cave-gnawers)) (-> self gnawer-id) 3) + (go gnawer-give-fuel-cell) + ) + (set! (-> self trans-hook) #f) + (process-entity-status! self (entity-perm-status bit-3) #f) + (logior! (-> self mask) (process-mask actor-pause)) + (until (not (-> self child)) + (suspend) + ) + (dummy-18 self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate gnawer-give-fuel-cell (gnawer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'notify) + (cond + ((and (= (-> arg0 type) maincavecam) (= (-> arg3 param 0) 'die)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (let ((v0-0 (the-as uint (logior (-> self mask) (process-mask actor-pause))))) + (set! (-> self mask) (the-as process-mask v0-0)) + v0-0 + ) + ) + ((and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) + (dummy-30 self (the-as process-drawable arg0)) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (when (not (task-complete? *game-info* (-> self entity extra perm task))) + (spool-push *art-control* "maincavecam-gnawer-fuel-cell" 0 self -1.0) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set-vector! gp-0 4503813.0 46363.85 -12796366.0 1.0) + (let ((s5-0 (the-as maincavecam (get-process *default-dead-pool* maincavecam #x4000)))) + (set! (-> (the-as + maincavecam + (-> (when s5-0 + (let ((t9-4 (method-of-type maincavecam activate))) + (t9-4 s5-0 self 'maincavecam (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + gp-0 + *maincavecam-sg* + (new 'static 'spool-anim :name "maincavecam-gnawer-fuel-cell" :index 3 :parts 1 :command-list '()) + 0 + self + '() + ) + (-> s5-0 ppointer) + ) + 0 + ) + ) + seq + ) + (the-as uint 0) + ) + ) + ) + 0 + (sound-play-by-name (static-sound-name "cell-prize") (new-sound-id) 1024 0 0 1 #t) + (until (not (-> self child)) + (suspend) + ) + ) + (process-entity-status! self (entity-perm-status bit-3) #f) + (logior! (-> self mask) (process-mask actor-pause)) + (dummy-18 self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate gnawer-put-items-at-dest (gnawer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'notify) + (if (and (= (-> arg0 type) money) (= (-> arg3 param 0) 'pickup)) + (dummy-30 self (the-as process-drawable arg0)) + ) + ) + ) + ) + ) + :code + (behavior () + (set! (-> self draw origin-joint-index) (the-as uint 0)) + (clear-collide-with-as (-> self root-override)) + (set! (-> self skel postbind-function) #f) + (ja-channel-set! 0) + (ja-post) + (logior! (-> self draw status) 2) + (case (get-reminder (get-task-control (game-task cave-gnawers)) 3) + (((-> self gnawer-id)) + (when (not (task-complete? *game-info* (-> self entity extra perm task))) + (let ((a0-7 (new 'stack-no-clear 'vector))) + (set-vector! a0-7 4485903.0 51184.027 -12815461.0 1.0) + (birth-pickup-at-point + a0-7 + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + self + (the-as fact-info #f) + ) + ) + ) + ) + ) + (let ((gp-0 (-> self entity extra perm user-uint16 0))) + (when (nonzero? gp-0) + (let ((s5-0 (-> self path curve num-cverts))) + (dotimes (s4-0 s5-0) + (when (logtest? (ash 1 s4-0) gp-0) + (let ((a2-1 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (dummy-29 self s4-0 a2-1 s3-0) + (birth-pickup-at-point s3-0 (pickup-type money) 1.0 #f self (the-as fact-info #f)) + ) + ) + ) + ) + ) + ) + (until (not (-> self child)) + (suspend) + ) + (dummy-18 self) + (none) + ) + ) + +;; definition for function gnawer-joint-callback +;; INFO: Return type mismatch int vs none. +(defun gnawer-joint-callback ((arg0 gnawer)) + (dotimes (s5-0 10) + (let* ((v1-1 (-> *gnawer-segment-infos* s5-0)) + (s4-0 (-> arg0 segments s5-0)) + (s3-0 (-> v1-1 joint-index)) + ) + (countdown (s2-0 (-> v1-1 num-joints)) + (let ((s1-0 (-> arg0 node-list data (-> s3-0 0) bone transform))) + (vector-! (-> s1-0 vector 3) (-> s1-0 vector 3) (-> arg0 root-override trans)) + (vector+! (-> s1-0 vector 3) (-> s1-0 vector 3) (-> s4-0 anim-to-local-trans-offset)) + (matrix*! s1-0 s1-0 (-> s4-0 orient-mat)) + (vector+! (-> s1-0 vector 3) (-> s1-0 vector 3) (-> s4-0 world-pos)) + ) + (set! s3-0 (&-> s3-0 1)) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 10 of type gnawer +(defmethod deactivate gnawer ((obj gnawer)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + (if (nonzero? (-> obj sound2)) + (stop! (-> obj sound2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 7 of type gnawer +;; INFO: Return type mismatch nav-enemy vs gnawer. +(defmethod relocate gnawer ((obj gnawer) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (if (nonzero? (-> obj sound2)) + (&+! (-> obj sound2) arg0) + ) + (the-as + gnawer + ((the-as (function nav-enemy int nav-enemy) (find-parent-method gnawer 7)) (the-as nav-enemy obj) arg0) + ) + ) + +;; definition for method 11 of type gnawer +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! gnawer ((obj gnawer) (arg0 entity-actor)) + (local-vars (sv-16 res-tag) (sv-32 res-tag) (sv-48 res-tag)) + (set! (-> obj hidden?) #f) + (set! (-> obj show-damage?) #f) + (set! (-> obj hit-points) 6) + (set! (-> obj speed) 24576.0) + (set! (-> obj last-hit-time) (the-as uint 0)) + (set! (-> obj route-dist) 0.0) + (logclear! (-> obj mask) (process-mask attackable)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 8) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set-vector! (-> s3-0 local-sphere) 0.0 32768.0 0.0 53248.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core offense) 0) + (set! (-> s2-0 transform-index) 13) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core offense) 0) + (set! (-> s2-1 transform-index) 6) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 3)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 0) + (set! (-> s2-2 transform-index) 7) + (set-vector! (-> s2-2 local-sphere) 0.0 -409.6 1228.8 6144.0) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 4)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core offense) 0) + (set! (-> s2-3 transform-index) 8) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-3) + ) + (let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 5)))) + (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 offense) 0) + (set! (-> s2-4 transform-index) 9) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-4) + ) + (let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 6)))) + (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) 0) + (set! (-> s2-5 transform-index) 10) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-5) + ) + (let ((s2-6 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 7)))) + (set! (-> s2-6 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-6 collide-with) (the-as uint 16)) + (set! (-> s2-6 prim-core offense) 0) + (set! (-> s2-6 transform-index) 11) + (set-vector! (-> s2-6 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-6) + ) + (let ((s2-7 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 7)))) + (set! (-> s2-7 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-7 collide-with) (the-as uint 16)) + (set! (-> s2-7 prim-core offense) 0) + (set! (-> s2-7 transform-index) 12) + (set-vector! (-> s2-7 local-sphere) 0.0 0.0 0.0 6144.0) + (append-prim s3-0 s2-7) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (quaternion-identity! (-> obj root-override quat)) + (initialize-skeleton obj *gnawer-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 8)) + (set! (-> obj post-trans quad) (-> obj root-override trans quad)) + (let ((f0-40 (res-lump-float (-> obj entity) 'rotoffset))) + (quaternion-rotate-y! (-> obj root-override quat) (-> obj root-override quat) f0-40) + ) + (set! (-> obj root-override trans y) (+ -2048.0 (-> obj root-override trans y))) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-81 (res-lump-data arg0 'trans-offset (pointer float) :tag-ptr (& sv-16)))) + (when v1-81 + (+! (-> obj root-override trans x) (-> v1-81 0)) + (+! (-> obj root-override trans y) (-> v1-81 1)) + (+! (-> obj root-override trans z) (-> v1-81 2)) + ) + ) + (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (if (< (-> obj path curve num-cverts) 2) + (go process-drawable-art-error "bad path") + ) + (set! (-> obj part2) (create-launch-control (-> *part-group-id-table* 330) obj)) + (set! (-> obj total-money) 0) + (set! (-> obj money-mask) (the-as uint 0)) + (set! sv-32 (new 'static 'res-tag)) + (let ((v1-96 (res-lump-data arg0 'extra-count (pointer int32) :tag-ptr (& sv-32)))) + (when v1-96 + (case (-> v1-96 0) + ((5) + (set! (-> obj total-money) (-> v1-96 1)) + ) + ) + ) + ) + (when (> (-> obj total-money) 0) + (set! sv-48 (new 'static 'res-tag)) + (let ((a0-49 (res-lump-data arg0 'gnawer (pointer int32) :tag-ptr (& sv-48)))) + (cond + (a0-49 + (let ((v1-100 0)) + (dotimes (a1-30 (-> obj total-money)) + (let ((a3-15 (-> a0-49 a1-30))) + (set! v1-100 (logior v1-100 (ash 1 a3-15))) + ) + ) + (set! (-> obj money-mask) (the-as uint v1-100)) + ) + ) + (else + (go process-drawable-art-error "bad actor params") + ) + ) + ) + ) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 329) obj)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #xc0 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "gnawer-crawl") + :volume #x400 + :fo-min 30 + :fo-max 30 + ) + (-> obj root-override trans) + ) + ) + (set! (-> obj sound2) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "gnawer-chew") + :volume #x400 + :fo-max 40 + ) + (-> obj root-override trans) + ) + ) + (dotimes (v1-110 10) + (let ((a0-59 (-> obj segments v1-110))) + (set! (-> a0-59 place) v1-110) + (set! (-> a0-59 world-pos quad) (-> obj post-trans quad)) + (vector-reset! (-> a0-59 anim-to-local-trans-offset)) + (+! (-> a0-59 anim-to-local-trans-offset z) (* 5447.68 (the float v1-110))) + ) + ) + (logior! (-> obj skel status) 1) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj gnawer-id) (+ (actor-count-before (-> obj link)) 1)) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go gnawer-put-items-at-dest) + (go gnawer-chewing-on-post) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/maincave/mother-spider-egg_REF.gc b/test/decompiler/reference/levels/maincave/mother-spider-egg_REF.gc new file mode 100644 index 0000000000..b19b1965dc --- /dev/null +++ b/test/decompiler/reference/levels/maincave/mother-spider-egg_REF.gc @@ -0,0 +1,674 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type mother-spider-egg +(deftype mother-spider-egg (process-drawable) + ((parent-override (pointer mother-spider) :offset 12) + (root-override collide-shape-moving :offset 112) + (anim-speed float :offset-assert 176) + (part2 sparticle-launch-control :offset-assert 180) + (falling-start-time uint64 :offset-assert 184) + (fall-dest vector :inline :offset-assert 192) + (fall-dest-normal vector :inline :offset-assert 208) + (broken-look lod-set :inline :offset-assert 224) + (traj trajectory :inline :offset-assert 272) + (shadow-pos vector :inline :offset-assert 320) + ) + :heap-base #xe0 + :method-count-assert 22 + :size-assert #x150 + :flag-assert #x1600e00150 + (:methods + (dummy-20 (_type_) none 20) + (draw-egg-shadow (_type_ vector symbol) symbol 21) + ) + ) + +;; definition for method 3 of type mother-spider-egg +(defmethod inspect mother-spider-egg ((obj mother-spider-egg)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tanim-speed: ~f~%" (-> obj anim-speed)) + (format #t "~T~Tpart2: ~A~%" (-> obj part2)) + (format #t "~T~Tfalling-start-time: ~D~%" (-> obj falling-start-time)) + (format #t "~T~Tfall-dest: #~%" (-> obj fall-dest)) + (format #t "~T~Tfall-dest-normal: #~%" (-> obj fall-dest-normal)) + (format #t "~T~Tbroken-look: #~%" (-> obj broken-look)) + (format #t "~T~Ttraj: #~%" (-> obj traj)) + (format #t "~T~Tshadow-pos: #~%" (-> obj shadow-pos)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *mother-spider-egg-unbroken-sg* spider-egg + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1 0 2) + :longest-edge (meters 0) + :shadow 4 + ) + +;; failed to figure out what this is: +(defskelgroup *mother-spider-egg-broken-sg* spider-egg + 5 + -1 + ((6 (meters 20)) (7 (meters 40)) (8 (meters 999999))) + :bounds (static-spherem 0 1 0 2) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 324) (new 'static 'sparticle-launch-group + :length 2 + :duration #x5 + :linger-duration #x384 + :flags (sp-group-flag use-local-clock) + :name "group-spider-egg-hatches" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 2018 :fade-after (meters 50.0) :falloff-to (meters 50.0)) + (sp-item 2071 :fade-after (meters 50.0) :falloff-to (meters 50.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2071) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 16.0) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-scale-x (meters 0.1)) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.1)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-int spt-timer 225) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2072) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2072) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-scale-x (meters 0.1)) + (sp-flt spt-scale-y (meters 2.0)) + (sp-flt spt-scalevel-y (meters 0.2)) + (sp-flt spt-fade-a -1.4222223) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2018) (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 8.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (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 32.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 16.0 1.0) + (sp-rnd-flt spt-b 32.0 32.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 1.4222223) + (sp-flt spt-accel-y 0.27306667) + (sp-int spt-timer 375) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int spt-next-time 45) + (sp-launcher-by-id spt-next-launcher 2073) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2073) + (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* 325) (new 'static 'sparticle-launch-group + :length 1 + :duration #x5 + :linger-duration #x177 + :flags (sp-group-flag use-local-clock) + :name "group-spider-egg-explodes" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 2074 :fade-after (meters 50.0) :falloff-to (meters 50.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2074) (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 8.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (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 32.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 16.0 1.0) + (sp-rnd-flt spt-b 32.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -1.4222223) + (sp-flt spt-accel-y 0.27306667) + (sp-int spt-timer 375) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) + +;; definition for method 21 of type mother-spider-egg +;; Used lq/sq +(defmethod draw-egg-shadow mother-spider-egg ((obj mother-spider-egg) (arg0 vector) (arg1 symbol)) + (cond + ((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) (logtest? (-> obj draw status) 8)) + (let ((s5-0 (new 'stack-no-clear 'collide-tri-result)) + (a1-1 (new 'stack-no-clear 'vector)) + (a2-1 (new 'stack-no-clear 'vector)) + ) + (set! (-> a1-1 quad) (-> obj root-override trans quad)) + (set! (-> a1-1 y) (+ 1228.8 (-> a1-1 y))) + (set-vector! a2-1 0.0 -61440.0 0.0 1.0) + (cond + ((>= (dummy-10 *collide-cache* a1-1 a2-1 7372.8 1 obj s5-0 1) 0.0) + (let ((v1-11 (-> obj draw shadow-ctrl))) + (set! (-> v1-11 settings flags) (logand -33 (-> v1-11 settings flags))) + ) + 0 + (let ((v1-14 (-> obj draw shadow-ctrl))) + (set! (-> v1-14 settings bot-plane w) (- (+ -4096.0 (-> s5-0 intersect y)))) + ) + 0 + (let ((v1-17 (-> obj draw shadow-ctrl))) + (set! (-> v1-17 settings top-plane w) (- (+ 6144.0 (-> s5-0 intersect y)))) + ) + 0 + (return #t) + ) + (else + (let ((v1-22 (-> obj draw shadow-ctrl))) + (logior! (-> v1-22 settings flags) 32) + ) + 0 + ) + ) + ) + ) + (else + (let ((v1-25 (-> obj draw shadow-ctrl))) + (logior! (-> v1-25 settings flags) 32) + ) + 0 + ) + ) + #f + ) + +;; failed to figure out what this is: +(defstate mother-spider-egg-falling (mother-spider-egg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (go mother-spider-egg-die-while-falling) + ) + ) + ) + :enter + (behavior () (set! (-> self falling-start-time) (the-as uint (-> *display* base-frame-counter))) (none)) + :trans + (behavior () + (let ((f30-0 (fmin + (the float (- (-> *display* base-frame-counter) (the-as int (-> self falling-start-time)))) + (-> self traj time) + ) + ) + ) + (let ((f28-0 (/ f30-0 (-> self traj time)))) + (eval-position! (-> self traj) f30-0 (-> self root-override trans)) + (let ((f0-3 (lerp 0.3 0.4 f28-0))) + (set-vector! (-> self root-override scale) f0-3 f0-3 f0-3 1.0) + ) + ) + (when (= f30-0 (-> self traj time)) + (sound-play-by-name (static-sound-name "eggs-lands") (new-sound-id) 1024 0 0 1 #t) + (go mother-spider-egg-on-ground) + ) + ) + (draw-egg-shadow self (-> self shadow-pos) #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 0) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) (-> self anim-speed)) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider-egg) transform-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-egg-on-ground (mother-spider-egg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'touch) + (dummy-55 (-> self root-override) arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 0.7 6144.0 16384.0) + ) + ((= v1-0 'attack) + (go mother-spider-egg-die) + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if (not (draw-egg-shadow self (-> self shadow-pos) #t)) + (set! (-> self shadow-pos quad) (-> self fall-dest quad)) + ) + (none) + ) + :trans + (behavior () + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (go mother-spider-egg-hatch) + ) + (draw-egg-shadow self (-> self shadow-pos) #f) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 30) + (let ((gp-0 (new 'stack-no-clear 'quaternion)) + (s5-0 (new 'stack-no-clear 'quaternion)) + ) + (let ((s3-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (quaternion-copy! gp-0 (-> self root-override quat)) + (set-vector! s4-0 0.0 1.0 0.0 1.0) + (set! (-> s3-0 quad) (-> self fall-dest-normal quad)) + (vector-normalize! s3-0 1.0) + (quaternion-from-two-vectors! s5-0 s4-0 s3-0) + ) + (quaternion*! s5-0 s5-0 gp-0) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.3) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!) + ) + (until (ja-done? 0) + (let* ((f0-8 (ja-frame-num 0)) + (v1-19 (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (f0-9 (/ f0-8 (the float (+ (-> v1-19 data 0 length) -1)))) + ) + (quaternion-slerp! (-> self root-override quat) gp-0 s5-0 f0-9) + ) + (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.3) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (while #t + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-12 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-12 param 1) (-> self anim-speed)) + (set! (-> a0-12 frame-num) 0.0) + (joint-control-channel-group! a0-12 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1))) + (set! (-> a0-13 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider-egg) transform-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-egg-hatch (mother-spider-egg) + :trans + (behavior () + (when (and (zero? (-> self draw cur-lod)) (logtest? (-> self draw status) 8)) + (let ((a1-0 (new 'stack-no-clear 'vector))) + (set! (-> a1-0 quad) (-> self fall-dest quad)) + (compute-and-draw-shadow + (-> self root-override trans) + a1-0 + (-> self fall-dest-normal) + (the-as vector 7372.8) + 81920.0 + (the-as float 0) + ) + ) + ) + (none) + ) + :code + (behavior () + (send-event (ppointer->process (-> self parent-override)) 'trigger) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 324) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (lods-assign! (-> self draw) (-> self broken-look)) + (ja-channel-push! 1 60) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((v1-37 (-> self draw shadow-ctrl))) + (logior! (-> v1-37 settings flags) 32) + ) + 0 + (go mother-spider-egg-die-exit) + (none) + ) + :post + (the-as (function none :behavior mother-spider-egg) transform-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-egg-die (mother-spider-egg) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((v1-3 (-> self draw shadow-ctrl))) + (logior! (-> v1-3 settings flags) 32) + ) + 0 + (lods-assign! (-> self draw) (-> self broken-look)) + (ja-channel-push! 1 30) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 325) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 12)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 12)) 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!) + ) + ) + (go mother-spider-egg-die-exit) + (none) + ) + :post + (the-as (function none :behavior mother-spider-egg) ja-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-egg-die-while-falling (mother-spider-egg) + :trans + (behavior () + (let ((f0-2 (fmin + (the float (- (-> *display* base-frame-counter) (the-as int (-> self falling-start-time)))) + (-> self traj time) + ) + ) + ) + (eval-position! (-> self traj) f0-2 (-> self root-override trans)) + ) + (none) + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (clear-collide-with-as (-> self root-override)) + (let ((v1-5 (-> self draw shadow-ctrl))) + (logior! (-> v1-5 settings flags) 32) + ) + 0 + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-2 (method-of-type part-tracker activate))) + (t9-2 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 325) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (lods-assign! (-> self draw) (-> self broken-look)) + (ja-channel-push! 1 30) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 12)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 12)) 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!) + ) + ) + (go mother-spider-egg-die-exit) + (none) + ) + :post + (the-as (function none :behavior mother-spider-egg) ja-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-egg-die-exit (mother-spider-egg) + :code + (behavior () + (send-event (ppointer->process (-> self parent-override)) 'untrigger) + (logior! (-> self draw status) 2) + (let ((v1-8 (-> self draw shadow-ctrl))) + (logior! (-> v1-8 settings flags) 32) + ) + 0 + (set! (-> self root-override nav-flags) (logand -2 (-> self root-override nav-flags))) + (set! (-> self root-override nav-flags) (logand -3 (-> self root-override nav-flags))) + (clear-collide-with-as (-> self root-override)) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + ) + +;; definition for function mother-spider-egg-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior mother-spider-egg-init-by-other mother-spider-egg ((arg0 entity) (arg1 vector) (arg2 vector) (arg3 vector)) + (set! (-> self entity) arg0) + (set! (-> self anim-speed) (rand-vu-float-range 0.8 1.2)) + (set! (-> self falling-start-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self fall-dest quad) (-> arg2 quad)) + (set! (-> self fall-dest-normal quad) (-> arg3 quad)) + (let ((s4-1 (new 'process 'collide-shape-moving self (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-1 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-1 reaction) default-collision-reaction) + (set! (-> s4-1 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-1 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 2048.0 0.0 3686.4) + (set-root-prim! s4-1 s3-0) + ) + (set! (-> s4-1 nav-radius) 4096.0) + (backup-collide-with-as s4-1) + (set! (-> self root-override) s4-1) + ) + (set! (-> self root-override trans quad) (-> arg1 quad)) + (set-vector! (-> self root-override scale) 0.3 0.3 0.3 1.0) + (quaternion-copy! (-> self root-override quat) (-> self parent-override 0 root-override quat)) + (logior! (-> self mask) (process-mask actor-pause)) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (set! (-> self mask) (logior (process-mask attackable) (-> self mask))) + (initialize-skeleton self *mother-spider-egg-unbroken-sg* '()) + (dummy-9 (-> self broken-look) *mother-spider-egg-broken-sg* (-> self draw art-group) (-> self entity)) + (set! (-> self draw shadow-ctrl) (new 'process 'shadow-control 0.0 0.0 614400.0 (the-as float 60) 245760.0)) + (set! (-> self nav) (new 'process 'nav-control (-> self root-override) 16 40960.0)) + (logior! (-> self nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) + (set! (-> self root-override nav-flags) (logand -2 (-> self root-override nav-flags))) + (logior! (-> self root-override nav-flags) 2) + (set! (-> self nav extra-nav-sphere quad) (-> self fall-dest quad)) + (set! (-> self nav extra-nav-sphere w) 4096.0) + (setup-from-to-height! (-> self traj) (-> self root-override trans) arg2 4096.0 -4.551111) + (create-connection! + *cavecrystal-light-control* + self + (-> self entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 4096.0 + ) + (go mother-spider-egg-falling) + (none) + ) diff --git a/test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc b/test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc index 1fcc5878e0..0e68ecfb10 100644 --- a/test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc +++ b/test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc @@ -32,6 +32,7 @@ (trans-u float :offset-assert 4) (swing-arc-u float :offset-assert 8) ) + :pack-me :method-count-assert 9 :size-assert #xc :flag-assert #x90000000c @@ -105,7 +106,8 @@ ;; definition of type mother-spider (deftype mother-spider (process-drawable) - ((mode uint64 :offset-assert 176) + ((root-override collide-shape :offset 112) + (mode uint64 :offset-assert 176) (damage int32 :offset-assert 184) (baby-count int32 :offset-assert 188) (max-baby-count int32 :offset-assert 192) @@ -153,18 +155,18 @@ :size-assert #x1f0 :flag-assert #x20018001f0 (:methods - (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) + (TODO-RENAME-20 (_type_ vector vector) symbol 20) + (TODO-RENAME-21 (_type_ vector float symbol) symbol 21) + (dummy-22 (_type_ matrix vector) float 22) + (TODO-RENAME-23 (_type_) none 23) + (TODO-RENAME-24 (_type_) number 24) + (letgo-player? (_type_) symbol 25) + (grab-player? (_type_) symbol 26) + (STUB-27 (_type_) none 27) + (STUB-28 (_type_) none 28) + (TODO-RENAME-29 (_type_ symbol symbol) none 29) + (spawn-child (_type_ vector vector symbol) int 30) + (is-player-stuck? (_type_) symbol 31) ) ) diff --git a/test/decompiler/reference/levels/misty/quicksandlurker_REF.gc b/test/decompiler/reference/levels/misty/quicksandlurker_REF.gc new file mode 100644 index 0000000000..ca87df7c58 --- /dev/null +++ b/test/decompiler/reference/levels/misty/quicksandlurker_REF.gc @@ -0,0 +1,1267 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 198) (new 'static 'sparticle-launch-group + :length 48 + :duration #xbb8 + :linger-duration #x5dc + :name "group-quicksandlurker-missile" + :launcher + (new 'static 'inline-array sparticle-group-item 48 + (sp-item 2481 :flags (launch-asap) :binding 2479) + (sp-item 2479 :flags (start-dead) :binding 2480) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + (sp-item 2480 :flags (start-dead launch-asap)) + ) + :bounds (new 'static 'sphere :w 12288.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2481) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 9 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.01)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 0.0) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags bit3) + (sp-func spt-func 'sparticle-track-root-prim) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2479) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 2.0) + (sp-flt spt-scale-x (meters 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 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.006666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.0666667) + (sp-flt spt-fade-g -1.0666667) + (sp-flt spt-fade-b 0.0) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 81) + (sp-launcher-by-id spt-next-launcher 2482) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.1)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2482) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2480) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 1.0 5.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.0666667) + (sp-flt spt-fade-g -1.0666667) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-accel-y -2.7306666) + (sp-flt spt-friction 0.97) + (sp-int-plain-rnd spt-timer 30 119 1) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 2482) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.4) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 199) (new 'static 'sparticle-launch-group + :length 1 + :duration #x5 + :linger-duration #x5dc + :name "group-quicksandlurker-pre-missile" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2483)) + :bounds (new 'static 'sphere :w 12288.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2483) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.053333335) 1.0) + (sp-flt spt-scalevel-x (meters -0.006666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.7111111) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-accel-y -0.68266666) + (sp-rnd-flt spt-friction 0.85 0.05 1.0) + (sp-int-plain-rnd spt-timer 30 119 1) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 2482) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.4) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 200) + (new 'static 'sparticle-launch-group + :length 3 + :duration #xa + :linger-duration #x5dc + :name "group-quicksandlurker-missile-impact" + :launcher + (new 'static 'inline-array sparticle-group-item 3 (sp-item 2484) (sp-item 2485) (sp-item 2486)) + :bounds (new 'static 'sphere :w 12288.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2484) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 64.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.006666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.7111111) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-accel-y -0.68266666) + (sp-rnd-flt spt-friction 0.85 0.05 1.0) + (sp-int-plain-rnd spt-timer 30 119 1) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 2482) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 0.4) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2486) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-r -0.35555556) + (sp-flt spt-fade-g -0.35555556) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -0.30476192) + (sp-rnd-flt spt-accel-y -0.68266666 0.68266666 1.0) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 2482) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 180.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2485) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 6.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 128.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 32.0 1.0) + (sp-flt spt-a 96.0) + (sp-flt spt-fade-a -4.8) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 201) (new 'static 'sparticle-launch-group + :length 16 + :duration #x384 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-quicksandlurker-hide" + :launcher + (new 'static 'inline-array sparticle-group-item 16 + (sp-item 124 :flags (is-3d) :period 900 :length 63) + (sp-item 125 :period 900 :length 15) + (sp-item 126 :flags (is-3d) :period 900 :length 15) + (sp-item 127 :flags (is-3d) :period 900 :length 15) + (sp-item 128 :period 900 :length 10 :binding 129) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 202) (new 'static 'sparticle-launch-group + :length 16 + :duration #x384 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-quicksandlurker-popup" + :launcher + (new 'static 'inline-array sparticle-group-item 16 + (sp-item 124 :flags (is-3d) :period 900 :length 63) + (sp-item 125 :period 900 :length 15) + (sp-item 126 :flags (is-3d) :period 900 :length 15) + (sp-item 127 :flags (is-3d) :period 900 :length 15) + (sp-item 128 :period 900 :length 10 :binding 129) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +;; definition of type quicksandlurker-missile +(deftype quicksandlurker-missile (process-drawable) + ((parent-override (pointer quicksandlurker) :offset 12) + (root-override collide-shape-moving :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + +;; definition for method 3 of type quicksandlurker-missile +(defmethod inspect quicksandlurker-missile ((obj quicksandlurker-missile)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defstate quicksandlurker-missile-idle (quicksandlurker-missile) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touched) + (when (cond + ((= (-> arg0 type) target) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'attack) + (set! (-> a1-3 param 0) (-> arg3 param 0)) + (let ((a2-1 (new 'static 'attack-info :mask #x20))) + (set! (-> a2-1 mode) 'explode) + (set! (-> a1-3 param 1) (the-as uint a2-1)) + ) + (send-event-function arg0 a1-3) + ) + ) + (else + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 4) + (set! (-> a1-4 message) 'attack) + (set! (-> a1-4 param 0) (-> arg3 param 0)) + (set! (-> a1-4 param 1) (the-as uint 'explode)) + (let ((v1-12 (+ *global-attack-id* 1))) + (set! *global-attack-id* v1-12) + (set! (-> a1-4 param 2) (the-as uint v1-12)) + ) + (set! (-> a1-4 param 3) (the-as uint 0)) + (send-event-function arg0 a1-4) + ) + ) + ) + (send-event (ppointer->process (-> self parent-override)) 'victory) + (go quicksandlurker-missile-impact) + ) + ) + ) + ) + :enter + (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :code + (behavior () + (while (< (- (-> *display* base-frame-counter) (-> self state-time)) 1200) + (dummy-33 + (-> self root-override) + (-> self root-override transv) + (-> self root-override root-prim collide-with) + ) + (if (or + (logtest? (-> self root-override status) 8) + (< (vector-vector-distance (-> self root-override trans) (the-as vector (-> self root-override trans-old))) + 40.96 + ) + ) + (go quicksandlurker-missile-impact) + ) + (spawn (-> self part) (-> self root-override trans)) + (find-ground-and-draw-shadow + (-> self root-override trans) + (the-as vector #f) + 8192.0 + (the-as uint 1) + (the-as process #f) + 0.0 + 81920.0 + ) + (suspend) + ) + (dummy-18 self) + (none) + ) + :post + (behavior () (dummy-47 (-> self root-override)) (none)) + ) + +;; failed to figure out what this is: +(defstate quicksandlurker-missile-impact (quicksandlurker-missile) + :code + (behavior () + (sound-play-by-name + (static-sound-name "sack-land") + (new-sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self root-override trans)) + ) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 (the-as part-tracker gp-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 200) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-1 ppointer) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (suspend) + ) + (dummy-18 self) + (none) + ) + ) + +;; definition of type quicksandlurker-missile-init-data +(deftype quicksandlurker-missile-init-data (structure) + ((position vector :offset-assert 0) + (velocity vector :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +;; definition for method 3 of type quicksandlurker-missile-init-data +(defmethod inspect quicksandlurker-missile-init-data ((obj quicksandlurker-missile-init-data)) + (format #t "[~8x] ~A~%" obj 'quicksandlurker-missile-init-data) + (format #t "~Tposition: #~%" (-> obj position)) + (format #t "~Tvelocity: #~%" (-> obj velocity)) + obj + ) + +;; definition for function quicksandlurker-missile-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior quicksandlurker-missile-init-by-other quicksandlurker-missile ((arg0 quicksandlurker-missile-init-data) (arg1 entity)) + (set! (-> self entity) arg1) + (let ((s5-0 (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 2973)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 2867.2) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 1)) + (set! (-> s5-0 event-self) 'touched) + (set! (-> self root-override) s5-0) + ) + (set! (-> self root-override trans quad) (-> arg0 position quad)) + (set! (-> self root-override quat vec quad) (-> self parent-override 0 root-override quat vec quad)) + (vector-identity! (-> self root-override scale)) + (set! (-> self root-override transv quad) (-> arg0 velocity quad)) + (set! (-> self part) (create-launch-control (-> *part-group-id-table* 198) self)) + (go quicksandlurker-missile-idle) + (none) + ) + +;; definition for function spawn-quicksandlurker-missile +;; INFO: Return type mismatch int vs none. +(defun spawn-quicksandlurker-missile ((arg0 quicksandlurker) (arg1 vector) (arg2 vector) (arg3 entity)) + (let ((s5-0 (new 'stack-no-clear 'quicksandlurker-missile-init-data))) + (set! (-> s5-0 position) arg1) + (set! (-> s5-0 velocity) arg2) + (let ((s3-0 (get-process *default-dead-pool* quicksandlurker-missile #x4000))) + (when s3-0 + (let ((t9-1 (method-of-type quicksandlurker-missile activate))) + (t9-1 (the-as quicksandlurker-missile s3-0) arg0 'quicksandlurker-missile (the-as pointer #x70004000)) + ) + (run-now-in-process s3-0 quicksandlurker-missile-init-by-other s5-0 arg3) + (-> s3-0 ppointer) + ) + ) + ) + 0 + (none) + ) + +;; definition of type quicksandlurker +(deftype quicksandlurker (process-drawable) + ((root-override collide-shape :offset 112) + (original-position vector :inline :offset-assert 176) + (y-offset float :offset-assert 192) + (theta-angle float :offset-assert 196) + (radial-offset float :offset-assert 200) + (bob-angle float :offset-assert 204) + (mud-entity entity-actor :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xd4 + :flag-assert #x14007000d4 + ) + +;; definition for method 3 of type quicksandlurker +(defmethod inspect quicksandlurker ((obj quicksandlurker)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Toriginal-position: #~%" (-> obj original-position)) + (format #t "~T~Ty-offset: ~f~%" (-> obj y-offset)) + (format #t "~T~Ttheta-angle: ~f~%" (-> obj theta-angle)) + (format #t "~T~Tradial-offset: ~f~%" (-> obj radial-offset)) + (format #t "~T~Tbob-angle: ~f~%" (-> obj bob-angle)) + (format #t "~T~Tmud-entity: ~A~%" (-> obj mud-entity)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *quicksandlurker-sg* quicksandlurker + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +;; definition for function orient-to-face-target +(defbehavior orient-to-face-target quicksandlurker () + (if *target* + (seek-to-point-toward-point! (-> self root-override) (-> *target* control trans) 65536.0 60) + ) + ) + +;; definition for function get-height-over-navmesh! +;; ERROR: function has no type analysis. Cannot decompile. + +;; definition for function intersects-nav-mesh? +(defun intersects-nav-mesh? ((arg0 quicksandlurker) (arg1 int) (arg2 (inline-array vector)) (arg3 vector)) + (if (dummy-16 arg0 arg1 arg2 arg3) + #t + ) + ) + +;; definition for function quicksandlurker-default-event-handler +(defbehavior quicksandlurker-default-event-handler quicksandlurker ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + enter-state + (go quicksandlurker-die) + ) + (('victory) + (go quicksandlurker-victory) + ) + ) + ) + +;; definition for function inc-angle +(defun inc-angle ((arg0 (pointer float)) (arg1 float)) + (+! (-> arg0 0) arg1) + (when (< 65536.0 (-> arg0 0)) + (let ((f0-4 (+ -65536.0 (-> arg0 0)))) + (set! (-> arg0 0) f0-4) + f0-4 + ) + ) + ) + +;; definition for function quicksandlurker-post +;; INFO: Return type mismatch int vs none. +(defbehavior quicksandlurker-post quicksandlurker () + (inc-angle (&-> self theta-angle) (* 9102.223 (-> *display* seconds-per-frame))) + (inc-angle (&-> self bob-angle) (* 14563.556 (-> *display* seconds-per-frame))) + (let ((f28-0 (* (-> self radial-offset) (cos (-> self theta-angle)))) + (f30-2 (* 0.0 (sin (-> self theta-angle)))) + ) + (let ((f0-10 (* (-> self radial-offset) (sin (-> self theta-angle))))) + (set! (-> self root-override trans x) (+ (-> self original-position x) f28-0)) + (set! (-> self root-override trans z) (+ (-> self original-position z) f0-10)) + ) + (let* ((v1-4 (-> self mud-entity)) + (a0-5 (if v1-4 + (-> v1-4 extra process) + ) + ) + ) + (if a0-5 + (set! (-> self root-override trans y) + (+ (get-ripple-height (the-as water-anim a0-5) (-> self root-override trans)) f30-2 (-> self y-offset)) + ) + (set! (-> self root-override trans y) (+ (-> self original-position y) f30-2 (-> self y-offset))) + ) + ) + ) + (transform-post) + (none) + ) + +;; definition for function quicksandlurker-check-hide-transition +;; INFO: Return type mismatch object vs none. +(defbehavior quicksandlurker-check-hide-transition quicksandlurker () + (when *target* + (if (and + (and *target* (>= 20480.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (!= (-> *target* next-state name) 'target-flop) + ) + (go quicksandlurker-hide) + ) + 0.0 + (let ((a0-2 (-> self nav)) + (a1-1 (-> *target* control trans)) + ) + (when (if (dummy-16 a0-2 a1-1) + #t + ) + (if (< (- (-> *target* control trans y) (-> self original-position y)) 0.0) + (go quicksandlurker-hide) + ) + ) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate quicksandlurker-idle (quicksandlurker) + :event + (the-as (function process int symbol event-message-block object :behavior quicksandlurker) #f) + :enter + (behavior () (logior! (-> self draw status) 2) (none)) + :exit + (behavior () (set! (-> self draw status) (logand -3 (-> self draw status))) (none)) + :trans + (behavior () + (if (and + *target* + (>= 163840.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + (go quicksandlurker-wait) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior quicksandlurker) ja-post) + ) + +;; failed to figure out what this is: +(defstate quicksandlurker-wait (quicksandlurker) + :event + quicksandlurker-default-event-handler + :trans + (behavior () + (cond + ((and *target* (>= 81920.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (set! (-> self y-offset) 1228.8) + (go quicksandlurker-track) + ) + ((or + (not *target*) + (< 163840.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + (set! (-> self y-offset) (seek (-> self y-offset) -6553.6 (* 20480.0 (-> *display* seconds-per-frame)))) + (if (= (-> self y-offset) -6553.6) + (go quicksandlurker-idle) + ) + ) + (else + (set! (-> self y-offset) (seek (-> self y-offset) 1228.8 (* 20480.0 (-> *display* seconds-per-frame)))) + ) + ) + (none) + ) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-0 (the int (* 300.0 (rand-vu-float-range 1.5 2.0)))) + (s5-0 5) + (s4-0 0) + ) + (ja-channel-push! 1 30) + (while #t + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (+! s4-0 1) + (when (< s5-0 s4-0) + (set! s4-0 0) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (orient-to-face-target) + (let ((v1-55 (-> self skel root-channel 0))) + (set! (-> v1-55 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + ) + (let ((v1-58 (-> self skel root-channel 0))) + (set! (-> v1-58 num-func) num-func-identity) + (set! (-> v1-58 frame-num) 0.0) + ) + (suspend) + ) + ) + (none) + ) + :post + quicksandlurker-post + ) + +;; failed to figure out what this is: +(defstate quicksandlurker-yawn (quicksandlurker) + :event + quicksandlurker-default-event-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) 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 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go quicksandlurker-wait) + (none) + ) + :post + quicksandlurker-post + ) + +;; failed to figure out what this is: +(defstate quicksandlurker-track (quicksandlurker) + :event + quicksandlurker-default-event-handler + :trans + (behavior () + (if (or + (not *target*) + (< 81920.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + (go quicksandlurker-wait) + ) + (quicksandlurker-check-hide-transition) + (none) + ) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-0 (the int (* 300.0 (rand-vu-float-range 0.8 1.2)))) + (s5-0 1) + (s4-0 0) + ) + (while #t + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) 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 2)) 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!) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (+! s4-0 1) + (when (>= s4-0 s5-0) + (if (logtest? (-> self draw status) 8) + (go quicksandlurker-attack) + ) + ) + ) + (orient-to-face-target) + (let ((v1-39 (-> self skel root-channel 0))) + (set! (-> v1-39 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + ) + (let ((v1-42 (-> self skel root-channel 0))) + (set! (-> v1-42 num-func) num-func-identity) + (set! (-> v1-42 frame-num) 0.0) + ) + (suspend) + ) + ) + (none) + ) + :post + quicksandlurker-post + ) + +;; definition for function quicksandlurker-spit +;; Used lq/sq +(defbehavior quicksandlurker-spit quicksandlurker () + (let ((gp-0 (new-stack-vector0))) + (let ((s5-0 (new-stack-vector0))) + (set! (-> gp-0 quad) (-> (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 9)) quad)) + (vector-! s5-0 (target-pos 5) gp-0) + (let ((f1-0 (vector-xz-length s5-0))) + (set! (-> s5-0 y) (fmin (-> s5-0 y) (* 0.5 f1-0))) + ) + (vector-normalize! s5-0 49152.0) + (spawn-quicksandlurker-missile self gp-0 s5-0 (-> self entity)) + ) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 part-tracker-init (-> *part-group-id-table* 199) -1 #f #f #f gp-0) + (-> s5-1 ppointer) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate quicksandlurker-attack (quicksandlurker) + :event + quicksandlurker-default-event-handler + :trans + quicksandlurker-check-hide-transition + :code + (behavior () + (let ((gp-0 #f) + (f30-0 51.0) + ) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (orient-to-face-target) + (when (and (not gp-0) (>= (ja-aframe-num 0) f30-0)) + (set! gp-0 #t) + (quicksandlurker-spit) + ) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (go quicksandlurker-track) + (none) + ) + :post + quicksandlurker-post + ) + +;; failed to figure out what this is: +(defstate quicksandlurker-victory (quicksandlurker) + :event + quicksandlurker-default-event-handler + :trans + quicksandlurker-check-hide-transition + :code + (behavior () + (ja-channel-push! 1 60) + (cond + ((rand-vu-percent? 0.5) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) 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 6)) 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!) + ) + ) + ) + (else + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (go quicksandlurker-track) + (none) + ) + :post + quicksandlurker-post + ) + +;; failed to figure out what this is: +(defstate quicksandlurker-hide (quicksandlurker) + :event + quicksandlurker-default-event-handler + :enter + (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :exit + (behavior () (restore-collide-with-as (-> self root-override)) (none)) + :trans + (behavior () + (if (not *target*) + (go quicksandlurker-wait) + ) + (let ((a0-0 (-> self nav)) + (a1-0 (-> *target* control trans)) + ) + (cond + ((or + (if (dummy-16 a0-0 a1-0) + #t + ) + (and *target* (>= 16384.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (go quicksandlurker-popup) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 0.75) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 0.75) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-5 (method-of-type part-tracker activate))) + (t9-5 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 201) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (clear-collide-with-as (-> self root-override)) + (while #t + (orient-to-face-target) + (suspend) + ) + (none) + ) + :post + quicksandlurker-post + ) + +;; failed to figure out what this is: +(defstate quicksandlurker-popup (quicksandlurker) + :trans + quicksandlurker-check-hide-transition + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 202) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (orient-to-face-target) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go quicksandlurker-track) + (none) + ) + :post + quicksandlurker-post + ) + +;; failed to figure out what this is: +(defstate quicksandlurker-die (quicksandlurker) + :event + (the-as + (function process int symbol event-message-block object :behavior quicksandlurker) + process-drawable-death-event-handler + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 60) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) 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 9)) 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!) + ) + ) + (dummy-18 self) + (none) + ) + :post + quicksandlurker-post + ) + +;; definition for method 11 of type quicksandlurker +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! quicksandlurker ((obj quicksandlurker) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 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 0.0 0.0 8192.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 1) + (set! (-> s2-0 transform-index) 3) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4096.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 1) + (set! (-> s2-1 transform-index) 5) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 4096.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-2 prim-core offense) 2) + (set! (-> s2-2 transform-index) 5) + (set-vector! (-> s2-2 local-sphere) 0.0 -2048.0 0.0 5324.8) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set! (-> obj root-override trans y) (+ -2048.0 (-> obj root-override trans y))) + (set! (-> obj original-position quad) (-> obj root-override trans quad)) + (set! (-> obj theta-angle) (rand-vu-float-range 0.0 65536.0)) + (set! (-> obj bob-angle) (rand-vu-float-range 0.0 65536.0)) + (set! (-> obj radial-offset) 4096.0) + (set! (-> obj y-offset) -6553.6) + (set-yaw-angle-clear-roll-pitch! (-> obj root-override) (rand-vu-float-range 0.0 65536.0)) + (initialize-skeleton obj *quicksandlurker-sg* '()) + (set! (-> obj nav) (new 'process 'nav-control (-> obj root-override) 16 40960.0)) + (logior! (-> obj nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) + (set! (-> obj fact) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (set! (-> obj mud-entity) (entity-actor-lookup (-> obj entity) 'water-actor 0)) + (go quicksandlurker-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/ogre/flying-lurker_REF.gc b/test/decompiler/reference/levels/ogre/flying-lurker_REF.gc index ceb8739674..2583f56561 100644 --- a/test/decompiler/reference/levels/ogre/flying-lurker_REF.gc +++ b/test/decompiler/reference/levels/ogre/flying-lurker_REF.gc @@ -463,7 +463,7 @@ (logtest? (-> obj draw status) 8) (< (vector-vector-xz-distance-squared (-> obj root trans) (camera-pos)) 10485760000.0) ) - (let ((s3-1 (new 'stack-no-clear 'collide-mesh-cache-tri)) + (let ((s3-1 (new 'stack-no-clear 'collide-tri-result)) (a1-1 (new 'stack-no-clear 'vector)) (a2-0 (new 'stack-no-clear 'vector)) ) @@ -471,10 +471,10 @@ (set! (-> a1-1 y) (+ -8192.0 (-> a1-1 y))) (set-vector! a2-0 0.0 -81920.0 0.0 1.0) (when (>= (dummy-10 *collide-cache* a1-1 a2-0 8192.0 1 pp s3-1 1) 0.0) - (set! (-> s3-1 normal w) 8192.0) + (set! (-> s3-1 intersect w) 8192.0) (when (and - (sphere-in-view-frustum? (the-as sphere (-> s3-1 normal))) - (< 822083600.0 (vector-vector-distance-squared (-> s3-1 normal) (camera-pos))) + (sphere-in-view-frustum? (the-as sphere (-> s3-1 intersect))) + (< 822083600.0 (vector-vector-distance-squared (-> s3-1 intersect) (camera-pos))) ) (set! s4-0 #t) (let ((v1-17 s5-0)) @@ -482,11 +482,11 @@ ) 0 (let ((v1-19 s5-0)) - (set! (-> v1-19 settings bot-plane w) (- (+ -8192.0 (-> s3-1 normal y)))) + (set! (-> v1-19 settings bot-plane w) (- (+ -8192.0 (-> s3-1 intersect y)))) ) 0 (let ((v1-21 s5-0)) - (set! (-> v1-21 settings top-plane w) (- (+ 6144.0 (-> s3-1 normal y)))) + (set! (-> v1-21 settings top-plane w) (- (+ 6144.0 (-> s3-1 intersect y)))) ) 0 (let ((s2-2 (new 'stack-no-clear 'bounding-box))) @@ -495,7 +495,7 @@ (vector+float! (-> s2-2 min) s1-1 -18432.0) (vector+float! (-> s2-2 max) s1-1 18432.0) ) - (add-spheres! s2-2 (the-as (pointer sphere) (-> s3-1 normal)) 1) + (add-spheres! s2-2 (the-as (pointer sphere) (-> s3-1 intersect)) 1) (let ((f0-17 (* 0.5 (vector-vector-distance (-> s2-2 min) (-> s2-2 max))))) (set-vector! (-> obj draw bounds) diff --git a/test/decompiler/reference/levels/robocave/spider-egg_REF.gc b/test/decompiler/reference/levels/robocave/spider-egg_REF.gc new file mode 100644 index 0000000000..1a4b4deab4 --- /dev/null +++ b/test/decompiler/reference/levels/robocave/spider-egg_REF.gc @@ -0,0 +1,360 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type spider-egg +(deftype spider-egg (process-drawable) + ((root-override collide-shape-moving :offset 112) + (notify-actor entity-actor :offset-assert 176) + (broken-look lod-set :inline :offset-assert 180) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xd5 + :flag-assert #x14007000d5 + ) + +;; definition for method 3 of type spider-egg +(defmethod inspect spider-egg ((obj spider-egg)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tnotify-actor: ~A~%" (-> obj notify-actor)) + (format #t "~T~Tbroken-look: #~%" (-> obj broken-look)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *spider-egg-unbroken-sg* spider-egg + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1 0 2) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *spider-egg-broken-sg* spider-egg + 5 + -1 + ((6 (meters 20)) (7 (meters 40)) (8 (meters 999999))) + :bounds (static-spherem 0 1 0 2) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate spider-egg-idle (spider-egg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 none)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'touch) + (dummy-55 (-> self root-override) arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 0.7 6144.0 16384.0) + ) + ((= v1-0 'can-spawn?) + (return (the-as object #t)) + v0-0 + ) + ((= v1-0 'notify-spawned) + (go spider-egg-hatch) + ) + ((= v1-0 'attack) + (go spider-egg-die) + ) + ) + ) + ) + ) + :enter + (behavior ((arg0 symbol)) (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :code + (behavior ((arg0 symbol)) + (let ((f30-0 (rand-vu-float-range 0.8 1.2))) + (cond + (arg0 + (ja-channel-set! 1) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> gp-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> gp-1 param 1) f30-0) + (set! (-> gp-1 frame-num) + (rand-vu-float-range 0.0 (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + (joint-control-channel-group! gp-1 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1))) + (set! (-> a0-5 param 1) f30-0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (else + (ja-channel-push! 1 60) + ) + ) + (while #t + (let ((gp-2 (rand-vu-int-range 2 6))) + (dotimes (s5-0 gp-2) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) f30-0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 9)) 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) f30-0) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (ja-channel-push! 1 30) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 frame-group) (the-as art-joint-anim (-> self draw art-group data 13))) + (set! (-> a0-13 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 13)) data 0 length) -1)) + ) + (set! (-> a0-13 param 1) 1.0) + (set! (-> a0-13 frame-num) 0.0) + (joint-control-channel-group! a0-13 (the-as art-joint-anim (-> self draw art-group data 13)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 param 0) (the float (+ (-> a0-14 frame-group data 0 length) -1))) + (set! (-> a0-14 param 1) 1.0) + (joint-control-channel-group-eval! a0-14 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (ja-channel-push! 1 30) + ) + ) + (none) + ) + :post + (the-as (function none :behavior spider-egg) ja-post) + ) + +;; failed to figure out what this is: +(defstate spider-egg-hatch (spider-egg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 symbol)) + (case arg2 + (('can-spawn?) + (return (the-as object #f)) + v0-0 + ) + ) + ) + :code + (behavior () + (dummy-18 self) + (logclear! (-> self mask) (process-mask actor-pause)) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 324) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (lods-assign! (-> self draw) (-> self broken-look)) + (ja-channel-push! 1 60) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-8 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! a0-8 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1))) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (logior! (-> self draw status) 2) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior spider-egg) ja-post) + ) + +;; failed to figure out what this is: +(defstate spider-egg-die (spider-egg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 symbol)) + (case arg2 + (('can-spawn?) + (return (the-as object #f)) + v0-0 + ) + ) + ) + :code + (behavior () + (dummy-18 self) + (logclear! (-> self mask) (process-mask actor-pause)) + (when (-> self notify-actor) + (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) 'notify) + (set! (-> a1-0 param 0) (the-as uint 'die)) + (let ((t9-1 send-event-function) + (v1-9 (-> self notify-actor)) + ) + (t9-1 + (if v1-9 + (-> v1-9 extra process) + ) + a1-0 + ) + ) + ) + ) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 325) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (lods-assign! (-> self draw) (-> self broken-look)) + (ja-channel-push! 1 30) + (clear-collide-with-as (-> self root-override)) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 12)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 12)) 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!) + ) + ) + (logior! (-> self draw status) 2) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior spider-egg) ja-post) + ) + +;; definition for method 11 of type spider-egg +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! spider-egg ((obj spider-egg) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (set! (-> obj mask) (logior (process-mask attackable) (-> 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) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 2048.0 0.0 3686.4) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) 4096.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *spider-egg-unbroken-sg* '()) + (dummy-9 (-> obj broken-look) *spider-egg-broken-sg* (-> obj draw art-group) (-> obj entity)) + (set-vector! (-> obj root-override scale) 0.4 0.4 0.4 1.0) + (if (not (dummy-60 (-> obj root-override) 12288.0 40960.0 #t (the-as uint 1))) + (go process-drawable-art-error "no ground") + ) + (set! (-> obj root-override trans y) (+ -409.6 (-> obj root-override trans y))) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (set! (-> s4-1 quad) (-> obj root-override surface-normal quad)) + (+! (-> s4-1 x) (rand-vu-float-range -0.2 0.2)) + (+! (-> s4-1 z) (rand-vu-float-range -0.2 0.2)) + (vector-normalize! s4-1 1.0) + (quaternion-axis-angle! + (-> obj root-override quat) + (-> s4-1 x) + (-> s4-1 y) + (-> s4-1 z) + (rand-vu-float-range 0.0 65536.0) + ) + ) + (dummy-47 (-> obj root-override)) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (if (> (entity-actor-count arg0 'alt-actor) 0) + (set! (-> obj notify-actor) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj notify-actor) #f) + ) + (go spider-egg-idle #t) + (none) + ) diff --git a/test/decompiler/reference/levels/snow/snow-bumper_REF.gc b/test/decompiler/reference/levels/snow/snow-bumper_REF.gc new file mode 100644 index 0000000000..5f906f9fbc --- /dev/null +++ b/test/decompiler/reference/levels/snow/snow-bumper_REF.gc @@ -0,0 +1,515 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type snow-bumper +(deftype snow-bumper (process-drawable) + ((bumper-id int32 :offset-assert 176) + (base-shove-ry float :offset-assert 180) + (max-shove-diff-ry float :offset-assert 184) + (part2 sparticle-launch-control :offset-assert 188) + (last-shoved-player-time uint64 :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xc8 + :flag-assert #x16006000c8 + (:methods + (dummy-20 (_type_) none 20) + (shove-player (_type_ process-drawable) none 21) + ) + ) + +;; definition for method 3 of type snow-bumper +(defmethod inspect snow-bumper ((obj snow-bumper)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tbumper-id: ~D~%" (-> obj bumper-id)) + (format #t "~T~Tbase-shove-ry: ~f~%" (-> obj base-shove-ry)) + (format #t "~T~Tmax-shove-diff-ry: ~f~%" (-> obj max-shove-diff-ry)) + (format #t "~T~Tpart2: ~A~%" (-> obj part2)) + (format #t "~T~Tlast-shoved-player-time: ~D~%" (-> obj last-shoved-player-time)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *snow-bumper-sg* snow-bumper + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 2.2 0 3.4) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 519) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-snow-bumper-idle" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 1893 :fade-after (meters 90.0) :falloff-to (meters 90.0) :period 25 :length 10) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1893) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 15.0) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-z 0.0) + (sp-flt spt-scale-x (meters 1.5)) + (sp-flt spt-scale-y (meters 6.0)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 64.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-vel-y (meters 0.013333334)) + (sp-flt spt-scalevel-x (meters 0.0038461538)) + (sp-flt spt-scalevel-y (meters -0.03076923)) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 25) + (sp-cpuinfo-flags bit2 bit3 bit14) + (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 5.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-group-id-table* 520) (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-snow-bumper-shove" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 1895)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1895) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 16.0) + (sp-flt spt-x (meters 5.5)) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-z 0.0) + (sp-flt spt-scale-x (meters 2.0)) + (sp-flt spt-scale-y (meters 6.0)) + (sp-rnd-flt spt-r 64.0 32.0 1.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-flt spt-vel-x (meters 0.033333335)) + (sp-flt spt-scalevel-x (meters 0.008333334)) + (sp-flt spt-scalevel-y (meters 0.2)) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 25) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 45.0) 1.0) + (sp-end) + ) + ) + ) + +;; definition for method 21 of type snow-bumper +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod shove-player snow-bumper ((obj snow-bumper) (arg0 process-drawable)) + (with-pp + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-! s5-0 (-> arg0 root trans) (-> obj root trans)) + (set! (-> s5-0 y) 0.0) + (vector-normalize! s5-0 1.0) + (let* ((f0-3 (atan (-> s5-0 x) (-> s5-0 z))) + (f30-0 (-> obj base-shove-ry)) + (f28-0 (-> obj max-shove-diff-ry)) + (f0-4 (deg- f0-3 f30-0)) + ) + (when (< f28-0 (fabs f0-4)) + (let ((f30-1 (if (>= f0-4 0.0) + (+ f30-0 f28-0) + (- f30-0 f28-0) + ) + ) + ) + (set-vector! s5-0 (sin f30-1) 0.0 (cos f30-1) 1.0) + ) + ) + ) + (let ((f0-12 (+ -16384.0 (atan (-> s5-0 x) (-> s5-0 z))))) + (set! (-> *part-id-table* 1895 init-specs 17 initial-valuef) (+ -4096.0 f0-12)) + ) + (spawn (-> obj part2) (-> obj root trans)) + (let ((s3-1 (new 'stack-no-clear 'vector))) + (vector-normalize-copy! s3-1 s5-0 32768.0) + (vector+! s3-1 s3-1 (-> obj root trans)) + (vector-! s5-0 s3-1 (-> arg0 root trans)) + ) + (let ((f30-3 (vector-xz-length s5-0))) + (vector-normalize! s5-0 1.0) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) pp) + (set! (-> a1-12 num-params) 2) + (set! (-> a1-12 message) 'shove) + (set! (-> a1-12 param 0) (the-as uint #f)) + (let ((v1-16 (new 'static 'attack-info :mask #xc2))) + (set! (-> v1-16 vector quad) (-> s5-0 quad)) + (set! (-> v1-16 shove-up) 4096.0) + (set! (-> v1-16 shove-back) f30-3) + (set! (-> a1-12 param 1) (the-as uint v1-16)) + ) + (if (send-event-function *target* a1-12) + (set! (-> obj last-shoved-player-time) (the-as uint (-> *display* base-frame-counter))) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate snow-bumper-active-far-idle (snow-bumper) + :trans + (behavior () + (if (and *target* (>= 135895450000.0 (vector-vector-xz-distance-squared (-> self root trans) (target-pos 0)))) + (go snow-bumper-active-close-idle) + ) + 0 + (none) + ) + :code + (behavior () + (transform-post) + (suspend) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate snow-bumper-active-close-idle (snow-bumper) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack 'bonk) + (when (= (-> arg0 type) target) + (let ((gp-0 (-> arg3 param 0))) + (when (and + (>= 6144.0 (vector-vector-xz-distance (-> self root trans) (target-pos 0))) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry gp-0) + (the-as collide-shape-moving (-> self root)) + (the-as uint 1) + ) + ) + (close-specific-task! (game-task snow-bumpers) (task-status need-hint)) + (go snow-bumper-deactivate) + ) + ) + ) + ) + ) + ) + :trans + (behavior () + (cond + (*target* + (let* ((gp-0 (target-pos 0)) + (f30-0 (vector-vector-xz-distance (-> self root trans) gp-0)) + (f28-0 (- (-> gp-0 y) (-> self root trans y))) + ) + (if (< 368640.0 f30-0) + (go snow-bumper-active-far-idle) + ) + (if (and + (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-shoved-player-time))) 150) + (>= 20480.0 f30-0) + (>= f28-0 -4096.0) + (>= 11059.2 f28-0) + ) + (shove-player self *target*) + ) + ) + ) + (else + (go snow-bumper-active-far-idle) + ) + ) + (spawn (-> self part) (-> self root trans)) + (update! (-> self sound)) + (none) + ) + :code + (behavior () + (transform-post) + (suspend) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate snow-bumper-deactivate (snow-bumper) + :exit + (behavior () (stop! (-> self sound)) (logior! (-> self mask) (process-mask actor-pause)) (none)) + :trans + (the-as (function none :behavior snow-bumper) rider-trans) + :code + (behavior () + (local-vars (sv-16 symbol)) + (logclear! (-> self mask) (process-mask actor-pause)) + (sound-play-by-name (static-sound-name "bumper-pwr-dwn") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 0.05) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (spawn (-> self part) (-> self root trans)) + (update! (-> self sound)) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 0.05) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (stop! (-> self sound)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (suspend) + ) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-10 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 0.02) + (set! (-> a0-10 frame-num) 0.0) + (joint-control-channel-group! a0-10 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1))) + (set! (-> a0-11 param 1) 0.02) + (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (set! sv-16 (the-as symbol #f)) + (apply-all (-> self link) actor-link-subtask-complete-hook (& sv-16)) + (when sv-16 + (save-reminder (get-task-control (game-task snow-bumpers)) (-> self bumper-id) 0) + (go snow-bumper-spawn-fuel-cell) + ) + (go snow-bumper-inactive-idle) + (none) + ) + :post + (the-as (function none :behavior snow-bumper) rider-post) + ) + +;; failed to figure out what this is: +(defstate snow-bumper-spawn-fuel-cell (snow-bumper) + :code + (behavior () + (ja-channel-set! 1) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + ) + (transform-post) + (if (not (task-complete? *game-info* (-> self entity extra perm task))) + (birth-pickup-at-point + (-> self root trans) + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #t + self + (the-as fact-info #f) + ) + ) + (until (not (-> self child)) + (suspend) + ) + (go snow-bumper-inactive-idle) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate snow-bumper-inactive-idle (snow-bumper) + :code + (behavior () + (set! (-> self root nav-radius) 6963.2) + (ja-channel-set! 1) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + ) + (transform-post) + (suspend) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +;; definition for method 10 of type snow-bumper +(defmethod deactivate snow-bumper ((obj snow-bumper)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 7 of type snow-bumper +;; INFO: Return type mismatch process-drawable vs snow-bumper. +(defmethod relocate snow-bumper ((obj snow-bumper) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (the-as + snow-bumper + ((the-as (function process-drawable int process-drawable) (find-parent-method snow-bumper 7)) obj arg0) + ) + ) + +;; definition for method 11 of type snow-bumper +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! snow-bumper ((obj snow-bumper) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (set! (-> obj last-shoved-player-time) (the-as uint 0)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 2) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set-vector! (-> s3-0 local-sphere) 0.0 9011.2 0.0 13926.4) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 3)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 6) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4915.2) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 2)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 3) + (set-vector! (-> s2-1 local-sphere) 0.0 8192.0 0.0 11878.4) + (append-prim s3-0 s2-1) + ) + ) + (set! (-> s4-0 nav-radius) 20480.0) + (backup-collide-with-as s4-0) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-bumper-sg* '()) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 519) obj)) + (set! (-> obj part2) (create-launch-control (-> *part-group-id-table* 520) obj)) + (nav-mesh-connect obj (-> obj root) (the-as nav-control #f)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj bumper-id) (+ (actor-count-before (-> obj link)) 1)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "snow-bumper") + :volume #x400 + :fo-max 40 + ) + (-> obj root 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 3)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (transform-post) + (set! (-> obj base-shove-ry) 0.0) + (set! (-> obj max-shove-diff-ry) 32768.0) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-52 (res-lump-data (-> obj entity) 'rotmin (pointer float) :tag-ptr (& sv-16)))) + (when v1-52 + (set! (-> obj base-shove-ry) (-> v1-52 0)) + (set! (-> obj max-shove-diff-ry) (-> v1-52 1)) + ) + ) + (cond + ((and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (if (and + (= (get-reminder (get-task-control (game-task snow-bumpers)) 0) (-> obj bumper-id)) + (not (task-complete? *game-info* (-> obj entity extra perm task))) + ) + (go snow-bumper-spawn-fuel-cell) + (go snow-bumper-inactive-idle) + ) + ) + (else + (go snow-bumper-active-far-idle) + ) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/snow/snow-ram-h_REF.gc b/test/decompiler/reference/levels/snow/snow-ram-h_REF.gc index 23554a3598..fc290cd5bc 100644 --- a/test/decompiler/reference/levels/snow/snow-ram-h_REF.gc +++ b/test/decompiler/reference/levels/snow/snow-ram-h_REF.gc @@ -3,7 +3,8 @@ ;; definition of type ram (deftype ram (process-drawable) - ((ram-id int32 :offset-assert 176) + ((root-override collide-shape-moving :offset 112) + (ram-id int32 :offset-assert 176) (give-fuel-cell? symbol :offset-assert 180) (give-fuel-cell-anim spool-anim :offset-assert 184) (part2 sparticle-launch-control :offset-assert 188) @@ -15,9 +16,9 @@ :size-assert #xe0 :flag-assert #x17007000e0 (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) + (dummy-20 (_type_) object 20) + (dummy-21 (_type_) object 21) + (dummy-22 (_type_) symbol 22) ) ) diff --git a/test/decompiler/reference/levels/snow/snow-ram_REF.gc b/test/decompiler/reference/levels/snow/snow-ram_REF.gc new file mode 100644 index 0000000000..b7402fab95 --- /dev/null +++ b/test/decompiler/reference/levels/snow/snow-ram_REF.gc @@ -0,0 +1,592 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defskelgroup *ram-sg* ram + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 5 0 8.5) + :longest-edge (meters 7.7) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 526) (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-ram-hit-wall" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1921) + (sp-item 1922 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1920) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-rnd-flt spt-num 64.0 16.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.2) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 16.0 1.0) + (sp-rnd-flt spt-g 128.0 48.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-flt spt-scalevel-x (meters -0.00066666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -20.48 13.653334 1.0) + (sp-rnd-flt spt-friction 0.92 0.05 1.0) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit0 bit3 bit12) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 170.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 180.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1922) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 100.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -0.60952383) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2 bit3 bit12) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 180.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1921) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 6.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 100.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 96.0) + (sp-flt spt-fade-a -2.1333334) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 527) (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-ram-wheel-puffs" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 1923 :fade-after (meters 70.0) :falloff-to (meters 70.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1923) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-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 1.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 100.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.26666668) + (sp-flt spt-accel-y -1.3653333) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-end) + ) + ) + ) + +;; definition for method 20 of type ram +(defmethod dummy-20 ram ((obj ram)) + (let ((gp-0 (-> obj part))) + (when (nonzero? gp-0) + (let ((a2-0 (-> obj node-list data 8 bone transform)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set-vector! s5-0 0.0 0.0 -49152.0 1.0) + (vector-matrix*! s5-0 s5-0 a2-0) + (set! (-> *part-id-table* 1920 init-specs 16 initial-valuef) (+ 16384.0 (-> obj orient-ry))) + (spawn gp-0 s5-0) + ) + ) + ) + ) + +;; definition for method 21 of type ram +(defmethod dummy-21 ram ((obj ram)) + (let ((gp-0 (-> obj part2))) + (let ((s3-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s3-0 (-> obj node-list data 5)) + (set-vector! s4-0 13312.0 -5324.8 0.0 1.0) + (vector-rotate-around-y! s4-0 s4-0 (-> obj orient-ry)) + (vector+! s4-0 s4-0 s3-0) + (spawn gp-0 s4-0) + (set-vector! s4-0 -13312.0 -5324.8 0.0 1.0) + (vector-rotate-around-y! s4-0 s4-0 (-> obj orient-ry)) + (vector+! s4-0 s4-0 s3-0) + (spawn gp-0 s4-0) + ) + (let ((s3-1 (new 'stack-no-clear 'vector)) + (s4-1 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s3-1 (-> obj node-list data 6)) + (set-vector! s4-1 13312.0 -5324.8 0.0 1.0) + (vector-rotate-around-y! s4-1 s4-1 (-> obj orient-ry)) + (vector+! s4-1 s4-1 s3-1) + (spawn gp-0 s4-1) + (set-vector! s4-1 -13312.0 -5324.8 0.0 1.0) + (vector-rotate-around-y! s4-1 s4-1 (-> obj orient-ry)) + (vector+! s4-1 s4-1 s3-1) + (spawn gp-0 s4-1) + ) + ) + ) + +;; definition for method 22 of type ram +(defmethod dummy-22 ram ((obj ram)) + (process-entity-status! obj (entity-perm-status complete) #t) + (let ((v1-0 (alt-actor-list-subtask-incomplete-count obj))) + (cond + ((zero? v1-0) + (let ((v1-3 (-> obj entity extra perm))) + (logior! (-> v1-3 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-3 user-int8 2) 1) + ) + (if (not (task-complete? *game-info* (-> obj entity extra perm task))) + (return #t) + ) + ) + ((= v1-0 1) + (close-specific-task! (game-task snow-ram) (task-status need-reminder)) + ) + (else + (close-specific-task! (game-task snow-ram) (task-status need-reminder-a)) + ) + ) + ) + #f + ) + +;; failed to figure out what this is: +(defstate ram-idle (ram) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (when ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> self root-override) + (the-as uint 1) + ) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'attack) + (set! (-> a1-3 param 0) (-> arg3 param 0)) + (let ((v1-7 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-7 shove-up) 2048.0) + (set! (-> v1-7 shove-back) 8192.0) + (set! (-> a1-3 param 1) (the-as uint v1-7)) + ) + (send-event-function arg0 a1-3) + ) + ) + ) + ) + ) + :exit + (behavior () (logior! (-> self mask) (process-mask actor-pause)) (none)) + :trans + (behavior () + (rider-trans) + (if (-> self give-fuel-cell-anim) + (spool-push *art-control* (-> self give-fuel-cell-anim name) 0 self -99.0) + ) + (none) + ) + :code + (behavior () + (local-vars (sv-16 symbol)) + (ja-channel-push! 1 22) + (while #t + (sound-play-by-name (static-sound-name "set-ram") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) 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 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((gp-1 #f)) + (sound-play-by-name (static-sound-name "slam-crash") (new-sound-id) 1024 0 0 1 #t) + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-8 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! a0-8 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (let ((f30-0 (ja-aframe-num 0))) + (when (and (not gp-1) (>= f30-0 61.0)) + (set! gp-1 #t) + (dummy-20 self) + ) + (if (and (>= f30-0 62.0) (< f30-0 97.0)) + (dummy-21 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!) + ) + ) + ) + (logior! (-> self mask) (process-mask actor-pause)) + (set! sv-16 (the-as symbol #f)) + (apply-function-forward (-> self link) actor-link-dead-hook (& sv-16)) + (when (or sv-16 (nonzero? (-> self root-override riders num-riders))) + (let ((v1-67 (-> self entity extra perm))) + (logior! (-> v1-67 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-67 user-int8 0) 1) + ) + (send-event (ppointer->process (-> self child)) 'jump) + (go ram-fun-idle) + ) + ) + (none) + ) + :post + (the-as (function none :behavior ram) rider-post) + ) + +;; failed to figure out what this is: +(defstate ram-fun-idle (ram) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (when (= (-> arg0 type) ram-boss) + (if (dummy-22 self) + (go ram-give-fuel-cell) + ) + ) + ) + ) + ) + :trans + (behavior () + (if (-> self give-fuel-cell-anim) + (spool-push *art-control* (-> self give-fuel-cell-anim name) 0 self -99.0) + ) + (none) + ) + :code + (behavior () + (if (-> self give-fuel-cell?) + (go ram-give-fuel-cell) + ) + (ja-channel-push! 1 0) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +;; failed to figure out what this is: +(defstate ram-give-fuel-cell (ram) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (if (and (= (-> arg0 type) snowcam) (= (-> arg3 param 0) 'die)) + (go ram-fun-idle) + ) + ) + ) + ) + :exit + (behavior () + (process-entity-status! self (entity-perm-status bit-3) #f) + (logior! (-> self mask) (process-mask actor-pause)) + (none) + ) + :code + (behavior () + (set! (-> self give-fuel-cell?) #f) + (ja-channel-push! 1 0) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (when (and (not (task-complete? *game-info* (-> self entity extra perm task))) (-> self give-fuel-cell-anim)) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (let* ((gp-1 (the-as snowcam (get-process *default-dead-pool* snowcam #x4000))) + (v1-14 (when gp-1 + (let ((t9-6 (method-of-type snowcam activate))) + (t9-6 gp-1 self 'snowcam (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + pov-camera-init-by-other + (-> self root-override trans) + *snowcam-sg* + (-> self give-fuel-cell-anim) + 0 + self + '() + ) + (-> gp-1 ppointer) + ) + ) + ) + (set! (-> (the-as (pointer snowcam) v1-14) 0 seq) (the-as uint 1)) + ) + (sound-play-by-name (static-sound-name "cell-prize") (new-sound-id) 1024 0 0 1 #t) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + ) + (go ram-fun-idle) + (none) + ) + ) + +;; definition for method 10 of type ram +(defmethod deactivate ram ((obj ram)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 7 of type ram +;; INFO: Return type mismatch process-drawable vs ram. +(defmethod relocate ram ((obj ram) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (the-as ram ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; definition for method 11 of type ram +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! ram ((obj ram) (arg0 entity-actor)) + (set! (-> obj give-fuel-cell?) #f) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 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-vector! (-> s3-0 local-sphere) 0.0 20480.0 0.0 34816.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 8) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 20480.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 2)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 3)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 3) + (set-vector! (-> s2-1 local-sphere) 0.0 20480.0 0.0 34816.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 4)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 0) + (set! (-> s2-2 transform-index) 3) + (set-vector! (-> s2-2 local-sphere) -4096.0 28672.0 12288.0 2252.8) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) 20480.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *ram-sg* '()) + (logior! (-> obj skel status) 1) + (ja-post) + (dummy-47 (-> obj root-override)) + (set! (-> obj orient-ry) (quaternion-y-angle (-> obj root-override quat))) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 526) obj)) + (set! (-> obj part2) (create-launch-control (-> *part-group-id-table* 527) obj)) + (set! (-> obj ram-id) (res-lump-value arg0 'extra-id int)) + (case (-> obj ram-id) + ((1) + (set! (-> obj give-fuel-cell-anim) + (new 'static 'spool-anim :name "snowcam-ram-boss-in-cave-fuel-cell" :index 7 :parts 1 :command-list '()) + ) + (set-vector! (-> obj fuel-cell-dest-pos) 3137396.8 803676.2 -13560558.0 1.0) + ) + ((2) + (set! (-> obj give-fuel-cell-anim) + (new 'static 'spool-anim :name "snowcam-ram-boss-ice-pond-fuel-cell" :index 8 :parts 1 :command-list '()) + ) + (set-vector! (-> obj fuel-cell-dest-pos) 2790289.5 1058152.5 -13639766.0 1.0) + ) + ((3) + (set! (-> obj give-fuel-cell-anim) + (new 'static 'spool-anim :name "snowcam-ram-boss-snow-ball-fuel-cell" :index 9 :parts 1 :command-list '()) + ) + (set-vector! (-> obj fuel-cell-dest-pos) 4208423.0 1037348.9 -13591491.0 1.0) + ) + (else + (set! (-> obj give-fuel-cell-anim) #f) + ) + ) + (let ((s4-1 #f)) + (if (nonzero? (-> obj entity extra perm user-int8 0)) + (set! s4-1 #t) + ) + (let ((s3-1 (= (res-lump-value arg0 'mode uint128) 1))) + (when (not s3-1) + (when (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (set! s3-1 #t) + (if (and + (nonzero? (-> obj entity extra perm user-int8 2)) + (not (task-complete? *game-info* (-> obj entity extra perm task))) + ) + (birth-pickup-at-point + (-> obj fuel-cell-dest-pos) + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + ) + (go ram-fun-idle) + ) + ) + (cond + ((and (not s3-1) (has-nav-mesh? arg0)) + (cond + (s4-1 + (let ((s5-1 (get-process *default-dead-pool* ram-boss #x4000))) + (when s5-1 + (let ((t9-28 (method-of-type ram-boss activate))) + (t9-28 (the-as ram-boss s5-1) obj 'ram-boss (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 ram-boss-init-by-other (-> obj entity) obj #t) + (-> s5-1 ppointer) + ) + ) + (go ram-fun-idle) + ) + (else + (let ((s5-2 (get-process *default-dead-pool* ram-boss #x4000))) + (when s5-2 + (let ((t9-32 (method-of-type ram-boss activate))) + (t9-32 (the-as ram-boss s5-2) obj 'ram-boss (the-as pointer #x70004000)) + ) + (run-now-in-process s5-2 ram-boss-init-by-other (-> obj entity) obj #f) + (-> s5-2 ppointer) + ) + ) + (go ram-idle) + ) + ) + ) + (else + (go ram-fun-idle) + ) + ) + ) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/bully_REF.gc b/test/decompiler/reference/levels/sunken/bully_REF.gc new file mode 100644 index 0000000000..9bcf5bc265 --- /dev/null +++ b/test/decompiler/reference/levels/sunken/bully_REF.gc @@ -0,0 +1,1153 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type bully-broken-cage +(deftype bully-broken-cage (process-drawable) + ((parent-override (pointer bully) :offset 12) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + (bully-broken-cage-explode bully-broken-cage) + ) + ) + +;; definition for method 3 of type bully-broken-cage +(defmethod inspect bully-broken-cage ((obj bully-broken-cage)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition of type bully +(deftype bully (process-drawable) + ((root-override collide-shape-moving :offset 112) + (fact-override fact-info-enemy :offset 144) + (hit-player? symbol :offset-assert 176) + (bounced? symbol :offset-assert 180) + (bounce-volume int32 :offset-assert 184) + (facing-ry float :offset-assert 188) + (travel-ry float :offset-assert 192) + (speed-u float :offset-assert 196) + (spin-vel float :offset-assert 200) + (travel-speed float :offset-assert 204) + (reaction-delay uint64 :offset-assert 208) + (start-spin-time uint64 :offset-assert 216) + (slow-down uint64 :offset-assert 224) + (hit-player-time uint64 :offset-assert 232) + (neck joint-mod :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 21 + :size-assert #xf4 + :flag-assert #x15009000f4 + (:methods + (dummy-20 (_type_) float 20) + ) + (:states + bully-die + (bully-idle symbol) + bully-notice + bully-start-spinning + bully-stop-spinning + ) + ) + +;; definition for method 3 of type bully +(defmethod inspect bully ((obj bully)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Thit-player?: ~A~%" (-> obj hit-player?)) + (format #t "~T~Tbounced?: ~A~%" (-> obj bounced?)) + (format #t "~T~Tbounce-volume: ~D~%" (-> obj bounce-volume)) + (format #t "~T~Tfacing-ry: ~f~%" (-> obj facing-ry)) + (format #t "~T~Ttravel-ry: ~f~%" (-> obj travel-ry)) + (format #t "~T~Tspeed-u: ~f~%" (-> obj speed-u)) + (format #t "~T~Tspin-vel: ~f~%" (-> obj spin-vel)) + (format #t "~T~Ttravel-speed: ~f~%" (-> obj travel-speed)) + (format #t "~T~Treaction-delay: ~D~%" (-> obj reaction-delay)) + (format #t "~T~Tstart-spin-time: ~D~%" (-> obj start-spin-time)) + (format #t "~T~Tslow-down: ~D~%" (-> obj slow-down)) + (format #t "~T~Thit-player-time: ~D~%" (-> obj hit-player-time)) + (format #t "~T~Tneck: ~A~%" (-> obj neck)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *bully-sg* bully + 0 + 5 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1.5 0 3) + :longest-edge (meters 0) + :shadow 4 + ) + +;; failed to figure out what this is: +(defskelgroup *bully-broken-cage-sg* bully + 14 + -1 + ((15 (meters 999999))) + :bounds (static-spherem 0 2 0 6) + :longest-edge (meters 0) + ) + +;; definition for symbol *bully-shadow-control*, type shadow-control +(define + *bully-shadow-control* + (new 'static 'shadow-control :settings (new 'static 'shadow-settings + :center + (new 'static 'vector :w (the-as float #x9)) + :shadow-dir + (new 'static 'vector :y -1.0 :w 614400.0) + :bot-plane (new 'static 'plane :y 1.0 :w 10240.0) + :top-plane (new 'static 'plane :y 1.0 :w -2048.0) + :fade-dist 245760.0 + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 454) (new 'static 'sparticle-launch-group + :length 5 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-bully-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 5 + (sp-item 2871) + (sp-item 2872) + (sp-item 2873) + (sp-item 2874) + (sp-item 2875) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2871) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.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-rnd-flt spt-r 128.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-flt spt-accel-y 2.7306666) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2 bit12) + (sp-int-plain-rnd spt-next-time 30 59 1) + (sp-launcher-by-id spt-next-launcher 2876) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2876) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.0666667) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2872) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters 1.5)) + (sp-rnd-flt spt-scale-x (meters 6.0) (meters 3.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.3) (meters 1.0) 1.0) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 2877) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2877) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -2.1333334) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2873) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-scale-x (meters 12.0)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 196.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 196.0) + (sp-flt spt-a 48.0) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2874) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :index #x6 :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (meters 0.25) (meters 1.5) 1.0) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.00048828125) 2457.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.3)) + (sp-flt spt-r 160.0) + (sp-flt spt-g 160.0) + (sp-flt spt-b 160.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.06666667) 1.0) + (sp-flt spt-rotvel-x (degrees 1.2)) + (sp-flt spt-rotvel-y (degrees 2.4)) + (sp-rnd-int-flt spt-rotvel-z (degrees 0.0) 2 436.90668) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2878) + (sp-rnd-flt spt-conerot-x (degrees 40.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2878) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-scalevel-x (meters -0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -3.4) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2875) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :index #x5 :page #x2)) + (sp-flt spt-num 16.5) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (meters 0.25) (meters 1.5) 1.0) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-int-flt spt-scale-x (meters 0.3) 1 4096.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.3)) + (sp-flt spt-r 100.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 100.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.06666667) 1.0) + (sp-flt spt-rotvel-x (degrees 1.2)) + (sp-flt spt-rotvel-y (degrees 2.4)) + (sp-rnd-int-flt spt-rotvel-z (degrees 0.0) 3 436.90668) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2878) + (sp-rnd-flt spt-conerot-x (degrees 40.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(defstate bully-broken-cage-explode (bully-broken-cage) + :code + (behavior ((arg0 bully-broken-cage)) + (ja-channel-push! 1 0) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior bully-broken-cage) ja-post) + ) + +;; definition for function bully-broken-cage-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior bully-broken-cage-init-by-other bully-broken-cage ((arg0 entity)) + (set! (-> self entity) arg0) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> self parent-override 0 root-override trans quad)) + (quaternion-copy! (-> self root quat) (-> self parent-override 0 root-override quat)) + (set! (-> self root scale quad) (-> self parent-override 0 root-override scale quad)) + (let ((a0-13 self)) + (initialize-skeleton a0-13 *bully-broken-cage-sg* '()) + (go bully-broken-cage-explode a0-13) + ) + (none) + ) + +;; definition for function bully-default-event-handler +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 48] +;; WARN: disable def twice: 148. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 229] +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 248] +;; Used lq/sq +(defbehavior bully-default-event-handler bully ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 none)) + (let ((v1-0 arg2)) + (the-as + object + (when (or (= v1-0 'touch) (= v1-0 'touched) (= v1-0 'attack)) + (cond + ((= (-> arg0 type) bully) + (let ((v1-3 (new 'stack-no-clear 'vector))) + (vector-! v1-3 (-> self root-override trans) (-> (the-as process-drawable arg0) root trans)) + (set! (-> self travel-ry) (atan (-> v1-3 x) (-> v1-3 z))) + ) + (set! (-> self bounced?) #t) + (set! v0-0 (the-as none 100)) + (set! (-> self bounce-volume) (the-as int v0-0)) + v0-0 + ) + ((= (-> arg0 type) target) + (cond + ((= (-> arg3 param 1) 'flop) + (go bully-die) + (return (the-as object #t)) + v0-0 + ) + ((or (= arg2 'touch) (= arg2 'attack)) + (cond + ((>= (- (-> (target-pos 0) y) (-> self root-override trans y)) 6144.0) + (let* ((f0-6 (fmax 0.6 (* 0.000023935356 (-> self travel-speed)))) + (f28-0 (* 8192.0 f0-6)) + (f30-0 (* 8192.0 f0-6)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s4-0 (target-pos 0) (-> self root-override trans)) + (let ((f26-0 (atan (-> s4-0 x) (-> s4-0 z)))) + (when (< 0.0 (-> self travel-speed)) + (let ((f0-11 (deg- f26-0 (-> self travel-ry)))) + (if (< (fabs f0-11) 8192.0) + (set! f26-0 (if (>= f0-11 0.0) + (+ 8192.0 f26-0) + (+ -8192.0 f26-0) + ) + ) + ) + ) + ) + (set-vector! s4-0 (* (sin f26-0) f28-0) 0.0 (* (cos f26-0) f28-0) 1.0) + ) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 2) + (set! (-> a1-8 message) 'shove) + (set! (-> a1-8 param 0) (-> arg3 param 0)) + (let ((v1-23 (new 'static 'attack-info :mask #x82))) + (set! (-> v1-23 shove-up) f30-0) + (set! (-> v1-23 vector quad) (-> s4-0 quad)) + (set! (-> a1-8 param 1) (the-as uint v1-23)) + ) + (when (send-event-function arg0 a1-8) + (level-hint-spawn + (game-text-id sunken-bully-dive-hint) + "sksp0131" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (set! (-> self bounced?) #t) + (set! v0-0 (the-as none 100)) + (set! (-> self bounce-volume) (the-as int v0-0)) + v0-0 + ) + ) + ) + ) + (else + (let ((f0-21 (fmax 0.6 (* 0.000023935356 (-> self travel-speed)))) + (a1-10 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 2) + (set! (-> a1-10 message) 'attack) + (set! (-> a1-10 param 0) (-> arg3 param 0)) + (let ((v1-29 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-29 shove-up) (* 12288.0 f0-21)) + (set! (-> v1-29 shove-back) (* 16384.0 f0-21)) + (set! (-> a1-10 param 1) (the-as uint v1-29)) + ) + (when (send-event-function arg0 a1-10) + (level-hint-spawn + (game-text-id sunken-bully-dive-hint) + "sksp0131" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (set! (-> self hit-player?) #t) + (set! (-> self bounced?) #t) + (set! (-> self bounce-volume) 100) + (set! (-> self hit-player-time) (the-as uint (-> *display* base-frame-counter))) + (dummy-54 (-> self root-override) 2 0) + ) + ) + ) + ) + ) + ) + ) + (else + (when (= arg2 'touched) + (cond + ((= (-> arg0 type) target) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 2) + (set! (-> a1-13 message) 'attack) + (set! (-> a1-13 param 0) (-> arg3 param 0)) + (let ((a0-26 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-26 mode) 'explode) + (set! (-> a1-13 param 1) (the-as uint a0-26)) + ) + (send-event-function arg0 a1-13) + ) + ) + (else + (let ((a1-14 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-14 from) self) + (set! (-> a1-14 num-params) 4) + (set! (-> a1-14 message) 'attack) + (set! (-> a1-14 param 0) (-> arg3 param 0)) + (set! (-> a1-14 param 1) (the-as uint 'explode)) + (let ((v1-48 (+ *global-attack-id* 1))) + (set! *global-attack-id* v1-48) + (set! (-> a1-14 param 2) (the-as uint v1-48)) + ) + (set! (-> a1-14 param 3) (the-as uint 0)) + (send-event-function arg0 a1-14) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + +;; definition for function bully-post +;; INFO: Return type mismatch int vs none. +(defbehavior bully-post bully () + (when (and + (-> self hit-player?) + (or (not *target*) (and + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self hit-player-time))) 15) + ) + ) + ) + (dummy-54 (-> self root-override) 2 2) + (set! (-> self hit-player?) #f) + ) + (transform-post) + (none) + ) + +;; definition for method 20 of type bully +;; Used lq/sq +(defmethod dummy-20 bully ((obj bully)) + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (set-vector! + (-> obj root-override transv) + (* (sin (-> obj travel-ry)) (-> obj travel-speed)) + 0.0 + (* (cos (-> obj travel-ry)) (-> obj travel-speed)) + 1.0 + ) + (let ((s5-1 #f)) + (dummy-28 (-> obj nav) 2560) + (let ((v1-4 (-> obj nav travel))) + (.lvf vf1 (&-> (-> obj root-override transv) quad)) + (let ((f0-8 (-> *display* seconds-per-frame))) + (.mov at-0 f0-8) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-4 quad) vf1) + ) + (let ((s4-0 (new 'stack-no-clear 'check-vector-collision-with-nav-spheres-info))) + (when (>= (dummy-23 (-> obj nav) (-> obj nav travel) s4-0) 0.0) + (let ((s5-2 (new 'stack-no-clear 'vector))) + (set! (-> s5-2 quad) (-> s4-0 normal quad)) + (set! (-> s5-2 y) 0.0) + (vector-normalize! s5-2 1.0) + (vector-reflect! (-> obj root-override transv) (-> obj root-override transv) s5-2) + ) + (set! (-> obj travel-ry) (atan (-> obj root-override transv x) (-> obj root-override transv z))) + (+! (-> obj travel-ry) (rand-vu-float-range -910.2222 910.2222)) + (vector-reset! (-> obj root-override transv)) + (set! s5-1 #t) + (set! (-> obj bounced?) #t) + (set! (-> obj bounce-volume) 100) + ) + ) + (when (not s5-1) + (vector-normalize-copy! (-> obj nav travel) (-> obj root-override transv) 2048.0) + (let ((s5-3 (new 'stack 'clip-travel-vector-to-mesh-return-info))) + (dummy-24 (-> obj nav) 2048.0 s5-3) + (when (and + (-> s5-3 found-boundary) + (>= (* (-> obj travel-speed) (-> *display* seconds-per-frame)) + (vector-vector-xz-distance (-> s5-3 intersection) (-> obj root-override trans)) + ) + ) + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector-negate! s4-1 (-> s5-3 boundary-normal)) + (set! (-> s4-1 y) 0.0) + (vector-normalize! s4-1 1.0) + (vector-reflect! (-> obj root-override transv) (-> obj root-override transv) s4-1) + ) + (set! (-> obj travel-ry) (atan (-> obj root-override transv x) (-> obj root-override transv z))) + (+! (-> obj travel-ry) (rand-vu-float-range -910.2222 910.2222)) + (vector-reset! (-> obj root-override transv)) + #t + (set! (-> obj bounced?) #t) + (set! (-> obj bounce-volume) 60) + ) + ) + ) + ) + (let ((f0-25 (+ -36864.0 (-> obj root-override transv y)))) + (set! (-> obj root-override transv y) f0-25) + f0-25 + ) + ) + ) + +;; failed to figure out what this is: +(defstate bully-idle (bully) + :event + bully-default-event-handler + :enter + (behavior ((arg0 symbol)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self reaction-delay) (the-as uint (rand-vu-int-range 0 105))) + (set! (-> self travel-speed) 0.0) + (shut-down! (-> self neck)) + (let ((v1-5 (-> self draw shadow-ctrl))) + (logior! (-> v1-5 settings flags) 32) + ) + 0 + (none) + ) + :exit + (behavior () + (let ((v1-1 (-> self draw shadow-ctrl))) + (set! (-> v1-1 settings flags) (logand -33 (-> v1-1 settings flags))) + ) + 0 + (none) + ) + :trans + (behavior () + (when (and + (and *target* (>= (-> self fact-override idle-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self reaction-delay))) + ) + (start-hint-timer (game-text-id sunken-bully-dive-hint)) + (go bully-notice) + ) + (none) + ) + :code + (behavior ((arg0 symbol)) + (ja-channel-push! 1 22) + (cond + (arg0 + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-1 frame-num) + (rand-vu-float-range 0.0 (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + ) + (else + (let ((gp-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + ) + ) + (while #t + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + :post + bully-post + ) + +;; failed to figure out what this is: +(defstate bully-notice (bully) + :event + bully-default-event-handler + :trans + (behavior () + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core)) + 'attacking + self + ) + ) + (set-target! (-> self neck) (target-pos 5)) + ) + (none) + ) + :code + (behavior () + (set! (-> self travel-speed) 0.0) + (ja-channel-push! 1 22) + (set-vector! (-> self root-override transv) 0.0 (rand-vu-float-range 61440.0 90112.0) 0.0 1.0) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> gp-1 param 0) (ja-aframe 13.0 0)) + (set! (-> gp-1 param 1) 1.0) + (set! (-> gp-1 frame-num) 0.0) + (joint-control-channel-group! gp-1 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (ja-aframe 13.0 0)) + (set! (-> gp-2 param 1) 1.0) + (joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (until (logtest? (-> self root-override status) 1) + (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!) + ) + (+! (-> self root-override transv y) (* -545996.8 (-> *display* seconds-per-frame))) + (dummy-59 (-> self root-override) (-> self root-override transv) (the-as uint 1) 12288.0 #f #f #f) + (when *target* + (let ((gp-3 (new 'stack-no-clear 'vector))) + (vector-! gp-3 (target-pos 0) (-> self root-override trans)) + (seek-toward-heading-vec! (-> self root-override) gp-3 524288.0 30) + ) + (set! (-> self facing-ry) (quaternion-y-angle (-> self root-override quat))) + ) + (suspend) + ) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-14 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! a0-14 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) (the float (+ (-> a0-15 frame-group data 0 length) -1))) + (set! (-> a0-15 param 1) 1.0) + (joint-control-channel-group-eval! a0-15 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go bully-start-spinning) + (none) + ) + :post + bully-post + ) + +;; failed to figure out what this is: +(defstate bully-start-spinning (bully) + :event + bully-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self start-spin-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self slow-down) (the-as uint (rand-vu-int-range 1200 2400))) + (set! (-> self speed-u) 0.2) + (set! (-> self bounced?) #f) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (if *target* + (vector-! gp-0 (target-pos 0) (-> self root-override trans)) + (vector-z-quaternion! gp-0 (-> self root-override quat)) + ) + (set! (-> self travel-ry) (atan (-> gp-0 x) (-> gp-0 z))) + ) + (+! (-> self travel-ry) (rand-vu-float-range -910.2222 910.2222)) + (none) + ) + :trans + (behavior () + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core)) + 'attacking + self + ) + ) + (set-target! (-> self neck) (target-pos 5)) + ) + (cond + ((>= (- (-> *display* base-frame-counter) (the-as int (-> self start-spin-time))) + (the-as int (-> self slow-down)) + ) + (set! (-> self speed-u) (seek (-> self speed-u) 0.0 (* 0.5555556 (-> *display* seconds-per-frame)))) + (if (= (-> self speed-u) 0.0) + (go bully-stop-spinning) + ) + ) + (else + (set! (-> self speed-u) (seek (-> self speed-u) 1.0 (* 0.5555556 (-> *display* seconds-per-frame)))) + ) + ) + (set! (-> self spin-vel) (* 196608.0 (-> self speed-u))) + (set! (-> self travel-speed) (* 41779.2 (-> self speed-u))) + (+! (-> self facing-ry) (* (-> self spin-vel) (-> *display* seconds-per-frame))) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 (-> self facing-ry)) + (dummy-20 self) + (dummy-59 (-> self root-override) (-> self root-override transv) (the-as uint 1) 8192.0 #f #f #f) + (dummy-27 (-> self nav)) + (none) + ) + :code + (behavior () + (local-vars (v1-34 symbol) (v1-52 symbol)) + (ja-channel-push! 1 60) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self bounced?) #f) + (ja-channel-push! 1 60) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (until v1-34 + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-34 (or (ja-done? 0) (-> self bounced?))) + ) + (when (-> self bounced?) + (sound-play-by-name + (static-sound-name "bully-bounce") + (new-sound-id) + (the int (* 10.24 (the float (-> self bounce-volume)))) + 0 + 0 + 1 + #t + ) + (until (not (-> self bounced?)) + (set! (-> self bounced?) #f) + (ja-channel-push! 1 60) + (let ((gp-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + (until v1-52 + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-52 (or (ja-done? 0) (-> self bounced?))) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((gp-3 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-identity + ) + (set! (-> gp-3 frame-num) 0.0) + ) + ) + (none) + ) + :post + bully-post + ) + +;; failed to figure out what this is: +(defstate bully-stop-spinning (bully) + :event + bully-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self reaction-delay) (the-as uint (rand-vu-int-range 600 900))) + (set! (-> self travel-speed) 0.0) + (set! (-> self bounced?) #f) + (none) + ) + :trans + (behavior () + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core)) + 'attacking + self + ) + ) + (set-target! (-> self neck) (target-pos 5)) + ) + (none) + ) + :code + (behavior () + (local-vars (v1-17 symbol) (v1-35 symbol)) + (let ((gp-0 2)) + (ja-channel-push! 1 60) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self reaction-delay))) + (cond + ((>= gp-0 0) + (+! gp-0 -1) + (let ((s5-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s5-0 + (the-as art-joint-anim (-> self draw art-group data 13)) + num-func-identity + ) + (set! (-> s5-0 frame-num) 0.0) + ) + ) + (else + (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 5)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + ) + ) + (until v1-17 + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-17 (or (ja-done? 0) (-> self bounced?))) + ) + (when (-> self bounced?) + (sound-play-by-name + (static-sound-name "bully-bounce") + (new-sound-id) + (the int (* 10.24 (the float (-> self bounce-volume)))) + 0 + 0 + 1 + #t + ) + (set! gp-0 0) + (until (not (-> self bounced?)) + (set! (-> self bounced?) #f) + (ja-channel-push! 1 60) + (let ((s5-3 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s5-3 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-identity + ) + (set! (-> s5-3 frame-num) 0.0) + ) + (until v1-35 + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1))) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! v1-35 (or (ja-done? 0) (-> self bounced?))) + ) + ) + (ja-channel-push! 1 60) + ) + ) + ) + (if (or (not *target*) (< (-> self fact-override idle-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + (go bully-idle #f) + ) + (go bully-start-spinning) + (none) + ) + :post + bully-post + ) + +;; failed to figure out what this is: +(defstate bully-die (bully) + :code + (behavior () + (dummy-18 self) + (shut-down! (-> self neck)) + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((gp-0 (get-process *default-dead-pool* bully-broken-cage #x4000))) + (when gp-0 + (let ((t9-3 (method-of-type bully-broken-cage activate))) + (t9-3 (the-as bully-broken-cage gp-0) self 'bully-broken-cage (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 bully-broken-cage-init-by-other (-> self entity)) + (-> gp-0 ppointer) + ) + ) + (spawn (-> self part) (-> self root-override trans)) + (clear-collide-with-as (-> self root-override)) + (drop-pickup (-> self fact-override) #t *entity-pool* (-> self fact-override) 0) + (ja-channel-push! 1 22) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-10 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (set! (-> a0-10 frame-num) 0.0) + (joint-control-channel-group! a0-10 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1))) + (set! (-> a0-11 param 1) 1.0) + (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (increment-success-for-hint (game-text-id sunken-bully-dive-hint)) + (logior! (-> self draw status) 2) + (while (-> self child) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior bully) transform-post) + ) + +;; definition for method 7 of type bully +;; INFO: Return type mismatch process-drawable vs bully. +(defmethod relocate bully ((obj bully) (arg0 int)) + (if (nonzero? (-> obj neck)) + (&+! (-> obj neck) arg0) + ) + (the-as + bully + ((the-as (function process-drawable int process-drawable) (find-parent-method bully 7)) obj arg0) + ) + ) + +;; definition for method 11 of type bully +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! bully ((obj bully) (arg0 entity-actor)) + (set! (-> obj hit-player?) #f) + (set! (-> obj bounced?) #f) + (set! (-> obj bounce-volume) 100) + (set! (-> obj spin-vel) 0.0) + (set! (-> obj travel-speed) 0.0) + (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) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 2) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 404)) + (set! (-> s3-0 prim-core action) (the-as uint 3073)) + (set! (-> s3-0 prim-core offense) 2) + (set-vector! (-> s3-0 local-sphere) 0.0 6144.0 0.0 10240.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 3)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 404)) + (set! (-> s2-0 prim-core action) (the-as uint 3073)) + (set! (-> s2-0 prim-core offense) 2) + (set-vector! (-> s2-0 local-sphere) 0.0 4096.0 0.0 6963.2) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 3)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 404)) + (set! (-> s2-1 prim-core action) (the-as uint 3073)) + (set! (-> s2-1 prim-core offense) 2) + (set-vector! (-> s2-1 local-sphere) 0.0 9420.8 0.0 4096.0) + (append-prim s3-0 s2-1) + ) + ) + (set! (-> s4-0 nav-radius) 7680.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (set! (-> obj root-override event-self) 'touched) + (set! (-> obj root-override event-other) 'touch) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *bully-sg* '()) + (set! (-> obj draw shadow-ctrl) *bully-shadow-control*) + (set! (-> obj nav) (new 'process 'nav-control (-> obj root-override) 16 40960.0)) + (logior! (-> obj nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 454) obj)) + (set! (-> obj fact-override) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (let ((v1-49 (new 'process 'joint-mod (joint-mod-handler-mode reset) obj 5))) + (set! (-> obj neck) v1-49) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> v1-49 up) (the-as uint 1)) + (set! (-> v1-49 nose) (the-as uint 2)) + (set! (-> v1-49 ear) (the-as uint 0)) + (set! (-> v1-49 max-dist) 102400.0) + (set! (-> v1-49 ignore-angle) 16384.0) + ) + (transform-post) + (if (not (dummy-60 (-> obj root-override) 12288.0 40960.0 #t (the-as uint 1))) + (go process-drawable-art-error "no ground") + ) + (set! (-> obj facing-ry) (quaternion-y-angle (-> obj root-override quat))) + (go bully-idle #t) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/puffer_REF.gc b/test/decompiler/reference/levels/sunken/puffer_REF.gc new file mode 100644 index 0000000000..533c67557a --- /dev/null +++ b/test/decompiler/reference/levels/sunken/puffer_REF.gc @@ -0,0 +1,1261 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type puffer +(deftype puffer (process-drawable) + ((root-override collide-shape-moving :offset 112) + (fact-info-override fact-info-enemy :offset 144) + (path-index int32 :offset-assert 176) + (facing-ry float :offset-assert 180) + (travel-ry float :offset-assert 184) + (travel-speed float :offset-assert 188) + (attack-bottom-y float :offset-assert 192) + (patrol-bottom-y float :offset-assert 196) + (top-y float :offset-assert 200) + (targ-trans-y float :offset-assert 204) + (acc-y float :offset-assert 208) + (travel-turn-speed float :offset-assert 212) + (notice-dist float :offset-assert 216) + (give-up-dist float :offset-assert 220) + (attacking? symbol :offset-assert 224) + (hit-player? symbol :offset-assert 228) + (look-mean? symbol :offset-assert 232) + (cprims-type uint64 :offset-assert 240) + (neck joint-mod :offset-assert 248) + (hit-player-time uint64 :offset-assert 256) + (reaction-delay uint64 :offset-assert 264) + (picked-point-time uint64 :offset-assert 272) + (pick-new-point-delay uint64 :offset-assert 280) + (last-on-screen-time uint64 :offset-assert 288) + (buddy process-drawable :offset-assert 296) + (nice-look lod-set :inline :offset-assert 300) + (mean-look lod-set :inline :offset-assert 336) + (dest-pos vector :inline :offset-assert 384) + (sync sync-info :inline :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 32 + :size-assert #x198 + :flag-assert #x2001300198 + (:methods + (dummy-20 (_type_ vector) none 20) + (dummy-21 (_type_) none 21) + (dummy-22 (_type_) symbol 22) + (dummy-23 (_type_ symbol) symbol 23) + (dummy-24 (_type_ vector) symbol 24) + (dummy-25 (_type_ float) symbol 25) + (dummy-26 (_type_) none 26) + (dummy-27 (_type_) none 27) + (dummy-28 (_type_) none 28) + (flip-look! (_type_ symbol) none 29) + (dummy-30 (_type_) vector 30) + (dummy-31 (_type_) vector 31) + ) + ) + +;; definition for method 3 of type puffer +(defmethod inspect puffer ((obj puffer)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tpath-index: ~D~%" (-> obj path-index)) + (format #t "~T~Tfacing-ry: ~f~%" (-> obj facing-ry)) + (format #t "~T~Ttravel-ry: ~f~%" (-> obj travel-ry)) + (format #t "~T~Ttravel-speed: ~f~%" (-> obj travel-speed)) + (format #t "~T~Tattack-bottom-y: ~f~%" (-> obj attack-bottom-y)) + (format #t "~T~Tpatrol-bottom-y: ~f~%" (-> obj patrol-bottom-y)) + (format #t "~T~Ttop-y: ~f~%" (-> obj top-y)) + (format #t "~T~Ttarg-trans-y: ~f~%" (-> obj targ-trans-y)) + (format #t "~T~Tacc-y: ~f~%" (-> obj acc-y)) + (format #t "~T~Ttravel-turn-speed: ~f~%" (-> obj travel-turn-speed)) + (format #t "~T~Tnotice-dist: ~f~%" (-> obj notice-dist)) + (format #t "~T~Tgive-up-dist: ~f~%" (-> obj give-up-dist)) + (format #t "~T~Tattacking?: ~A~%" (-> obj attacking?)) + (format #t "~T~Thit-player?: ~A~%" (-> obj hit-player?)) + (format #t "~T~Tlook-mean?: ~A~%" (-> obj look-mean?)) + (format #t "~T~Tcprims-type: ~D~%" (-> obj cprims-type)) + (format #t "~T~Tneck: ~A~%" (-> obj neck)) + (format #t "~T~Thit-player-time: ~D~%" (-> obj hit-player-time)) + (format #t "~T~Treaction-delay: ~D~%" (-> obj reaction-delay)) + (format #t "~T~Tpicked-point-time: ~D~%" (-> obj picked-point-time)) + (format #t "~T~Tpick-new-point-delay: ~D~%" (-> obj pick-new-point-delay)) + (format #t "~T~Tlast-on-screen-time: ~D~%" (-> obj last-on-screen-time)) + (format #t "~T~Tbuddy: ~A~%" (-> obj buddy)) + (format #t "~T~Tnice-look: #~%" (-> obj nice-look)) + (format #t "~T~Tmean-look: #~%" (-> obj mean-look)) + (format #t "~T~Tdest-pos: #~%" (-> obj dest-pos)) + (format #t "~T~Tsync: #~%" (-> obj sync)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *puffer-sg* puffer + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1 0 5.25) + :longest-edge (meters 1.2) + :shadow 4 + ) + +;; failed to figure out what this is: +(defskelgroup *puffer-mean-sg* puffer + 5 + -1 + ((6 (meters 20)) (7 (meters 40)) (8 (meters 999999))) + :bounds (static-spherem 0 1 0 5.25) + :longest-edge (meters 1.2) + :shadow 4 + ) + +;; definition for function puffer-default-event-handler +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 56] +(defbehavior puffer-default-event-handler puffer ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (when (or (= v1-0 'touch) (= v1-0 'attack)) + (when (and (= arg2 'attack) (!= (-> self cprims-type) 2)) + (let* ((gp-0 arg0) + (v1-7 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) + gp-0 + ) + ) + ) + (when v1-7 + (let ((f0-4 (atan + (- (-> (the-as process-drawable v1-7) root trans x) (-> self root-override trans x)) + (- (-> (the-as process-drawable v1-7) root trans z) (-> self root-override trans z)) + ) + ) + ) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 f0-4) + ) + ) + ) + (go puffer-die) + (return (the-as object #t)) + ) + (when (= (-> arg0 type) target) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 2) + (set! (-> a1-9 message) 'attack) + (set! (-> a1-9 param 0) (-> arg3 param 0)) + (let ((v1-19 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-19 shove-up) 6144.0) + (set! (-> v1-19 shove-back) 10240.0) + (set! (-> a1-9 param 1) (the-as uint v1-19)) + ) + (when (send-event-function arg0 a1-9) + (set! (-> self hit-player?) #t) + (set! (-> self hit-player-time) (the-as uint (-> *display* base-frame-counter))) + (dummy-54 (-> self root-override) 2 0) + ) + ) + ) + ) + ) + ) + ) + +;; definition for function puffer-post +;; INFO: Return type mismatch int vs none. +(defbehavior puffer-post puffer () + (when (and + (-> self hit-player?) + (or (not *target*) (and + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self hit-player-time))) 15) + ) + ) + ) + (dummy-54 (-> self root-override) 2 2) + (set! (-> self hit-player?) #f) + ) + (transform-post) + (none) + ) + +;; definition for method 28 of type puffer +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-28 puffer ((obj puffer)) + (cond + ((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) (logtest? (-> obj draw status) 8)) + (let ((s5-0 (new 'stack-no-clear 'collide-tri-result)) + (a1-0 (new 'stack-no-clear 'vector)) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> a1-0 quad) (-> obj root-override trans quad)) + (set-vector! a2-0 0.0 -40960.0 0.0 1.0) + (cond + ((>= (dummy-10 *collide-cache* a1-0 a2-0 8192.0 2057 obj s5-0 1) 0.0) + (let ((v1-11 (-> obj draw shadow-ctrl))) + (set! (-> v1-11 settings flags) (logand -33 (-> v1-11 settings flags))) + ) + 0 + (let ((v1-14 (-> obj draw shadow-ctrl))) + (set! (-> v1-14 settings bot-plane w) (- (+ -12288.0 (-> s5-0 intersect y)))) + ) + 0 + (let ((v1-17 (-> obj draw shadow-ctrl))) + (set! (-> v1-17 settings top-plane w) (- (+ 4096.0 (-> s5-0 intersect y)))) + ) + 0 + ) + (else + (let ((v1-19 (-> obj draw shadow-ctrl))) + (logior! (-> v1-19 settings flags) 32) + ) + 0 + ) + ) + ) + ) + (else + (let ((v1-21 (-> obj draw shadow-ctrl))) + (logior! (-> v1-21 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +;; definition for method 24 of type puffer +(defmethod dummy-24 puffer ((obj puffer) (arg0 vector)) + (and + (dummy-25 (-> obj nav) arg0 11468.8) + (< (-> arg0 y) (+ (-> obj root-override trans y) (-> obj fact-info-override notice-top))) + ) + ) + +;; definition for method 22 of type puffer +(defmethod dummy-22 puffer ((obj puffer)) + (let* ((a1-0 (-> obj buddy)) + (v1-0 (if a1-0 + (-> a1-0 ppointer 3) + ) + ) + ) + (if (and + v1-0 + (>= 25395.2 + (vector-vector-xz-distance (-> obj root-override trans) (-> (the-as process-drawable v1-0) root trans)) + ) + ) + (return #t) + ) + ) + #f + ) + +;; definition for method 25 of type puffer +(defmethod dummy-25 puffer ((obj puffer) (arg0 float)) + (when *target* + (let ((gp-0 (target-pos 0))) + (when (and + (zero? (logand (-> *target* state-flags) #x80f8)) + (dummy-24 obj gp-0) + (>= (-> gp-0 y) (+ -14336.0 (-> obj attack-bottom-y))) + (>= (+ 2048.0 (-> obj top-y)) (-> gp-0 y)) + ) + (let ((f30-0 (vector-vector-xz-distance gp-0 (-> obj root-override trans)))) + (when (>= arg0 f30-0) + (let* ((a0-4 (-> obj buddy)) + (v1-12 (if a0-4 + (-> a0-4 ppointer 3) + ) + ) + ) + (cond + (v1-12 + (if (not (-> (the-as puffer v1-12) attacking?)) + (return #t) + ) + (if (< f30-0 (vector-vector-xz-distance gp-0 (-> (the-as puffer v1-12) root-override trans))) + (return #t) + ) + ) + (else + (return #t) + ) + ) + ) + ) + ) + ) + ) + ) + #f + ) + +;; definition of type pick-patrol-point-away-from-buddy-work +(deftype pick-patrol-point-away-from-buddy-work (structure) + ((best-path-index int32 :offset-assert 0) + (best-rating float :offset-assert 4) + (best-dest vector :inline :offset-assert 16) + (pt-dir vector :inline :offset-assert 32) + (buddy-dir vector :inline :offset-assert 48) + (dest vector :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +;; definition for method 3 of type pick-patrol-point-away-from-buddy-work +(defmethod inspect pick-patrol-point-away-from-buddy-work ((obj pick-patrol-point-away-from-buddy-work)) + (format #t "[~8x] ~A~%" obj 'pick-patrol-point-away-from-buddy-work) + (format #t "~Tbest-path-index: ~D~%" (-> obj best-path-index)) + (format #t "~Tbest-rating: ~f~%" (-> obj best-rating)) + (format #t "~Tbest-dest: #~%" (-> obj best-dest)) + (format #t "~Tpt-dir: #~%" (-> obj pt-dir)) + (format #t "~Tbuddy-dir: #~%" (-> obj buddy-dir)) + (format #t "~Tdest: #~%" (-> obj dest)) + obj + ) + +;; definition for method 23 of type puffer +;; Used lq/sq +(defmethod dummy-23 puffer ((obj puffer) (arg0 symbol)) + (local-vars (v1-0 process)) + (set! v1-0 (when arg0 + (let ((a0-1 (-> obj buddy))) + (set! v1-0 (if a0-1 + (-> a0-1 ppointer 3) + ) + ) + ) + (if (not v1-0) + (set! arg0 #f) + ) + v1-0 + ) + ) + (cond + (arg0 + (let ((s4-0 (-> obj path curve num-cverts)) + (s5-0 (new 'stack-no-clear 'inline-array 'vector 5)) + ) + (set! (-> s5-0 0 x) (the-as float -1)) + (vector-! (-> s5-0 3) (-> obj root-override trans) (-> (the-as process-drawable v1-0) root trans)) + (set! (-> s5-0 3 y) 0.0) + (vector-normalize! (-> s5-0 3) 1.0) + (dotimes (s3-0 s4-0) + (eval-path-curve-div! (-> obj path) (-> s5-0 4) (the float s3-0) 'interp) + (vector-! (-> s5-0 2) (-> s5-0 4) (-> obj root-override trans)) + (when (>= (vector-xz-length (-> s5-0 2)) 10240.0) + (set! (-> s5-0 2 y) 0.0) + (vector-normalize! (-> s5-0 2) 1.0) + (let ((f0-6 (vector-dot (-> s5-0 3) (-> s5-0 2)))) + (when (>= f0-6 0.0) + (when (or (< (the-as int (-> s5-0 0 x)) 0) (< (-> s5-0 0 y) f0-6)) + (set! (-> s5-0 0 x) (the-as float s3-0)) + (set! (-> s5-0 0 y) f0-6) + (set! (-> s5-0 1 quad) (-> s5-0 4 quad)) + ) + ) + ) + ) + ) + (when (>= (the-as int (-> s5-0 0 x)) 0) + (set! (-> obj dest-pos quad) (-> s5-0 1 quad)) + (set! (-> obj dest-pos y) (-> obj root-override trans y)) + (return #t) + ) + ) + ) + (else + (let* ((s3-1 (-> obj path curve num-cverts)) + (s4-1 (new 'stack-no-clear 'vector)) + (s5-1 (rand-vu-int-count s3-1)) + ) + (while (nonzero? s3-1) + (+! s3-1 -1) + (eval-path-curve-div! (-> obj path) s4-1 (the float s5-1) 'interp) + (when (>= (vector-vector-xz-distance s4-1 (-> obj root-override trans)) 10240.0) + (set! (-> obj dest-pos quad) (-> s4-1 quad)) + (set! (-> obj dest-pos y) (-> obj root-override trans y)) + (set! (-> obj path-index) s5-1) + (return #t) + ) + ) + ) + ) + ) + #f + ) + +;; definition for method 20 of type puffer +;; Used lq/sq +(defmethod dummy-20 puffer ((obj puffer) (arg0 vector)) + (if (-> obj attacking?) + (set! (-> obj travel-speed) + (seek-with-smooth (-> obj travel-speed) 30720.0 (* 8192.0 (-> *display* seconds-per-frame)) 0.125 40.96) + ) + (set! (-> obj travel-speed) + (seek-with-smooth (-> obj travel-speed) 18432.0 (* 2048.0 (-> *display* seconds-per-frame)) 0.125 40.96) + ) + ) + (dummy-27 (-> obj nav)) + (dummy-28 (-> obj nav) -1) + (dummy-13 (-> obj nav) arg0 (-> obj root-override transv)) + (let ((f30-0 (* (vector-xz-length (-> obj nav travel)) (-> *display* frames-per-second)))) + (let ((f0-11 (atan (-> obj nav travel x) (-> obj nav travel z))) + (s5-1 (new 'stack-no-clear 'vector)) + ) + (if (< (-> obj travel-speed) f30-0) + (set! f30-0 (-> obj travel-speed)) + ) + (set! (-> s5-1 quad) (-> obj nav travel quad)) + (set! (-> obj travel-ry) + (deg-seek-smooth + (-> obj travel-ry) + f0-11 + (* (-> obj travel-turn-speed) (-> *display* seconds-per-frame)) + 0.125 + ) + ) + (let* ((f0-16 (* f30-0 (-> *display* seconds-per-frame))) + (f28-0 (* 150.0 f0-16)) + (f26-0 -1.0) + ) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set-vector! s4-0 (* (sin (-> obj travel-ry)) f28-0) 0.0 (* (cos (-> obj travel-ry)) f28-0) 1.0) + (let ((s3-1 (new 'stack 'clip-travel-vector-to-mesh-return-info))) + (set! (-> obj nav travel quad) (-> s4-0 quad)) + (dummy-24 (-> obj nav) f28-0 s3-1) + (if (-> s3-1 found-boundary) + (set! f26-0 (vector-vector-xz-distance (-> s3-1 intersection) (-> obj root-override trans))) + ) + ) + (let ((s3-2 (new 'stack-no-clear 'matrix))) + (when (>= (dummy-23 (-> obj nav) s4-0 (the-as check-vector-collision-with-nav-spheres-info s3-2)) 0.0) + (let ((f0-26 (vector-vector-xz-distance (-> s3-2 vector 1) (-> obj root-override trans)))) + (if (or (< f26-0 0.0) (< f0-26 f26-0)) + (set! f26-0 f0-26) + ) + ) + ) + ) + ) + (when (>= f26-0 0.0) + (let ((f26-1 (- 1.0 (/ f26-0 f28-0)))) + (+! (-> obj travel-ry) (* f26-1 (deg- (atan (-> s5-1 x) (-> s5-1 z)) (-> obj travel-ry)))) + ) + ) + ) + ) + (set-vector! + (-> obj root-override transv) + (* (sin (-> obj travel-ry)) f30-0) + (-> obj root-override transv y) + (* (cos (-> obj travel-ry)) f30-0) + 1.0 + ) + ) + (set! (-> obj facing-ry) + (deg-seek-smooth (-> obj facing-ry) (-> obj travel-ry) (* 32768.0 (-> *display* seconds-per-frame)) 0.125) + ) + (dummy-27 obj) + (none) + ) + +;; definition for method 27 of type puffer +;; INFO: Return type mismatch float vs none. +(defmethod dummy-27 puffer ((obj puffer)) + (let ((f30-0 (-> obj patrol-bottom-y))) + (cond + ((-> obj attacking?) + (let ((f30-1 (-> obj attack-bottom-y))) + (set! (-> obj targ-trans-y) (fmax (fmin (+ 4096.0 (-> (target-pos 0) y)) (-> obj top-y)) f30-1)) + ) + (set! (-> obj root-override transv y) + (* 0.125 (-> *display* frames-per-second) (- (-> obj targ-trans-y) (-> obj root-override trans y))) + ) + (when (< 6144.0 (fabs (-> obj root-override transv y))) + (if (>= (-> obj root-override transv y) 0.0) + (set! (-> obj root-override transv y) 6144.0) + (set! (-> obj root-override transv y) -6144.0) + ) + ) + ) + ((< (-> obj root-override trans y) f30-0) + (set! (-> obj targ-trans-y) (* 0.5 (+ (-> obj top-y) (-> obj patrol-bottom-y)))) + (set! (-> obj root-override transv y) + (* 0.125 (-> *display* frames-per-second) (- (-> obj targ-trans-y) (-> obj root-override trans y))) + ) + (when (< 2048.0 (fabs (-> obj root-override transv y))) + (if (>= (-> obj root-override transv y) 0.0) + (set! (-> obj root-override transv y) 2048.0) + (set! (-> obj root-override transv y) -2048.0) + ) + ) + ) + (else + (let ((f0-22 (- (-> obj targ-trans-y) (-> obj root-override trans y)))) + (when (or (and (>= f0-22 0.0) (< (-> obj acc-y) 0.0)) (and (< f0-22 0.0) (>= (-> obj acc-y) 0.0))) + (when (not (-> obj attacking?)) + (cond + ((>= (-> obj acc-y) 0.0) + (if (< f30-0 (-> obj targ-trans-y)) + (set! (-> obj targ-trans-y) (rand-vu-float-range f30-0 (-> obj targ-trans-y))) + ) + ) + (else + (if (< (-> obj targ-trans-y) (-> obj top-y)) + (set! (-> obj targ-trans-y) (rand-vu-float-range (-> obj targ-trans-y) (-> obj top-y))) + ) + ) + ) + ) + (set! (-> obj acc-y) (- (-> obj acc-y))) + ) + ) + (+! (-> obj root-override transv y) (* (-> obj acc-y) (-> *display* seconds-per-frame))) + (let ((f0-37 (* (-> obj root-override transv y) (-> *display* seconds-per-frame)))) + (cond + ((>= f0-37 0.0) + (let ((f1-27 (* 0.0625 (- (-> obj top-y) (-> obj root-override trans y))))) + (if (< f1-27 f0-37) + (set! (-> obj root-override transv y) (* f1-27 (-> *display* frames-per-second))) + ) + ) + ) + (else + (let ((f1-29 (* 0.0625 (- f30-0 (-> obj root-override trans y))))) + (if (< f0-37 f1-29) + (set! (-> obj root-override transv y) (* f1-29 (-> *display* frames-per-second))) + ) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate puffer-idle (puffer) + :event + puffer-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self attacking?) #f) + (shut-down! (-> self neck)) + (let ((v1-5 (-> self draw shadow-ctrl))) + (logior! (-> v1-5 settings flags) 32) + ) + 0 + (none) + ) + :code + (behavior () + (while #t + (if (and + (and *target* (>= (-> self fact-info-override idle-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + (logtest? (-> self draw status) 8) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 60) + ) + (go puffer-patrol) + ) + (dummy-26 self) + (suspend) + ) + (none) + ) + :post + puffer-post + ) + +;; failed to figure out what this is: +(defstate puffer-patrol (puffer) + :event + puffer-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self attacking?) #f) + (set! (-> self reaction-delay) (the-as uint (rand-vu-int-range 30 105))) + (if (not (dummy-23 self #f)) + (go puffer-idle) + ) + (set! (-> self picked-point-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self pick-new-point-delay) (the-as uint (rand-vu-int-range 900 3000))) + (set! (-> self last-on-screen-time) (the-as uint (-> *display* base-frame-counter))) + (none) + ) + :trans + (behavior () + (if (and + (not (and *target* (>= (-> self fact-info-override idle-distance) + (vector-vector-distance (-> self root-override trans) (-> *target* control trans)) + ) + ) + ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + ) + (go puffer-idle) + ) + (cond + ((logtest? (-> self draw status) 8) + (set! (-> self last-on-screen-time) (the-as uint (-> *display* base-frame-counter))) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-on-screen-time))) 2400) + (go puffer-idle) + ) + ) + ) + (when (dummy-22 self) + (when (dummy-23 self #t) + (set! (-> self picked-point-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self pick-new-point-delay) (the-as uint (rand-vu-int-range 900 3000))) + ) + ) + (if (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self reaction-delay))) + (dummy-25 self (-> self notice-dist)) + ) + (go puffer-attack) + ) + (when (or + (< (vector-vector-xz-distance (-> self root-override trans) (-> self dest-pos)) 8192.0) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self picked-point-time))) + (the-as int (-> self pick-new-point-delay)) + ) + ) + (when (dummy-23 self #f) + (set! (-> self picked-point-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self pick-new-point-delay) (the-as uint (rand-vu-int-range 900 3000))) + ) + ) + (dummy-20 self (-> self dest-pos)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set-vector! gp-0 (sin (-> self facing-ry)) 0.0 (cos (-> self facing-ry)) 1.0) + (set-heading-vec-clear-roll-pitch! (-> self root-override) gp-0) + ) + (vector-v+! (-> self root-override trans) (-> self root-override trans) (-> self root-override transv)) + (dummy-28 self) + (none) + ) + :code + (behavior () + (while #t + (dummy-26 self) + (suspend) + ) + (none) + ) + :post + puffer-post + ) + +;; failed to figure out what this is: +(defstate puffer-attack (puffer) + :event + puffer-default-event-handler + :enter + (behavior () + (set! (-> self attacking?) #t) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self travel-turn-speed) 21845.334) + (none) + ) + :exit + (behavior () + (shut-down! (-> self neck)) + (set! (-> self attacking?) #f) + (set! (-> self travel-turn-speed) 16384.0) + (none) + ) + :trans + (behavior () + (if (not (dummy-25 self (-> self give-up-dist))) + (go puffer-patrol) + ) + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> (the-as collide-shape-prim-group (-> self root-override root-prim)) prims 0 prim-core)) + 'attacking + self + ) + ) + (set-target! (-> self neck) (target-pos 5)) + ) + (dummy-20 self (target-pos 0)) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (set-vector! gp-2 (sin (-> self facing-ry)) 0.0 (cos (-> self facing-ry)) 1.0) + (set-heading-vec-clear-roll-pitch! (-> self root-override) gp-2) + ) + (vector-v+! (-> self root-override trans) (-> self root-override trans) (-> self root-override transv)) + (dummy-28 self) + (none) + ) + :code + (behavior () + (while #t + (dummy-26 self) + (suspend) + ) + (none) + ) + :post + puffer-post + ) + +;; failed to figure out what this is: +(defstate puffer-die (puffer) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'death-start) + (the-as uint (drop-pickup (-> self fact-info-override) #t *entity-pool* (-> self fact-info-override) 0)) + ) + ((= v1-0 'death-end) + (let ((v0-0 (logior (-> self draw status) 2))) + (set! (-> self draw status) v0-0) + v0-0 + ) + ) + ) + ) + ) + ) + :code + (behavior () + (dummy-18 self) + (shut-down! (-> self neck)) + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 22) + (clear-collide-with-as (-> self root-override)) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 15))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 15)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 15)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior puffer) ja-post) + ) + +;; definition for method 21 of type puffer +;; INFO: Return type mismatch int vs none. +(defmethod dummy-21 puffer ((obj puffer)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 3) 0))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set-vector! (-> s4-0 local-sphere) 0.0 6144.0 0.0 18432.0) + (set-root-prim! s5-0 s4-0) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core offense) 1) + (set! (-> s3-0 transform-index) 5) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 4096.0) + (append-prim s4-0 s3-0) + ) + (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core offense) 1) + (set! (-> s3-1 transform-index) 3) + (set-vector! (-> s3-1 local-sphere) 0.0 0.0 0.0 4096.0) + (append-prim s4-0 s3-1) + ) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s3-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-2 collide-with) (the-as uint 16)) + (set! (-> s3-2 prim-core offense) 1) + (set! (-> s3-2 transform-index) 9) + (set-vector! (-> s3-2 local-sphere) 0.0 0.0 0.0 3072.0) + (append-prim s4-0 s3-2) + ) + ) + (set! (-> s5-0 nav-radius) 12288.0) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + (dummy-30 obj) + 0 + (none) + ) + +;; definition for method 29 of type puffer +(defmethod flip-look! puffer ((obj puffer) (arg0 symbol)) + (when (!= arg0 (-> obj look-mean?)) + (set! (-> obj look-mean?) arg0) + (if arg0 + (lods-assign! (-> obj draw) (-> obj mean-look)) + (lods-assign! (-> obj draw) (-> obj nice-look)) + ) + ) + (none) + ) + +;; definition for method 30 of type puffer +(defmethod dummy-30 puffer ((obj puffer)) + (when (!= (-> obj cprims-type) 1) + (set! (-> obj cprims-type) (the-as uint 1)) + (let ((v1-3 (the-as basic (-> obj root-override root-prim)))) + (set-vector! (-> (the-as collide-shape-prim v1-3) local-sphere) 0.0 6144.0 0.0 18432.0) + (let ((v0-0 (-> (the-as (array collide-shape-prim) v1-3) 17 local-sphere))) + (set! (-> v0-0 x) 0.0) + (set! (-> v0-0 y) 0.0) + (set! (-> v0-0 z) 0.0) + (set! (-> v0-0 w) 4096.0) + v0-0 + ) + ) + ) + ) + +;; definition for method 31 of type puffer +(defmethod dummy-31 puffer ((obj puffer)) + (when (!= (-> obj cprims-type) 2) + (set! (-> obj cprims-type) (the-as uint 2)) + (let ((v1-3 (the-as basic (-> obj root-override root-prim)))) + (set-vector! (-> (the-as collide-shape-prim v1-3) local-sphere) 0.0 6144.0 0.0 18432.0) + (let ((v0-0 (-> (the-as (array collide-shape-prim) v1-3) 17 local-sphere))) + (set! (-> v0-0 x) 0.0) + (set! (-> v0-0 y) 0.0) + (set! (-> v0-0 z) 0.0) + (set! (-> v0-0 w) 7372.8) + v0-0 + ) + ) + ) + ) + +;; definition for method 26 of type puffer +;; INFO: Return type mismatch vector vs none. +(defmethod dummy-26 puffer ((obj puffer)) + (let ((f30-0 (get-current-phase (-> obj sync)))) + (if (and (< 0.025 f30-0) (< f30-0 0.525)) + (flip-look! obj #f) + (flip-look! obj #t) + ) + (cond + ((< f30-0 0.5) + (cond + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 9) + ) + (cond + ((-> obj attacking?) + (ja-channel-push! 1 60) + (let ((s5-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-0 + (the-as art-joint-anim (-> obj draw art-group data 11)) + num-func-identity + ) + (set! (-> s5-0 frame-num) 0.0) + ) + (let ((a0-10 (-> obj 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! a0-10 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ((ja-done? 0) + (let ((v1-28 (-> obj skel root-channel 0))) + (set! (-> v1-28 num-func) num-func-identity) + (set! (-> v1-28 frame-num) 0.0) + ) + (let ((a0-13 (-> obj skel root-channel 0))) + (set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1))) + (set! (-> a0-13 param 1) 1.0) + (joint-control-channel-group! a0-13 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-14 (-> obj skel root-channel 0))) + (set! (-> a0-14 param 0) (the float (+ (-> a0-14 frame-group data 0 length) -1))) + (set! (-> a0-14 param 1) 1.0) + (joint-control-channel-group-eval! a0-14 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 11) + ) + (cond + ((not (-> obj attacking?)) + (ja-channel-push! 1 60) + (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 9)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (let ((a0-21 (-> obj skel root-channel 0))) + (set! (-> a0-21 param 0) (the float (+ (-> a0-21 frame-group data 0 length) -1))) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group! a0-21 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ((ja-done? 0) + (let ((v1-64 (-> obj skel root-channel 0))) + (set! (-> v1-64 num-func) num-func-identity) + (set! (-> v1-64 frame-num) 0.0) + ) + (let ((a0-24 (-> obj skel root-channel 0))) + (set! (-> a0-24 param 0) (the float (+ (-> a0-24 frame-group data 0 length) -1))) + (set! (-> a0-24 param 1) 1.0) + (joint-control-channel-group! a0-24 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-25 (-> obj skel root-channel 0))) + (set! (-> a0-25 param 0) (the float (+ (-> a0-25 frame-group data 0 length) -1))) + (set! (-> a0-25 param 1) 1.0) + (joint-control-channel-group-eval! a0-25 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 14) + ) + (cond + ((ja-done? 0) + (ja-channel-push! 1 60) + (cond + ((-> obj attacking?) + (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 11)) + num-func-identity + ) + (set! (-> s5-2 frame-num) 0.0) + ) + ) + (else + (let ((s5-3 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-3 + (the-as art-joint-anim (-> obj draw art-group data 9)) + num-func-identity + ) + (set! (-> s5-3 frame-num) 0.0) + ) + ) + ) + (let ((a0-34 (-> obj skel root-channel 0))) + (set! (-> a0-34 param 0) (the float (+ (-> a0-34 frame-group data 0 length) -1))) + (set! (-> a0-34 param 1) 1.0) + (joint-control-channel-group! a0-34 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-35 (-> obj skel root-channel 0))) + (set! (-> a0-35 param 0) (the float (+ (-> a0-35 frame-group data 0 length) -1))) + (set! (-> a0-35 param 1) 1.0) + (joint-control-channel-group-eval! a0-35 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (else + (ja-channel-push! 1 60) + (let ((s5-4 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-4 + (the-as art-joint-anim (-> obj draw art-group data 14)) + num-func-identity + ) + (set! (-> s5-4 frame-num) 0.0) + ) + (let ((a0-38 (-> obj skel root-channel 0))) + (set! (-> a0-38 param 0) (the float (+ (-> a0-38 frame-group data 0 length) -1))) + (set! (-> a0-38 param 1) 1.0) + (joint-control-channel-group! a0-38 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 10) + ) + (cond + ((-> obj attacking?) + (ja-channel-push! 1 60) + (let ((s5-5 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-5 + (the-as art-joint-anim (-> obj draw art-group data 12)) + num-func-identity + ) + (set! (-> s5-5 frame-num) 0.0) + ) + (let ((a0-45 (-> obj skel root-channel 0))) + (set! (-> a0-45 param 0) (the float (+ (-> a0-45 frame-group data 0 length) -1))) + (set! (-> a0-45 param 1) 1.0) + (joint-control-channel-group! a0-45 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ((ja-done? 0) + (let ((v1-142 (-> obj skel root-channel 0))) + (set! (-> v1-142 num-func) num-func-identity) + (set! (-> v1-142 frame-num) 0.0) + ) + (let ((a0-48 (-> obj skel root-channel 0))) + (set! (-> a0-48 param 0) (the float (+ (-> a0-48 frame-group data 0 length) -1))) + (set! (-> a0-48 param 1) 1.0) + (joint-control-channel-group! a0-48 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-49 (-> obj skel root-channel 0))) + (set! (-> a0-49 param 0) (the float (+ (-> a0-49 frame-group data 0 length) -1))) + (set! (-> a0-49 param 1) 1.0) + (joint-control-channel-group-eval! a0-49 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 12) + ) + (cond + ((not (-> obj attacking?)) + (ja-channel-push! 1 60) + (let ((s5-6 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-6 + (the-as art-joint-anim (-> obj draw art-group data 10)) + num-func-identity + ) + (set! (-> s5-6 frame-num) 0.0) + ) + (let ((a0-56 (-> obj skel root-channel 0))) + (set! (-> a0-56 param 0) (the float (+ (-> a0-56 frame-group data 0 length) -1))) + (set! (-> a0-56 param 1) 1.0) + (joint-control-channel-group! a0-56 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ((ja-done? 0) + (let ((v1-178 (-> obj skel root-channel 0))) + (set! (-> v1-178 num-func) num-func-identity) + (set! (-> v1-178 frame-num) 0.0) + ) + (let ((a0-59 (-> obj skel root-channel 0))) + (set! (-> a0-59 param 0) (the float (+ (-> a0-59 frame-group data 0 length) -1))) + (set! (-> a0-59 param 1) 1.0) + (joint-control-channel-group! a0-59 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-60 (-> obj skel root-channel 0))) + (set! (-> a0-60 param 0) (the float (+ (-> a0-60 frame-group data 0 length) -1))) + (set! (-> a0-60 param 1) 1.0) + (joint-control-channel-group-eval! a0-60 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + ((= (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (-> obj draw art-group data 13) + ) + (cond + ((ja-done? 0) + (ja-channel-push! 1 60) + (let ((s5-7 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-7 + (the-as art-joint-anim (-> obj draw art-group data 10)) + num-func-identity + ) + (set! (-> s5-7 frame-num) 0.0) + ) + (let ((a0-68 (-> obj skel root-channel 0))) + (set! (-> a0-68 param 0) (the float (+ (-> a0-68 frame-group data 0 length) -1))) + (set! (-> a0-68 param 1) 1.0) + (joint-control-channel-group! a0-68 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-69 (-> obj skel root-channel 0))) + (set! (-> a0-69 param 0) (the float (+ (-> a0-69 frame-group data 0 length) -1))) + (set! (-> a0-69 param 1) 1.0) + (joint-control-channel-group-eval! a0-69 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (else + (ja-channel-push! 1 60) + (let ((s5-8 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-8 + (the-as art-joint-anim (-> obj draw art-group data 13)) + num-func-identity + ) + (set! (-> s5-8 frame-num) 0.0) + ) + (let ((a0-72 (-> obj skel root-channel 0))) + (set! (-> a0-72 param 0) (the float (+ (-> a0-72 frame-group data 0 length) -1))) + (set! (-> a0-72 param 1) 1.0) + (joint-control-channel-group! a0-72 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (case (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + (((-> obj draw art-group data 10) (-> obj draw art-group data 12)) + (dummy-31 obj) + ) + (else + (dummy-30 obj) + ) + ) + (none) + ) + +;; definition for method 7 of type puffer +;; INFO: Return type mismatch process-drawable vs puffer. +(defmethod relocate puffer ((obj puffer) (arg0 int)) + (if (nonzero? (-> obj neck)) + (&+! (-> obj neck) arg0) + ) + (the-as + puffer + ((the-as (function process-drawable int process-drawable) (find-parent-method puffer 7)) obj arg0) + ) + ) + +;; definition for method 11 of type puffer +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! puffer ((obj puffer) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (set! (-> obj cprims-type) (the-as uint 0)) + (set! (-> obj attacking?) #f) + (set! (-> obj buddy) #f) + (set! (-> obj hit-player?) #f) + (set! (-> obj look-mean?) #f) + (set! (-> obj travel-turn-speed) 16384.0) + (dummy-21 obj) + (process-drawable-from-entity! obj (the-as entity-actor (-> obj entity))) + (initialize-skeleton obj *puffer-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (dummy-9 (-> obj nice-look) *puffer-sg* (-> obj draw art-group) (-> obj entity)) + (dummy-9 (-> obj mean-look) *puffer-mean-sg* (-> obj draw art-group) (-> obj entity)) + (load-params! (-> obj sync) obj (the-as uint 2400) 0.0 0.15 0.15) + (set! (-> obj notice-dist) (res-lump-float arg0 'notice-dist :default 57344.0)) + (set! (-> obj give-up-dist) (+ 20480.0 (-> obj notice-dist))) + (set! (-> obj nav) (new 'process 'nav-control (-> obj root-override) 16 40960.0)) + (logior! (-> obj nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) + (dummy-26 (-> obj nav)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj fact-info-override) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (set! (-> obj draw shadow-ctrl) (new 'process 'shadow-control 0.0 0.0 614400.0 (the-as float 60) 245760.0)) + (if (<= (-> obj path curve num-cverts) 0) + (go process-drawable-art-error "no path") + ) + (set! (-> obj buddy) (the-as process-drawable (entity-actor-lookup arg0 'alt-actor 0))) + (ja-channel-set! 1) + (let ((a0-21 (-> obj skel root-channel 0))) + (set! (-> a0-21 param 0) (the float (+ (-> a0-21 frame-group data 0 length) -1))) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group! a0-21 (the-as art-joint-anim #f) num-func-seek!) + ) + (let ((s4-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-0 + (the-as art-joint-anim (-> obj draw art-group data 9)) + num-func-identity + ) + (set! (-> s4-0 frame-num) 0.0) + ) + (set! (-> obj facing-ry) (quaternion-y-angle (-> obj root-override quat))) + (set! (-> obj travel-ry) (-> obj facing-ry)) + (set! (-> obj travel-speed) 18432.0) + (vector-reset! (-> obj root-override transv)) + (set! (-> obj patrol-bottom-y) (-> obj root-override trans y)) + (let ((f28-0 8192.0) + (f30-0 -8192.0) + ) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-54 (res-lump-data arg0 'distance (pointer float) :tag-ptr (& sv-16)))) + (when v1-54 + (set! f28-0 (-> v1-54 0)) + (set! f30-0 (-> v1-54 1)) + ) + ) + (set! (-> obj top-y) (+ (-> obj patrol-bottom-y) f28-0)) + (set! (-> obj attack-bottom-y) (+ (-> obj patrol-bottom-y) f30-0)) + ) + (set! (-> obj root-override trans y) (rand-vu-float-range (-> obj patrol-bottom-y) (-> obj top-y))) + (set! (-> obj targ-trans-y) (-> obj root-override trans y)) + (set! (-> obj acc-y) 2048.0) + (let ((v1-59 (new 'process 'joint-mod (joint-mod-handler-mode reset) obj 5))) + (set! (-> obj neck) v1-59) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> v1-59 up) (the-as uint 1)) + (set! (-> v1-59 nose) (the-as uint 2)) + (set! (-> v1-59 ear) (the-as uint 0)) + (set! (-> v1-59 max-dist) 102400.0) + (set! (-> v1-59 ignore-angle) 16384.0) + ) + (dummy-47 (-> obj root-override)) + (go puffer-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/village2/assistant-village2_REF.gc b/test/decompiler/reference/levels/village2/assistant-village2_REF.gc index 04c325950d..74b4750aca 100644 --- a/test/decompiler/reference/levels/village2/assistant-village2_REF.gc +++ b/test/decompiler/reference/levels/village2/assistant-village2_REF.gc @@ -1570,7 +1570,7 @@ (set-vector! s5-0 -49152.0 10240.0 5529.6 1.0) (vector+! s5-0 s5-0 (-> self entity extra trans)) (vector-! s4-0 gp-0 s5-0) - (let ((t2-0 (new 'stack-no-clear 'collide-mesh-cache-tri))) + (let ((t2-0 (new 'stack-no-clear 'collide-tri-result))) 0.0 (when (>= (dummy-10 *collide-cache* s5-0 s4-0 6144.0 16 (the-as process #f) t2-0 1) 0.0) (let ((a1-7 (new 'stack-no-clear 'event-message-block))) diff --git a/test/decompiler/reference/levels/village2/swamp-blimp_REF.gc b/test/decompiler/reference/levels/village2/swamp-blimp_REF.gc new file mode 100644 index 0000000000..d2298bcc6d --- /dev/null +++ b/test/decompiler/reference/levels/village2/swamp-blimp_REF.gc @@ -0,0 +1,2030 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defskelgroup *swamp-tetherrock-sg* swamp-tetherrock + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 4 0 6) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *swamp-tetherrock-explode-sg* swamp-tetherrock-explode + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 4 0 16) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *precursor-arm-sg* precursor-arm + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 15 0 15) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *swamp-rope-sg* swamp-rope + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 300) + :longest-edge (meters 66) + ) + +;; failed to figure out what this is: +(defskelgroup *swamp-blimp-sg* swamp-blimp + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 10 60 0 95) + :longest-edge (meters 40) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 285) (new 'static 'sparticle-launch-group + :length 4 + :duration #x96 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-tetherrock-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 2065 :period 600 :length 5) + (sp-item 2066 :period 600 :length 40) + (sp-item 2067 :period 600 :length 20) + (sp-item 2068 :period 600 :length 20) + ) + :bounds (new 'static 'sphere :w 65536.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2066) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 6.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.33) (meters 0.66) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.21333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 29 1) + (sp-launcher-by-id spt-next-launcher 2069) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2069) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.4222223) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2068) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 3.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-flt spt-scale-x (meters 0.4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 16.0)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.04)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2065) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 2.0)) + (sp-flt spt-scale-x (meters 32.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 192.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2067) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 4.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 255.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.026666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-int spt-next-time 42) + (sp-launcher-by-id spt-next-launcher 2070) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2070) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -0.53333336) + (sp-flt spt-fade-b -1.0583333) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2017) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 0.2) + (sp-flt spt-y (meters 0.1)) + (sp-flt spt-scale-x (meters 3.0)) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit4 bit14) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 109) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 287) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-tether-rock-hit" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 1321 :period 15 :length 5)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1321) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 16.0 1.0) + (sp-rnd-flt spt-g 70.0 16.0 1.0) + (sp-flt spt-b 70.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-accel-y -10.922667) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2) + (sp-flt spt-userdata 0.0) + (sp-rnd-flt spt-conerot-x (degrees 20.0) (degrees 50.000004) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; definition of type swamp-blimp-bank +(deftype swamp-blimp-bank (basic) + ((arm-index int32 :offset-assert 4) + (pause-before-dropping-arm int32 :offset-assert 8) + (rise-per-break float :offset-assert 12) + (arm-sink-wait float :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +;; definition for method 3 of type swamp-blimp-bank +(defmethod inspect swamp-blimp-bank ((obj swamp-blimp-bank)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tarm-index: ~D~%" (-> obj arm-index)) + (format #t "~Tpause-before-dropping-arm: ~D~%" (-> obj pause-before-dropping-arm)) + (format #t "~Trise-per-break: ~f~%" (-> obj rise-per-break)) + (format #t "~Tarm-sink-wait: ~f~%" (-> obj arm-sink-wait)) + obj + ) + +;; definition for symbol *SWAMP_BLIMP-bank*, type swamp-blimp-bank +(define + *SWAMP_BLIMP-bank* + (new 'static 'swamp-blimp-bank :pause-before-dropping-arm #x4b0 :rise-per-break 16384.0 :arm-sink-wait 1500.0) + ) + +;; definition of type tetherrock-info +(deftype tetherrock-info (structure) + ((rock-camera string :offset-assert 0) + (arm-camera string :offset-assert 4) + (blimp-rp int32 :offset-assert 8) + (other-rp int32 :offset-assert 12) + (connected-to-rock basic :offset-assert 16) + (damping float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) + +;; definition for method 3 of type tetherrock-info +(defmethod inspect tetherrock-info ((obj tetherrock-info)) + (format #t "[~8x] ~A~%" obj 'tetherrock-info) + (format #t "~Trock-camera: ~A~%" (-> obj rock-camera)) + (format #t "~Tarm-camera: ~A~%" (-> obj arm-camera)) + (format #t "~Tblimp-rp: ~D~%" (-> obj blimp-rp)) + (format #t "~Tother-rp: ~D~%" (-> obj other-rp)) + (format #t "~Tconnected-to-rock: ~A~%" (-> obj connected-to-rock)) + (format #t "~Tdamping: ~f~%" (-> obj damping)) + obj + ) + +;; definition for function tetherrock-get-info +(defun tetherrock-get-info ((arg0 entity)) + (case (-> arg0 extra perm task) + (((game-task swamp-tether-1)) + (new 'static 'tetherrock-info + :rock-camera "camera-182" + :arm-camera "camera-187" + :blimp-rp 10 + :other-rp 4 + :connected-to-rock #t + :damping 0.99 + ) + ) + (((game-task swamp-tether-2)) + (new 'static 'tetherrock-info + :rock-camera "camera-183" + :arm-camera "camera-186" + :blimp-rp 6 + :other-rp 4 + :connected-to-rock #t + :damping 0.99 + ) + ) + (((game-task swamp-tether-3)) + (new 'static 'tetherrock-info + :rock-camera "camera-180" + :arm-camera "camera-184" + :blimp-rp 7 + :other-rp 4 + :connected-to-rock #t + :damping 0.99 + ) + ) + (((game-task swamp-tether-4)) + (new 'static 'tetherrock-info + :rock-camera "camera-181" + :arm-camera "camera-185" + :blimp-rp 9 + :other-rp 4 + :connected-to-rock #t + :damping 0.99 + ) + ) + (else + (new 'static 'tetherrock-info + :rock-camera "" + :arm-camera "" + :blimp-rp 8 + :other-rp 4 + :connected-to-rock #f + :damping 0.7 + ) + ) + ) + ) + +;; definition of type swamp-rope-rand-float +(deftype swamp-rope-rand-float (structure) + ((min-time int32 :offset-assert 0) + (max-time int32 :offset-assert 4) + (max-val float :offset-assert 8) + (timer int32 :offset-assert 12) + (value float :offset-assert 16) + ) + :pack-me + :method-count-assert 11 + :size-assert #x14 + :flag-assert #xb00000014 + (:methods + (init! (_type_ int int float) none 9) + (update-timer! (_type_) none 10) + ) + ) + +;; definition for method 3 of type swamp-rope-rand-float +(defmethod inspect swamp-rope-rand-float ((obj swamp-rope-rand-float)) + (format #t "[~8x] ~A~%" obj 'swamp-rope-rand-float) + (format #t "~Tmin-time: ~D~%" (-> obj min-time)) + (format #t "~Tmax-time: ~D~%" (-> obj max-time)) + (format #t "~Tmax-val: ~f~%" (-> obj max-val)) + (format #t "~Ttimer: ~D~%" (-> obj timer)) + (format #t "~Tvalue: ~f~%" (-> obj value)) + obj + ) + +;; definition for method 9 of type swamp-rope-rand-float +;; INFO: Return type mismatch int vs none. +(defmethod init! swamp-rope-rand-float ((obj swamp-rope-rand-float) (arg0 int) (arg1 int) (arg2 float)) + (set! (-> obj min-time) arg0) + (set! (-> obj max-time) arg1) + (set! (-> obj max-val) (* 0.5 arg2)) + (set! (-> obj timer) 0) + (set! (-> obj value) 0.0) + 0 + (none) + ) + +;; definition for method 10 of type swamp-rope-rand-float +;; INFO: Return type mismatch int vs none. +(defmethod update-timer! swamp-rope-rand-float ((obj swamp-rope-rand-float)) + (set! (-> obj timer) + (- (-> obj timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (when (<= (-> obj timer) 0) + (set! (-> obj timer) (rand-vu-int-range (-> obj min-time) (-> obj max-time))) + (set! (-> obj value) (rand-vu-float-range (- (-> obj max-val)) (-> obj max-val))) + ) + 0 + (none) + ) + +;; definition of type swamp-rope-oscillator +(deftype swamp-rope-oscillator (structure) + ((target float :offset-assert 0) + (value float :offset-assert 4) + (vel float :offset-assert 8) + (accel float :offset-assert 12) + (vector-overlay vector :inline :offset 0) + (max-vel float :offset-assert 16) + (damping float :offset-assert 20) + ) + :method-count-assert 11 + :size-assert #x18 + :flag-assert #xb00000018 + (:methods + (init! (_type_ float float float float) none 9) + (TODO-RENAME-10 (_type_ float) none 10) + ) + ) + +;; definition for method 3 of type swamp-rope-oscillator +(defmethod inspect swamp-rope-oscillator ((obj swamp-rope-oscillator)) + (format #t "[~8x] ~A~%" obj 'swamp-rope-oscillator) + (format #t "~Ttarget: ~f~%" (-> obj target)) + (format #t "~Tvalue: ~f~%" (-> obj value)) + (format #t "~Tvel: ~f~%" (-> obj vel)) + (format #t "~Taccel: ~f~%" (-> obj accel)) + (format #t "~Tmax-vel: ~f~%" (-> obj max-vel)) + (format #t "~Tdamping: ~f~%" (-> obj damping)) + obj + ) + +;; definition for method 9 of type swamp-rope-oscillator +;; INFO: Return type mismatch int vs none. +(defmethod init! swamp-rope-oscillator ((obj swamp-rope-oscillator) (arg0 float) (arg1 float) (arg2 float) (arg3 float)) + (set! (-> obj target) arg0) + (set! (-> obj value) arg0) + (set! (-> obj vel) 0.0) + (set! (-> obj accel) arg1) + (set! (-> obj max-vel) arg2) + (set! (-> obj damping) arg3) + 0 + (none) + ) + +;; definition for method 10 of type swamp-rope-oscillator +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-10 swamp-rope-oscillator ((obj swamp-rope-oscillator) (arg0 float)) + (let ((f0-3 (* (- (+ (-> obj target) arg0) (-> obj value)) (* (-> obj accel) (-> *display* time-adjust-ratio))))) + (+! (-> obj vel) f0-3) + ) + (set! (-> obj vel) (fmin (-> obj max-vel) (fmax (- (-> obj max-vel)) (-> obj vel)))) + (set! (-> obj vel) (* (-> obj vel) (-> obj damping))) + (+! (-> obj value) (* (-> obj vel) (-> *display* time-adjust-ratio))) + 0 + (none) + ) + +;; definition of type swamp-blimp-rand-vector +(deftype swamp-blimp-rand-vector (structure) + ((min-time int32 :offset-assert 0) + (max-time int32 :offset-assert 4) + (xz-max float :offset-assert 8) + (y-max float :offset-assert 12) + (timer int32 :offset-assert 16) + (value vector :inline :offset-assert 32) + ) + :method-count-assert 11 + :size-assert #x30 + :flag-assert #xb00000030 + (:methods + (init! (_type_ int int float float) none 9) + (update-timer! (_type_) none 10) + ) + ) + +;; definition for method 3 of type swamp-blimp-rand-vector +(defmethod inspect swamp-blimp-rand-vector ((obj swamp-blimp-rand-vector)) + (format #t "[~8x] ~A~%" obj 'swamp-blimp-rand-vector) + (format #t "~Tmin-time: ~D~%" (-> obj min-time)) + (format #t "~Tmax-time: ~D~%" (-> obj max-time)) + (format #t "~Txz-max: ~f~%" (-> obj xz-max)) + (format #t "~Ty-max: ~f~%" (-> obj y-max)) + (format #t "~Ttimer: ~D~%" (-> obj timer)) + (format #t "~Tvalue: #~%" (-> obj value)) + obj + ) + +;; definition for method 9 of type swamp-blimp-rand-vector +;; INFO: Return type mismatch int vs none. +(defmethod init! swamp-blimp-rand-vector ((obj swamp-blimp-rand-vector) (arg0 int) (arg1 int) (arg2 float) (arg3 float)) + (set! (-> obj min-time) arg0) + (set! (-> obj max-time) arg1) + (set! (-> obj xz-max) (* 0.5 arg2)) + (set! (-> obj y-max) (* 0.5 arg3)) + (set! (-> obj timer) 0) + (vector-reset! (-> obj value)) + 0 + (none) + ) + +;; definition for method 10 of type swamp-blimp-rand-vector +;; INFO: Return type mismatch int vs none. +(defmethod update-timer! swamp-blimp-rand-vector ((obj swamp-blimp-rand-vector)) + (set! (-> obj timer) + (- (-> obj timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (when (<= (-> obj timer) 0) + (set! (-> obj timer) (rand-vu-int-range (-> obj min-time) (-> obj max-time))) + (set! (-> obj value x) (rand-vu-float-range (- (-> obj xz-max)) (-> obj xz-max))) + (set! (-> obj value y) (rand-vu-float-range (- (-> obj y-max)) (-> obj y-max))) + (set! (-> obj value z) (rand-vu-float-range (- (-> obj xz-max)) (-> obj xz-max))) + ) + 0 + (none) + ) + +;; definition of type swamp-blimp-oscillator +(deftype swamp-blimp-oscillator (structure) + ((target vector :inline :offset-assert 0) + (value vector :inline :offset-assert 16) + (vel vector :inline :offset-assert 32) + (accel float :offset-assert 48) + (max-vel float :offset-assert 52) + (damping float :offset-assert 56) + ) + :pack-me + :method-count-assert 11 + :size-assert #x3c + :flag-assert #xb0000003c + (:methods + (init! (_type_ vector float float float) none 9) + (TODO-RENAME-10 (_type_ vector) none 10) + ) + ) + +;; definition for method 3 of type swamp-blimp-oscillator +(defmethod inspect swamp-blimp-oscillator ((obj swamp-blimp-oscillator)) + (format #t "[~8x] ~A~%" obj 'swamp-blimp-oscillator) + (format #t "~Ttarget: #~%" (-> obj target)) + (format #t "~Tvalue: #~%" (-> obj value)) + (format #t "~Tvel: #~%" (-> obj vel)) + (format #t "~Taccel: ~f~%" (-> obj accel)) + (format #t "~Tmax-vel: ~f~%" (-> obj max-vel)) + (format #t "~Tdamping: ~f~%" (-> obj damping)) + obj + ) + +;; definition for method 9 of type swamp-blimp-oscillator +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod init! swamp-blimp-oscillator ((obj swamp-blimp-oscillator) (arg0 vector) (arg1 float) (arg2 float) (arg3 float)) + (cond + (arg0 + (set! (-> obj target quad) (-> arg0 quad)) + (set! (-> obj value quad) (-> arg0 quad)) + ) + (else + (vector-reset! (-> obj target)) + (vector-reset! (-> obj value)) + ) + ) + (vector-reset! (-> obj vel)) + (set! (-> obj accel) arg1) + (set! (-> obj max-vel) arg2) + (set! (-> obj damping) arg3) + 0 + (none) + ) + +;; definition for method 10 of type swamp-blimp-oscillator +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-10 swamp-blimp-oscillator ((obj swamp-blimp-oscillator) (arg0 vector)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (cond + (arg0 + (vector+! gp-0 (-> obj target) arg0) + (vector-! gp-0 gp-0 (-> obj value)) + ) + (else + (vector-! gp-0 (-> obj target) (-> obj value)) + ) + ) + (vector-float*! gp-0 gp-0 (* (-> obj accel) (-> *display* time-adjust-ratio))) + (vector+! (-> obj vel) (-> obj vel) gp-0) + (let ((f0-2 (vector-length (-> obj vel)))) + (if (< (-> obj max-vel) f0-2) + (vector-float*! (-> obj vel) (-> obj vel) (/ (-> obj max-vel) f0-2)) + ) + ) + (vector-float*! (-> obj vel) (-> obj vel) (-> obj damping)) + (vector-float*! gp-0 (-> obj vel) (-> *display* time-adjust-ratio)) + (vector+! (-> obj value) (-> obj value) gp-0) + ) + 0 + (none) + ) + +;; definition of type swamp-tetherrock +(deftype swamp-tetherrock (process-drawable) + ((root-override collide-shape-moving :offset 112) + (tension float :offset-assert 176) + (tension-pt vector :inline :offset-assert 192) + (blimp entity-actor :offset-assert 208) + (rot-at-init quaternion :inline :offset-assert 224) + (hits int32 :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf4 + :flag-assert #x14009000f4 + ) + +;; definition for method 3 of type swamp-tetherrock +(defmethod inspect swamp-tetherrock ((obj swamp-tetherrock)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttension: ~f~%" (-> obj tension)) + (format #t "~T~Ttension-pt: #~%" (-> obj tension-pt)) + (format #t "~T~Tblimp: ~A~%" (-> obj blimp)) + (format #t "~T~Trot-at-init: #~%" (-> obj rot-at-init)) + (format #t "~T~Thits: ~D~%" (-> obj hits)) + obj + ) + +;; definition of type precursor-arm +(deftype precursor-arm (process-drawable) + ((root-override collide-shape :offset 112) + (y-init float :offset-assert 176) + (y-offset float :offset-assert 180) + (rot-speed float :offset-assert 184) + (rot-dist float :offset-assert 188) + (rot-base float :offset-assert 192) + (rot-t float :offset-assert 196) + (init-mat matrix :inline :offset-assert 208) + (tension float :offset-assert 272) + ) + :heap-base #xb0 + :method-count-assert 20 + :size-assert #x114 + :flag-assert #x1400b00114 + ) + +;; definition for method 3 of type precursor-arm +(defmethod inspect precursor-arm ((obj precursor-arm)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Ty-init: ~f~%" (-> obj y-init)) + (format #t "~T~Ty-offset: ~f~%" (-> obj y-offset)) + (format #t "~T~Trot-speed: ~f~%" (-> obj rot-speed)) + (format #t "~T~Trot-dist: ~f~%" (-> obj rot-dist)) + (format #t "~T~Trot-base: ~f~%" (-> obj rot-base)) + (format #t "~T~Trot-t: ~f~%" (-> obj rot-t)) + (format #t "~T~Tinit-mat: #~%" (-> obj init-mat)) + (format #t "~T~Ttension: ~f~%" (-> obj tension)) + obj + ) + +;; definition of type swamp-rope +(deftype swamp-rope (process-drawable) + ((parent-override (pointer swamp-blimp) :offset 12) + (parent-rp int32 :offset-assert 176) + (other-entity entity-actor :offset-assert 180) + (other-rp int32 :offset-assert 184) + (old-scale float :offset-assert 188) + (frame swamp-rope-oscillator :inline :offset-assert 192) + (other-pos vector :inline :offset-assert 224) + (scale-base float :offset-assert 240) + (base-vec vector :inline :offset-assert 256) + (scale-t float :offset-assert 272) + (x-t float :offset-assert 276) + (z-t float :offset-assert 280) + (rot-speed float :offset-assert 284) + ) + :heap-base #xb0 + :method-count-assert 21 + :size-assert #x120 + :flag-assert #x1500b00120 + (:methods + (dummy-20 (_type_) basic 20) + ) + ) + +;; definition for method 3 of type swamp-rope +(defmethod inspect swamp-rope ((obj swamp-rope)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tparent-rp: ~D~%" (-> obj parent-rp)) + (format #t "~T~Tother-entity: ~A~%" (-> obj other-entity)) + (format #t "~T~Tother-rp: ~D~%" (-> obj other-rp)) + (format #t "~T~Told-scale: ~f~%" (-> obj old-scale)) + (format #t "~T~Tframe: #~%" (-> obj frame)) + (format #t "~T~Tother-pos: #~%" (-> obj other-pos)) + (format #t "~T~Tscale-base: ~f~%" (-> obj scale-base)) + (format #t "~T~Tbase-vec: #~%" (-> obj base-vec)) + (format #t "~T~Tscale-t: ~f~%" (-> obj scale-t)) + (format #t "~T~Tx-t: ~f~%" (-> obj x-t)) + (format #t "~T~Tz-t: ~f~%" (-> obj z-t)) + (format #t "~T~Trot-speed: ~f~%" (-> obj rot-speed)) + obj + ) + +;; definition for method 20 of type swamp-rope +(defmethod dummy-20 swamp-rope ((obj swamp-rope)) + (and + (-> obj other-entity) + (not (task-closed? (-> obj other-entity extra perm task) (task-status need-reminder))) + ) + ) + +;; definition of type swamp-blimp +(deftype swamp-blimp (process-drawable) + ((root-override collide-shape-moving :offset 112) + (the-ropes handle 5 :offset-assert 176) + (arm-timer int32 :offset-assert 216) + (trans-at-init vector :inline :offset-assert 224) + (rot-at-init quaternion :inline :offset-assert 240) + (y-vel float :offset-assert 256) + (y-offset float :offset-assert 260) + (y-offset-target float :offset-assert 264) + (main-tilt-rand swamp-blimp-rand-vector :inline :offset-assert 272) + (main-tilt-oscillator swamp-blimp-oscillator :inline :offset-assert 320) + (gondola-tilt-oscillator swamp-blimp-oscillator :inline :offset-assert 384) + (pos-rand swamp-blimp-rand-vector :inline :offset-assert 448) + (pos-oscillator swamp-blimp-oscillator :inline :offset-assert 496) + (scale-rand swamp-rope-rand-float :inline :offset-assert 556) + (scale-oscillator swamp-rope-oscillator :inline :offset-assert 576) + (gondola joint-mod :offset-assert 600) + (bag joint-mod :offset-assert 604) + ) + :heap-base #x1f0 + :method-count-assert 20 + :size-assert #x260 + :flag-assert #x1401f00260 + ) + +;; definition for method 3 of type swamp-blimp +(defmethod inspect swamp-blimp ((obj swamp-blimp)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tthe-ropes[5] @ #x~X~%" (-> obj the-ropes)) + (format #t "~T~Tarm-timer: ~D~%" (-> obj arm-timer)) + (format #t "~T~Ttrans-at-init: #~%" (-> obj trans-at-init)) + (format #t "~T~Trot-at-init: #~%" (-> obj rot-at-init)) + (format #t "~T~Ty-vel: ~f~%" (-> obj y-vel)) + (format #t "~T~Ty-offset: ~f~%" (-> obj y-offset)) + (format #t "~T~Ty-offset-target: ~f~%" (-> obj y-offset-target)) + (format #t "~T~Tmain-tilt-rand: #~%" (-> obj main-tilt-rand)) + (format #t "~T~Tmain-tilt-oscillator: #~%" (-> obj main-tilt-oscillator)) + (format #t "~T~Tgondola-tilt-oscillator: #~%" (-> obj gondola-tilt-oscillator)) + (format #t "~T~Tpos-rand: #~%" (-> obj pos-rand)) + (format #t "~T~Tpos-oscillator: #~%" (-> obj pos-oscillator)) + (format #t "~T~Tscale-rand: #~%" (-> obj scale-rand)) + (format #t "~T~Tscale-oscillator: #~%" (-> obj scale-oscillator)) + (format #t "~T~Tgondola: ~A~%" (-> obj gondola)) + (format #t "~T~Tbag: ~A~%" (-> obj bag)) + obj + ) + +;; definition for method 7 of type swamp-blimp +;; INFO: Return type mismatch process-drawable vs swamp-blimp. +(defmethod relocate swamp-blimp ((obj swamp-blimp) (arg0 int)) + (if (nonzero? (-> obj gondola)) + (&+! (-> obj gondola) arg0) + ) + (if (nonzero? (-> obj bag)) + (&+! (-> obj bag) arg0) + ) + (the-as + swamp-blimp + ((the-as (function process-drawable int process-drawable) (find-parent-method swamp-blimp 7)) obj arg0) + ) + ) + +;; failed to figure out what this is: +(defstate swamp-tetherrock-die (swamp-tetherrock) + :code + (behavior () (dummy-18 self) (deactivate self) (suspend) 0 (none)) + ) + +;; failed to figure out what this is: +(defstate swamp-tetherrock-hide (swamp-tetherrock) + :code + (behavior () + (clear-collide-with-as (-> self root-override)) + (logior! (-> self draw status) 2) + (while #t + (when (= (get-task-status (-> self entity extra perm task)) (task-status invalid)) + (if (not (-> self child)) + (go swamp-tetherrock-die) + ) + ) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate swamp-tetherrock-break (swamp-tetherrock) + :exit + (behavior () + (clear-pending-settings-from-process *setting-control* self 'movie) + (clear-pending-settings-from-process *setting-control* self 'process-mask) + (copy-settings-from-target! *setting-control*) + (none) + ) + :code + (behavior () + (let ((gp-0 (tetherrock-get-info (-> self entity)))) + (hide-hud-quick) + (process-grab? *target*) + (set-setting! *setting-control* self 'movie (the-as symbol (process->ppointer self)) 0.0 0) + (set-setting! *setting-control* self 'process-mask 'set 0.0 #x80800) + (copy-settings-from-target! *setting-control*) + (let* ((s4-0 (get-task-control (game-task swamp-tether-1))) + (s5-0 (+ (get-reminder s4-0 0) 1)) + ) + (save-reminder s4-0 s5-0 0) + (cond + ((= s5-0 1) + (ambient-hint-spawn "gamcam03" (the-as vector #f) *entity-pool* 'camera) + ) + ((= s5-0 2) + (ambient-hint-spawn "gamcam03" (the-as vector #f) *entity-pool* 'camera) + ) + ((= s5-0 3) + (ambient-hint-spawn "gamcam03" (the-as vector #f) *entity-pool* 'camera) + ) + ((= s5-0 4) + (ambient-hint-spawn "gamcam06" (the-as vector #f) *entity-pool* 'camera) + ) + ) + ) + (let ((s5-1 (entity-by-name (-> gp-0 rock-camera)))) + (cam-slave-get-vector-with-offset (the-as entity-actor s5-1) *camera-other-trans* 'trans) + (cam-slave-get-rot (the-as entity-actor s5-1) *camera-other-matrix*) + (set! (-> *camera-other-fov* data) (cam-slave-get-fov s5-1)) + ) + (set! (-> *camera-other-root* quad) (-> self root-override trans quad)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 180) + (set! *camera-look-through-other* 2) + (suspend) + ) + (set! (-> self tension) 0.0) + (close-specific-task! (-> self entity extra perm task) (task-status need-reminder)) + (birth-pickup-at-point + (-> self root-override trans) + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + self + (the-as fact-info #f) + ) + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 1) + (set! (-> a1-12 message) 'tetherrock-break-evt) + (set! (-> a1-12 param 0) (the-as uint (-> self entity))) + (let* ((t9-19 send-event-function) + (v1-41 (-> self blimp)) + (s5-2 (t9-19 + (if v1-41 + (-> v1-41 extra process) + ) + a1-12 + ) + ) + ) + (let ((s4-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s4-1 + (let ((t9-21 (method-of-type part-tracker activate))) + (t9-21 (the-as part-tracker s4-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-1 + part-tracker-init + (-> *part-group-id-table* 285) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> s4-1 ppointer) + ) + ) + (logior! (-> self draw status) 32) + (let* ((s4-2 (get-process *default-dead-pool* manipy #x4000)) + (s4-3 (ppointer->handle (when s4-2 + (let ((t9-24 (method-of-type manipy activate))) + (t9-24 (the-as manipy s4-2) *entity-pool* 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-2 + manipy-init + (-> self root-override trans) + (-> self entity) + *swamp-tetherrock-explode-sg* + #f + ) + (-> s4-2 ppointer) + ) + ) + ) + ) + (send-event (handle->process (the-as handle s4-3)) 'anim-mode 'play1) + (send-event (handle->process (the-as handle s4-3)) 'art-joint-anim "swamp-tetherrock-explode-explode" 0) + (send-event (handle->process (the-as handle s4-3)) 'draw #t) + (while (handle->process (the-as handle s4-3)) + (set! *camera-look-through-other* 2) + (suspend) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (set! *camera-look-through-other* 2) + (suspend) + ) + (when (zero? s5-2) + (let ((gp-1 (entity-by-name (-> gp-0 arm-camera)))) + (cam-slave-get-vector-with-offset (the-as entity-actor gp-1) *camera-other-trans* 'trans) + (cam-slave-get-rot (the-as entity-actor gp-1) *camera-other-matrix*) + (set! (-> *camera-other-fov* data) (cam-slave-get-fov gp-1)) + ) + (set! (-> *camera-other-root* quad) (-> self root-override trans quad)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 1500) + (set! *camera-look-through-other* 2) + (suspend) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 1500) + (set! *camera-look-through-other* 2) + (let ((gp-2 (new 'stack-no-clear 'vector)) + (a0-58 (-> self blimp extra process)) + ) + (when a0-58 + (vector-! gp-2 (-> (the-as swamp-blimp a0-58) root-override trans) *camera-other-trans*) + (vector-normalize! gp-2 1.0) + (forward-down->inv-matrix *camera-other-matrix* gp-2 (-> *camera* local-down)) + ) + ) + (suspend) + ) + ) + (process-release? *target*) + (let ((gp-3 (get-process *default-dead-pool* process #x4000))) + (when gp-3 + (let ((t9-37 (method-of-type process activate))) + (t9-37 gp-3 self 'process (the-as pointer #x70004000)) + ) + (run-next-time-in-process + gp-3 + (lambda ((arg0 int)) + (while (or + (-> *setting-control* current ambient) + (-> *setting-control* current hint) + (-> *setting-control* current movie) + ) + (suspend) + ) + (cond + ((= arg0 3) + (level-hint-spawn + (game-text-id swamp-tethers-three-to-go) + "sksp0157" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 2) + (level-hint-spawn + (game-text-id swamp-tethers-two-to-go) + "sksp0158" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 1) + (level-hint-spawn + (game-text-id swamp-tethers-lefts-find-the-last) + "sksp0159" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((zero? arg0) + (level-hint-spawn + (game-text-id swamp-tethers-completion-sage-precursor-arm) + "sagevb04" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (none) + ) + s5-2 + ) + (-> gp-3 ppointer) + ) + ) + ) + ) + ) + (go swamp-tetherrock-hide) + (none) + ) + :post + (the-as (function none :behavior swamp-tetherrock) ja-post) + ) + +;; failed to figure out what this is: +(defstate swamp-tetherrock-idle (swamp-tetherrock) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (when (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (+! (-> self hits) 1) + (cond + ((>= (-> self hits) 1) + (go swamp-tetherrock-break) + ) + (else + (let* ((s5-0 arg0) + (gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) + s5-0 + ) + ) + (s5-1 (get-process *default-dead-pool* part-tracker #x4000)) + ) + (when s5-1 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-1 + part-tracker-init + (-> *part-group-id-table* 287) + 150 + #f + #f + #f + (if gp-0 + (-> (the-as process-drawable gp-0) root trans) + (-> self root-override trans) + ) + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (while #t + (let ((s4-0 (new 'static 'vector :y 1.0 :w 1.0)) + (s3-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'quaternion)) + ) + 0.0 + (vector-! s3-0 (-> self tension-pt) (-> self root-override trans)) + (vector-normalize! s3-0 1.0) + (vector-cross! s5-0 s4-0 s3-0) + (let ((f30-0 (asin (vector-normalize-ret-len! s5-0 1.0)))) + (vector-normalize! s5-0 1.0) + (quaternion-vector-angle! gp-0 s5-0 (* (fmin 1820.4445 f30-0) (- 1.0 (-> self tension)))) + ) + (quaternion*! (-> self root-override quat) gp-0 (-> self rot-at-init)) + ) + (if (and *target* (>= 49152.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (level-hint-spawn + (game-text-id swamp-tethers-advice-hint) + "sksp0138" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-tetherrock) transform-post) + ) + +;; definition for method 11 of type swamp-tetherrock +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! swamp-tetherrock ((obj swamp-tetherrock) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask attackable) (-> obj mask))) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 12288.0 0.0 24576.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *swamp-tetherrock-sg* '()) + (set! (-> obj fact) + (new 'process 'fact-info obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (set! (-> obj blimp) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj tension) 0.0) + (vector-reset! (-> obj tension-pt)) + (quaternion-copy! (-> obj rot-at-init) (-> obj root-override quat)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (case (get-task-status (-> obj entity extra perm task)) + (((task-status invalid)) + (go swamp-tetherrock-die) + ) + (((task-status need-resolution)) + (birth-pickup-at-point + (-> obj root-override trans) + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + (go swamp-tetherrock-hide) + ) + (else + (go swamp-tetherrock-idle) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate precursor-arm-die (precursor-arm) + :code + (behavior () + (dummy-18 self) + (deactivate self) + (while #t + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate precursor-arm-sink (precursor-arm) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) + (the int (-> *SWAMP_BLIMP-bank* arm-sink-wait)) + ) + (suspend) + ) + (close-specific-task! (-> self entity extra perm task) (task-status need-reminder)) + (close-specific-task! (-> self entity extra perm task) (task-status need-resolution)) + (while #t + (cond + ((< -40960.0 (-> self y-offset)) + (set! (-> self y-offset) (- (-> self y-offset) (* 409.6 (-> *display* time-adjust-ratio)))) + ) + (else + (set! (-> self y-offset) -40960.0) + (dummy-18 self) + (deactivate self) + ) + ) + (set! (-> self root-override trans y) (+ (-> self y-offset) (-> self y-init))) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior precursor-arm) transform-post) + ) + +;; definition for function precursor-arm-slip +(defun precursor-arm-slip ((arg0 float)) + (cond + ((>= arg0 1.0) + 1.0 + ) + ((>= 0.0 arg0) + 0.0 + ) + (else + (let ((f0-2 1.0) + (f1-3 (- 1.0 arg0)) + ) + (- f0-2 (* f1-3 f1-3)) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate precursor-arm-idle (precursor-arm) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('arm-sink-evt) + (go precursor-arm-sink) + ) + ) + ) + :trans + (behavior () + (when (>= (-> self rot-t) 1.0) + (+! (-> self rot-base) (-> self rot-dist)) + (set! (-> self rot-dist) (rand-vu-float-range -16384.0 16384.0)) + (set! (-> self rot-speed) + (/ 1.0 (* 300.0 (+ (* 0.001373291 (fabs (-> self rot-dist))) (rand-vu-float-range 2.0 5.0)))) + ) + (set! (-> self rot-t) 0.0) + ) + (+! (-> self rot-t) (* (-> self rot-speed) (-> *display* time-adjust-ratio))) + (let ((gp-0 (new 'stack-no-clear 'matrix))) + (matrix-rotate-y! + gp-0 + (+ (-> self rot-base) (* (parameter-ease-sin-clamp (-> self rot-t)) (-> self rot-dist))) + ) + (matrix*! gp-0 (-> self init-mat) gp-0) + (matrix->quaternion (-> self root-override quat) gp-0) + ) + (when (< (vector-vector-distance (-> self root-override trans) (camera-pos)) 204800.0) + (let ((a2-1 (new 'static 'vector))) + (set! (-> a2-1 quad) (-> self root-override trans quad)) + (set! (-> a2-1 y) 0.0) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2017) + a2-1 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (set! (-> self tension) 1.5) + (let* ((f26-0 (+ 225.0 (* 150.0 (sin (rand-vu-float-range 0.0 16384.0))))) + (f0-5 (+ 4096.0 (* 8192.0 (sin (rand-vu-float-range 0.0 16384.0))))) + (f30-2 (-> self y-offset)) + (f0-6 (+ f0-5 f30-2)) + (f28-2 (fmin f0-6 (- 57344.0 f0-6))) + ) + (when (< 0.0 f28-2) + (let ((f26-1 (+ f26-0 (* 0.14648438 f28-2)))) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while (< (- (-> *display* base-frame-counter) (-> self state-time)) (the int f26-1)) + (if (< (- f26-1 (the float (- (-> *display* base-frame-counter) (-> self state-time)))) 150.0) + (set! (-> self tension) 0.5) + ) + (set! (-> self y-offset) + (+ f30-2 + (* f28-2 + (precursor-arm-slip (/ (the float (- (-> *display* base-frame-counter) (-> self state-time))) f26-1)) + ) + ) + ) + (set! (-> self root-override trans y) (+ (-> self y-offset) (-> self y-init))) + (suspend) + ) + ) + ) + ) + (suspend) + (let* ((f26-2 (+ 600.0 (* 300.0 (sin (rand-vu-float-range 0.0 16384.0))))) + (f0-26 (* 49152.0 (sin (rand-vu-float-range 0.0 16384.0)))) + (f30-5 (-> self y-offset)) + (f28-4 (- f0-26 f30-5)) + ) + (when (< f28-4 0.0) + (let ((f26-3 (- f26-2 (* 0.036621094 f28-4)))) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while (< (- (-> *display* base-frame-counter) (-> self state-time)) (the int f26-3)) + (if (< (- f26-3 (the float (- (-> *display* base-frame-counter) (-> self state-time)))) 150.0) + (set! (-> self tension) 1.5) + ) + (set! (-> self y-offset) + (+ f30-5 + (* f28-4 + (parameter-ease-sin-clamp (/ (the float (- (-> *display* base-frame-counter) (-> self state-time))) f26-3)) + ) + ) + ) + (set! (-> self root-override trans y) (+ (-> self y-offset) (-> self y-init))) + (suspend) + ) + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior precursor-arm) transform-post) + ) + +;; definition for method 11 of type precursor-arm +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! precursor-arm ((obj precursor-arm) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (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 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 61440.0 0.0 61440.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *precursor-arm-sg* '()) + (set! (-> obj rot-speed) 0.0) + (set! (-> obj rot-dist) 0.0) + (set! (-> obj rot-base) 0.0) + (set! (-> obj rot-t) 1.0) + (quaternion->matrix (-> obj init-mat) (-> obj root-override quat)) + (set! (-> obj y-offset) 0.0) + (set! (-> obj y-init) (-> obj root-override trans y)) + (set! (-> obj tension) 0.0) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj event-hook) (-> precursor-arm-idle event)) + (if (= (get-task-status (-> obj entity extra perm task)) (task-status invalid)) + (go precursor-arm-die) + (go precursor-arm-idle) + ) + (none) + ) + +;; definition for function swamp-rope-update-bounding-spheres +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior swamp-rope-update-bounding-spheres swamp-rope () + (let ((a0-0 (new 'stack-no-clear 'vector))) + (vector-! a0-0 (-> self other-pos) (-> self root trans)) + (vector-float*! a0-0 a0-0 0.5) + (set! (-> self draw bounds quad) (-> a0-0 quad)) + (set! (-> self draw bounds w) (vector-length a0-0)) + ) + 0 + (none) + ) + +;; definition for function swamp-rope-post +;; INFO: Return type mismatch int vs none. +(defbehavior swamp-rope-post swamp-rope () + (swamp-rope-update-bounding-spheres) + (ja-post) + 0 + (none) + ) + +;; definition for function swamp-rope-break-code +;; Used lq/sq +(defbehavior swamp-rope-break-code swamp-rope () + (when (or (< 0.001 (fabs (-> self base-vec x))) (< 0.001 (fabs (-> self base-vec z)))) + (set! (-> self base-vec x) + (- (-> self base-vec x) (* 0.02 (-> *display* time-adjust-ratio) (-> self base-vec x))) + ) + (set! (-> self base-vec z) + (- (-> self base-vec z) (* 0.02 (-> *display* time-adjust-ratio) (-> self base-vec z))) + ) + (vector-normalize! (-> self base-vec) 1.0) + ) + (when (< 0.4 (-> self scale-base)) + (let ((f1-13 (fmax 0.002 (* 0.05 (+ -0.4 (-> self scale-base)))))) + (set! (-> self scale-base) (- (-> self scale-base) (* f1-13 (-> *display* time-adjust-ratio)))) + ) + ) + (+! (-> self scale-t) (* 0.005 (-> *display* time-adjust-ratio))) + (+! (-> self x-t) (* 0.004 (-> *display* time-adjust-ratio))) + (+! (-> self z-t) (* 0.003 (-> *display* time-adjust-ratio))) + (let ((f0-19 + (* (sin (+ 32768.0 (* 65536.0 (-> self scale-t)))) (fmax 0.003 (fmin 0.1 (* 0.1 (- 3.0 (-> self scale-t)))))) + ) + ) + (set! (-> self root scale y) (+ (-> self scale-base) f0-19)) + ) + (let ((gp-0 (new 'stack-no-clear 'matrix))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-reset! (-> gp-0 vector 3)) + (vector-reset! s5-0) + (set! (-> s5-0 x) (* (sin (* 65536.0 (-> self x-t))) (fmax 0.01 (fmin 0.1 (* 0.1 (- 10.0 (-> self x-t))))))) + (set! (-> s5-0 z) (* (sin (* 65536.0 (-> self z-t))) (fmax 0.01 (fmin 0.1 (* 0.1 (- 10.0 (-> self z-t))))))) + (vector+! s5-0 s5-0 (-> self base-vec)) + (set! (-> gp-0 vector 1 quad) (-> s5-0 quad)) + (vector-normalize! (-> gp-0 vector 1) 1.0) + (set-vector! + s5-0 + (sin (* (-> self rot-speed) (the float (- (-> *display* base-frame-counter) (-> self state-time))))) + 0.0 + (cos (* (-> self rot-speed) (the float (- (-> *display* base-frame-counter) (-> self state-time))))) + 1.0 + ) + (vector-cross! (the-as vector (-> gp-0 vector)) (-> gp-0 vector 1) s5-0) + ) + (vector-normalize! (the-as vector (-> gp-0 vector)) 1.0) + (vector-cross! (-> gp-0 vector 2) (the-as vector (-> gp-0 vector)) (-> gp-0 vector 1)) + (matrix->quaternion (-> self root quat) gp-0) + ) + ) + +;; failed to figure out what this is: +(defstate swamp-rope-break (swamp-rope) + :enter + (behavior () (set! (-> self scale-base) (-> self root scale y)) (none)) + :trans + (behavior () + (vector<-cspace! (-> self root trans) (-> self parent-override 0 node-list data (-> self parent-rp))) + (none) + ) + :code + (behavior () + (let* ((f30-0 18.204445) + (f28-0 9.102222) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + ) + (set! (-> self rot-speed) (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2))))) + ) + (let* ((f30-1 3000000.0) + (v1-5 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-6 (the-as number (logior #x3f800000 v1-5))) + ) + (set! (-> self state-time) (the int (* f30-1 (+ -1.0 (the-as float v1-6))))) + ) + (ja-channel-push! 1 150) + (while #t + (let* ((f30-2 0.3) + (f28-1 0.25) + (v1-10 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-11 (the-as number (logior #x3f800000 v1-10))) + (f30-3 (+ f30-2 (* f28-1 (+ -1.0 (the-as float v1-11))))) + ) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) f30-3) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (swamp-rope-break-code) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) f30-3) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (none) + ) + :post + (behavior () + (set! (-> self other-pos quad) (-> self root trans quad)) + (set! (-> self other-pos y) (+ -245760.0 (-> self other-pos y))) + (swamp-rope-post) + (none) + ) + ) + +;; definition for function swamp-rope-trans +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior swamp-rope-trans swamp-rope () + (vector<-cspace! (-> self root trans) (-> self parent-override 0 node-list data (-> self parent-rp))) + (cond + ((not (dummy-20 self)) + (let ((gp-0 (new 'stack-no-clear 'matrix))) + (quaternion->matrix gp-0 (-> self root quat)) + (set! (-> self base-vec quad) (-> gp-0 vector 1 quad)) + ) + (go swamp-rope-break) + ) + (else + (let* ((a0-5 (-> self other-entity)) + (v1-10 (if a0-5 + (-> a0-5 extra process) + ) + ) + ) + (if (and v1-10 (nonzero? (-> (the-as swamp-rope v1-10) root))) + (vector<-cspace! (-> self other-pos) (-> (the-as swamp-rope v1-10) node-list data (-> self other-rp))) + ) + ) + (let ((gp-1 (new 'stack-no-clear 'matrix))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-reset! (-> gp-1 vector 3)) + (vector-! (-> gp-1 vector 1) (-> self root trans) (-> self other-pos)) + (set! (-> self old-scale) (-> self root scale y)) + (set! (-> self root scale y) (* 0.0000020345053 (vector-normalize-ret-len! (-> gp-1 vector 1) 1.0))) + (set-vector! s5-0 0.0 -1.0 0.0 1.0) + (vector-cross! (the-as vector (-> gp-1 vector)) (-> gp-1 vector 1) s5-0) + ) + (vector-normalize! (the-as vector (-> gp-1 vector)) 1.0) + (vector-cross! (-> gp-1 vector 2) (the-as vector (-> gp-1 vector)) (-> gp-1 vector 1)) + (matrix->quaternion (-> self root quat) gp-1) + ) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate swamp-rope-idle-rock (swamp-rope) + :trans + swamp-rope-trans + :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))) + ) + (while #t + (let* ((f0-1 (* 2000.0 (- (-> self old-scale) (-> self root scale y)))) + (f1-3 (+ 0.5 f0-1)) + ) + (set! (-> self frame target) (fmin 1.0 (fmax 0.0 f1-3))) + ) + (TODO-RENAME-10 (-> self frame) 0.0) + (let* ((v1-6 (-> self other-entity)) + (a0-4 (if v1-6 + (-> v1-6 extra process) + ) + ) + ) + (when a0-4 + (set! (-> (the-as swamp-rope a0-4) parent-rp) (the-as int (-> self frame value))) + (set! (-> (the-as swamp-rope a0-4) frame vector-overlay quad) (-> self root trans quad)) + ) + ) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 num-func) num-func-identity) + (set! (-> gp-0 frame-num) (* (-> self frame value) (the float (ja-num-frames 0)))) + ) + (suspend) + ) + (none) + ) + :post + swamp-rope-post + ) + +;; failed to figure out what this is: +(defstate swamp-rope-idle-arm (swamp-rope) + :trans + swamp-rope-trans + :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))) + ) + (while #t + (let* ((a0-3 (-> self other-entity)) + (v1-3 (if a0-3 + (-> a0-3 extra process) + ) + ) + ) + (if v1-3 + (set! (-> self frame target) (- 1.0 (-> (the-as swamp-rope v1-3) scale-t))) + ) + ) + (TODO-RENAME-10 (-> self frame) 0.0) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 num-func) num-func-identity) + (set! (-> gp-0 frame-num) (* (-> self frame value) (the float (ja-num-frames 0)))) + ) + (suspend) + ) + (none) + ) + :post + swamp-rope-post + ) + +;; definition for function swamp-rope-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior swamp-rope-init-by-other swamp-rope ((arg0 vector) (arg1 entity-actor)) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg0 quad)) + (initialize-skeleton self *swamp-rope-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self other-entity) arg1) + (when (-> self other-entity) + (set! (-> self other-pos quad) (-> self other-entity extra trans quad)) + (let ((gp-1 (tetherrock-get-info (-> self other-entity)))) + (init! (-> self frame) 0.0 0.002 0.02 (-> gp-1 damping)) + (set! (-> self parent-rp) (-> gp-1 blimp-rp)) + (set! (-> self other-rp) (-> gp-1 other-rp)) + (if (-> gp-1 connected-to-rock) + (go swamp-rope-idle-rock) + (go swamp-rope-idle-arm) + ) + ) + ) + (go swamp-rope-break) + (none) + ) + +;; definition for function blimp-trans +(defbehavior blimp-trans swamp-blimp () + (when (< (-> self y-offset) (-> self y-offset-target)) + (+! (-> self y-vel) (* 0.4096 (-> *display* time-adjust-ratio))) + (set! (-> self y-vel) + (fmax 4.096 (fmin (fmin 819.2 (* 0.01 (- (-> self y-offset-target) (-> self y-offset)))) (-> self y-vel))) + ) + (+! (-> self y-offset) (* (-> self y-vel) (-> *display* time-adjust-ratio))) + (when (>= (-> self y-offset) (-> self y-offset-target)) + (set! (-> self y-offset) (-> self y-offset-target)) + (set! (-> self y-vel) 0.0) + ) + ) + (update-timer! (-> self scale-rand)) + (set! (-> self scale-oscillator target) (* 0.9 (-> self scale-oscillator target))) + (TODO-RENAME-10 (-> self scale-oscillator) (-> self scale-rand value)) + (let ((a3-0 (new 'stack-no-clear 'vector))) + (set! (-> a3-0 y) (+ 1.0 (-> self scale-oscillator value))) + (set! (-> a3-0 x) (sqrtf (/ 1.0 (-> a3-0 y)))) + (set! (-> a3-0 z) (-> a3-0 x)) + (set! (-> a3-0 w) 1.0) + (set-trs! (-> self bag) (the-as vector #f) (the-as quaternion #f) a3-0) + ) + (update-timer! (-> self main-tilt-rand)) + (update-timer! (-> self pos-rand)) + (TODO-RENAME-10 (-> self main-tilt-oscillator) (-> self main-tilt-rand value)) + (TODO-RENAME-10 (-> self gondola-tilt-oscillator) (the-as vector #f)) + (TODO-RENAME-10 (-> self pos-oscillator) (-> self pos-rand value)) + (new 'stack-no-clear 'vector) + (let ((gp-0 (new 'stack-no-clear 'quaternion))) + (let ((s5-0 (new 'stack-no-clear 'vector))) + 0.0 + (vector-normalize! (-> self gondola-tilt-oscillator value) 1.0) + (let ((f30-0 (acos (-> self gondola-tilt-oscillator value y)))) + (set-vector! + s5-0 + (-> self gondola-tilt-oscillator value z) + 0.0 + (- (-> self gondola-tilt-oscillator value x)) + 1.0 + ) + (vector-normalize! s5-0 1.0) + (quaternion-vector-angle! gp-0 s5-0 f30-0) + ) + (set-trs! (-> self gondola) (the-as vector #f) gp-0 (the-as vector #f)) + (vector-normalize! (-> self main-tilt-oscillator value) 1.0) + (let ((f30-1 (acos (-> self main-tilt-oscillator value y)))) + (set-vector! s5-0 (-> self main-tilt-oscillator value z) 0.0 (- (-> self main-tilt-oscillator value x)) 1.0) + (vector-normalize! s5-0 1.0) + (quaternion-vector-angle! gp-0 s5-0 f30-1) + ) + ) + (quaternion*! (-> self root-override quat) gp-0 (-> self rot-at-init)) + ) + (quaternion-normalize! (-> self root-override quat)) + (vector+! (-> self root-override trans) (-> self trans-at-init) (-> self pos-oscillator value)) + (let ((f0-34 (+ (-> self root-override trans y) (-> self y-offset)))) + (set! (-> self root-override trans y) f0-34) + f0-34 + ) + ) + +;; failed to figure out what this is: +(defstate swamp-blimp-bye-bye (swamp-blimp) + :enter + (behavior () + (let ((gp-0 (entity-actor-lookup (-> self entity) 'alt-actor (-> *SWAMP_BLIMP-bank* arm-index)))) + (when gp-0 + (entity-birth-no-kill gp-0) + (let ((a0-2 (-> gp-0 extra process))) + (if a0-2 + (send-event a0-2 'arm-sink-evt) + ) + ) + ) + ) + (set! (-> self draw force-lod) 0) + 0 + (none) + ) + :trans + (the-as (function none :behavior swamp-blimp) blimp-trans) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-0 (new 'stack-no-clear 'quaternion))) + (quaternion-copy! gp-0 (-> self rot-at-init)) + (while #t + (quaternion-vector-angle! + (-> self rot-at-init) + (new 'static 'vector :y 1.0 :w 1.0) + (* 18.204445 (the float (- (-> *display* base-frame-counter) (-> self state-time)))) + ) + (quaternion*! (-> self rot-at-init) (-> self rot-at-init) gp-0) + (if (< (-> self pos-oscillator target x) 409600.0) + (set! (-> self pos-oscillator target x) (+ 40.96 (-> self pos-oscillator target x))) + ) + (if (< (-> self pos-oscillator target y) 4096000.0) + (set! (-> self pos-oscillator target y) (+ 819.2 (-> self pos-oscillator target y))) + ) + (if (< (-> self pos-oscillator target z) 4096000.0) + (set! (-> self pos-oscillator target z) (+ 1228.8 (-> self pos-oscillator target z))) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-blimp) transform-post) + ) + +;; definition for function swamp-blimp-setup +;; INFO: Return type mismatch int vs none. +(defbehavior swamp-blimp-setup swamp-blimp () + (rlet ((vf0 :class vf)) + (init-vf0-vector) + (let ((gp-0 0)) + (.svf (&-> (-> self gondola-tilt-oscillator) target quad) vf0) + (.svf (&-> (-> self pos-oscillator) target quad) vf0) + (dotimes (s5-0 5) + (let ((s4-0 (handle->process (-> self the-ropes s5-0)))) + (when s4-0 + (cond + ((= s5-0 (-> *SWAMP_BLIMP-bank* arm-index)) + (vector+! + (the-as vector (-> self pos-oscillator)) + (the-as vector (-> self pos-oscillator)) + (-> (the-as swamp-rope s4-0) other-pos) + ) + (vector-! + (the-as vector (-> self pos-oscillator)) + (the-as vector (-> self pos-oscillator)) + (-> self root-override trans) + ) + ) + ((dummy-20 (the-as swamp-rope s4-0)) + (vector+! + (the-as vector (-> self pos-oscillator)) + (the-as vector (-> self pos-oscillator)) + (-> (the-as swamp-rope s4-0) other-pos) + ) + (vector-! + (the-as vector (-> self pos-oscillator)) + (the-as vector (-> self pos-oscillator)) + (-> self trans-at-init) + ) + (+! gp-0 1) + ) + (else + (vector-! + (the-as vector (-> self gondola-tilt-oscillator)) + (the-as vector (-> self gondola-tilt-oscillator)) + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> self node-list data (-> (the-as swamp-rope s4-0) parent-rp)) + ) + ) + (vector+! + (the-as vector (-> self gondola-tilt-oscillator)) + (the-as vector (-> self gondola-tilt-oscillator)) + (-> self root-override trans) + ) + ) + ) + ) + ) + ) + (vector-float*! + (the-as vector (-> self pos-oscillator)) + (the-as vector (-> self pos-oscillator)) + (/ 1.0 (the float (+ gp-0 1))) + ) + (set! (-> self pos-oscillator target y) 0.0) + (set! (-> self scale-oscillator target) -0.2) + (+! (-> self y-offset-target) (-> *SWAMP_BLIMP-bank* rise-per-break)) + (cond + ((zero? gp-0) + (let ((v1-29 (-> self gondola-tilt-oscillator))) + (set! (-> v1-29 target x) 0.0) + (set! (-> v1-29 target y) 1.0) + (set! (-> v1-29 target z) 0.0) + (set! (-> v1-29 target w) 1.0) + ) + (set! (-> self arm-timer) (-> *SWAMP_BLIMP-bank* pause-before-dropping-arm)) + ) + (else + (set! (-> self gondola-tilt-oscillator target y) 0.0) + (vector-normalize! (the-as vector (-> self gondola-tilt-oscillator)) 1.0) + (set! (-> self gondola-tilt-oscillator target y) (the float (+ gp-0 1))) + (vector-normalize! (the-as vector (-> self gondola-tilt-oscillator)) 1.0) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate swamp-blimp-idle (swamp-blimp) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'tetherrock-break-evt) + (increment-success-for-hint (game-text-id swamp-tethers-advice-hint)) + (swamp-blimp-setup) + ) + ) + ) + ) + :trans + (the-as (function none :behavior swamp-blimp) blimp-trans) + :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))) + ) + (while #t + (when (< 300 (-> self arm-timer)) + (set! (-> self arm-timer) + (- (-> self arm-timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (if (>= 300 (-> self arm-timer)) + (+! (-> self pos-oscillator target y) (* 16384.0 (-> *display* time-adjust-ratio))) + ) + ) + (when (< 240 (-> self arm-timer)) + (set! (-> self arm-timer) + (- (-> self arm-timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (if (>= 150 (-> self arm-timer)) + (set! (-> self scale-oscillator target) 0.2) + ) + ) + (when (> (-> self arm-timer) 0) + (set! (-> self arm-timer) + (- (-> self arm-timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (when (<= (-> self arm-timer) 0) + (set! (-> self scale-oscillator target) -0.2) + (go swamp-blimp-bye-bye) + ) + ) + (let ((v1-28 (-> self skel root-channel 0))) + (set! (-> v1-28 num-func) num-func-identity) + (set! (-> v1-28 frame-num) 0.0) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-blimp) transform-post) + ) + +;; definition for method 11 of type swamp-blimp +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! swamp-blimp ((obj swamp-blimp) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (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 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 409600.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *swamp-blimp-sg* '()) + (quaternion-copy! (-> obj rot-at-init) (-> obj root-override quat)) + (set! (-> obj arm-timer) 0) + (set! (-> obj trans-at-init quad) (-> obj root-override trans quad)) + (set! (-> obj y-vel) 0.0) + (set! (-> obj y-offset) 0.0) + (set! (-> obj y-offset-target) 0.0) + (init! (-> obj main-tilt-rand) 300 900 0.05 0.0) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (set-vector! s5-1 0.0 1.0 0.0 1.0) + (init! (-> obj main-tilt-oscillator) s5-1 0.001 0.01 0.99) + (init! (-> obj gondola-tilt-oscillator) s5-1 0.001 0.01 0.99) + ) + (init! (-> obj pos-rand) 1500 2400 20480.0 4096.0) + (init! (-> obj pos-oscillator) (the-as vector #f) 0.00032768 1638.4 0.995) + (init! (-> obj scale-rand) 1500 2400 0.02) + (init! (-> obj scale-oscillator) 0.0 0.002 0.015 0.99) + (dotimes (v1-38 5) + (set! (-> obj the-ropes v1-38) (the-as handle #f)) + ) + (let ((s5-2 (entity-actor-count (-> obj entity) 'alt-actor))) + (dotimes (s4-1 s5-2) + (let ((s3-1 (entity-actor-lookup (-> obj entity) 'alt-actor s4-1))) + (when s3-1 + (let ((s2-0 (get-process *default-dead-pool* swamp-rope #x4000))) + (set! (-> obj the-ropes s4-1) + (ppointer->handle (when s2-0 + (let ((t9-19 (method-of-type swamp-rope activate))) + (t9-19 (the-as swamp-rope s2-0) obj 'swamp-rope (the-as pointer #x70004000)) + ) + (run-now-in-process s2-0 swamp-rope-init-by-other (-> obj trans-at-init) s3-1) + (-> s2-0 ppointer) + ) + ) + ) + ) + ) + ) + ) + ) + (set! (-> obj gondola) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) obj 5)) + (set! (-> obj bag) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) obj 3)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (swamp-blimp-setup) + (go swamp-blimp-idle) + (none) + ) + +;; definition (debug) for function bustarock +(defun-debug bustarock ((arg0 int)) + (with-pp + (format (clear *temp-string*) "swamp-tetherrock-~D" arg0) + (let ((gp-1 (entity-by-name *temp-string*))) + (when gp-1 + (dotimes (s5-1 5) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) pp) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'attack) + (set! (-> a1-1 param 0) (the-as uint 'eco-yellow)) + (set! (-> a1-1 param 1) (the-as uint 'eco-yellow)) + (let ((t9-3 send-event-function) + (v1-4 gp-1) + ) + (t9-3 + (if v1-4 + (-> v1-4 extra process) + ) + a1-1 + ) + ) + ) + ) + (format #t "found the rock~%") + ) + ) + ) + )