From dd959d0d0df5d4ac8e1451f87df4b84b80d7ca43 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Tue, 28 Sep 2021 20:42:00 -0400 Subject: [PATCH] decomp: Continuing full pass of gameplay code (#839) * decomp: finish `babak` - :code is called in `(code nav-enemy-patrol babak)` * decomp: almost finish `process-taskable` * blocked: mistycannon / pelican * decomp: finish `babak-with-cannon` write a script to fix gsrc * decomp: finish `process-taskable` * decomp: finish `flutflut` and `yakow` * decomp: finish `fishermans-boat` * blocked: state decomp `training-obs` * decomp: finish `muse` * decomp: finish `bonelurker` * blocked: state decomp in `quicksandlurker`| `balloonlurker` * decomp: finish `assistant-village2` * scripts: script to help updating goal_src * starting to update goal_src * tests: update ref tests * src: more src updating * src: waiting on `process-taskable` and `muse` * blocked: `citb-plat` state decomp * decomp: finish `square-platform` * blocked: `orbit-plat` due to overlays + static data * decomp: finish `qbert-plat` * blocked: almost finish `misty-conveyor`, sparticle-callback * blocked: jungle-mirrors * blocked: state decomp in `swamp-blimp` * decomp: finish `swamp-bat` * decomp: finish `swamp-rat` * decomp: finish `swamp-rat-nest` * blocked: state decomp `kermit` * decomp: finish `cavecrystal-light` * decomp: finish `spiderwebs` * blocked: state decomp `dark-crystal` * decomp: finish `baby-spider` * decomp: finish `mother-spider-h` * decomp: finish `mother-spider-proj` * blocked: state decomp in `gnawer` * blocked: state decomp in `driller-lurker` * blocked: `sun-exit-chamber` breaks when adding handle cast * decomp: finish `sunken-water` * blocked: `target-tube` ShortCircuitElement::push_to_stack * decomp: finish `sunken-fish` * blocked: `minecart` decomp crash when adding stack cast * decomp: finish `assistant-village3` * decomp: finish `sage-village3` * blocked: `cave-trap` done but ran into `go` issue * blocked: `spider-egg` state decomp * decomp: finish `target-snowball` * blocked/stuck: `target-ice` decomp issue around cpad * pausing: ice-cube has some weird collide-shape-prim handling * blocked: `snow-ball` state decomp * blocked: `snow-bumper` state decomp * decomp: finish `snow-ram-h` * decomp: finish `yeti` * decomp: finish `assistant-lavatube` * re-enable the float cast log * decomp: updating to new sparticle definitions * decomp: address feedback up to `swamp-rat-nest` * address remaining feedback * all-types: move the `pointer` def * add back temporary `hud-hidden?` --- decompiler/config/all-types.gc | 6041 ++++++----------- .../anonymous_function_types.jsonc | 14 + .../config/jak1_ntsc_black_label/hacks.jsonc | 5 +- .../jak1_ntsc_black_label/label_types.jsonc | 101 + .../stack_structures.jsonc | 623 ++ .../jak1_ntsc_black_label/type_casts.jsonc | 461 +- .../jak1_ntsc_black_label/var_names.jsonc | 12 + decompiler/util/sparticle_decompile.cpp | 6 +- goal_src/engine/ambient/ambient.gc | 20 +- goal_src/engine/collide/collide-cache-h.gc | 2 + goal_src/engine/collide/collide-shape-h.gc | 4 +- goal_src/engine/collide/collide-target-h.gc | 1 + goal_src/engine/data/art-h.gc | 7 +- goal_src/engine/draw/process-drawable.gc | 8 +- goal_src/engine/game/collectables.gc | 2 +- goal_src/engine/game/effect-control-h.gc | 2 +- goal_src/engine/game/generic-obs-h.gc | 27 +- goal_src/engine/game/task/process-taskable.gc | 3 +- goal_src/engine/game/task/task-control-h.gc | 51 +- goal_src/engine/gfx/shadow/shadow-cpu-h.gc | 18 +- goal_src/engine/nav/navigate-h.gc | 4 +- .../engine/sparticle/sparticle-launcher-h.gc | 29 +- goal_src/engine/target/logic-target.gc | 138 +- goal_src/engine/target/target-h.gc | 8 +- goal_src/engine/target/target.gc | 3 + goal_src/engine/ui/hud-classes.gc | 8 +- goal_src/engine/ui/hud-h.gc | 9 + goal_src/engine/ui/text-h.gc | 30 + goal_src/levels/beach/bird-lady.gc | 33 +- goal_src/levels/beach/mayor.gc | 29 +- goal_src/levels/beach/sculptor.gc | 77 +- goal_src/levels/common/babak-with-cannon.gc | 714 ++ goal_src/levels/common/babak.gc | 696 +- goal_src/levels/common/baseplat.gc | 65 +- goal_src/levels/common/mistycannon.gc | 42 + goal_src/levels/common/nav-enemy-h.gc | 103 +- goal_src/levels/common/nav-enemy.gc | 146 +- goal_src/levels/common/rigid-body.gc | 158 +- goal_src/levels/darkcave/darkcave-obs.gc | 30 + .../levels/firecanyon/assistant-firecanyon.gc | 59 +- goal_src/levels/flut_common/flutflut.gc | 623 ++ .../levels/lavatube/assistant-lavatube.gc | 335 + goal_src/levels/maincave/baby-spider.gc | 1254 ++++ goal_src/levels/maincave/cavecrystal-light.gc | 251 + goal_src/levels/maincave/mother-spider-h.gc | 127 + .../levels/maincave/mother-spider-proj.gc | 572 ++ goal_src/levels/maincave/spiderwebs.gc | 340 + goal_src/levels/misty/bonelurker.gc | 1206 +++- goal_src/levels/misty/muse.gc | 976 +++ goal_src/levels/snow/snow-ram-h.gc | 27 + goal_src/levels/snow/target-snowball.gc | 155 + goal_src/levels/snow/yeti.gc | 1460 ++++ goal_src/levels/sunken/qbert-plat.gc | 978 +++ goal_src/levels/sunken/square-platform.gc | 934 +++ goal_src/levels/sunken/sunken-fish.gc | 584 ++ goal_src/levels/sunken/sunken-obs.gc | 13 + goal_src/levels/sunken/sunken-water.gc | 347 + goal_src/levels/sunken/wall-plat.gc | 17 +- goal_src/levels/swamp/swamp-bat.gc | 1030 +++ goal_src/levels/swamp/swamp-rat-nest.gc | 1933 ++++++ goal_src/levels/swamp/swamp-rat.gc | 918 +++ goal_src/levels/village1/assistant.gc | 44 +- goal_src/levels/village1/explorer.gc | 42 +- goal_src/levels/village1/farmer.gc | 34 +- goal_src/levels/village1/fishermans-boat.gc | 2651 ++++++++ goal_src/levels/village1/sage.gc | 50 +- goal_src/levels/village1/yakow.gc | 1522 +++++ .../levels/village2/assistant-village2.gc | 3133 +++++++++ goal_src/levels/village2/gambler.gc | 41 +- goal_src/levels/village2/geologist.gc | 34 +- goal_src/levels/village2/sage-bluehut.gc | 41 +- goal_src/levels/village2/village2-obs.gc | 13 + goal_src/levels/village2/warrior.gc | 56 +- .../levels/village3/assistant-village3.gc | 345 + goal_src/levels/village3/miners.gc | 126 +- goal_src/levels/village3/sage-village3.gc | 653 ++ .../engine/collide/collide-shape-h_REF.gc | 4 +- .../engine/collide/collide-target-h_REF.gc | 1 + .../reference/engine/data/art-h_REF.gc | 2 +- .../engine/game/effect-control-h_REF.gc | 2 +- .../engine/game/generic-obs-h_REF.gc | 26 +- .../engine/game/task/process-taskable_REF.gc | 2027 ++++++ .../engine/game/task/task-control-h_REF.gc | 43 +- .../gfx/sparticle/sparticle-launcher-h_REF.gc | 2 +- .../reference/engine/nav/navigate-h_REF.gc | 4 +- .../engine/target/logic-target_REF.gc | 2 +- .../reference/engine/target/target-h_REF.gc | 50 +- .../levels/beach/bird-lady-beach_REF.gc | 4 +- .../reference/levels/beach/bird-lady_REF.gc | 13 +- .../reference/levels/beach/mayor_REF.gc | 8 +- .../reference/levels/beach/sculptor_REF.gc | 23 +- .../levels/citadel/assistant-citadel_REF.gc | 9 +- .../levels/common/babak-with-cannon_REF.gc | 732 ++ .../reference/levels/common/babak_REF.gc | 717 ++ .../reference/levels/common/baseplat_REF.gc | 2 +- .../levels/common/nav-enemy-h_REF.gc | 6 +- .../reference/levels/common/nav-enemy_REF.gc | 4 +- .../reference/levels/common/rigid-body_REF.gc | 22 +- .../firecanyon/assistant-firecanyon_REF.gc | 42 +- .../levels/flut_common/flutflut_REF.gc | 646 ++ .../levels/lavatube/assistant-lavatube_REF.gc | 345 + .../levels/maincave/baby-spider_REF.gc | 1329 ++++ .../levels/maincave/cavecrystal-light_REF.gc | 287 + .../levels/maincave/mother-spider-h_REF.gc | 241 + .../levels/maincave/mother-spider-proj_REF.gc | 601 ++ .../levels/maincave/spiderwebs_REF.gc | 351 + .../reference/levels/misty/bonelurker_REF.gc | 1235 ++++ .../reference/levels/misty/muse_REF.gc | 1027 +++ .../levels/misty/sidekick-human_REF.gc | 18 +- .../reference/levels/snow/snow-ram-h_REF.gc | 47 + .../levels/snow/target-snowball_REF.gc | 169 + .../reference/levels/snow/yeti_REF.gc | 1500 ++++ .../reference/levels/sunken/qbert-plat_REF.gc | 1034 +++ .../levels/sunken/square-platform_REF.gc | 991 +++ .../levels/sunken/sunken-fish_REF.gc | 640 ++ .../levels/sunken/sunken-water_REF.gc | 384 ++ .../reference/levels/sunken/wall-plat_REF.gc | 10 +- .../reference/levels/swamp/swamp-bat_REF.gc | 1093 +++ .../levels/swamp/swamp-rat-nest_REF.gc | 2033 ++++++ .../reference/levels/swamp/swamp-rat_REF.gc | 963 +++ .../levels/village1/assistant_REF.gc | 22 +- .../reference/levels/village1/explorer_REF.gc | 21 +- .../reference/levels/village1/farmer_REF.gc | 19 +- .../levels/village1/fishermans-boat_REF.gc | 2803 ++++++++ .../reference/levels/village1/sage_REF.gc | 28 +- .../reference/levels/village1/yakow_REF.gc | 1601 +++++ .../levels/village2/assistant-village2_REF.gc | 3195 +++++++++ .../reference/levels/village2/gambler_REF.gc | 27 +- .../levels/village2/geologist_REF.gc | 21 +- .../levels/village2/sage-bluehut_REF.gc | 22 +- .../reference/levels/village2/warrior_REF.gc | 17 +- .../levels/village3/assistant-village3_REF.gc | 360 + .../reference/levels/village3/miners_REF.gc | 75 +- .../levels/village3/sage-village3_REF.gc | 670 ++ .../levels/village_common/oracle_REF.gc | 15 +- test/offline/offline_test_main.cpp | 8 +- 136 files changed, 55142 insertions(+), 5105 deletions(-) create mode 100644 test/decompiler/reference/engine/game/task/process-taskable_REF.gc create mode 100644 test/decompiler/reference/levels/common/babak-with-cannon_REF.gc create mode 100644 test/decompiler/reference/levels/common/babak_REF.gc create mode 100644 test/decompiler/reference/levels/flut_common/flutflut_REF.gc create mode 100644 test/decompiler/reference/levels/lavatube/assistant-lavatube_REF.gc create mode 100644 test/decompiler/reference/levels/maincave/baby-spider_REF.gc create mode 100644 test/decompiler/reference/levels/maincave/cavecrystal-light_REF.gc create mode 100644 test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc create mode 100644 test/decompiler/reference/levels/maincave/mother-spider-proj_REF.gc create mode 100644 test/decompiler/reference/levels/maincave/spiderwebs_REF.gc create mode 100644 test/decompiler/reference/levels/misty/bonelurker_REF.gc create mode 100644 test/decompiler/reference/levels/misty/muse_REF.gc create mode 100644 test/decompiler/reference/levels/snow/snow-ram-h_REF.gc create mode 100644 test/decompiler/reference/levels/snow/target-snowball_REF.gc create mode 100644 test/decompiler/reference/levels/snow/yeti_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/qbert-plat_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/square-platform_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/sunken-fish_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/sunken-water_REF.gc create mode 100644 test/decompiler/reference/levels/swamp/swamp-bat_REF.gc create mode 100644 test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc create mode 100644 test/decompiler/reference/levels/swamp/swamp-rat_REF.gc create mode 100644 test/decompiler/reference/levels/village1/fishermans-boat_REF.gc create mode 100644 test/decompiler/reference/levels/village1/yakow_REF.gc create mode 100644 test/decompiler/reference/levels/village2/assistant-village2_REF.gc create mode 100644 test/decompiler/reference/levels/village3/assistant-village3_REF.gc create mode 100644 test/decompiler/reference/levels/village3/sage-village3_REF.gc diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 1b7f2072be..2eaa0ad378 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -131,6 +131,8 @@ (define-extern int128 type) +(define-extern pointer type) + (defenum kmalloc-flags :bitfield #t (align-16 4) @@ -795,6 +797,10 @@ :type uint32 :bitfield #f (zero 0) + (confirm #x103) + (press-to-use #x105) + (confirm-play #x106) + (quit #x108) (pause #x109) (sfx-volume #x10a) (music-volume #x10b) @@ -929,6 +935,8 @@ (misty-bike-jump #x266) (misty-eco-challenge #x267) + (misty-daxter-scared #x26f) + (beach-seagulls-avalanche #x273) (misty-teetertotter-bonk-dax-tutorial #x2a4) @@ -937,6 +945,8 @@ (firecanyon-collect-cells-text #x2b3) + (yakow-owed-powercell #x297) + (village2-gambler-money #x300) (village2-geologist-money #x301) (village2-warrior-money #x302) @@ -977,6 +987,20 @@ (rolling-ring-chase-1 #x324) (rolling-ring-chase-2 #x325) + (sunken-blue-eco-charger-hint #x345) + + (sunken-qbert-hint #x34a) + + (sunken-blue-eco-charger-all-hint #x34d) + + (swamp-rats-nest-hint #x358) + + (swamp-bats-hint #x364) ;; maybe we can ???? the bats. lol + (flutflut-reminder #x368) + + (village2-not-enough-cells-levitator #x36c) + (villlage2-levitator-cell-req-text #x372) + (village3-miner-money #x400) (village3-oracle-money #x401) (snow-ram-3-left #x402) @@ -1009,9 +1033,17 @@ (cave-swing-poles #x426) + (assistant-lavatube-powercell-hint #x428) + (snow-frozen-crate #x42b) ;; task name? (snow-bumpers #x42c) + (cave-trap-nest-hint #x440) + + (ice-cube-hint #x448) + + (lavatube-powercell-req-text #x455) + (fire-canyon-end #x500) (fire-canyon-buzzer #x501) @@ -7677,7 +7709,7 @@ :flag-assert #xd00000014 (:methods (login (_type_) _type_ 9) - (dummy-10 (_type_ string type) art-element 10) + (dummy-10 (_type_ string type) joint 10) (dummy-11 (_type_ string type) int 11) (dummy-12 (_type_) symbol 12) ) @@ -7688,11 +7720,6 @@ :method-count-assert 13 :size-assert #x20 :flag-assert #xd00000020 - (:methods - (dummy-10 (_type_ string type) art-element 10) - (dummy-11 (_type_ string type) int 11) - (dummy-12 (_type_) symbol 12) - ) ) (deftype art-mesh-anim (art-element) @@ -8766,9 +8793,9 @@ (set-offset-bit (shadow-control) int 10) (set-top-plane-offset (shadow-control float) int 11) (set-bottom-plane-offset (shadow-control float) int 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) + (dummy-13 (_type_) none 13) + (dummy-14 (_type_) none 14) + (dummy-15 (_type_ vector float float float) none 15) ) ) @@ -10256,10 +10283,10 @@ (deftype gui-query (structure) ((x-position int32 :offset-assert 0) (y-position int32 :offset-assert 4) - (message basic :offset-assert 8) - (decision basic :offset-assert 12) - (only-allow-cancel basic :offset-assert 16) - (no-msg basic :offset-assert 20) + (message symbol :offset-assert 8) ;; a guess, i suspect its an `event-message-block` + (decision symbol :offset-assert 12) + (only-allow-cancel symbol :offset-assert 16) + (no-msg symbol :offset-assert 20) (message-space int32 :offset-assert 24) ) :pack-me @@ -10267,13 +10294,13 @@ :size-assert #x1c :flag-assert #xb0000001c (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (init! (_type_ symbol int int int symbol symbol) none 9) + (dummy-10 (_type_) symbol 10) ) ) (deftype othercam (process) - ((hand uint64 :offset-assert 112) + ((hand handle :offset-assert 112) (old-global-mask uint32 :offset-assert 120) (mask-to-clear uint32 :offset-assert 124) (cam-joint-index int32 :offset-assert 128) @@ -10281,15 +10308,14 @@ (old-mat-z vector :inline :offset-assert 160) (had-valid-frame basic :offset-assert 176) (border-value basic :offset-assert 180) - (die? basic :offset-assert 184) - (survive-anim-end? basic :offset-assert 188) - (spooling? basic :offset-assert 192) + (die? symbol :offset-assert 184) + (survive-anim-end? symbol :offset-assert 188) + (spooling? symbol :offset-assert 192) ) :heap-base #x60 :method-count-assert 14 :size-assert #xc4 :flag-assert #xe006000c4 - ;; inherited inspect of process ) (deftype process-hidden (process) @@ -11049,7 +11075,7 @@ (dummy-46 (_type_) none 46) (dummy-47 (_type_) none 47) (dummy-48 (_type_) none 48) - (dummy-49 () none 49) + (dummy-49 (_type_) none 49) (dummy-50 (_type_) none 50) (dummy-51 () none 51) (dummy-52 () none 52) @@ -11095,7 +11121,7 @@ (dummy-58 (_type_ vector) none 58) (dummy-59 (_type_ vector uint float symbol symbol symbol) none 59) (dummy-60 (_type_ float float symbol uint) none 60) - (dummy-61 () none 61) + (TODO-RENAME-61 (_type_ vector vector vector) none 61) (dummy-62 (_type_ vector float) vector 62) (dummy-63 () none 63) (dummy-64 () none 64) @@ -11200,6 +11226,7 @@ (unknown-vector61 vector :inline :offset 1504) ;; from - logic-target::add-thrust (unknown-float70 float :offset 1520) ;; from - logic-target::add-thrust (unknown-vector70 vector :inline :offset 1536) ;; from - logic-target::add-thrust + (unknown-vector71 vector :inline :offset 1552) ;; from - target-tube::tube-thrust (unknown-handle00 handle :offset 1600) ;; from logic-target::reset-target-state (unknown-sphere-array00 collide-shape-prim-sphere 3 :offset 1608) ;; from target-util::target-collide-set! and from target-util::target-danger-set! (unknown-sphere00 collide-shape-prim-sphere :offset 1632) ;; from target-util::target-danger-set! @@ -11538,7 +11565,7 @@ (:methods (new (symbol type process-drawable) _type_) (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-10 (_type_ symbol float int) none 10) (dummy-11 () none 11) (dummy-12 () none 12) (set-channel-offset! (_type_ int) none 13) @@ -11686,6 +11713,8 @@ (declare-type sidekick basic) (declare-type collide-cache basic) +(declare-type snowball-info basic) +(declare-type tube-info basic) (deftype target (process-drawable) ((control control-info :score 100 :offset 112) (fact-info-target fact-info-target :score 100 :offset 144) @@ -11694,7 +11723,7 @@ (game game-info :offset-assert 184) (neck joint-mod :offset-assert 188) (state-hook-time uint64 :offset-assert 192) - (state-hook function :offset-assert 200) + (state-hook (function none :behavior target) :offset-assert 200) (cam-user-mode symbol :offset-assert 204) (sidekick (pointer sidekick) :offset-assert 208) (manipy (pointer manipy) :offset-assert 212) @@ -11702,8 +11731,8 @@ (attack-info-rec attack-info :inline :offset-assert 336) (anim-seed uint64 :offset-assert 440) (alt-cam-pos vector :inline :offset-assert 448) - (snowball basic :offset-assert 464) - (tube basic :offset-assert 468) + (snowball snowball-info :offset-assert 464) + (tube tube-info :offset-assert 468) (flut basic :offset-assert 472) (current-level level :offset-assert 476) (saved-pos transformq :inline :offset-assert 480) @@ -13552,7 +13581,7 @@ (tex uint32 :offset 4) (pntr pointer :offset 4) ;; gap - (sound basic :offset 4) + (sound sound-spec :offset 4) ) :method-count-assert 9 :size-assert #x10 @@ -14871,11 +14900,11 @@ (dummy-11 (_type_ vector) none 11) (dummy-12 () none 12) (dummy-13 () none 13) - (dummy-14 (_type_) none 14) + (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? (dummy-17 () none 17) - (dummy-18 () none 18) + (TODO-RENAME-18 (_type_ vector) nav-poly 18) (dummy-19 (_type_ vector collide-shape-moving vector float) none 19) (dummy-20 () none 20) (dummy-21 () none 21) @@ -16778,20 +16807,21 @@ (:methods (dummy-9 (_type_ vector int float process-drawable) none 9) (TODO-RENAME-10 (_type_ vector int float process-drawable) vector 10) - (dummy-11 (_type_ string symbol vector) none 11) + (dummy-11 (_type_ string symbol vector) symbol 11) ) ) (deftype process-taskable (process-drawable) - ((tasks task-control :offset-assert 176) + ((root-override collide-shape :score 100 :offset 112) + (tasks task-control :offset-assert 176) (query gui-query :inline :offset-assert 180) (old-target-pos transformq :inline :offset-assert 208) (cell-for-task game-task :offset-assert 256) - (cell-x uint64 :offset-assert 264) + (cell-x handle :offset-assert 264) (cam-joint-index int32 :offset-assert 272) (skippable basic :offset-assert 276) ;; probably a symbol (blend-on-exit basic :offset-assert 280) ;; probably a symbol? - (camera uint64 :offset-assert 288) + (camera handle :offset-assert 288) (will-talk symbol :offset-assert 296) (talk-message uint32 :offset-assert 300) (last-talk uint64 :offset-assert 304) @@ -16806,7 +16836,7 @@ (music basic :offset-assert 360) (have-music symbol :offset-assert 364) ;; probably (been-kicked symbol :offset-assert 368) ;; probably - (cur-trans-hook function :offset-assert 372) + (cur-trans-hook (function none) :offset-assert 372) (shadow-backup shadow-geo :offset-assert 376) ) :heap-base #x110 @@ -16814,38 +16844,38 @@ :size-assert #x17c :flag-assert #x350110017c (:methods - (dummy-20 () none 20) + (release () _type_ :state 20) (give-cell () _type_ :state 21) ;; state - (dummy-22 () none 22) - (enter-playing () none 23) ;; state - (play-accept () none 24) ;; state - (dummy-25 () none 25) - (query () none 26) ;; state + (lose () _type_ :state 22) + (enter-playing () _type_ :state 23) ;; state + (play-accept () _type_ :state 24) ;; state + (play-reject () _type_ :state 25) + (query () _type_ :state 26) ;; state (play-anim () _type_ :state 27) ;; state (hidden () _type_ :state 28) ;; state - (dummy-29 () none 29) + (be-clone (handle) _type_ :state 29) (idle () _type_ :state 30) ;; state (get-art-elem (_type_) art-element 31) - (play-anim! (_type_ symbol) basic 32) + (play-anim! (_type_ symbol) basic 32) ;; ret - spool-anim | .. (dummy-33 (_type_) none 33) - (dummy-34 (_type_) none 34) + (TODO-RENAME-34 (_type_ symbol) symbol 34) (dummy-35 (_type_) none 35) - (dummy-36 (_type_) none 36) - (dummy-37 (_type_) none 37) + (get-spool-anim-or-?? (_type_ symbol) basic 36) ;; ret - spool-anim | .. + (spool-push-anim (_type_) none 37) (dummy-38 (_type_) none 38) (should-display? (_type_) symbol 39) (dummy-40 (_type_ object skeleton-group int int vector int) none 40) - (initialize-collision (_type_ int) none 41) + (initialize-collision (_type_ int vector) none 41) (dummy-42 (_type_) none 42) - (TODO-RENAME-43 (_type_) none 43) + (TODO-RENAME-43 (_type_) symbol 43) (play-reminder (_type_) symbol 44) (dummy-45 (_type_) none 45) (dummy-46 (_type_) none 46) (target-above-threshold? (_type_) symbol 47) - (draw-shadow (_type_) none 48) - (dummy-49 (_type_) none 49) - (dummy-50 (_type_) none 50) - (dummy-51 (_type_) none 51) + (draw-npc-shadow (_type_) none 48) + (hidden-other () _type_ :state 49) + (TODO-RENAME-50 (_type_) symbol 50) + (close-anim-file! (_type_) symbol 51) (dummy-52 (_type_) none 52) ) ) @@ -18963,7 +18993,7 @@ (define-extern ja-aframe (function float int float)) (define-extern ja-speed (function int float)) (define-extern ja-step (function int float)) -(define-extern ja-group-size (function int int)) +(define-extern ja-group-size (function int)) (define-extern ja-eval (function int)) (define-extern ja-blend-eval (function int)) (define-extern transform-post (function int)) @@ -19048,7 +19078,7 @@ (define-extern level-hint-process-cmd (function (pointer int32) int int int)) (define-extern task-known? (function game-task symbol)) (define-extern can-grab-display? (function process-taskable symbol)) ;; unconfirmed, see assistant-firecanyon -(define-extern level-hint-displayed? (function symbol symbol)) +(define-extern level-hint-displayed? (function symbol)) (define-extern ambient-inspect function) ;; - Unknowns @@ -19145,7 +19175,7 @@ (define-extern merc-eye-anim (function process-drawable none)) (define-extern clone-anim (function handle int symbol string none :behavior process-drawable)) (define-extern command-get-camera function) -(define-extern ja-anim-done? function) +(define-extern ja-anim-done? (function symbol)) ;; TODO - not confirmed (define-extern camera-anim function) (define-extern camera-tracker-init (function function none)) ;; TODO - not confirmed, see misty-warehouse::camera-view (define-extern cam-launcher-joystick function) @@ -19473,7 +19503,7 @@ (define-extern target-bonk-event-handler function) (define-extern target-standard-event-handler function) (define-extern target-send-attack function) -(define-extern target-attacked function) +(define-extern target-attacked (function symbol uint uint process (state target) none :behavior target)) ;; unconfirmed, target-tube::(event target-tube-start) (define-extern target-apply-tongue function) (define-extern get-intersect-point function) (define-extern target-powerup-effect function) @@ -19486,7 +19516,7 @@ ;; - Unknowns -;;(define-extern target-jump object) ;; unknown type +(define-extern target-jump (state target)) ;; unknown type ;;(define-extern target-hit object) ;; unknown type ;;(define-extern target-eco-powerup object) ;; unknown type ;;(define-extern target-load-wait object) ;; unknown type @@ -19495,8 +19525,8 @@ ;;(define-extern target-billy-game object) ;; unknown type ;;(define-extern target-racing-start object) ;; unknown type ;;(define-extern target-flut-start object) ;; unknown type -;;(define-extern target-snowball-start object) ;; unknown type -;;(define-extern target-tube-start object) ;; unknown type +(define-extern target-snowball-start (state handle target)) ;; unknown type +(define-extern target-tube-start (state handle target)) ;; unknown type ;;(define-extern target-periscope object) ;; unknown type ;;(define-extern target-fishing object) ;; unknown type (define-extern target-final-door (state basic handle target)) ;; unknown type @@ -19531,29 +19561,29 @@ ;;(define-extern target-high-jump object) ;; unknown type ;;(define-extern target-attack-air object) ;; unknown type ;;(define-extern target-wheel-flip object) ;; unknown type -;;(define-extern target-duck-stance object) ;; unknown type +(define-extern target-duck-stance (state target)) ;; unknown type ;;(define-extern target-hit-ground-hard object) ;; unknown type ;;(define-extern target-flop-hit-ground object) ;; unknown type ;;(define-extern target-yellow-jump-blast object) ;; unknown type ;;(define-extern target-swim-down object) ;; unknown type ;;(define-extern target-flop object) ;; unknown type ;;(define-extern target-attack-uppercut-jump object) ;; unknown type -;;(define-extern target-attack object) ;; unknown type +(define-extern target-attack (state target)) ;; unknown type ;;(define-extern target-attack-uppercut object) ;; unknown type ;;(define-extern target-yellow-blast object) ;; unknown type ;;(define-extern target-wade-walk object) ;; unknown type ;;(define-extern target-walk object) ;; unknown type -;;(define-extern target-running-attack object) ;; unknown type +(define-extern target-running-attack (state target)) ;; unknown type ;;(define-extern target-duck-high-jump-jump object) ;; unknown type ;;(define-extern target-launch object) ;; unknown type ;;(define-extern target-duck-high-jump object) ;; unknown type ;;(define-extern target-double-jump object) ;; unknown type ;;(define-extern target-duck-walk object) ;; unknown type -;;(define-extern target-ice-walk object) ;; unknown type +(define-extern target-ice-walk (state target)) ;; unknown type ;;(define-extern target-wheel object) ;; unknown type ;;(define-extern target-turn-around object) ;; unknown type ;;(define-extern target-stance-ambient object) ;; unknown type -;;(define-extern target-ice-stance object) ;; unknown type +(define-extern target-ice-stance (state target)) ;; unknown type ;;(define-extern target-startup object) ;; unknown type ;;(define-extern target-jump-forward object) ;; unknown type @@ -19588,7 +19618,7 @@ ;; - Unknowns -;;(define-extern target-death object) ;; unknown type +(define-extern target-death (state target)) ;; unknown type ;;(define-extern target-swim-jump-jump object) ;; unknown type ;;(define-extern target-swim-up object) ;; unknown type ;;(define-extern target-swim-jump object) ;; unknown type @@ -20503,9 +20533,9 @@ (define-extern vent-standard-event-handler function) (define-extern ecovalve-init-by-other function) -(define-extern birth-pickup-at-point (function vector int float symbol process-drawable symbol none)) ;; TODO - unconfirmed - see beach-rocks -(define-extern fuel-cell-pick-anim function) -(define-extern othercam-init-by-other (function int symbol symbol symbol none)) ;; TODO - unconfirmed - see beach-rocks +(define-extern birth-pickup-at-point (function vector int float symbol process-drawable symbol (pointer process))) ;; TODO - unconfirmed - see beach-rocks +(define-extern fuel-cell-pick-anim (function process-taskable none)) ;; TODO - unconfirmed - see process-taskable +(define-extern othercam-init-by-other (function process-taskable symbol symbol symbol none :behavior othercam)) (define-extern fuel-cell-animate function) (define-extern add-blue-motion function) (define-extern check-blue-suck function) @@ -20575,23 +20605,23 @@ ;; - Functions -(define-extern othercam-calc function) +(define-extern othercam-calc (function float float)) (define-extern vector-for-ambient (function process-drawable vector vector)) (define-extern hide-hud (function none)) (define-extern hud-hidden? (function symbol)) -(define-extern process-taskable-clean-up-after-talking function) -(define-extern process-taskable-hide-exit function) -(define-extern process-taskable-play-anim-code function) -(define-extern process-taskable-play-anim-trans function) -(define-extern process-taskable-anim-loop function) -(define-extern process-taskable-play-anim-enter function) -(define-extern process-taskable-play-anim-exit function) -(define-extern process-taskable-hide-handler function) -(define-extern process-taskable-hide-enter function) +(define-extern process-taskable-clean-up-after-talking (function none :behavior process-taskable)) +(define-extern process-taskable-hide-exit (function symbol none :behavior process-taskable)) +(define-extern process-taskable-play-anim-code (function art-joint-anim basic object :behavior process-taskable)) ;; second arg can either be spool-anim or art-joint-anim +(define-extern process-taskable-play-anim-trans (function none :behavior process-taskable)) +(define-extern process-taskable-anim-loop (function none :behavior process-taskable)) +(define-extern process-taskable-play-anim-enter (function symbol :behavior process-taskable)) +(define-extern process-taskable-play-anim-exit (function none :behavior process-taskable)) +(define-extern process-taskable-hide-handler (function process int symbol event-message-block none :behavior process-taskable)) +(define-extern process-taskable-hide-enter (function int :behavior process-taskable)) ;; - Unknowns -;;(define-extern othercam-running object) ;; unknown type +(define-extern othercam-running (state othercam)) ;; unknown type ;; ---------------------- @@ -22284,8 +22314,8 @@ (cm-joint-y meters :offset-assert 84) (cm-joint-z meters :offset-assert 88) (idle-distance meters :offset-assert 92) - (platform basic :offset-assert 96) - (sound-name basic :offset-assert 100) + (platform symbol :offset-assert 96) + (sound-name symbol :offset-assert 100) ) :method-count-assert 9 :size-assert #x68 @@ -22325,9 +22355,9 @@ (:methods (rigid-body-platform-idle () _type_ :state 20) (rigid-body-platform-float () _type_ :state 21) - (TODO-RENAME-22 (_type_ vector basic) float 22) ;; TODO - basic is seemingly unused - (TODO-RENAME-23 (_type_ basic) none 23) ;; TODO - basic is seemingly unused - (TODO-RENAME-24 (_type_ rigid-body-control-point basic) none 24) ;; TODO - basic is seemingly unused + (TODO-RENAME-22 (_type_ vector float) float 22) + (TODO-RENAME-23 (_type_ float) none 23) + (TODO-RENAME-24 (_type_ rigid-body-control-point float) none 24) (TODO-RENAME-25 (_type_) none 25) (TODO-RENAME-26 (_type_) none 26) (TODO-RENAME-27 (_type_ vector) none 27) @@ -22335,8 +22365,8 @@ (TODO-RENAME-29 (_type_ rigid-body-platform-constants) none 29) (TODO-RENAME-30 (_type_) none 30) (TODO-RENAME-31 (_type_) none 31) - (dummy-32 (_type_) none 32) - (dummy-33 (_type_) none 33) + (dummy-32 (_type_) sound-id 32) + (dummy-33 (_type_) object 33) (TODO-RENAME-34 (_type_) none 34) ) ) @@ -22484,9 +22514,9 @@ (TODO-RENAME-48 (_type_) none 48) ;; - Stubbed (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) (TODO-RENAME-50 (_type_ vector) symbol 50) - (dummy-51 (_type_) none 51) - (dummy-52 (_type_) none 52) - (dummy-53 (_type_) none 53) + (dummy-51 (_type_) float 51) + (dummy-52 (_type_ vector) vector 52) + (dummy-53 (_type_) symbol 53) (dummy-54 (_type_) none 54) (dummy-55 (_type_) none 55) (dummy-56 (_type_) none 56) @@ -22780,13 +22810,13 @@ ; :flag-assert #x900000004 ; ) -; (deftype joint-exploder-static-params (basic) -; ((joints basic :offset-assert 4) -; ) -; :method-count-assert 9 -; :size-assert #x8 -; :flag-assert #x900000008 -; ) +(deftype joint-exploder-static-params (basic) + ((joints array :offset-assert 4) ;; an array of...what? + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) ; (deftype joint-exploder-joint (structure) ; ((next int16 :offset-assert 0) @@ -23254,125 +23284,101 @@ ;; - Types -; (deftype angle-tracker (structure) -; ((value float :offset-assert 0) -; (min float :offset-assert 4) -; (range float :offset-assert 8) -; (speed float :offset-assert 12) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype angle-tracker (structure) + ((value float :offset-assert 0) + (min float :offset-assert 4) + (range float :offset-assert 8) + (speed float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) -; (deftype mistycannon-missile (process-drawable) -; ((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) -; (ground-time uint64 :offset-assert 224) -; ) -; :method-count-assert 21 -; :size-assert #xe8 -; :heap-base #x80 -; :flag-assert #x15008000e8 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; ) -; ) +(deftype mistycannon-missile (process-drawable) + ((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) + (ground-time uint64 :offset-assert 224) + ) + :method-count-assert 21 + :size-assert #xe8 + :heap-base #x80 + :flag-assert #x15008000e8 + (:methods + (dummy-20 () none 20) + ) + ) -; (deftype mistycannon-init-data (structure) -; ((pos vector :offset-assert 0) -; (vel vector :offset-assert 4) -; (rotate float :offset-assert 8) -; (flight-time float :offset-assert 12) -; (muzzle-time float :offset-assert 16) -; (blast-radius float :offset-assert 20) -; ) -; :method-count-assert 9 -; :size-assert #x18 -; :flag-assert #x900000018 -; ) +(deftype mistycannon-init-data (structure) + ((pos vector :offset-assert 0) + (vel vector :offset-assert 4) + (rotate float :offset-assert 8) + (flight-time float :offset-assert 12) + (muzzle-time float :offset-assert 16) + (blast-radius float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) -; (deftype mistycannon (process-drawable) -; ((rotate angle-tracker :inline :offset-assert 176) -; (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) -; (launch-origin vector :inline :offset-assert 272) -; (goggles vector :inline :offset-assert 288) -; (avoid-entity basic :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) -; ) -; :method-count-assert 24 -; :size-assert #x174 -; :heap-base #x110 -; :flag-assert #x1801100174 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; ) -; ) +(deftype mistycannon (process-drawable) + ((rotate angle-tracker :inline :offset-assert 176) + (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) + (launch-origin vector :inline :offset-assert 272) + (goggles vector :inline :offset-assert 288) + (avoid-entity basic :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) + ) + :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) + ) + ) -; (deftype quadratic-solution (structure) -; ((s1 float :offset-assert 0) -; (s2 float :offset-assert 4) -; ) -; :method-count-assert 9 -; :size-assert #x8 -; :flag-assert #x900000008 -; ) +(deftype quadratic-solution (structure) + ((s1 float :offset-assert 0) + (s2 float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) -; (deftype trajectory-params (structure) -; ((x float :offset-assert 0) -; (y float :offset-assert 4) -; (gravity float :offset-assert 8) -; (theta float :offset-assert 12) -; (speed float :offset-assert 16) -; (time float :offset-assert 20) -; ) -; :method-count-assert 9 -; :size-assert #x18 -; :flag-assert #x900000018 -; ) +(deftype trajectory-params (structure) + ((x float :offset-assert 0) + (y float :offset-assert 4) + (gravity float :offset-assert 8) + (theta float :offset-assert 12) + (speed float :offset-assert 16) + (time float :offset-assert 20) + ) + :method-count-assert 9 + :size-assert #x18 + :flag-assert #x900000018 + ) ;; - Functions @@ -23396,16 +23402,16 @@ ;; - Unknowns (define-extern *mistycannon-sg* skeleton-group) -;;(define-extern mistycannon-idle object) ;; unknown type -;;(define-extern mistycannon-waiting-for-player object) ;; unknown type -;;(define-extern cam-mistycannon object) ;; unknown type -;;(define-extern mistycannon-waiting-for-player-to-fuck-off object) ;; unknown type -;;(define-extern mistycannon-aim-at-player object) ;; unknown type -;;(define-extern mistycannon-player-control object) ;; unknown type +(define-extern mistycannon-idle (state mistycannon)) ;; unknown type +(define-extern mistycannon-waiting-for-player (state mistycannon)) ;; unknown type +(define-extern cam-mistycannon (state camera-slave)) ;; unknown type +(define-extern mistycannon-waiting-for-player-to-fuck-off (state mistycannon)) ;; unknown type +(define-extern mistycannon-aim-at-player (state mistycannon)) ;; unknown type +(define-extern mistycannon-player-control (state mistycannon)) ;; unknown type (define-extern *mistycannon-missile-sg* skeleton-group) -;;(define-extern mistycannon-missile-idle object) ;; unknown type -;;(define-extern mistycannon-missile-explode object) ;; unknown type -;;(define-extern mistycannon-missile-in-water object) ;; unknown type +(define-extern mistycannon-missile-idle (state mistycannon-missile)) ;; unknown type +(define-extern mistycannon-missile-explode (state mistycannon-missile)) ;; unknown type +(define-extern mistycannon-missile-in-water (state mistycannon-missile)) ;; unknown type ;; ---------------------- @@ -23416,101 +23422,31 @@ ;; - Types -; (deftype babak-with-cannon (babak) -; ((cannon-ent basic :offset-assert 400) -; (distance float :offset-assert 404) -; ) -; :method-count-assert 76 -; :size-assert #x198 -; :heap-base #x130 -; :flag-assert #x4c01300198 -; ;; inherited inspect of babak -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype babak-with-cannon (babak) + ((cannon-ent entity :offset-assert 400) + (distance float :offset-assert 404) + ) + :method-count-assert 76 + :size-assert #x198 + :heap-base #x130 + :flag-assert #x4c01300198 + ) ;; - Functions -(define-extern beachcam-spawn function) -(define-extern mistycam-spawn function) -(define-extern babak-with-cannon-compute-ride-point function) -(define-extern babak-with-cannon-compute-cannon-dir function) -(define-extern handle->process-safe function) -(define-extern babak-with-cannon-ride-cannon-post function) +(define-extern beachcam-spawn (function none)) ;; TODO - unconfirmed +(define-extern mistycam-spawn (function none)) ;; TODO - unconfirmed +(define-extern babak-with-cannon-compute-ride-point (function mistycannon vector vector)) +(define-extern babak-with-cannon-compute-cannon-dir (function mistycannon vector vector)) +(define-extern handle->process-safe (function handle process)) +(define-extern babak-with-cannon-ride-cannon-post (function none :behavior babak-with-cannon)) ;; - Unknowns -;;(define-extern babak-with-cannon-jump-off-cannon object) ;; unknown type -;;(define-extern babak-with-cannon-shooting object) ;; unknown type -;;(define-extern babak-with-cannon-jump-onto-cannon object) ;; unknown type -;;(define-extern babak-run-to-cannon object) ;; unknown type +(define-extern babak-with-cannon-jump-off-cannon (state babak-with-cannon)) ;; unknown type +(define-extern babak-with-cannon-shooting (state babak-with-cannon)) ;; unknown type +(define-extern babak-with-cannon-jump-onto-cannon (state babak-with-cannon)) ;; unknown type +(define-extern babak-run-to-cannon (state babak)) ;; unknown type ;; ---------------------- @@ -23941,7 +23877,7 @@ ;; - Types (deftype mayor (process-taskable) - ((root-override collide-shape :score 100 :offset 112)) + () :method-count-assert 53 :size-assert #x17c :heap-base #x110 @@ -23993,22 +23929,22 @@ ;; - Types -; (deftype pelican-bank (basic) -; ((circle-speed meters :offset-assert 4) -; (dive-time seconds :offset-assert 8) -; (to-nest0-time seconds :offset-assert 16) -; (to-nest1-time seconds :offset-assert 24) -; (land-time seconds :offset-assert 32) -; (from-nest-time seconds :offset-assert 40) -; (spit-time seconds :offset-assert 48) -; (pre-spit-wait-time seconds :offset-assert 56) -; (post-spit-wait-time seconds :offset-assert 64) -; (run-away-time seconds :offset-assert 72) -; ) -; :method-count-assert 9 -; :size-assert #x50 -; :flag-assert #x900000050 -; ) +(deftype pelican-bank (basic) + ((circle-speed meters :offset-assert 4) + (dive-time seconds :offset-assert 8) + (to-nest0-time seconds :offset-assert 16) + (to-nest1-time seconds :offset-assert 24) + (land-time seconds :offset-assert 32) + (from-nest-time seconds :offset-assert 40) + (spit-time seconds :offset-assert 48) + (pre-spit-wait-time seconds :offset-assert 56) + (post-spit-wait-time seconds :offset-assert 64) + (run-away-time seconds :offset-assert 72) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) (deftype pelican (process-drawable) ((query gui-query :inline :offset-assert 176) @@ -24050,17 +23986,17 @@ ;; - Unknowns (define-extern *pelican-sg* skeleton-group) -;;(define-extern pelican-wait-at-end object) ;; unknown type -;;(define-extern pelican-wait-at-nest object) ;; unknown type -;;(define-extern pelican-circle object) ;; unknown type -;;(define-extern zero-func object) ;; unknown type -;;(define-extern *PELICAN-bank* object) ;; unknown type -;;(define-extern pelican-dive object) ;; unknown type -;;(define-extern pelican-from-nest object) ;; unknown type -;;(define-extern pelican-explode object) ;; unknown type -;;(define-extern pelican-spit object) ;; unknown type -;;(define-extern pelican-fly-to-end object) ;; unknown type -;;(define-extern pelican-to-nest object) ;; unknown type +(define-extern pelican-wait-at-end (state pelican)) ;; unknown type +(define-extern pelican-wait-at-nest (state pelican)) ;; unknown type +(define-extern pelican-circle (state pelican)) ;; unknown type +(define-extern zero-func (function int)) ;; unknown type +(define-extern *PELICAN-bank* pelican-bank) ;; unknown type +(define-extern pelican-dive (state pelican)) ;; unknown type +(define-extern pelican-from-nest (state pelican)) ;; unknown type +(define-extern pelican-explode (state pelican)) ;; unknown type +(define-extern pelican-spit (state pelican)) ;; unknown type +(define-extern pelican-fly-to-end (state pelican)) ;; unknown type +(define-extern pelican-to-nest (state pelican)) ;; unknown type ;; ---------------------- @@ -24287,7 +24223,7 @@ ;;(define-extern sound-seagull-squall object) ;; unknown type ;;(define-extern seagullflock-idle object) ;; unknown type ;;(define-extern seagullflock-at-waterfall object) ;; unknown type -;;(define-extern aybabtu object) ;; unknown type +(define-extern aybabtu (function int int)) ;; this is just sceCdMmode (define-extern *seagull-sg* skeleton-group) ;;(define-extern seagull-idle object) ;; unknown type ;;(define-extern seagull-soaring object) ;; unknown type @@ -25648,115 +25584,42 @@ :flag-assert #x19005000b4 ;; inherited inspect of process-drawable (:methods - (citb-base-plat-idle () none 20) ;; state + (citb-base-plat-idle () _type_ :state 20) ;; state (dummy-21 () none 21) (dummy-22 () none 22) - (citb-base-plat-active () none 23) ;; state + (citb-base-plat-active () _type_ :state 23) ;; state (dummy-24 () none 24) ) ) -; (deftype citb-plat-eco (plat-eco) -; () -; :method-count-assert 33 -; :size-assert #x165 -; :heap-base #x100 -; :flag-assert #x2101000165 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; ) -; ) +(deftype citb-plat-eco (plat-eco) + () + :method-count-assert 33 + :size-assert #x165 + :heap-base #x100 + :flag-assert #x2101000165 + ) -; (deftype citb-plat (plat) -; ((trans-offset vector :inline :offset-assert 272) -; ) -; :method-count-assert 33 -; :size-assert #x120 -; :heap-base #xb0 -; :flag-assert #x2100b00120 -; ;; inherited inspect of plat -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; ) -; ) +(deftype citb-plat (plat) + ((trans-offset vector :inline :offset-assert 272) + ) + :method-count-assert 33 + :size-assert #x120 + :heap-base #xb0 + :flag-assert #x2100b00120 + ) -; (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 basic :offset-assert 200) -; ) -; :method-count-assert 25 -; :size-assert #xcc -; :heap-base #x60 -; :flag-assert #x19006000cc -; ;; inherited inspect of citb-base-plat -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; ) -; ) +(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 basic :offset-assert 200) + ) + :method-count-assert 25 + :size-assert #xcc + :heap-base #x60 + :flag-assert #x19006000cc + ) (deftype citb-chain-plat (rigid-body-platform) ((orig-trans vector :inline :offset-assert 736) @@ -25769,162 +25632,55 @@ :heap-base #x2b0 :size-assert #x318 :flag-assert #x2302b00318 - ;; inherited inspect of rigid-body-platform ) -; (deftype citb-rotatebox (citb-base-plat) -; () -; :method-count-assert 25 -; :size-assert #xb4 -; :heap-base #x50 -; :flag-assert #x19005000b4 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; ) -; ) +(deftype citb-rotatebox (citb-base-plat) + () + :method-count-assert 25 + :size-assert #xb4 + :heap-base #x50 + :flag-assert #x19005000b4 + ) -; (deftype citb-donut (citb-base-plat) -; ((sync sync-info :inline :offset-assert 180) -; ) -; :method-count-assert 25 -; :size-assert #xbc -; :heap-base #x50 -; :flag-assert #x19005000bc -; ;; inherited inspect of citb-base-plat -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; ) -; ) +(deftype citb-donut (citb-base-plat) + ((sync sync-info :inline :offset-assert 180) + ) + :method-count-assert 25 + :size-assert #xbc + :heap-base #x50 + :flag-assert #x19005000bc + ) -; (deftype citb-stopbox (plat) -; () -; :method-count-assert 33 -; :size-assert #x108 -; :heap-base #xa0 -; :flag-assert #x2100a00108 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; ) -; ) +(deftype citb-stopbox (plat) + () + :method-count-assert 33 + :size-assert #x108 + :heap-base #xa0 + :flag-assert #x2100a00108 + ) -; (deftype citb-firehose (process-drawable) -; ((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) -; ) -; :method-count-assert 20 -; :size-assert #xd0 -; :heap-base #x60 -; :flag-assert #x14006000d0 -; ;; 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 citb-firehose (process-drawable) + ((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) + ) + :method-count-assert 20 + :size-assert #xd0 + :heap-base #x60 + :flag-assert #x14006000d0 + ) -; (deftype citb-exit-plat (plat-button) -; ((idle-height float :offset-assert 240) -; (rise-height float :offset-assert 244) -; (activated basic :offset-assert 248) -; ) -; :method-count-assert 33 -; :size-assert #xfc -; :heap-base #x90 -; :flag-assert #x21009000fc -; ;; inherited inspect of plat-button -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; ) -; ) +(deftype citb-exit-plat (plat-button) + ((idle-height float :offset-assert 240) + (rise-height float :offset-assert 244) + (activated basic :offset-assert 248) + ) + :method-count-assert 33 + :size-assert #xfc + :heap-base #x90 + :flag-assert #x21009000fc + ) ;; - Functions @@ -25933,19 +25689,19 @@ ;; - Unknowns -;;(define-extern citb-exit-plat-idle object) ;; unknown type +(define-extern citb-exit-plat-idle (state citb-exit-plat)) ;; unknown type (define-extern *citb-exit-plat-sg* skeleton-group) -;;(define-extern citb-exit-plat-rise object) ;; unknown type +(define-extern citb-exit-plat-rise (state citb-exit-plat)) ;; unknown type (define-extern *citb-firehose-sg* skeleton-group) -;;(define-extern citb-firehose-idle object) ;; unknown type -;;(define-extern citb-firehose-active object) ;; unknown type -;;(define-extern citb-firehose-blast object) ;; 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-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 *citb-chain-plat-constants* object) ;; unknown type -;;(define-extern citb-chain-plat-settle object) ;; unknown type +(define-extern *citb-chain-plat-constants* rigid-body-platform-constants) ;; unknown type +(define-extern citb-chain-plat-settle (state citb-chain-plat)) ;; unknown type (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) @@ -27007,49 +26763,39 @@ ;; - Types -; (deftype cavecrystal (process-drawable) -; ((is-master? basic :offset-assert 176) -; (crystal-id int32 :offset-assert 180) -; (glow-u float :offset-assert 184) -; (glow-wf-period int32 :offset-assert 188) -; (glow-wf-offset int32 :offset-assert 192) -; (prev-compute-glow-time uint64 :offset-assert 200) -; (start-fade-time uint64 :offset-assert 208) -; (end-fade-time uint64 :offset-assert 216) -; (activated-time uint64 :offset-assert 224) -; (last-updated-user-lighting uint64 :offset-assert 232) -; (player-attack-id uint64 :offset-assert 240) -; (on-color-mult vector :inline :offset-assert 256) -; (on-color-emissive vector :inline :offset-assert 272) -; (off-color-mult vector :inline :offset-assert 288) -; (off-color-emissive vector :inline :offset-assert 304) -; ) -; :method-count-assert 22 -; :size-assert #x140 -; :heap-base #xd0 -; :flag-assert #x1600d00140 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(declare-type cavecrystal-light-control basic) +(deftype cavecrystal (process-drawable) + ((root-override collide-shape :score 100 :offset 112) + (is-master? symbol :offset-assert 176) + (crystal-id int32 :offset-assert 180) + (glow-u float :offset-assert 184) + (glow-wf-period int32 :offset-assert 188) + (glow-wf-offset int32 :offset-assert 192) + (prev-compute-glow-time uint64 :offset-assert 200) + (start-fade-time uint64 :offset-assert 208) + (end-fade-time uint64 :offset-assert 216) + (activated-time uint64 :offset-assert 224) + (last-updated-user-lighting uint64 :offset-assert 232) + (player-attack-id uint64 :offset-assert 240) + (on-color-mult vector :inline :offset-assert 256) + (on-color-emissive vector :inline :offset-assert 272) + (off-color-mult vector :inline :offset-assert 288) + (off-color-emissive vector :inline :offset-assert 304) + ) + :method-count-assert 22 + :size-assert #x140 + :heap-base #xd0 + :flag-assert #x1600d00140 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + ) + ) ;; - Unknowns (define-extern *cavecrystal-sg* skeleton-group) -;;(define-extern *cavecrystal-light-control* object) ;; unknown type +(define-extern *cavecrystal-light-control* cavecrystal-light-control) ;; unknown type ;;(define-extern cavecrystal-idle object) ;; unknown type ;;(define-extern cavecrystal-active object) ;; unknown type @@ -29618,123 +29364,67 @@ ;; - Types -; (deftype periscope (process-drawable) -; ((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 uint32 :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) -; (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) -; ) -; :method-count-assert 20 -; :size-assert #x184 -; :heap-base #x120 -; :flag-assert #x1401200184 -; ;; 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 periscope (process-drawable) + ((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 uint32 :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) + (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) + ) + :method-count-assert 20 + :size-assert #x184 + :heap-base #x120 + :flag-assert #x1401200184 + ) -; (deftype reflector (process-drawable) -; () -; :method-count-assert 20 -; :size-assert #xb0 -; :heap-base #x40 -; :flag-assert #x14004000b0 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype reflector (process-drawable) + () + :method-count-assert 20 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x14004000b0 + ) -; (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) -; ) -; :method-count-assert 20 -; :size-assert #xdc -; :heap-base #x70 -; :flag-assert #x14007000dc -; ;; 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 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) + ) + :method-count-assert 20 + :size-assert #xdc + :heap-base #x70 + :flag-assert #x14007000dc + ) -; (deftype reflector-mirror (process-drawable) -; ((beam-end vector :inline :offset-assert 176) -; ) -; :method-count-assert 20 -; :size-assert #xc0 -; :heap-base #x50 -; :flag-assert #x14005000c0 -; ;; 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 reflector-mirror (process-drawable) + ((beam-end vector :inline :offset-assert 176) + ) + :method-count-assert 20 + :size-assert #xc0 + :heap-base #x50 + :flag-assert #x14005000c0 + ) ;; - Functions @@ -29759,20 +29449,20 @@ ;; - Unknowns (define-extern *reflector-mirror-sg* skeleton-group) -;;(define-extern reflector-mirror-broken object) ;; unknown type -;;(define-extern reflector-mirror-idle object) ;; unknown type +(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 object) ;; unknown type +(define-extern reflector-origin-idle (state reflector-origin)) ;; unknown type (define-extern *periscope-base-sg* skeleton-group) -;;(define-extern periscope-power-on object) ;; unknown type -;;(define-extern periscope-wait-for-player object) ;; unknown type -;;(define-extern periscope-idle object) ;; unknown type -;;(define-extern cam-periscope object) ;; unknown type -;;(define-extern periscope-wait-for-power-input object) ;; unknown type -;;(define-extern periscope-player-control object) ;; unknown type -;;(define-extern periscope-activate object) ;; unknown type +(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 object) ;; unknown type +(define-extern reflector-idle (state reflector)) ;; unknown type ;; ---------------------- @@ -30802,48 +30492,39 @@ ;; - Types -; (deftype flutflut (process-drawable) -; ((extra-trans vector :inline :offset-assert 176) -; (condition int32 :offset-assert 192) -; (auto-get-off basic :offset-assert 196) -; (cell uint64 :offset-assert 200) -; (path-data UNKNOWN 2 :offset-assert 208) -; (path-target basic :offset-assert 208) -; (path-flut basic :offset-assert 212) -; (touch-time uint64 :offset-assert 216) -; ) -; :method-count-assert 24 -; :size-assert #xe0 -; :heap-base #x70 -; :flag-assert #x18007000e0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; ) -; ) +(deftype flutflut (process-drawable) + ((root-override collide-shape-moving :score 100 :offset 112) + (extra-trans vector :inline :offset-assert 176) + (condition int32 :offset-assert 192) + (auto-get-off symbol :offset-assert 196) + (cell handle :offset-assert 200) + (path-data path-control 2 :offset-assert 208) + (path-target path-control :offset 208) + (path-flut path-control :offset 212) + (touch-time uint64 :offset-assert 216) + ) + :pack-me + :method-count-assert 24 + :size-assert #xe0 + :heap-base #x70 + :flag-assert #x18007000e0 + ;; inherited inspect of process-drawable + (:methods + (wait-for-start () _type_ :state 20) + (idle () _type_ :state 21) + (pickup ((state flutflut)) _type_ :state 22) + (wait-for-return () _type_ :state 23) + ) + ) ;; - Functions -(define-extern flutflut-effect function) +(define-extern flutflut-effect (function none :behavior flutflut)) ;; - Unknowns (define-extern *flutflut-sg* skeleton-group) -;;(define-extern *flutflut-shadow-control* object) ;; unknown type +(define-extern *flutflut-shadow-control* shadow-control) ;; unknown type ;; ---------------------- @@ -31047,7 +30728,9 @@ ) (deftype yakow (process-drawable) - ((player-attack-id int32 :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (fact-override fact-info-enemy :score 100 :offset 144) + (player-attack-id int32 :offset-assert 176) (walk-run-blend float :offset-assert 180) (walk-turn-blend float :offset-assert 184) (run-mode basic :offset-assert 188) @@ -31074,32 +30757,32 @@ ;; - Functions -(define-extern yakow-task-complete? (function symbol none :behavior yakow)) -(define-extern yakow-facing-player? function) +(define-extern yakow-task-complete? (function symbol symbol :behavior yakow)) +(define-extern yakow-facing-player? (function float symbol :behavior yakow)) (define-extern yakow-post (function none :behavior yakow)) -(define-extern yakow-facing-point? function) -(define-extern yakow-facing-direction? function) -(define-extern yakow-generate-travel-vector function) +(define-extern yakow-facing-point? (function vector float symbol :behavior yakow)) +(define-extern yakow-facing-direction? (function vector float symbol :behavior yakow)) +(define-extern yakow-generate-travel-vector (function vector :behavior yakow)) (define-extern yakow-common-post (function none :behavior yakow)) (define-extern yakow-cam (function none)) (define-extern yakow-default-event-handler (function process-drawable int symbol event-message-block object :behavior yakow)) -(define-extern yakow-simple-post function) -(define-extern yakow-run-post function) -(define-extern yakow-blend-walk-run function) +(define-extern yakow-simple-post (function none :behavior yakow)) +(define-extern yakow-run-post (function none :behavior yakow)) +(define-extern yakow-blend-walk-run (function none :behavior yakow)) ;; - Unknowns (define-extern *YAKOW-bank* yakow-bank) (define-extern *yakow-sg* skeleton-group) -(define-extern yakow-graze (state none)) -(define-extern yakow-idle (state none)) -(define-extern yakow-run-away state) -(define-extern yakow-graze-kicked state) -(define-extern yakow-walk-to state) -(define-extern yakow-notice state) -(define-extern yakow-kicked (state none)) +(define-extern yakow-graze (state yakow)) +(define-extern yakow-idle (state yakow)) +(define-extern yakow-run-away (state yakow)) +(define-extern yakow-graze-kicked (state yakow)) +(define-extern yakow-walk-to (state vector yakow)) +(define-extern yakow-notice (state yakow)) +(define-extern yakow-kicked (state yakow)) (define-extern *village1cam-sg* skeleton-group) -(define-extern yakow-die state) +(define-extern yakow-die (state yakow)) ;; ---------------------- @@ -31599,161 +31282,131 @@ ;; - Types -; (deftype boat-stabilizer (structure) -; ((local-pos vector :inline :offset-assert 0) -; (normal vector :inline :offset-assert 16) -; ) -; :method-count-assert 9 -; :size-assert #x20 -; :flag-assert #x900000020 -; ) +(deftype boat-stabilizer (structure) + ((local-pos vector :inline :score 100 :offset-assert 0) + (normal vector :inline :score 100 :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) -; (deftype vehicle-path (structure) -; ((point-array UNKNOWN 10 :offset-assert 0) -; (point-count int32 :offset-assert 160) -; ) -; :method-count-assert 14 -; :size-assert #xa4 -; :flag-assert #xe000000a4 -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; ) -; ) +(deftype vehicle-path (structure) + ((point-array vector 10 :inline :offset-assert 0) + (point-count int32 :offset-assert 160) + ) + :method-count-assert 14 + :size-assert #xa4 + :flag-assert #xe000000a4 + (:methods + (get-point-count (_type_) int 9) + (nth-point (_type_ int vector) vector 10) + (distance-to-next-point (_type_ int vector) vector 11) + (add-point! (_type_ float float float float) none 12) + (debug-draw (_type_) symbol 13) + ) + ) -; (deftype vehicle-controller (structure) -; ((path vehicle-path :offset-assert 0) -; (turning-radius-table uint32 :offset-assert 4) -; (throttle-control-table uint32 :offset-assert 8) -; (table-step float :offset-assert 12) -; (table-length int32 :offset-assert 16) -; (circle-radius float :offset-assert 20) -; (throttle float :offset-assert 24) -; (steering float :offset-assert 28) -; (path-dest-index int8 :offset-assert 32) -; (left-circle int8 :offset-assert 33) -; (path-dest-point vector :inline :offset-assert 48) -; (path-dest-velocity vector :inline :offset-assert 64) -; (dest-circle vector :inline :offset-assert 80) -; (target-point vector :inline :offset-assert 96) -; (sample-dir vector :inline :offset-assert 112) -; (sample-time uint64 :offset-assert 128) -; (sample-index int32 :offset-assert 136) -; ) -; :method-count-assert 17 -; :size-assert #x8c -; :flag-assert #x110000008c -; (: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) -; ) -; ) +(deftype vehicle-controller (structure) + ((path vehicle-path :offset-assert 0) + (turning-radius-table (pointer float) :offset-assert 4) + (throttle-control-table (pointer float) :offset-assert 8) + (table-step float :offset-assert 12) + (table-length int32 :offset-assert 16) + (circle-radius float :offset-assert 20) + (throttle float :offset-assert 24) + (steering float :offset-assert 28) + (path-dest-index int8 :offset-assert 32) + (left-circle int8 :offset-assert 33) + (path-dest-point vector :inline :offset-assert 48) + (path-dest-velocity vector :inline :offset-assert 64) + (dest-circle vector :inline :offset-assert 80) + (target-point vector :inline :offset-assert 96) + (sample-dir vector :inline :offset-assert 112) + (sample-time uint64 :offset-assert 128) + (sample-index int32 :offset-assert 136) + ) + :method-count-assert 17 + :size-assert #x8c + :flag-assert #x110000008c + (:methods + (init! (_type_ vehicle-path (pointer float) (pointer float) int float) none 9) + (TODO-RENAME-10 (_type_ vector float int) none 10) + (dummy-11 (_type_) none 11) + (TODO-RENAME-12 (_type_ int vector) none 12) + (move-to-next-point (_type_ vector) none 13) + (TODO-RENAME-14 (_type_ vector vector) none 14) + (dummy-15 (_type_ collide-shape-moving) none 15) + (dummy-16 (_type_) none 16) + ) + ) -; (deftype fishermans-boat (rigid-body-platform) -; ((stabilizer-array UNKNOWN 2 :offset-assert 736) -; (engine-thrust-local-pos vector :inline :offset-assert 800) -; (ignition basic :offset-assert 816) -; (engine-thrust float :offset-assert 820) -; (propeller basic :offset-assert 824) -; (dock-point vector :inline :offset-assert 832) -; (dest-dir vector :inline :offset-assert 848) -; (dock-point-index int8 :offset-assert 864) -; (auto-pilot basic :offset-assert 868) -; (anchored basic :offset-assert 872) -; (waiting-for-player basic :offset-assert 876) -; (player-riding basic :offset-assert 880) -; (boat-path vehicle-path :inline :offset-assert 896) -; (cam-tracker uint64 :offset-assert 1064) -; (player-attack-id int32 :offset-assert 696) -; (kill-player basic :offset-assert 1076) -; (engine-sound-id sound-id :offset-assert 1080) -; (engine-sound-envelope float :offset-assert 1084) -; (debug-draw basic :offset-assert 1088) -; (debug-path-record basic :offset-assert 1092) -; (debug-path-playback basic :offset-assert 1096) -; (measure-parameters basic :offset-assert 1100) -; (controller vehicle-controller :inline :offset-assert 1104) -; (anim basic :offset-assert 1244) -; (old-target-pos transformq :inline :offset-assert 1248) -; (evilbro uint64 :offset-assert 1296) -; (evilsis uint64 :offset-assert 1304) -; ) -; :method-count-assert 35 -; :size-assert #x520 -; :heap-base #x4b0 -; :flag-assert #x2304b00520 -; ;; inherited inspect of rigid-body-platform -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; ) -; ) +(deftype fishermans-boat (rigid-body-platform) + ((stabilizer-array boat-stabilizer 2 :inline :offset-assert 736) + (engine-thrust-local-pos vector :inline :offset-assert 800) + (ignition symbol :offset-assert 816) + (engine-thrust float :offset-assert 820) + (propeller joint-mod-spinner :offset-assert 824) + (dock-point vector :inline :offset-assert 832) + (dest-dir vector :inline :offset-assert 848) + (dock-point-index int8 :offset-assert 864) + (auto-pilot symbol :offset-assert 868) + (anchored symbol :offset-assert 872) + (waiting-for-player symbol :offset-assert 876) + (player-riding symbol :offset-assert 880) + (boat-path vehicle-path :inline :offset-assert 896) + (cam-tracker handle :offset-assert 1064) + (kill-player symbol :offset 1076) + (engine-sound-id sound-id :offset 1080) + (engine-sound-envelope float :offset 1084) + (debug-draw basic :offset 1088) + (debug-path-record basic :offset 1092) + (debug-path-playback basic :offset 1096) + (measure-parameters basic :offset 1100) + (controller vehicle-controller :inline :offset 1104) + (anim spool-anim :offset 1244) + (old-target-pos transformq :inline :offset 1248) + (evilbro handle :offset 1296) + (evilsis handle :offset 1304) + ) + :method-count-assert 35 + :size-assert #x520 + :heap-base #x4b0 + :flag-assert #x2304b00520 + ) ;; - Functions -(define-extern fishermans-boat-spawn-particles function) -(define-extern fishermans-boat-play-sounds function) -(define-extern fishermans-boat-reset-physics function) -(define-extern fishermans-boat-set-dock-point function) -(define-extern fishermans-boat-set-path-point function) -(define-extern fishermans-boat-next-path-point function) -(define-extern fishermans-boat-set-throttle-by-speed function) -(define-extern fishermans-boat-enter-dock? function) -(define-extern fishermans-boat-leave-dock? function) -(define-extern fishermans-boat-wave function) -(define-extern fishermans-boat-post function) +(define-extern fishermans-boat-spawn-particles (function float none :behavior fishermans-boat)) +(define-extern fishermans-boat-play-sounds (function none :behavior fishermans-boat)) +(define-extern fishermans-boat-reset-physics (function none :behavior fishermans-boat)) +(define-extern fishermans-boat-set-dock-point (function int none :behavior fishermans-boat)) +(define-extern fishermans-boat-set-path-point (function vector none :behavior fishermans-boat)) +(define-extern fishermans-boat-next-path-point (function none :behavior fishermans-boat)) +(define-extern fishermans-boat-set-throttle-by-speed (function float none :behavior fishermans-boat)) +(define-extern fishermans-boat-enter-dock? (function symbol :behavior fishermans-boat)) +(define-extern fishermans-boat-leave-dock? (function symbol :behavior fishermans-boat)) +(define-extern fishermans-boat-wave (function vector float float none :behavior fishermans-boat)) +(define-extern fishermans-boat-post (function none :behavior fishermans-boat)) ;; - Unknowns -;;(define-extern fishermans-boat-docked-village object) ;; unknown type +(define-extern fishermans-boat-docked-village (state fishermans-boat)) ;; unknown type (define-extern *fb-evilbro-sg* skeleton-group) (define-extern *fb-evilsis-sg* skeleton-group) -;;(define-extern fishermans-boat-docked-misty object) ;; unknown type +(define-extern fishermans-boat-docked-misty (state fishermans-boat)) ;; unknown type (define-extern *fishermans-boat-sg* skeleton-group) -;;(define-extern *boat-turning-radius-table* object) ;; unknown type -;;(define-extern *boat-throttle-control-table* object) ;; unknown type -;;(define-extern *fishermans-boat-constants* object) ;; unknown type -;;(define-extern fishermans-boat-player-control object) ;; unknown type -;;(define-extern fishermans-boat-entering-village object) ;; unknown type -;;(define-extern fishermans-boat-entering-misty object) ;; unknown type -;;(define-extern fishermans-boat-ride-to-village1 object) ;; unknown type -;;(define-extern fishermans-boat-ride-to-misty object) ;; unknown type -;;(define-extern fishermans-boat-leaving-village object) ;; unknown type -;;(define-extern fishermans-boat-leaving-misty object) ;; unknown type -;;(define-extern fishermans-boat-measurements object) ;; unknown type +(define-extern *boat-turning-radius-table* (pointer float)) ;; unknown type +(define-extern *boat-throttle-control-table* (pointer float)) ;; unknown type +(define-extern *fishermans-boat-constants* rigid-body-platform-constants) ;; unknown type +(define-extern fishermans-boat-player-control (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-entering-village (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-entering-misty (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-ride-to-village1 (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-ride-to-misty (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-leaving-village (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-leaving-misty (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-measurements (state fishermans-boat)) ;; unknown type ;; ---------------------- @@ -31874,96 +31527,37 @@ ;; - Types -; (deftype training-water (water-anim) -; () -; :method-count-assert 30 -; :size-assert #xdc -; :heap-base #x70 -; :flag-assert #x1e007000dc -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; ) -; ) +(deftype training-water (water-anim) + () + :method-count-assert 30 + :size-assert #xdc + :heap-base #x70 + :flag-assert #x1e007000dc + ) -; (deftype training-cam (process) -; ((root basic :offset-assert 112) -; (range meters :offset-assert 116) -; (index int32 :offset-assert 120) -; (state-time uint64 :offset-assert 128) -; ) -; :method-count-assert 15 -; :size-assert #x88 -; :heap-base #x20 -; :flag-assert #xf00200088 -; ;; inherited inspect of process -; (: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) -; ) -; ) +(deftype training-cam (process) + ((root basic :offset-assert 112) + (range meters :offset-assert 116) + (index int32 :offset-assert 120) + (state-time uint64 :offset-assert 128) + ) + :method-count-assert 15 + :size-assert #x88 + :heap-base #x20 + :flag-assert #xf00200088 + (:methods + (idle () _type_ :state 14) + ) + ) -; (deftype tra-pontoon (rigid-body-platform) -; ((anchor-point vector :inline :offset-assert 736) -; ) -; :method-count-assert 35 -; :size-assert #x2f0 -; :heap-base #x280 -; :flag-assert #x23028002f0 -; ;; inherited inspect of rigid-body-platform -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; ) -; ) +(deftype tra-pontoon (rigid-body-platform) + ((anchor-point vector :inline :offset-assert 736) + ) + :method-count-assert 35 + :size-assert #x2f0 + :heap-base #x280 + :flag-assert #x23028002f0 + ) (deftype tra-iris-door (eco-door) () @@ -31973,57 +31567,33 @@ :flag-assert #x1b00a00104 ) -; (deftype scarecrow-a (process-drawable) -; ((incomming-attack-id uint64 :offset-assert 176) -; (intersection vector :inline :offset-assert 192) -; ) -; :method-count-assert 22 -; :size-assert #xd0 -; :heap-base #x60 -; :flag-assert #x16006000d0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype scarecrow-a (process-drawable) + ((incomming-attack-id uint64 :offset-assert 176) + (intersection vector :inline :offset-assert 192) + ) + :method-count-assert 22 + :size-assert #xd0 + :heap-base #x60 + :flag-assert #x16006000d0 + (:methods + (idle () _type_ :state 20) + (dummy-21 () none 21) + ) + ) -; (deftype scarecrow-b (process-drawable) -; ((incomming-attack-id uint64 :offset-assert 176) -; (intersection vector :inline :offset-assert 192) -; ) -; :method-count-assert 22 -; :size-assert #xd0 -; :heap-base #x60 -; :flag-assert #x16006000d0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype scarecrow-b (process-drawable) + ((incomming-attack-id uint64 :offset-assert 176) + (intersection vector :inline :offset-assert 192) + ) + :method-count-assert 22 + :size-assert #xd0 + :heap-base #x60 + :flag-assert #x16006000d0 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + ) + ) ;; - Unknowns @@ -32033,9 +31603,9 @@ (define-extern *scarecrow-a-break-sg* skeleton-group) (define-extern *tra-iris-door-sg* skeleton-group) (define-extern *tra-pontoon-sg* skeleton-group) -;;(define-extern *tra-pontoon-constants* object) ;; unknown type +(define-extern *tra-pontoon-constants* rigid-body-platform-constants) ;; unknown type (define-extern *training-cam-sg* skeleton-group) -;;(define-extern ripple-for-training-water object) ;; unknown type +(define-extern ripple-for-training-water ripple-wave-set) ;; unknown type ;; ---------------------- @@ -32464,106 +32034,66 @@ ;; - Types -; (deftype keg-conveyor (process-drawable) -; ((pivot basic :offset-assert 176) -; (quat quaternion :inline :offset-assert 192) -; ) -; :method-count-assert 20 -; :size-assert #xd0 -; :heap-base #x60 -; :flag-assert #x14006000d0 -; ;; 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 keg-conveyor (process-drawable) + ((pivot joint-mod-spinner :offset-assert 176) + (quat quaternion :inline :offset-assert 192) + ) + :method-count-assert 20 + :size-assert #xd0 + :heap-base #x60 + :flag-assert #x14006000d0 + ) -; (deftype keg-conveyor-paddle (process-drawable) -; ((object-on-paddle uint32 :offset-assert 176) -; (sync sync-info :inline :offset-assert 180) -; ) -; :method-count-assert 20 -; :size-assert #xbc -; :heap-base #x50 -; :flag-assert #x14005000bc -; ;; 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 keg-conveyor-paddle (process-drawable) + ((root-override collide-shape-moving :score 100 :offset 112) + (object-on-paddle (pointer bouncing-float) :offset-assert 176) + (sync sync-info :inline :offset-assert 180) + ) + :method-count-assert 20 + :size-assert #xbc + :heap-base #x50 + :flag-assert #x14005000bc + ) -; (deftype keg (process-drawable) -; ((sync-offset float :offset-assert 176) -; (keg-behavior int8 :offset-assert 180) -; (path-position vector :inline :offset-assert 192) -; (shadow-enable-plane vector :inline :offset-assert 208) -; (smush smush-control :inline :offset-assert 224) -; (sound-id sound-id :offset-assert 256) -; ) -; :method-count-assert 20 -; :size-assert #x104 -; :heap-base #xa0 -; :flag-assert #x1400a00104 -; ;; 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 keg (process-drawable) + ((root-override collide-shape-moving :score 100 :offset 112) + (sync-offset float :offset-assert 176) + (keg-behavior int8 :offset-assert 180) + (path-position vector :inline :offset-assert 192) + (shadow-enable-plane vector :inline :offset-assert 208) + (smush smush-control :inline :offset-assert 224) + (sound-id sound-id :offset-assert 256) + ) + :method-count-assert 20 + :size-assert #x104 + :heap-base #xa0 + :flag-assert #x1400a00104 + ) ;; - Functions -(define-extern keg-conveyor-paddle-init-by-other function) -(define-extern keg-conveyor-spawn-keg function) -(define-extern keg-conveyor-spawn-bouncing-keg function) -(define-extern keg-init-by-other function) -(define-extern keg-bounce-set-particle-rotation-callback function) -(define-extern keg-update-smush function) -(define-extern keg-event-handler function) -(define-extern keg-post function) +(define-extern keg-conveyor-paddle-init-by-other (function keg-conveyor-paddle none :behavior keg-conveyor-paddle)) +(define-extern keg-conveyor-spawn-keg (function keg-conveyor (pointer process))) ;; VERY likely a keg +(define-extern keg-conveyor-spawn-bouncing-keg (function keg-conveyor (pointer process))) ;; VERY likely a keg +(define-extern keg-init-by-other (function keg int none :behavior keg)) +(define-extern keg-bounce-set-particle-rotation-callback (function sparticle-system sparticle-cpuinfo matrix)) +(define-extern keg-update-smush (function keg float none)) +(define-extern keg-event-handler (function process int symbol event-message-block object :behavior keg)) +(define-extern keg-post (function int :behavior keg)) ;; - Unknowns (define-extern *keg-conveyor-sg* skeleton-group) -;;(define-extern keg-conveyor-idle object) ;; unknown type +(define-extern keg-conveyor-idle (state keg-conveyor)) ;; unknown type (define-extern *keg-conveyor-paddle-sg* skeleton-group) -;;(define-extern keg-conveyor-paddle-idle object) ;; unknown type -;;(define-extern *keg-conveyor-keg-spawn-table* object) ;; unknown type +(define-extern keg-conveyor-paddle-idle (state keg-conveyor-paddle)) ;; unknown type +(define-extern *keg-conveyor-keg-spawn-table* (array int8)) ;; unknown type (define-extern *keg-sg* skeleton-group) -;;(define-extern keg-on-paddle object) ;; unknown type -;;(define-extern keg-die object) ;; unknown type -;;(define-extern keg-in-chute object) ;; unknown type -;;(define-extern keg-on-path object) ;; unknown type -;;(define-extern keg-paddle-to-path object) ;; unknown type +(define-extern keg-on-paddle (state keg)) ;; unknown type +(define-extern keg-die (state keg)) ;; unknown type +(define-extern keg-in-chute (state keg)) ;; unknown type +(define-extern keg-on-path (state keg)) ;; unknown type +(define-extern keg-paddle-to-path (state keg)) ;; unknown type ;; ---------------------- @@ -32597,7 +32127,8 @@ ;; - Types (deftype muse (nav-enemy) - ((current-path-index float :offset-assert 400) + ((root-override collide-shape-moving :score 100 :offset 112) + (current-path-index float :offset-assert 400) (prev-path-index float :offset-assert 404) (dest-path-index float :offset-assert 408) (player-path-index float :offset-assert 412) @@ -32630,16 +32161,16 @@ ;; - Functions -(define-extern muse-check-dest-point function) -(define-extern analyze-point-on-path-segment function) -(define-extern muse-get-path-point function) +(define-extern muse-check-dest-point (function none :behavior muse)) +(define-extern analyze-point-on-path-segment (function point-on-path-segment-info float)) +(define-extern muse-get-path-point (function vector int none :behavior muse)) ;; - Unknowns (define-extern *muse-sg* skeleton-group) (define-extern *muse-nav-enemy-info* nav-enemy-info) -;;(define-extern muse-idle object) ;; unknown type -;;(define-extern muse-caught object) ;; unknown type +(define-extern muse-idle (state muse)) ;; unknown type +(define-extern muse-caught (state muse)) ;; unknown type ;; ---------------------- @@ -32661,16 +32192,16 @@ ;; - Functions -(define-extern bonelurker-set-small-bounds-sphere function) -(define-extern bonelurker-set-large-bounds-sphere function) -(define-extern bonelurker-stunned-event-handler function) -(define-extern bonelurker-push-post function) +(define-extern bonelurker-set-small-bounds-sphere (function none :behavior bonelurker)) +(define-extern bonelurker-set-large-bounds-sphere (function none :behavior bonelurker)) +(define-extern bonelurker-stunned-event-handler (function process int symbol event-message-block object :behavior bonelurker)) +(define-extern bonelurker-push-post (function none :behavior bonelurker)) ;; - Unknowns (define-extern *bonelurker-sg* skeleton-group) (define-extern *bonelurker-nav-enemy-info* nav-enemy-info) -;;(define-extern bonelurker-stun object) ;; unknown type +(define-extern bonelurker-stun (state bonelurker)) ;; unknown type ;; ---------------------- @@ -32681,64 +32212,36 @@ ;; - Types -; (deftype quicksandlurker-missile (process-drawable) -; () -; :method-count-assert 20 -; :size-assert #xb0 -; :heap-base #x40 -; :flag-assert #x14004000b0 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype quicksandlurker-missile (process-drawable) + () + :method-count-assert 20 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x14004000b0 + ) -; (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 -; ) +(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 + ) -; (deftype quicksandlurker (process-drawable) -; ((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 basic :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 quicksandlurker (process-drawable) + ((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) + ) + :method-count-assert 20 + :size-assert #xd4 + :heap-base #x70 + :flag-assert #x14007000d4 + ) ;; - Functions @@ -32756,17 +32259,17 @@ ;; - Unknowns (define-extern *quicksandlurker-sg* skeleton-group) -;;(define-extern quicksandlurker-idle object) ;; unknown type -;;(define-extern quicksandlurker-track object) ;; unknown type -;;(define-extern quicksandlurker-wait object) ;; unknown type -;;(define-extern quicksandlurker-popup object) ;; unknown type -;;(define-extern quicksandlurker-attack object) ;; unknown type -;;(define-extern quicksandlurker-hide object) ;; unknown type -;;(define-extern quicksandlurker-die object) ;; unknown type -;;(define-extern quicksandlurker-victory object) ;; unknown type -;;(define-extern quicksandlurker-missile-idle object) ;; unknown type -;;(define-extern quicksandlurker-missile-impact object) ;; unknown type -;;(define-extern quicksandlurker-yawn object) ;; unknown type +(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 ;; ---------------------- @@ -32808,105 +32311,64 @@ ;; - Types -; (deftype balloonlurker-bank (basic) -; ((buoyancy-depth-offset meters :offset-assert 4) -; (player-mass float :offset-assert 8) -; (rudder-factor float :offset-assert 12) -; (max-engine-thrust float :offset-assert 16) -; (max-rudder-deflection-angle float :offset-assert 20) -; (throttle-factor float :offset-assert 24) -; (throttle-distance float :offset-assert 28) -; (throttle-close-distance float :offset-assert 32) -; (explosion-force float :offset-assert 36) -; (mine-weight float :offset-assert 40) -; ) -; :method-count-assert 9 -; :size-assert #x2c -; :flag-assert #x90000002c -; ) +(deftype balloonlurker-bank (basic) + ((buoyancy-depth-offset meters :offset-assert 4) + (player-mass float :offset-assert 8) + (rudder-factor float :offset-assert 12) + (max-engine-thrust float :offset-assert 16) + (max-rudder-deflection-angle float :offset-assert 20) + (throttle-factor float :offset-assert 24) + (throttle-distance float :offset-assert 28) + (throttle-close-distance float :offset-assert 32) + (explosion-force float :offset-assert 36) + (mine-weight float :offset-assert 40) + ) + :method-count-assert 9 + :size-assert #x2c + :flag-assert #x90000002c + ) -; (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-joint-index UNKNOWN 2 :offset-assert 772) -; (vulnerable basic :offset-assert 776) -; (water-y float :offset-assert 780) -; (propeller basic :offset-assert 784) -; (rudder basic :offset-assert 788) -; (mine UNKNOWN 2 :offset-assert 792) -; (buoyancy-factor float :offset-assert 800) -; (rudder-control float :offset-assert 804) -; (throttle-control float :offset-assert 808) -; (engine-thrust float :offset-assert 812) -; (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) -; (anim-frame float :offset-assert 860) -; (engine-sound-id sound-id :offset-assert 864) -; (pedal-sound-id sound-id :offset-assert 868) -; (frame-count int8 :offset-assert 872) -; ) -; :method-count-assert 35 -; :size-assert #x369 -; :heap-base #x300 -; :flag-assert #x2303000369 -; ;; inherited inspect of rigid-body-platform -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; ) -; ) +(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-joint-index uint16 2 :offset-assert 772) + (vulnerable basic :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) + (buoyancy-factor float :offset-assert 800) + (rudder-control float :offset-assert 804) + (throttle-control float :offset-assert 808) + (engine-thrust float :offset-assert 812) + (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) + (anim-frame float :offset-assert 860) + (engine-sound-id sound-id :offset-assert 864) + (pedal-sound-id sound-id :offset-assert 868) + (frame-count int8 :offset-assert 872) + ) + :method-count-assert 35 + :size-assert #x369 + :heap-base #x300 + :flag-assert #x2303000369 + ) -; (deftype balloonlurker-pilot (process-drawable) -; () -; :method-count-assert 22 -; :size-assert #xb0 -; :heap-base #x40 -; :flag-assert #x16004000b0 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype balloonlurker-pilot (process-drawable) + () + :method-count-assert 22 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x16004000b0 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + ) + ) ;; - Functions @@ -32922,16 +32384,16 @@ ;; - Unknowns -;;(define-extern balloonlurker-patrol object) ;; unknown type +(define-extern balloonlurker-patrol (state balloonlurker)) ;; unknown type (define-extern *balloonlurker-sg* skeleton-group) -;;(define-extern *balloonlurker-constants* object) ;; unknown type -;;(define-extern balloonlurker-pilot-idle object) ;; unknown type +(define-extern *balloonlurker-constants* rigid-body-platform-constants) ;; unknown type +(define-extern balloonlurker-pilot-idle (state balloonlurker-pilot)) ;; unknown type (define-extern *balloonlurker-pilot-sg* skeleton-group) -;;(define-extern balloonlurker-pilot-die object) ;; unknown type -;;(define-extern *BALLOONLURKER-bank* object) ;; unknown type -;;(define-extern balloonlurker-die object) ;; unknown type -;;(define-extern *balloonlurker-rudder-joint-home* object) ;; unknown type -;;(define-extern balloonlurker-mine-explode object) ;; unknown type +(define-extern balloonlurker-pilot-die (state balloonlurker-pilot)) ;; unknown type +(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 ;; ---------------------- @@ -33159,29 +32621,15 @@ :flag-assert #x14005000b1 ) -; (deftype fireboulder (process-drawable) -; ((tracker uint64 :offset-assert 176) -; (task uint8 :offset-assert 184) -; ) -; :method-count-assert 20 -; :size-assert #xb9 -; :heap-base #x50 -; :flag-assert #x14005000b9 -; ;; 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 fireboulder (process-drawable) + ((tracker uint64 :offset-assert 176) + (task uint8 :offset-assert 184) + ) + :method-count-assert 20 + :size-assert #xb9 + :heap-base #x50 + :flag-assert #x14005000b9 + ) ; (deftype ceilingflag (process-drawable) ; () @@ -33431,226 +32879,179 @@ ;; - Types -; (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 -; ) +(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 + ) -; (deftype tetherrock-info (structure) -; ((rock-camera basic :offset-assert 0) -; (arm-camera basic :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 -; ) +(deftype tetherrock-info (structure) + ((rock-camera basic :offset-assert 0) + (arm-camera basic :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 + ) -; (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) -; ) -; :method-count-assert 11 -; :size-assert #x14 -; :flag-assert #xb00000014 -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; ) -; ) +(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 + (dummy-9 () none 9) + (dummy-10 () none 10) + ) + ) -; (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) -; (max-vel float :offset-assert 16) -; (damping float :offset-assert 20) -; ) -; :method-count-assert 11 -; :size-assert #x18 -; :flag-assert #xb00000018 -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; ) -; ) +(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) + (max-vel float :offset-assert 16) + (damping float :offset-assert 20) + ) + :method-count-assert 11 + :size-assert #x18 + :flag-assert #xb00000018 + (:methods + (dummy-9 () none 9) + (dummy-10 () none 10) + ) + ) -; (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 -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; ) -; ) +(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 + (dummy-9 () none 9) + (dummy-10 () none 10) + ) + ) -; (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) -; ) -; :method-count-assert 11 -; :size-assert #x3c -; :flag-assert #xb0000003c -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; ) -; ) +(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 + (dummy-9 () none 9) + (dummy-10 () none 10) + ) + ) -; (deftype swamp-tetherrock (process-drawable) -; ((tension float :offset-assert 176) -; (tension-pt vector :inline :offset-assert 192) -; (blimp basic :offset-assert 208) -; (rot-at-init quaternion :inline :offset-assert 224) -; (hits int32 :offset-assert 240) -; ) -; :method-count-assert 20 -; :size-assert #xf4 -; :heap-base #x90 -; :flag-assert #x14009000f4 -; ;; 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 swamp-tetherrock (process-drawable) + ((tension float :offset-assert 176) + (tension-pt vector :inline :offset-assert 192) + (blimp basic :offset-assert 208) + (rot-at-init quaternion :inline :offset-assert 224) + (hits int32 :offset-assert 240) + ) + :method-count-assert 20 + :size-assert #xf4 + :heap-base #x90 + :flag-assert #x14009000f4 + ) -; (deftype precursor-arm (process-drawable) -; ((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) -; ) -; :method-count-assert 20 -; :size-assert #x114 -; :heap-base #xb0 -; :flag-assert #x1400b00114 -; ;; 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 precursor-arm (process-drawable) + ((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) + ) + :method-count-assert 20 + :size-assert #x114 + :heap-base #xb0 + :flag-assert #x1400b00114 + ) -; (deftype swamp-rope (process-drawable) -; ((parent-rp int32 :offset-assert 176) -; (other-entity basic :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) -; ) -; :method-count-assert 21 -; :size-assert #x120 -; :heap-base #xb0 -; :flag-assert #x1500b00120 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; ) -; ) +(deftype swamp-rope (process-drawable) + ((parent-rp int32 :offset-assert 176) + (other-entity basic :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) + ) + :method-count-assert 21 + :size-assert #x120 + :heap-base #xb0 + :flag-assert #x1500b00120 + (:methods + (dummy-20 () none 20) + ) + ) -; (deftype swamp-blimp (process-drawable) -; ((the-ropes UNKNOWN 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 basic :offset-assert 600) -; (bag basic :offset-assert 604) -; ) -; :method-count-assert 20 -; :size-assert #x260 -; :heap-base #x1f0 -; :flag-assert #x1401f00260 -; ;; 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 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) + (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 basic :offset-assert 600) + (bag basic :offset-assert 604) + ) + :method-count-assert 20 + :size-assert #x260 + :heap-base #x1f0 + :flag-assert #x1401f00260 + ) ;; - Functions @@ -33668,22 +33069,22 @@ ;; - Unknowns (define-extern *swamp-blimp-sg* skeleton-group) -;;(define-extern swamp-blimp-idle object) ;; unknown type -;;(define-extern swamp-blimp-bye-bye object) ;; unknown type -;;(define-extern *SWAMP_BLIMP-bank* object) ;; unknown type +(define-extern swamp-blimp-idle (state swamp-blimp)) ;; unknown type +(define-extern swamp-blimp-bye-bye (state swamp-blimp)) ;; unknown type +(define-extern *SWAMP_BLIMP-bank* swamp-blimp-bank) ;; unknown type (define-extern *swamp-rope-sg* skeleton-group) -;;(define-extern swamp-rope-idle-rock object) ;; unknown type -;;(define-extern swamp-rope-idle-arm object) ;; unknown type -;;(define-extern swamp-rope-break object) ;; 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-sg* skeleton-group) -;;(define-extern precursor-arm-idle object) ;; unknown type -;;(define-extern precursor-arm-die object) ;; unknown type -;;(define-extern precursor-arm-sink object) ;; 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-sg* skeleton-group) -;;(define-extern swamp-tetherrock-die object) ;; unknown type -;;(define-extern swamp-tetherrock-hide object) ;; unknown type -;;(define-extern swamp-tetherrock-idle object) ;; unknown type -;;(define-extern swamp-tetherrock-break object) ;; 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 (define-extern *swamp-tetherrock-explode-sg* skeleton-group) @@ -33697,7 +33098,7 @@ (deftype assistant-bluehut (process-taskable) ((sound-id sound-id :offset-assert 380) - (jaws uint64 :offset-assert 384) + (jaws handle :offset-assert 384) ; manipy - lol is this the small fish in the bucket? (sage entity-actor :offset-assert 392) (im-talking symbol :offset-assert 396) ) @@ -33751,73 +33152,26 @@ ;; - Types -; (deftype assistant-levitator (process-taskable) -; ((boulder basic :offset-assert 380) -; (particle UNKNOWN 4 :offset-assert 384) -; ) -; :method-count-assert 53 -; :size-assert #x190 -; :heap-base #x120 -; :flag-assert #x3501200190 -; ;; inherited inspect of process-taskable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype assistant-levitator (process-taskable) + ((boulder entity-actor :offset-assert 380) + (particle sparticle-launch-control 4 :offset-assert 384) + ) + :method-count-assert 53 + :size-assert #x190 + :heap-base #x120 + :flag-assert #x3501200190 + ) ;; - Functions -(define-extern assistant-levitator-blue-glow function) -(define-extern assistant-levitator-blue-beam function) -(define-extern check-drop-level-assistant-bluehut function) +(define-extern assistant-levitator-blue-glow (function none :behavior assistant-levitator)) +(define-extern assistant-levitator-blue-beam (function none :behavior assistant-levitator)) +(define-extern check-drop-level-assistant-bluehut (function sparticle-system sparticle-cpuinfo vector none)) ;; - Unknowns (define-extern *assistant-village2-sg* skeleton-group) -;;(define-extern just-particles object) ;; unknown type +(define-extern just-particles (state assistant-levitator)) (define-extern *jaws-sg* skeleton-group) @@ -34126,106 +33480,86 @@ ;; - Types -; (deftype swamp-bat-idle-path (structure) -; ((origin vector :inline :offset-assert 0) -; (x-axis vector :inline :offset-assert 16) -; (y-axis vector :inline :offset-assert 32) -; ) -; :method-count-assert 10 -; :size-assert #x30 -; :flag-assert #xa00000030 -; (:methods -; (dummy-9 () none 9) -; ) -; ) +(deftype swamp-bat-idle-path (structure) + ((origin vector :inline :offset-assert 0) + (x-axis vector :inline :offset-assert 16) + (y-axis vector :inline :offset-assert 32) + ) + :method-count-assert 10 + :size-assert #x30 + :flag-assert #xa00000030 + (:methods + (TODO-RENAME-9 (_type_ vector float) vector 9) + ) + ) -; (deftype swamp-bat (process-drawable) -; ((path-origin vector :inline :offset-assert 176) -; (idle-position-angle UNKNOWN 8 :offset-assert 192) -; (path-select-plane UNKNOWN 2 :offset-assert 224) -; (path-list UNKNOWN 2 :offset-assert 256) -; (path-select int8 :offset-assert 264) -; (slave-count int8 :offset-assert 265) -; (path-count int8 :offset-assert 266) -; ) -; :method-count-assert 20 -; :size-assert #x10b -; :heap-base #xa0 -; :flag-assert #x1400a0010b -; ;; 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) -; ) -; ) +(declare-type swamp-bat-slave process-drawable) +(deftype swamp-bat (process-drawable) + ((child-process (pointer swamp-bat-slave) :score 100 :offset 20) + (root-override collide-shape :score 100 :offset 112) + (fact-override fact-info-enemy :score 100 :offset 144) + (path-origin vector :inline :offset-assert 176) + (idle-position-angle float 8 :offset-assert 192) + (path-select-plane plane 2 :inline :offset-assert 224) + (path-list curve-control 2 :offset-assert 256) + (path-select int8 :offset-assert 264) + (slave-count int8 :offset-assert 265) + (path-count int8 :offset-assert 266) + ) + :method-count-assert 20 + :size-assert #x10b + :heap-base #xa0 + :flag-assert #x1400a0010b + ) -; (deftype swamp-bat-slave (process-drawable) -; ((sync sync-info :inline :offset-assert 176) -; (idle-anim-speed float :offset-assert 184) -; (strafe-envelope float :offset-assert 188) -; (strafe-distance float :offset-assert 192) -; (path-point-count float :offset-assert 196) -; (idle-path swamp-bat-idle-path :inline :offset-assert 208) -; (idle-position vector :inline :offset-assert 256) -; (idle-position-index int8 :offset-assert 272) -; (path-select int8 :offset-assert 273) -; (launch-ready basic :offset-assert 276) -; ) -; :method-count-assert 21 -; :size-assert #x118 -; :heap-base #xb0 -; :flag-assert #x1500b00118 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; ) -; ) +(deftype swamp-bat-slave (process-drawable) + ((parent-process (pointer swamp-bat) :score 100 :offset 12) + (root-override collide-shape-moving :score 100 :offset 112) + (sync sync-info :inline :offset-assert 176) + (idle-anim-speed float :offset-assert 184) + (strafe-envelope float :offset-assert 188) + (strafe-distance float :offset-assert 192) + (path-point-count float :offset-assert 196) + (idle-path swamp-bat-idle-path :inline :offset-assert 208) + (idle-position vector :inline :offset-assert 256) + (idle-position-index int8 :offset-assert 272) + (path-select int8 :offset-assert 273) + (launch-ready symbol :offset-assert 276) + ) + :method-count-assert 21 + :size-assert #x118 + :heap-base #xb0 + :flag-assert #x1500b00118 + (:methods + (dummy-20 (_type_) float 20) + ) + ) ;; - Functions -(define-extern swamp-bat-make-path-select-plane function) -(define-extern swamp-bat-setup-new-path function) -(define-extern swamp-bat-update-path function) -(define-extern swamp-bat-slave-init-by-other function) -(define-extern swamp-bat-launch-slave function) -(define-extern swamp-bat-check-slave-paths-match? function) -(define-extern swamp-bat-slave-get-new-path function) -(define-extern swamp-bat-slave-post function) -(define-extern swamp-bat-slave-event-handler function) -(define-extern swamp-bat-slave-path-post function) -(define-extern swamp-bat-debug function) +(define-extern swamp-bat-make-path-select-plane (function int float :behavior swamp-bat)) +(define-extern swamp-bat-setup-new-path (function int symbol :behavior swamp-bat)) +(define-extern swamp-bat-update-path (function none :behavior swamp-bat)) +(define-extern swamp-bat-slave-init-by-other (function swamp-bat-slave int none :behavior swamp-bat-slave)) +(define-extern swamp-bat-launch-slave (function object :behavior swamp-bat)) +(define-extern swamp-bat-check-slave-paths-match? (function int symbol :behavior swamp-bat)) +(define-extern swamp-bat-slave-get-new-path (function float :behavior swamp-bat-slave)) +(define-extern swamp-bat-slave-post (function int :behavior swamp-bat-slave)) +(define-extern swamp-bat-slave-event-handler (function process int symbol event-message-block object :behavior swamp-bat-slave)) +(define-extern swamp-bat-slave-path-post (function int :behavior swamp-bat-slave)) +(define-extern swamp-bat-debug (function none :behavior swamp-bat)) ;; - Unknowns -;;(define-extern swamp-bat-idle object) ;; unknown type -;;(define-extern swamp-bat-launch-slaves object) ;; unknown type +(define-extern swamp-bat-idle (state swamp-bat)) ;; unknown type +(define-extern swamp-bat-launch-slaves (state swamp-bat)) ;; unknown type (define-extern *swamp-bat-slave-sg* skeleton-group) -;;(define-extern swamp-bat-slave-idle object) ;; unknown type -;;(define-extern swamp-bat-slave-return object) ;; unknown type -;;(define-extern swamp-bat-slave-strafe object) ;; unknown type -;;(define-extern swamp-bat-slave-swoop object) ;; unknown type -;;(define-extern swamp-bat-slave-die object) ;; unknown type -;;(define-extern swamp-bat-slave-launch object) ;; unknown type +(define-extern swamp-bat-slave-idle (state swamp-bat-slave)) ;; unknown type +(define-extern swamp-bat-slave-return (state swamp-bat-slave)) ;; unknown type +(define-extern swamp-bat-slave-strafe (state swamp-bat-slave)) ;; unknown type +(define-extern swamp-bat-slave-swoop (state swamp-bat-slave)) ;; unknown type +(define-extern swamp-bat-slave-die (state handle swamp-bat-slave)) ;; unknown type +(define-extern swamp-bat-slave-launch (state swamp-bat-slave)) ;; unknown type ;; ---------------------- @@ -34236,6 +33570,7 @@ ;; - Types +(declare-type swamp-rat-nest process-drawable) (deftype swamp-rat (nav-enemy) ((up-vector vector :inline :offset-assert 400) (state-float float :offset-assert 416) @@ -34259,17 +33594,16 @@ ;; - Functions -(define-extern swamp-rat-update-wiggle-target function) -(define-extern swamp-rat-update-wiggle-params function) -(define-extern swamp-rat-default-event-handler function) -(define-extern swamp-rat-init-by-other function) +(define-extern swamp-rat-update-wiggle-target (function vector vector :behavior swamp-rat)) +(define-extern swamp-rat-update-wiggle-params (function float :behavior swamp-rat)) +(define-extern swamp-rat-default-event-handler (function process int symbol event-message-block object :behavior swamp-rat)) +(define-extern swamp-rat-init-by-other (function swamp-rat-nest vector vector pickup-type symbol none :behavior swamp-rat)) ;; - Unknowns -;;(define-extern swamp-rat-spawn object) ;; unknown type +(define-extern swamp-rat-spawn (state swamp-rat)) ;; unknown type (define-extern *swamp-rat-sg* skeleton-group) (define-extern *swamp-rat-nav-enemy-info* nav-enemy-info) -;;(define-extern pointer object) ;; unknown type ;; ---------------------- @@ -34280,164 +33614,95 @@ ;; - Types -; (deftype swamp-rat-nest (process-drawable) -; ((dummy uint32 :offset-assert 176) -; (damaged basic :offset-assert 180) -; (dummy-type int8 :offset-assert 184) -; (rat-count int8 :offset-assert 185) -; (hit-points int8 :offset-assert 186) -; (defensive-rat-count int8 :offset-assert 187) -; (spawn-period float :offset-assert 188) -; (spawn-period-scale float :offset-assert 192) -; (test-interval 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) -; ) -; ) +(declare-type swamp-rat-nest-dummy process-drawable) +(deftype swamp-rat-nest (process-drawable) + ((child-process (pointer swamp-rat-nest-dummy) :score 100 :offset 20) + (fact-override fact-info-enemy :score 100 :offset 144) + (dummy (pointer swamp-rat-nest-dummy) :offset-assert 176) + (damaged symbol :offset-assert 180) + (dummy-type int8 :offset-assert 184) + (rat-count int8 :offset-assert 185) + (hit-points int8 :offset-assert 186) + (defensive-rat-count int8 :offset-assert 187) + (spawn-period float :offset-assert 188) + (spawn-period-scale float :offset-assert 192) + (test-interval uint64 :offset-assert 200) + (player-attack-id int32 :offset-assert 208) + ) + :method-count-assert 20 + :size-assert #xd4 + :heap-base #x70 + :flag-assert #x14007000d4 + ) -; (deftype swamp-rat-nest-dummy (process-drawable) -; ((top-sphere sphere :inline :offset-assert 176) -; (death-part basic :offset-assert 192) -; (spawn-joint-array UNKNOWN 6 :offset-assert 196) -; (spawn-joint-count int8 :offset-assert 202) -; (particle-spawn-joint int8 :offset-assert 203) -; ) -; :method-count-assert 22 -; :size-assert #xcc -; :heap-base #x60 -; :flag-assert #x16006000cc -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype swamp-rat-nest-dummy (process-drawable) + ((parent-process (pointer swamp-rat-nest) :score 100 :offset 12) + (root-override collide-shape :score 100 :offset 112) + (top-sphere sphere :inline :offset-assert 176) + (death-part sparticle-launch-group :offset-assert 192) + (spawn-joint-array int8 6 :offset-assert 196) + (spawn-joint-count int8 :offset-assert 202) + (particle-spawn-joint int8 :offset-assert 203) + ) + :method-count-assert 22 + :size-assert #xcc + :heap-base #x60 + :flag-assert #x16006000cc + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) int 21) + ) + ) -; (deftype swamp-rat-nest-dummy-a (swamp-rat-nest-dummy) -; () -; :method-count-assert 22 -; :size-assert #xcc -; :heap-base #x60 -; :flag-assert #x16006000cc -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype swamp-rat-nest-dummy-a (swamp-rat-nest-dummy) + () + :method-count-assert 22 + :size-assert #xcc + :heap-base #x60 + :flag-assert #x16006000cc + ) -; (deftype swamp-rat-nest-dummy-b (swamp-rat-nest-dummy) -; () -; :method-count-assert 22 -; :size-assert #xcc -; :heap-base #x60 -; :flag-assert #x16006000cc -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype swamp-rat-nest-dummy-b (swamp-rat-nest-dummy) + () + :method-count-assert 22 + :size-assert #xcc + :heap-base #x60 + :flag-assert #x16006000cc + ) -; (deftype swamp-rat-nest-dummy-c (swamp-rat-nest-dummy) -; () -; :method-count-assert 22 -; :size-assert #xcc -; :heap-base #x60 -; :flag-assert #x16006000cc -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype swamp-rat-nest-dummy-c (swamp-rat-nest-dummy) + () + :method-count-assert 22 + :size-assert #xcc + :heap-base #x60 + :flag-assert #x16006000cc + ) ;; - Functions -(define-extern swamp-rat-nest-check-dummy function) -(define-extern swamp-rat-nest-spawn-rat function) -(define-extern swamp-rat-nest-dummy-init-by-other function) -(define-extern swamp-rat-nest-pick-spawn-joint function) -(define-extern swamp-rat-nest-dummy-take-damage function) -(define-extern swamp-rat-nest-dummy-draw-spawn-joints function) -(define-extern swamp-rat-nest-dummy-event-handler function) -(define-extern swamp-rat-nest-default-event-handler function) +(define-extern swamp-rat-nest-check-dummy (function none :behavior swamp-rat-nest)) +(define-extern swamp-rat-nest-spawn-rat (function (pointer process) :behavior swamp-rat-nest)) +(define-extern swamp-rat-nest-dummy-init-by-other (function swamp-rat-nest-dummy none :behavior swamp-rat-nest-dummy)) +(define-extern swamp-rat-nest-pick-spawn-joint (function int :behavior swamp-rat-nest)) +(define-extern swamp-rat-nest-dummy-take-damage (function int int :behavior swamp-rat-nest-dummy)) +(define-extern swamp-rat-nest-dummy-draw-spawn-joints (function symbol :behavior swamp-rat-nest-dummy)) +(define-extern swamp-rat-nest-dummy-event-handler (function process int symbol event-message-block object :behavior swamp-rat-nest-dummy)) +(define-extern swamp-rat-nest-default-event-handler (function process int symbol event-message-block object :behavior swamp-rat-nest)) ;; - Unknowns (define-extern *swamp-rat-nest-dummy-c-sg* skeleton-group) (define-extern *swamp-rat-nest-dummy-b-sg* skeleton-group) (define-extern *swamp-rat-nest-dummy-a-sg* skeleton-group) -;;(define-extern swamp-rat-nest-idle object) ;; unknown type -;;(define-extern swamp-rat-nest-active object) ;; unknown type -;;(define-extern swamp-rat-nest-gestate object) ;; unknown type -;;(define-extern swamp-rat-nest-die object) ;; unknown type -;;(define-extern swamp-rat-nest-victory object) ;; unknown type -;;(define-extern swamp-rat-nest-dummy-idle object) ;; unknown type -;;(define-extern swamp-rat-nest-dummy-hit object) ;; unknown type -;;(define-extern swamp-rat-nest-dummy-die object) ;; unknown type -;;(define-extern swamp-rat-nest-dummy-shake object) ;; unknown type +(define-extern swamp-rat-nest-idle (state swamp-rat-nest)) ;; unknown type +(define-extern swamp-rat-nest-active (state swamp-rat-nest)) ;; unknown type +(define-extern swamp-rat-nest-gestate (state swamp-rat-nest)) ;; unknown type +(define-extern swamp-rat-nest-die (state swamp-rat-nest)) ;; unknown type +(define-extern swamp-rat-nest-victory (state swamp-rat-nest)) ;; unknown type +(define-extern swamp-rat-nest-dummy-idle (state swamp-rat-nest-dummy)) ;; unknown type +(define-extern swamp-rat-nest-dummy-hit (state swamp-rat-nest-dummy)) ;; unknown type +(define-extern swamp-rat-nest-dummy-die (state swamp-rat-nest-dummy)) ;; unknown type +(define-extern swamp-rat-nest-dummy-shake (state swamp-rat-nest-dummy)) ;; unknown type ;; ---------------------- @@ -34448,130 +33713,47 @@ ;; - Types -; (deftype joint-mod-tracker (basic) -; ((target-pos vector :inline :offset-assert 16) -; (target-pos-func basic :offset-assert 32) -; (inv-forward-scale-factor float :offset-assert 36) -; (forward-scale-control float :offset-assert 40) -; (forward-scale-max float :offset-assert 44) -; (process basic :offset-assert 48) -; (enable basic :offset-assert 52) -; (up-axis int8 :offset-assert 56) -; (forward-axis int8 :offset-assert 57) -; ) -; :method-count-assert 9 -; :size-assert #x3a -; :flag-assert #x90000003a -; ) +(declare-type kermit nav-enemy) +(deftype joint-mod-tracker (basic) + ((target-pos vector :inline :offset-assert 16) + (target-pos-func function :offset-assert 32) + (inv-forward-scale-factor float :offset-assert 36) + (forward-scale-control float :offset-assert 40) + (forward-scale-max float :offset-assert 44) + (process kermit :offset-assert 48) ;; could probably be other things too + (enable symbol :offset-assert 52) + (up-axis int8 :offset-assert 56) + (forward-axis int8 :offset-assert 57) + ) + :method-count-assert 9 + :size-assert #x3a + :flag-assert #x90000003a + ) -; (deftype kermit-pulse (process-drawable) -; ((sound-id sound-id :offset-assert 176) -; ) -; :method-count-assert 20 -; :size-assert #xb4 -; :heap-base #x50 -; :flag-assert #x14005000b4 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype kermit-pulse (process-drawable) + ((sound-id sound-id :offset-assert 176) + ) + :method-count-assert 20 + :size-assert #xb4 + :heap-base #x50 + :flag-assert #x14005000b4 + ) -; (deftype kermit (nav-enemy) -; ((rotate-dir vector :inline :offset-assert 400) -; (charging-part basic :offset-assert 416) -; (airborne basic :offset-assert 420) -; (tongue-control basic :offset-assert 424) -; (tongue-pulse-pos float :offset-assert 428) -; (miss-count int8 :offset-assert 432) -; (charged-up basic :offset-assert 436) -; (sound-id sound-id :offset-assert 440) -; ) -; :method-count-assert 76 -; :size-assert #x1bc -; :heap-base #x150 -; :flag-assert #x4c015001bc -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype kermit (nav-enemy) + ((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) + (tongue-pulse-pos float :offset-assert 428) + (miss-count int8 :offset-assert 432) + (charged-up symbol :offset-assert 436) + (sound-id sound-id :offset-assert 440) + ) + :method-count-assert 76 + :size-assert #x1bc + :heap-base #x150 + :flag-assert #x4c015001bc + ) ;; - Functions @@ -34602,17 +33784,17 @@ (define-extern *kermit-sg* skeleton-group) (define-extern *kermit-nav-enemy-info* nav-enemy-info) -;;(define-extern kermit-idle object) ;; unknown type -;;(define-extern kermit-chase object) ;; unknown type -;;(define-extern kermit-retract-tongue object) ;; unknown type -;;(define-extern kermit-tongue-stuck object) ;; unknown type -;;(define-extern kermit-patrol object) ;; unknown type -;;(define-extern kermit-attack object) ;; unknown type -;;(define-extern kermit-chase-new-position object) ;; unknown type -;;(define-extern kermit-give-up object) ;; unknown type -;;(define-extern kermit-notice object) ;; unknown type -;;(define-extern kermit-pulse-idle object) ;; unknown type -;;(define-extern kermit-pulse-impact object) ;; unknown type +(define-extern kermit-idle (state kermit)) ;; unknown type +(define-extern kermit-chase (state kermit)) ;; unknown type +(define-extern kermit-retract-tongue (state kermit)) ;; unknown type +(define-extern kermit-tongue-stuck (state kermit)) ;; unknown type +(define-extern kermit-patrol (state kermit)) ;; unknown type +(define-extern kermit-attack (state kermit)) ;; unknown type +(define-extern kermit-chase-new-position (state kermit)) ;; unknown type +(define-extern kermit-give-up (state kermit)) ;; unknown type +(define-extern kermit-notice (state kermit)) ;; unknown type +(define-extern kermit-pulse-idle (state kermit-pulse)) ;; unknown type +(define-extern kermit-pulse-impact (state kermit-pulse)) ;; unknown type ;; ---------------------- @@ -34859,46 +34041,46 @@ ;; - Types -; (deftype cavecrystal-light (structure) -; ((next cavecrystal-light :offset-assert 0) -; (crystal-id int32 :offset-assert 4) -; (intensity float :offset-assert 8) -; (fade-start float :offset-assert 12) -; (fade-end float :offset-assert 16) -; (crystal-handle uint64 :offset-assert 24) -; (trans vector :inline :offset-assert 32) -; ) -; :method-count-assert 9 -; :size-assert #x30 -; :flag-assert #x900000030 -; ) +(deftype cavecrystal-light (structure) + ((next cavecrystal-light :offset-assert 0) + (crystal-id int32 :offset-assert 4) + (intensity float :offset-assert 8) + (fade-start float :offset-assert 12) + (fade-end float :offset-assert 16) + (crystal-handle handle :offset-assert 24) + (trans vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) -; (deftype cavecrystal-light-control (basic) -; ((active-count int32 :offset-assert 4) -; (head cavecrystal-light :offset-assert 8) -; (last-known-valid-time uint64 :offset-assert 16) -; (crystal UNKNOWN 7 :offset-assert 32) -; ) -; :method-count-assert 15 -; :size-assert #x170 -; :flag-assert #xf00000170 -; (: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) -; ) -; ) +(deftype cavecrystal-light-control (basic) + ((active-count int32 :offset-assert 4) + (head cavecrystal-light :offset-assert 8) + (last-known-valid-time uint64 :offset-assert 16) + (crystal cavecrystal-light 7 :inline :offset-assert 32) + ) + :method-count-assert 15 + :size-assert #x170 + :flag-assert #xf00000170 + (:methods + (TODO-RENAME-9 (_type_ int float cavecrystal) object 9) + (TODO-RENAME-10 (_type_ vector) float 10) + (inc-intensites! (_type_) int 11) + (TODO-RENAME-12 (_type_) symbol 12) + (create-connection! (_type_ cavecrystal res-lump (function object object object object object) object object) connection 13) + (execute-connections (_type_) int 14) + ) + ) ;; - Functions -(define-extern cavecrystal-light-control-default-callback function) +(define-extern cavecrystal-light-control-default-callback (function (pointer process-drawable) int float none)) ;; - Unknowns -;;(define-extern *cavecrystal-engine* object) ;; unknown type +(define-extern *cavecrystal-engine* engine) ;; unknown type ;; ---------------------- @@ -35222,39 +34404,25 @@ ;; - Types -; (deftype spiderwebs (process-drawable) -; ((spring-height meters :offset-assert 176) -; ) -; :method-count-assert 20 -; :size-assert #xb4 -; :heap-base #x50 -; :flag-assert #x14005000b4 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype spiderwebs (process-drawable) + ((spring-height meters :offset-assert 176) + ) + :method-count-assert 20 + :size-assert #xb4 + :heap-base #x50 + :flag-assert #x14005000b4 + ) ;; - Functions -(define-extern spiderwebs-default-event-handler function) +(define-extern spiderwebs-default-event-handler (function process int symbol event-message-block object :behavior spiderwebs)) ;; - Unknowns (define-extern *spiderwebs-sg* skeleton-group) -;;(define-extern spiderwebs-idle object) ;; unknown type -;;(define-extern *spider-jump-mods* object) ;; unknown type -;;(define-extern spiderwebs-bounce object) ;; unknown type +(define-extern spiderwebs-idle (state spiderwebs)) ;; unknown type +(define-extern *spider-jump-mods* surface) ;; unknown type +(define-extern spiderwebs-bounce (state spiderwebs)) ;; unknown type ;; ---------------------- @@ -35265,47 +34433,35 @@ ;; - Types -; (deftype dark-crystal (process-drawable) -; ((crystal-num int32 :offset-assert 176) -; (underwater? basic :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) -; ) -; :method-count-assert 22 -; :size-assert #x100 -; :heap-base #x90 -; :flag-assert #x1600900100 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype dark-crystal (process-drawable) + ((crystal-num int32 :offset-assert 176) + (underwater? basic :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) + ) + :method-count-assert 22 + :size-assert #x100 + :heap-base #x90 + :flag-assert #x1600900100 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + ) + ) ;; - Unknowns (define-extern *dark-crystal-sg* skeleton-group) -;;(define-extern dark-crystal-spawn-fuel-cell object) ;; unknown type -;;(define-extern dark-crystal-idle object) ;; unknown type +(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-sg* skeleton-group) -;;(define-extern *dark-crystal-exploder-params* object) ;; unknown type -;;(define-extern *dark-crystal-flash-delays* object) ;; unknown type -;;(define-extern dark-crystal-explode object) ;; unknown type -;;(define-extern dark-crystal-activate object) ;; unknown type +(define-extern *dark-crystal-exploder-params* joint-exploder-static-params) ;; unknown type +(define-extern *dark-crystal-flash-delays* (array int32)) ;; unknown type +(define-extern dark-crystal-explode (state dark-crystal)) ;; unknown type +(define-extern dark-crystal-activate (state dark-crystal)) ;; unknown type ;; ---------------------- @@ -35316,131 +34472,62 @@ ;; - Types -; (deftype baby-spider-spawn-params (structure) -; ((hatched? basic :offset-assert 0) -; (fast-start? basic :offset-assert 4) -; (hack-move-above-ground? basic :offset-assert 8) -; (die-if-not-visible? basic :offset-assert 12) -; (pickup int32 :offset-assert 16) -; (pickup-amount int32 :offset-assert 20) -; (event-death basic :offset-assert 24) -; (delay-before-dying-if-not-visible uint64 :offset-assert 32) -; ) -; :method-count-assert 11 -; :size-assert #x28 -; :flag-assert #xb00000028 -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; ) -; ) +(deftype baby-spider-spawn-params (structure) + ((hatched? symbol :offset-assert 0) + (fast-start? symbol :offset-assert 4) + (hack-move-above-ground? symbol :offset-assert 8) + (die-if-not-visible? symbol :offset-assert 12) + (pickup int32 :offset-assert 16) + (pickup-amount int32 :offset-assert 20) + (event-death symbol :offset-assert 24) + (delay-before-dying-if-not-visible uint64 :offset-assert 32) + ) + :method-count-assert 11 + :size-assert #x28 + :flag-assert #xb00000028 + (:methods + (init! (_type_ symbol symbol symbol symbol int int symbol) int 9) + (set-delay! (_type_ uint) uint 10) + ) + ) -; (deftype baby-spider (nav-enemy) -; ((die-if-not-visible? basic :offset-assert 400) -; (hack-move-above-ground? basic :offset-assert 404) -; (state-float float :offset-assert 408) -; (wiggle-angle float :offset-assert 412) -; (delta-wiggle-angle float :offset-assert 416) -; (wiggle-factor float :offset-assert 420) -; (event-death basic :offset-assert 424) -; (delay-before-dying-if-not-visible uint64 :offset-assert 432) -; (chase-rest-time uint64 :offset-assert 440) -; (target-nav-time uint64 :offset-assert 448) -; (free-time uint64 :offset-assert 360) -; (wiggle-time uint64 :offset-assert 464) -; (last-visible-time uint64 :offset-assert 472) -; (up-vector vector :inline :offset-assert 480) -; (state-vector vector :inline :offset-assert 496) -; ) -; :method-count-assert 76 -; :size-assert #x200 -; :heap-base #x190 -; :flag-assert #x4c01900200 -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype baby-spider (nav-enemy) + ((die-if-not-visible? symbol :offset-assert 400) + (hack-move-above-ground? symbol :offset-assert 404) + (state-float float :offset-assert 408) + (wiggle-angle float :offset-assert 412) + (delta-wiggle-angle float :offset-assert 416) + (wiggle-factor float :offset-assert 420) + (event-death symbol :offset-assert 424) + (delay-before-dying-if-not-visible uint64 :offset-assert 432) + (chase-rest-time uint64 :offset-assert 440) + (target-nav-time uint64 :offset-assert 448) + (unknown00 basic :offset-assert 456) + (unknown01 basic :offset-assert 460) + (wiggle-time uint64 :offset-assert 464) + (last-visible-time uint64 :offset-assert 472) + (up-vector vector :inline :offset-assert 480) + (state-vector vector :inline :offset-assert 496) + ) + :method-count-assert 76 + :size-assert #x200 + :heap-base #x190 + :flag-assert #x4c01900200 + ) ;; - Functions -(define-extern baby-spider-default-event-handler function) -(define-extern baby-spider-init-by-other function) +(define-extern baby-spider-default-event-handler (function process int symbol event-message-block object :behavior baby-spider)) +(define-extern baby-spider-init-by-other (function baby-spider vector vector baby-spider-spawn-params none :behavior baby-spider)) ;; - Unknowns -;;(define-extern baby-spider-hatching object) ;; unknown type -;;(define-extern baby-spider-resume object) ;; unknown type +(define-extern baby-spider-hatching (state baby-spider)) ;; unknown type +(define-extern baby-spider-resume (state baby-spider)) ;; unknown type (define-extern *baby-spider-sg* skeleton-group) -;;(define-extern *baby-spider-nav-enemy-info-for-cave-trap* object) ;; unknown type +(define-extern *baby-spider-nav-enemy-info-for-cave-trap* nav-enemy-info) ;; unknown type (define-extern *baby-spider-nav-enemy-info* nav-enemy-info) -;;(define-extern baby-spider-die-fast object) ;; unknown type +(define-extern baby-spider-die-fast (state baby-spider)) ;; unknown type ;; ---------------------- @@ -35451,145 +34538,117 @@ ;; - Types -; (deftype mother-spider-leg (process-drawable) -; ((gravity float :offset-assert 176) -; (transv vector :inline :offset-assert 192) -; (facing-rot vector :inline :offset-assert 208) -; (facing-rotv vector :inline :offset-assert 224) -; ) -; :method-count-assert 20 -; :size-assert #xf0 -; :heap-base #x80 -; :flag-assert #x14008000f0 -; ;; 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 mother-spider-leg (process-drawable) + ((gravity float :offset-assert 176) + (transv vector :inline :offset-assert 192) + (facing-rot vector :inline :offset-assert 208) + (facing-rotv vector :inline :offset-assert 224) + ) + :method-count-assert 20 + :size-assert #xf0 + :heap-base #x80 + :flag-assert #x14008000f0 + ) -; (deftype mother-spider-thread (structure) -; ((joint-index int32 :offset-assert 0) -; (trans-u float :offset-assert 4) -; (swing-arc-u float :offset-assert 8) -; ) -; :method-count-assert 9 -; :size-assert #xc -; :flag-assert #x90000000c -; ) +(deftype mother-spider-thread (structure) + ((joint-index int32 :offset-assert 0) + (trans-u float :offset-assert 4) + (swing-arc-u float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) -; (deftype mother-spider-leg-info (structure) -; ((joint-index0 int32 :offset-assert 0) -; (joint-index1 int32 :offset-assert 4) -; (cprim-index int32 :offset-assert 8) -; ) -; :method-count-assert 9 -; :size-assert #xc -; :flag-assert #x90000000c -; ) +(deftype mother-spider-leg-info (structure) + ((joint-index0 int32 :offset-assert 0) + (joint-index1 int32 :offset-assert 4) + (cprim-index int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) -; (deftype mother-spider-history (structure) -; ((trans vector :inline :offset-assert 0) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype mother-spider-history (structure) + ((trans vector :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) -; (deftype mother-spider-history-array (inline-array-class) -; ((length int32 :offset-assert 4) -; (allocated-length int32 :offset-assert 8) -; (data UNKNOWN :dynamic :offset-assert 16) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype mother-spider-history-array (inline-array-class) + ((data mother-spider-history :dynamic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) -; (deftype mother-spider (process-drawable) -; ((mode uint64 :offset-assert 176) -; (damage int32 :offset-assert 184) -; (baby-count int32 :offset-assert 188) -; (max-baby-count int32 :offset-assert 192) -; (birthing-counter int32 :offset-assert 196) -; (spit-counter int32 :offset-assert 200) -; (leg-socket-part-mask int32 :offset-assert 204) -; (dist-from-anchor float :offset-assert 208) -; (targ-dist-from-anchor float :offset-assert 212) -; (idle-dist-from-anchor float :offset-assert 216) -; (player-sticky-dist-from-anchor float :offset-assert 220) -; (max-dist-from-anchor float :offset-assert 224) -; (activate-xz-dist float :offset-assert 228) -; (deactivate-xz-dist float :offset-assert 232) -; (max-spit-xz-dist float :offset-assert 236) -; (max-swing-radius float :offset-assert 240) -; (spin-vel float :offset-assert 244) -; (thread-speed float :offset-assert 248) -; (thread-vel float :offset-assert 252) -; (history basic :offset-assert 256) -; (history-len int32 :offset-assert 260) -; (history-next-index int32 :offset-assert 264) -; (hit? basic :offset-assert 268) -; (going-up? basic :offset-assert 272) -; (check-z-thresh? basic :offset-assert 276) -; (activate-z-thresh float :offset-assert 280) -; (deactivate-z-thresh float :offset-assert 284) -; (spawned-time uint64 :offset-assert 288) -; (last-update-time uint64 :offset-assert 296) -; (spin-time uint64 :offset-assert 304) -; (last-spit-time uint64 :offset-assert 312) -; (last-player-in-air-time uint64 :offset-assert 320) -; (started-birthing-time uint64 :offset-assert 328) -; (neck basic :offset-assert 336) -; (player-attack-id uint64 :offset-assert 344) -; (leg-socket-part-time UNKNOWN 6 :offset-assert 352) -; (orient-rot vector :inline :offset-assert 400) -; (anchor-trans vector :inline :offset-assert 416) -; (thread-min-trans vector :inline :offset-assert 432) -; (swing-pos vector :inline :offset-assert 448) -; (swing-base-pos vector :inline :offset-assert 464) -; (swing-vel vector :inline :offset-assert 480) -; ) -; :method-count-assert 32 -; :size-assert #x1f0 -; :heap-base #x180 -; :flag-assert #x20018001f0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; ) -; ) +(deftype mother-spider (process-drawable) + ((mode uint64 :offset-assert 176) + (damage int32 :offset-assert 184) + (baby-count int32 :offset-assert 188) + (max-baby-count int32 :offset-assert 192) + (birthing-counter int32 :offset-assert 196) + (spit-counter int32 :offset-assert 200) + (leg-socket-part-mask int32 :offset-assert 204) + (dist-from-anchor float :offset-assert 208) + (targ-dist-from-anchor float :offset-assert 212) + (idle-dist-from-anchor float :offset-assert 216) + (player-sticky-dist-from-anchor float :offset-assert 220) + (max-dist-from-anchor float :offset-assert 224) + (activate-xz-dist float :offset-assert 228) + (deactivate-xz-dist float :offset-assert 232) + (max-spit-xz-dist float :offset-assert 236) + (max-swing-radius float :offset-assert 240) + (spin-vel float :offset-assert 244) + (thread-speed float :offset-assert 248) + (thread-vel float :offset-assert 252) + (history mother-spider-history-array :offset-assert 256) + (history-len int32 :offset-assert 260) + (history-next-index int32 :offset-assert 264) + (hit? symbol :offset-assert 268) + (going-up? symbol :offset-assert 272) + (check-z-thresh? symbol :offset-assert 276) + (activate-z-thresh float :offset-assert 280) + (deactivate-z-thresh float :offset-assert 284) + (spawned-time uint64 :offset-assert 288) + (last-update-time uint64 :offset-assert 296) + (spin-time uint64 :offset-assert 304) + (last-spit-time uint64 :offset-assert 312) + (last-player-in-air-time uint64 :offset-assert 320) + (started-birthing-time uint64 :offset-assert 328) + (neck joint-mod :offset-assert 336) + (player-attack-id uint64 :offset-assert 344) + (leg-socket-part-time uint64 6 :offset-assert 352) + (orient-rot vector :inline :offset-assert 400) + (anchor-trans vector :inline :offset-assert 416) + (thread-min-trans vector :inline :offset-assert 432) + (swing-pos vector :inline :offset-assert 448) + (swing-base-pos vector :inline :offset-assert 464) + (swing-vel vector :inline :offset-assert 480) + ) + :method-count-assert 32 + :size-assert #x1f0 + :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) + ) + ) ;; ---------------------- @@ -35600,37 +34659,25 @@ ;; - Types -; (deftype mother-spider-egg (process-drawable) -; ((anim-speed float :offset-assert 176) -; (part2 basic :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) -; ) -; :method-count-assert 22 -; :size-assert #x150 -; :heap-base #xe0 -; :flag-assert #x1600e00150 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype mother-spider-egg (process-drawable) + ((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) + ) + :method-count-assert 22 + :size-assert #x150 + :heap-base #xe0 + :flag-assert #x1600e00150 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + ) + ) ;; - Functions @@ -35640,12 +34687,12 @@ (define-extern *mother-spider-egg-unbroken-sg* skeleton-group) (define-extern *mother-spider-egg-broken-sg* skeleton-group) -;;(define-extern mother-spider-egg-falling object) ;; unknown type -;;(define-extern mother-spider-egg-die-exit object) ;; unknown type -;;(define-extern mother-spider-egg-hatch object) ;; unknown type -;;(define-extern mother-spider-egg-die object) ;; unknown type -;;(define-extern mother-spider-egg-on-ground object) ;; unknown type -;;(define-extern mother-spider-egg-die-while-falling object) ;; unknown type +(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 ;; ---------------------- @@ -35657,7 +34704,8 @@ ;; - Types (deftype mother-spider-proj (projectile) - ((facing-dir vector :inline :offset-assert 416) + ((parent-process (pointer projectile) :score 100 :offset 12) + (facing-dir vector :inline :offset-assert 416) ) :method-count-assert 29 :heap-base #x140 @@ -35668,7 +34716,7 @@ ;; - Functions -(define-extern mother-spider-proj-update-velocity function) +(define-extern mother-spider-proj-update-velocity (function mother-spider-proj none)) ;; ---------------------- @@ -35714,119 +34762,95 @@ ;; - Types -; (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) -; ) -; :method-count-assert 21 -; :size-assert #xe0 -; :heap-base #x70 -; :flag-assert #x15007000e0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; ) -; ) +(deftype 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) + ) + :method-count-assert 21 + :size-assert #xe0 + :heap-base #x70 + :flag-assert #x15007000e0 + (:methods + (falling () _type_ :state 20) + ) + ) -; (deftype gnawer-segment-info (structure) -; ((num-joints int32 :offset-assert 0) -; (joint-index UNKNOWN 8 :offset-assert 4) -; ) -; :method-count-assert 9 -; :size-assert #xc -; :flag-assert #x90000000c -; ) +(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-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-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) -; ((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) -; (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) -; (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 UNKNOWN 10 :offset-assert 368) -; ) -; :method-count-assert 31 -; :size-assert #x5d0 -; :heap-base #x560 -; :flag-assert #x1f056005d0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; ) -; ) +(deftype gnawer (process-drawable) + ((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) + (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) + (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) + ) + :method-count-assert 31 + :size-assert #x5d0 + :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) + ) + ) ;; - Functions @@ -35836,15 +34860,15 @@ ;; - Unknowns (define-extern *gnawer-sg* skeleton-group) -;;(define-extern gnawer-put-items-at-dest object) ;; unknown type -;;(define-extern gnawer-chewing-on-post object) ;; unknown type -;;(define-extern *gnawer-segment-infos* object) ;; unknown type -;;(define-extern gnawer-give-fuel-cell object) ;; unknown type -;;(define-extern gnawer-dying-give-pickups object) ;; unknown type -;;(define-extern gnawer-wait-to-run object) ;; unknown type -;;(define-extern gnawer-die object) ;; unknown type -;;(define-extern gnawer-run object) ;; unknown type -;;(define-extern gnawer-retreat-into-post object) ;; unknown type +(define-extern gnawer-put-items-at-dest (state gnawer)) ;; unknown type +(define-extern gnawer-chewing-on-post (state gnawer)) ;; unknown type +(define-extern *gnawer-segment-infos* (inline-array gnawer-segment-info)) ;; 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-segment-sg* skeleton-group) @@ -35856,59 +34880,47 @@ ;; - Types -; (deftype driller-lurker (process-drawable) -; ((hit-player? basic :offset-assert 176) -; (played-drill-sound? basic :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 basic :offset-assert 244) -; (drill basic :offset-assert 248) -; (sound2 basic :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) -; ) -; :method-count-assert 28 -; :size-assert #x128 -; :heap-base #xc0 -; :flag-assert #x1c00c00128 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; ) -; ) +(deftype driller-lurker (process-drawable) + ((hit-player? basic :offset-assert 176) + (played-drill-sound? basic :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 basic :offset-assert 244) + (drill basic :offset-assert 248) + (sound2 basic :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) + ) + :method-count-assert 28 + :size-assert #x128 + :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) + ) + ) ;; - Functions @@ -35917,15 +34929,15 @@ ;; - Unknowns (define-extern *driller-lurker-sg* skeleton-group) -;;(define-extern *driller-lurker-shadow-control* object) ;; unknown type -;;(define-extern driller-lurker-idle-drilling object) ;; unknown type -;;(define-extern driller-lurker-patrol object) ;; unknown type -;;(define-extern driller-lurker-chase object) ;; unknown type -;;(define-extern driller-lurker-jammed-standing object) ;; unknown type -;;(define-extern driller-lurker-attack object) ;; unknown type -;;(define-extern driller-lurker-patrol-pause object) ;; unknown type -;;(define-extern driller-lurker-die object) ;; unknown type -;;(define-extern driller-lurker-debug-play-anims object) ;; unknown type +(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-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 ;; ---------------------- @@ -35989,85 +35001,73 @@ ;; - Types -; (deftype tube-info (basic) -; ((entity basic :offset-assert 4) -; (tube uint64 :offset-assert 8) -; (downhill vector :inline :offset-assert 16) -; (centertube vector :inline :offset-assert 32) -; (downtube vector :inline :offset-assert 48) -; (sidetube vector :inline :offset-assert 64) -; (foretube vector :inline :offset-assert 80) -; (old-transv vector :inline :offset-assert 96) -; (mod-x float :offset-assert 112) -; (mod-y float :offset-assert 116) -; (start-time uint64 :offset-assert 120) -; (turn-anim-targ float :offset-assert 128) -; (turn-anim-frame float :offset-assert 132) -; (turn-anim-vel float :offset-assert 136) -; (tube-sound-id sound-id :offset-assert 140) -; (tube-sound-vol float :offset-assert 144) -; ) -; :method-count-assert 9 -; :size-assert #x94 -; :flag-assert #x900000094 -; ) +(deftype tube-info (basic) + ((entity basic :offset-assert 4) + (tube handle :offset-assert 8) + (downhill vector :inline :offset-assert 16) + (centertube vector :inline :offset-assert 32) + (downtube vector :inline :offset-assert 48) + (sidetube vector :inline :offset-assert 64) + (foretube vector :inline :offset-assert 80) + (old-transv vector :inline :offset-assert 96) + (mod-x float :offset-assert 112) + (mod-y float :offset-assert 116) + (start-time uint64 :offset-assert 120) + (turn-anim-targ float :offset-assert 128) + (turn-anim-frame float :offset-assert 132) + (turn-anim-vel float :offset-assert 136) + (tube-sound-id sound-id :offset-assert 140) + (tube-sound-vol float :offset-assert 144) + ) + :method-count-assert 9 + :size-assert #x94 + :flag-assert #x900000094 + ) -; (deftype tube-bank (basic) -; () -; :method-count-assert 9 -; :size-assert #x4 -; :flag-assert #x900000004 -; ) +(deftype tube-bank (basic) + () + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) -; (deftype slide-control (process-drawable) -; ((target uint64 :offset-assert 176) -; (pos float :offset-assert 184) -; (trans vector :inline :offset-assert 192) -; (rot vector :inline :offset-assert 208) -; (side vector :inline :offset-assert 224) -; ) -; :method-count-assert 22 -; :size-assert #xf0 -; :heap-base #x80 -; :flag-assert #x16008000f0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype slide-control (process-drawable) + ((target uint64 :offset-assert 176) + (pos float :offset-assert 184) + (trans vector :inline :offset-assert 192) + (rot vector :inline :offset-assert 208) + (side vector :inline :offset-assert 224) + ) + :method-count-assert 22 + :size-assert #xf0 + :heap-base #x80 + :flag-assert #x16008000f0 + (:methods + (slide-control-watch () _type_ :state 20) + (slide-control-ride () _type_ :state 21) + ) + ) ;; - Functions (define-extern find-target-point function) (define-extern distance-from-tangent function) -(define-extern target-tube-post function) -(define-extern target-tube-turn-anim function) -(define-extern tube-thrust function) -(define-extern tube-sounds function) +(define-extern target-tube-post (function none :behavior target)) +(define-extern target-tube-turn-anim (function none :behavior target)) +(define-extern tube-thrust (function float float none :behavior target)) +(define-extern tube-sounds (function sound-id :behavior target)) ;; - Unknowns -;;(define-extern target-tube object) ;; unknown type -;;(define-extern target-tube-death object) ;; unknown type -;;(define-extern *tube-jump-mods* object) ;; unknown type -;;(define-extern target-tube-jump object) ;; unknown type -;;(define-extern *tube-mods* object) ;; unknown type -;;(define-extern *tube-surface* object) ;; unknown type -;;(define-extern target-tube-hit object) ;; unknown type -;;(define-extern *tube-hit-mods* object) ;; unknown type -;;(define-extern *TUBE-bank* object) ;; unknown type +(define-extern target-tube (state target)) ;; unknown type +(define-extern target-tube-death (state target)) ;; unknown type +(define-extern *tube-jump-mods* surface) ;; unknown type +(define-extern target-tube-jump (state target)) ;; unknown type +(define-extern *tube-mods* surface) ;; unknown type +(define-extern *tube-surface* surface) ;; unknown type +(define-extern target-tube-hit (state target)) ;; unknown type +(define-extern *tube-hit-mods* surface) ;; unknown type +(define-extern *TUBE-bank* tube-bank) ;; unknown type ;; ---------------------- @@ -36173,38 +35173,14 @@ ; ) ; ) -; (deftype sunkencam (pov-camera) -; ((seq uint64 :offset-assert 224) -; ) -; :method-count-assert 30 -; :size-assert #xe8 -; :heap-base #x80 -; :flag-assert #x1e008000e8 -; ;; inherited inspect of pov-camera -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; ) -; ) +(deftype sunkencam (pov-camera) + ((seq uint64 :offset-assert 224) + ) + :method-count-assert 30 + :size-assert #xe8 + :heap-base #x80 + :flag-assert #x1e008000e8 + ) ; (deftype seaweed (process-drawable) ; ((anim-speed float :offset-assert 176) @@ -36290,9 +35266,9 @@ (water-entity entity-actor :offset-assert 236) (splash-counter int32 :offset-assert 240) (start-splash-time uint64 :offset-assert 248) - (part2 basic :offset-assert 256) ; these arent basics - (part3 basic :offset-assert 260) ; these arent basics - (part4 basic :offset-assert 264) ; these arent basics + (part2 sparticle-launch-control :offset-assert 256) ; these arent basics + (part3 sparticle-launch-control :offset-assert 260) ; these arent basics + (part4 sparticle-launch-control :offset-assert 264) ; these arent basics (up-pos vector :inline :offset-assert 272) (down-pos vector :inline :offset-assert 288) ) @@ -36301,7 +35277,7 @@ :heap-base #xc0 :flag-assert #x1c00c00130 (:methods - (dummy-27 (_type_) none 27) + (TODO-RENAME-27 (_type_ symbol) none 27) ) ) @@ -36393,67 +35369,36 @@ ;; - Types -; (deftype orbit-plat-bottom (process-drawable) -; ((part2 basic :offset-assert 176) -; ) -; :method-count-assert 21 -; :size-assert #xb4 -; :heap-base #x50 -; :flag-assert #x15005000b4 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; ) -; ) +(deftype orbit-plat-bottom (process-drawable) + ((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) + ) + ) -; (deftype orbit-plat (baseplat) -; ((other basic :offset-assert 228) -; (rot-dir float :offset-assert 232) -; (reset-trans vector :inline :offset-assert 240) -; (is-reset? basic :offset-assert 256) -; (reset-length float :offset-assert 260) -; (timeout float :offset-assert 264) -; (plat-status uint64 :offset-assert 272) -; ) -; :method-count-assert 29 -; :size-assert #x118 -; :heap-base #xb0 -; :flag-assert #x1d00b00118 -; ;; inherited inspect of baseplat -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; ) -; ) +(deftype orbit-plat (baseplat) + ((other basic :offset-assert 228) + (rot-dir float :offset-assert 232) + (reset-trans vector :inline :offset-assert 240) + (is-reset? basic :offset-assert 256) + (reset-length float :offset-assert 260) + (timeout float :offset-assert 264) + (plat-status uint64 :offset-assert 272) + ) + :method-count-assert 29 + :size-assert #x118 + :heap-base #xb0 + :flag-assert #x1d00b00118 + (:methods + (dummy-27 () none 27) + (dummy-28 () none 28) + ) + ) ;; - Functions @@ -36464,14 +35409,14 @@ ;; - Unknowns (define-extern *orbit-plat-sg* skeleton-group) -;;(define-extern orbit-plat-wait-for-other object) ;; unknown type -;;(define-extern orbit-plat-idle object) ;; unknown type -;;(define-extern orbit-plat-riding object) ;; unknown type -;;(define-extern orbit-plat-rotating object) ;; unknown type -;;(define-extern orbit-plat-still object) ;; unknown type -;;(define-extern orbit-plat-reset object) ;; unknown type +(define-extern orbit-plat-wait-for-other (state orbit-plat)) ;; unknown type +(define-extern orbit-plat-idle (state orbit-plat)) ;; unknown type +(define-extern orbit-plat-riding (state orbit-plat)) ;; unknown type +(define-extern orbit-plat-rotating (state orbit-plat)) ;; unknown type +(define-extern orbit-plat-still (state orbit-plat)) ;; unknown type +(define-extern orbit-plat-reset (state orbit-plat)) ;; unknown type (define-extern *orbit-plat-bottom-sg* skeleton-group) -;;(define-extern orbit-plat-bottom-idle object) ;; unknown type +(define-extern orbit-plat-bottom-idle (state orbit-plat-bottom)) ;; unknown type ;; ---------------------- @@ -36567,120 +35512,65 @@ ;; - Types -; (deftype qbert-plat-on (process-drawable) -; () -; :method-count-assert 20 -; :size-assert #xb0 -; :heap-base #x40 -; :flag-assert #x14004000b0 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype qbert-plat-on (process-drawable) + () + :method-count-assert 20 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x14004000b0 + ) -; (deftype qbert-plat (rigid-body-platform) -; ((anchor-point vector :inline :offset-assert 736) -; (plat-id int32 :offset-assert 752) -; (on? basic :offset-assert 756) -; (player-is-riding? basic :offset-assert 760) -; (master basic :offset-assert 764) -; ) -; :method-count-assert 35 -; :size-assert #x300 -; :heap-base #x290 -; :flag-assert #x2302900300 -; ;; inherited inspect of rigid-body-platform -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; ) -; ) +(deftype qbert-plat (rigid-body-platform) + ((anchor-point vector :inline :offset-assert 736) + (plat-id int32 :offset-assert 752) + (on? symbol :offset-assert 756) + (player-is-riding? symbol :offset-assert 760) + (master entity-actor :offset-assert 764) ;; qbert-plat-master + ) + :method-count-assert 35 + :size-assert #x300 + :heap-base #x290 + :flag-assert #x2302900300 + ) -; (deftype qbert-plat-master (process-drawable) -; ((last-plat-triggered int32 :offset-assert 176) -; (plat-states uint32 :offset-assert 180) -; (plat-states-needed-to-open-door uint32 :offset-assert 184) -; (player-in-bounds? basic :offset-assert 188) -; (player-in-water? basic :offset-assert 192) -; (play-door-cam? basic :offset-assert 196) -; (puzzle-beaten? basic :offset-assert 200) -; (door basic :offset-assert 204) -; (door-plat basic :offset-assert 208) -; (bounds-start vector :inline :offset-assert 224) -; (bounds-end vector :inline :offset-assert 240) -; ) -; :method-count-assert 21 -; :size-assert #x100 -; :heap-base #x90 -; :flag-assert #x1500900100 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; ) -; ) +(deftype qbert-plat-master (process-drawable) + ((last-plat-triggered int32 :offset-assert 176) + (plat-states uint32 :offset-assert 180) + (plat-states-needed-to-open-door uint32 :offset-assert 184) + (player-in-bounds? symbol :offset-assert 188) + (player-in-water? symbol :offset-assert 192) + (play-door-cam? symbol :offset-assert 196) + (puzzle-beaten? symbol :offset-assert 200) + (door entity-actor :offset-assert 204) ;; sun-iris-door + (door-plat entity-actor :offset-assert 208) ;; wall-plat + (bounds-start vector :inline :offset-assert 224) + (bounds-end vector :inline :offset-assert 240) + ) + :method-count-assert 21 + :size-assert #x100 + :heap-base #x90 + :flag-assert #x1500900100 + (:methods + (plat-state-set? (_type_ uint) symbol 20) + ) + ) ;; - Functions -(define-extern qbert-plat-on-init-by-other function) -(define-extern qbert-plat-event-handler function) +(define-extern qbert-plat-on-init-by-other (function entity qbert-plat none :behavior qbert-plat)) +(define-extern qbert-plat-event-handler (function process int symbol event-message-block object :behavior qbert-plat)) ;; - Unknowns -;;(define-extern qbert-plat-master-wait-for-door object) ;; unknown type -;;(define-extern qbert-plat-master-idle object) ;; unknown type -;;(define-extern qbert-plat-master-do-door object) ;; unknown type -;;(define-extern qbert-plat-wait-for-master object) ;; unknown type +(define-extern qbert-plat-master-wait-for-door (state qbert-plat-master)) ;; unknown type +(define-extern qbert-plat-master-idle (state qbert-plat-master)) ;; unknown type +(define-extern qbert-plat-master-do-door (state symbol qbert-plat-master)) ;; unknown type +(define-extern qbert-plat-wait-for-master (state qbert-plat)) ;; unknown type (define-extern *qbert-plat-sg* skeleton-group) -;;(define-extern *qbert-plat-constants* object) ;; unknown type +(define-extern *qbert-plat-constants* rigid-body-platform-constants) ;; unknown type (define-extern *qbert-plat-on-sg* skeleton-group) -;;(define-extern qbert-plat-on-mimic object) ;; unknown type -;;(define-extern qbert-plat-on-die object) ;; unknown type +(define-extern qbert-plat-on-mimic (state qbert-plat)) ;; unknown type +(define-extern qbert-plat-on-die (state qbert-plat)) ;; unknown type ;; ---------------------- @@ -36749,165 +35639,108 @@ ;; - Types -; (deftype blue-eco-charger-orb (process-drawable) -; ((orbit-rot vector :inline :offset-assert 176) -; (orbit-rotv vector :inline :offset-assert 192) -; (targ-orbit-rotv vector :inline :offset-assert 208) -; (rest-pos vector :inline :offset-assert 224) -; ) -; :method-count-assert 21 -; :size-assert #xf0 -; :heap-base #x80 -; :flag-assert #x15008000f0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; ) -; ) +(declare-type blue-eco-charger process-drawable) +(deftype blue-eco-charger-orb (process-drawable) + ((parent-process (pointer blue-eco-charger) :score 100 :offset 12) + (orbit-rot vector :inline :offset-assert 176) + (orbit-rotv vector :inline :offset-assert 192) + (targ-orbit-rotv vector :inline :offset-assert 208) + (rest-pos vector :inline :offset-assert 224) + ) + :method-count-assert 21 + :size-assert #xf0 + :heap-base #x80 + :flag-assert #x15008000f0 + (:methods + (dummy-20 (_type_ float) vector 20) + ) + ) -; (deftype blue-eco-charger (process-drawable) -; ((charger-id int32 :offset-assert 176) -; (open-level float :offset-assert 180) -; (master basic :offset-assert 184) -; ) -; :method-count-assert 22 -; :size-assert #xbc -; :heap-base #x50 -; :flag-assert #x16005000bc -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype blue-eco-charger (process-drawable) + ((root-override collide-shape :score 100 :offset 112) + (charger-id int32 :offset-assert 176) + (open-level float :offset-assert 180) + (master entity-actor :offset-assert 184) + ) + :method-count-assert 22 + :size-assert #xbc + :heap-base #x50 + :flag-assert #x16005000bc + (:methods + (dummy-20 (_type_) object 20) + (dummy-21 (_type_ symbol) object 21) + ) + ) -; (deftype exit-chamber-items (structure) -; ((door-pos vector :inline :offset-assert 0) -; (door-quat quaternion :inline :offset-assert 16) -; (button-pos vector :inline :offset-assert 32) -; (button-quat quaternion :inline :offset-assert 48) -; (fcell-pos vector :inline :offset-assert 64) -; ) -; :method-count-assert 9 -; :size-assert #x50 -; :flag-assert #x900000050 -; ) +(deftype exit-chamber-items (structure) + ((door-pos vector :inline :offset-assert 0) + (door-quat quaternion :inline :offset-assert 16) + (button-pos vector :inline :offset-assert 32) + (button-quat quaternion :inline :offset-assert 48) + (fcell-pos vector :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) -; (deftype exit-chamber (process-drawable) -; ((chargers-active uint32 :offset-assert 176) -; (move-player? basic :offset-assert 180) -; (move-fcell? basic :offset-assert 184) -; (play-assistant-message? basic :offset-assert 188) -; (wave-scale float :offset-assert 192) -; (button uint32 :offset-assert 196) -; (door uint32 :offset-assert 200) -; (fcell-handle uint64 :offset-assert 208) -; (orig-trans vector :inline :offset-assert 224) -; (last-pos vector :inline :offset-assert 240) -; ) -; :method-count-assert 25 -; :size-assert #x100 -; :heap-base #x90 -; :flag-assert #x1900900100 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; ) -; ) +(declare-type exit-chamber-button basebutton) +(deftype exit-chamber (process-drawable) + ((root-override collide-shape-moving :score 100 :offset 112) + (chargers-active uint32 :offset-assert 176) + (move-player? symbol :offset-assert 180) + (move-fcell? symbol :offset-assert 184) + (play-assistant-message? symbol :offset-assert 188) + (wave-scale float :offset-assert 192) + (button (pointer exit-chamber-button) :offset-assert 196) + (door (pointer sun-iris-door) :offset-assert 200) + (fcell-handle handle :offset-assert 208) + (orig-trans vector :inline :offset-assert 224) + (last-pos vector :inline :offset-assert 240) + ) + :method-count-assert 25 + :size-assert #x100 + :heap-base #x90 + :flag-assert #x1900900100 + (:methods + (dummy-20 (_type_ float) float 20) + (dummy-21 (_type_ exit-chamber-items) vector 21) + (dummy-22 (_type_) none 22) + (dummy-23 (_type_ symbol) object 23) + (dummy-24 (_type_ float) none 24) + ) + ) -; (deftype exit-chamber-button (basebutton) -; () -; :method-count-assert 32 -; :size-assert #x100 -; :heap-base #x90 -; :flag-assert #x2000900100 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; ) -; ) +(deftype exit-chamber-button (basebutton) + () + :method-count-assert 32 + :size-assert #x100 + :heap-base #x90 + :flag-assert #x2000900100 + ) ;; - Functions -(define-extern exit-chamber-button-init-by-other function) -(define-extern blue-eco-charger-orb-init-by-other function) +(define-extern exit-chamber-button-init-by-other (function vector quaternion entity-actor symbol none :behavior exit-chamber-button)) +(define-extern blue-eco-charger-orb-init-by-other (function entity blue-eco-charger-orb none :behavior blue-eco-charger-orb)) ;; - Unknowns (define-extern *exit-chamber-sg* skeleton-group) -;;(define-extern exit-chamber-charger-puzzle object) ;; unknown type -;;(define-extern exit-chamber-idle-in-sunken object) ;; unknown type -;;(define-extern exit-chamber-idle-in-village object) ;; unknown type -;;(define-extern exit-chamber-lower object) ;; unknown type -;;(define-extern exit-chamber-rise object) ;; unknown type -;;(define-extern exit-chamber-charger-puzzle-beaten object) ;; unknown type +(define-extern exit-chamber-charger-puzzle (state exit-chamber)) ;; unknown type +(define-extern exit-chamber-idle-in-sunken (state exit-chamber)) ;; unknown type +(define-extern exit-chamber-idle-in-village (state exit-chamber)) ;; unknown type +(define-extern exit-chamber-lower (state exit-chamber)) ;; unknown type +(define-extern exit-chamber-rise (state exit-chamber)) ;; unknown type +(define-extern exit-chamber-charger-puzzle-beaten (state exit-chamber)) ;; unknown type (define-extern *blue-eco-charger-sg* skeleton-group) -;;(define-extern blue-eco-charger-idle object) ;; unknown type -;;(define-extern blue-eco-charger-open object) ;; unknown type -;;(define-extern blue-eco-charger-close object) ;; unknown type -;;(define-extern blue-eco-charger-stuck-open object) ;; unknown type +(define-extern blue-eco-charger-idle (state blue-eco-charger)) ;; unknown type +(define-extern blue-eco-charger-open (state symbol blue-eco-charger)) ;; unknown type +(define-extern blue-eco-charger-close (state blue-eco-charger)) ;; unknown type +(define-extern blue-eco-charger-stuck-open (state blue-eco-charger)) ;; unknown type (define-extern *blue-eco-charger-orb-sg* skeleton-group) -;;(define-extern blue-eco-charger-orb-idle object) ;; unknown type -;;(define-extern blue-eco-charger-orb-active object) ;; unknown type +(define-extern blue-eco-charger-orb-idle (state blue-eco-charger-orb)) ;; unknown type +(define-extern blue-eco-charger-orb-active (state blue-eco-charger-orb)) ;; unknown type ;; ---------------------- @@ -36965,51 +35798,29 @@ ;; - Types -; (deftype sunken-water (water-anim) -; ((use-sync? basic :offset-assert 220) -; (playing-deadly-sound? basic :offset-assert 224) -; (deadly-time float :offset-assert 228) -; (deadly-fade float :offset-assert 232) -; (sync sync-info :inline :offset-assert 236) -; (safe-color-mult vector :inline :offset-assert 256) -; (safe-color-emissive vector :inline :offset-assert 272) -; (deadly-color-mult vector :inline :offset-assert 288) -; (deadly-color-emissive vector :inline :offset-assert 304) -; ) -; :method-count-assert 31 -; :size-assert #x140 -; :heap-base #xd0 -; :flag-assert #x1f00d00140 -; ;; inherited inspect of water-anim -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; ) -; ) +(deftype sunken-water (water-anim) + ((use-sync? symbol :offset-assert 220) + (playing-deadly-sound? symbol :offset-assert 224) + (deadly-time float :offset-assert 228) + (deadly-fade float :offset-assert 232) + (sync sync-info :inline :offset-assert 236) + (safe-color-mult vector :inline :offset-assert 256) + (safe-color-emissive vector :inline :offset-assert 272) + (deadly-color-mult vector :inline :offset-assert 288) + (deadly-color-emissive vector :inline :offset-assert 304) + ) + :method-count-assert 31 + :size-assert #x140 + :heap-base #xd0 + :flag-assert #x1f00d00140 + (:methods + (draw-ripple (_type_) symbol 30) + ) + ) ;; - Unknowns -;;(define-extern ripple-for-sunken-water object) ;; unknown type +(define-extern ripple-for-sunken-water ripple-wave-set) ;; unknown type ;; ---------------------- @@ -37681,57 +36492,45 @@ ;; - Types -; (deftype sunkenfisha (process-drawable) -; ((path-u float :offset-assert 176) -; (path-speed float :offset-assert 180) -; (path-speed-seek-speed float :offset-assert 184) -; (targ-path-speed float :offset-assert 188) -; (path-normal-speed-lo float :offset-assert 192) -; (path-normal-speed-hi float :offset-assert 196) -; (path-dir float :offset-assert 200) -; (change-path-dir-time uint64 :offset-assert 208) -; (local-path-offset vector :inline :offset-assert 224) -; (targ-local-path-offset vector :inline :offset-assert 240) -; (local-path-offset-dir vector :inline :offset-assert 256) -; (max-local-path-offset vector :inline :offset-assert 272) -; (facing-rot vector :inline :offset-assert 288) -; (path-trans-offset vector :inline :offset-assert 304) -; ) -; :method-count-assert 28 -; :size-assert #x140 -; :heap-base #xd0 -; :flag-assert #x1c00d00140 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; ) -; ) +(deftype sunkenfisha (process-drawable) + ((path-u float :offset-assert 176) + (path-speed float :offset-assert 180) + (path-speed-seek-speed float :offset-assert 184) + (targ-path-speed float :offset-assert 188) + (path-normal-speed-lo float :offset-assert 192) + (path-normal-speed-hi float :offset-assert 196) + (path-dir float :offset-assert 200) + (change-path-dir-time uint64 :offset-assert 208) + (local-path-offset vector :inline :offset-assert 224) + (targ-local-path-offset vector :inline :offset-assert 240) + (local-path-offset-dir vector :inline :offset-assert 256) + (max-local-path-offset vector :inline :offset-assert 272) + (facing-rot vector :inline :offset-assert 288) + (path-trans-offset vector :inline :offset-assert 304) + ) + :method-count-assert 28 + :size-assert #x140 + :heap-base #xd0 + :flag-assert #x1c00d00140 + (:methods + (TODO-RENAME-20 (_type_) float 20) + (TODO-RENAME-orbit?-21 (_type_ vector float vector) vector 21) + (dummy-22 (_type_) none 22) + (TODO-RENAME-23 (_type_) quaternion 23) + (TODO-RENAME-24 (_type_) vector 24) + (dummy-25 (_type_) none 25) + (TODO-RENAME-26 (_type_) float 26) + (TODO-RENAME-27 (_type_) float 27) + ) + ) ;; - Functions -(define-extern sunkenfisha-init-by-other function) +(define-extern sunkenfisha-init-by-other (function entity none :behavior sunkenfisha)) ;; - Unknowns -;;(define-extern sunkenfisha-idle object) ;; unknown type +(define-extern sunkenfisha-idle (state sunkenfisha)) ;; unknown type (define-extern *sunkenfisha-red-yellow-sg* skeleton-group) (define-extern *sunkenfisha-yellow-blue-sg* skeleton-group) (define-extern *sunkenfisha-yellow-eye-sg* skeleton-group) @@ -39446,31 +38245,18 @@ ;; - Types -; (deftype minecartsteel (process-drawable) -; ((index int32 :offset-assert 176) -; (anim basic :offset-assert 180) -; (sync sync-info :inline :offset-assert 184) -; ) -; :method-count-assert 21 -; :size-assert #xc0 -; :heap-base #x50 -; :flag-assert #x15005000c0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; ) -; ) +(deftype minecartsteel (process-drawable) + ((index int32 :offset-assert 176) + (anim basic :offset-assert 180) + (sync sync-info :inline :offset-assert 184) + ) + :method-count-assert 21 + :size-assert #xc0 + :heap-base #x50 + :flag-assert #x15005000c0 + (:methods + (idle () _type_ :state 20) + )) ;; - Functions @@ -39537,60 +38323,13 @@ ;; - Types -; (deftype assistant-villagec (process-taskable) -; () -; :method-count-assert 53 -; :size-assert #x17c -; :heap-base #x110 -; :flag-assert #x350110017c -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype assistant-villagec (process-taskable) + () + :method-count-assert 53 + :size-assert #x17c + :heap-base #x110 + :flag-assert #x350110017c + ) ;; - Unknowns @@ -39605,63 +38344,16 @@ ;; - Types -; (deftype sage-villagec (process-taskable) -; ((evilbro uint64 :offset-assert 384) -; (evilsis uint64 :offset-assert 392) -; (assistant basic :offset-assert 400) -; ) -; :method-count-assert 53 -; :size-assert #x194 -; :heap-base #x130 -; :flag-assert #x3501300194 -; ;; inherited inspect of process-taskable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype sage-villagec (process-taskable) + ((evilbro handle :offset-assert 384) ; evilbro + (evilsis handle :offset-assert 392) ; evilsis + (assistant entity-actor :offset-assert 400) + ) + :method-count-assert 53 + :size-assert #x194 + :heap-base #x130 + :flag-assert #x3501300194 + ) ;; - Unknowns @@ -39678,84 +38370,59 @@ ;; - Types -; (deftype cave-trap (process-drawable) -; ((spider-count int32 :offset-assert 176) -; (alt-actors basic :offset-assert 180) -; (spawn-delay uint64 :offset-assert 184) -; (last-spawn-time uint64 :offset-assert 192) -; (debug-targ-pos vector :inline :offset-assert 208) -; ) -; :method-count-assert 21 -; :size-assert #xe0 -; :heap-base #x70 -; :flag-assert #x15007000e0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; ) -; ) +(deftype cave-trap (process-drawable) + ((root-override collide-shape :score 100 :offset 112) + (spider-count int32 :offset-assert 176) + (alt-actors (array entity-actor) :offset-assert 180) + (spawn-delay uint64 :offset-assert 184) + (last-spawn-time uint64 :offset-assert 192) + (debug-targ-pos vector :inline :offset-assert 208) + ) + :method-count-assert 21 + :size-assert #xe0 + :heap-base #x70 + :flag-assert #x15007000e0 + (:methods + (TODO-RENAME-20 (_type_) symbol 20) + ) + ) -; (deftype spider-vent (process-drawable) -; ((last-spawn-time uint64 :offset-assert 176) -; ) -; :method-count-assert 20 -; :size-assert #xb8 -; :heap-base #x50 -; :flag-assert #x14005000b8 -; ;; 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 spider-vent (process-drawable) + ((last-spawn-time uint64 :offset-assert 176) + ) + :method-count-assert 20 + :size-assert #xb8 + :heap-base #x50 + :flag-assert #x14005000b8 + ) -; (deftype spawn-baby-spider-best (structure) -; ((index int32 :offset-assert 0) -; (dist float :offset-assert 4) -; ) -; :method-count-assert 9 -; :size-assert #x8 -; :flag-assert #x900000008 -; ) +(deftype spawn-baby-spider-best (structure) + ((index int32 :offset-assert 0) + (dist float :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) -; (deftype spawn-baby-spider-work (structure) -; ((best UNKNOWN 4 :offset-assert 0) -; ) -; :method-count-assert 9 -; :size-assert #x40 -; :flag-assert #x900000040 -; ) +(deftype spawn-baby-spider-work (structure) + ((best spawn-baby-spider-best 4 :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) ;; - Functions -(define-extern cave-trap-default-event-handler function) +(define-extern cave-trap-default-event-handler (function process int symbol event-message-block object :behavior cave-trap)) ;; - Unknowns -;;(define-extern cave-trap-idle object) ;; unknown type -;;(define-extern cave-trap-give-up object) ;; unknown type -;;(define-extern cave-trap-active object) ;; unknown type -;;(define-extern spider-vent-idle object) ;; unknown type +(define-extern cave-trap-idle (state cave-trap)) ;; unknown type +(define-extern cave-trap-give-up (state cave-trap)) ;; unknown type +(define-extern cave-trap-active (state cave-trap)) ;; unknown type +(define-extern spider-vent-idle (state spider-vent)) ;; unknown type ;; ---------------------- @@ -39766,37 +38433,23 @@ ;; - Types -; (deftype spider-egg (process-drawable) -; ((notify-actor basic :offset-assert 176) -; (broken-look lod-set :inline :offset-assert 180) -; ) -; :method-count-assert 20 -; :size-assert #xd5 -; :heap-base #x70 -; :flag-assert #x14007000d5 -; ;; 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 spider-egg (process-drawable) + ((notify-actor basic :offset-assert 176) + (broken-look lod-set :inline :offset-assert 180) + ) + :method-count-assert 20 + :size-assert #xd5 + :heap-base #x70 + :flag-assert #x14007000d5 + ) ;; - Unknowns (define-extern *spider-egg-unbroken-sg* skeleton-group) (define-extern *spider-egg-broken-sg* skeleton-group) -;;(define-extern spider-egg-idle object) ;; unknown type -;;(define-extern spider-egg-hatch object) ;; unknown type -;;(define-extern spider-egg-die object) ;; unknown type +(define-extern spider-egg-idle (state spider-egg)) ;; unknown type +(define-extern spider-egg-hatch (state spider-egg)) ;; unknown type +(define-extern spider-egg-die (state spider-egg)) ;; unknown type ;; ---------------------- @@ -39839,29 +38492,29 @@ ;; - Types -; (deftype snowball-info (basic) -; ((entity basic :offset-assert 4) -; ) -; :method-count-assert 9 -; :size-assert #x8 -; :flag-assert #x900000008 -; ) +(deftype snowball-info (basic) + ((entity basic :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) -; (deftype snowball-bank (basic) -; () -; :method-count-assert 9 -; :size-assert #x4 -; :flag-assert #x900000004 -; ) +(deftype snowball-bank (basic) + () + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) ;; - Functions -(define-extern target-snowball-post function) +(define-extern target-snowball-post (function none :behavior target)) ;; - Unknowns -;;(define-extern target-snowball object) ;; unknown type -;;(define-extern *SNOWBALL-bank* object) ;; unknown type +(define-extern target-snowball (state target)) ;; unknown type +(define-extern *SNOWBALL-bank* snowball-bank) ;; ---------------------- @@ -39881,120 +38534,50 @@ ;; - Types -; (deftype ice-cube (nav-enemy) -; ((part2 basic :offset-assert 400) -; (part3 basic :offset-assert 404) -; (part4 basic :offset-assert 408) -; (track-target? basic :offset-assert 412) -; (slow-down? basic :offset-assert 416) -; (tracking-player? basic :offset-assert 420) -; (force-spawn-pt int32 :offset-assert 424) -; (speed float :offset-assert 428) -; (anim-blend float :offset-assert 432) -; (prev-charge-angle-diff float :offset-assert 436) -; (charge-angle float :offset-assert 440) -; (ground-y float :offset-assert 444) -; (cprims-type uint64 :offset-assert 448) -; (next-skid-sound-time uint64 :offset-assert 456) -; (starting-pos vector :inline :offset-assert 464) -; (target-pt vector :inline :offset-assert 480) -; ) -; :method-count-assert 76 -; :size-assert #x1f0 -; :heap-base #x180 -; :flag-assert #x4c018001f0 -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype ice-cube (nav-enemy) + ((part2 sparticle-launch-control :offset-assert 400) + (part3 sparticle-launch-control :offset-assert 404) + (part4 sparticle-launch-control :offset-assert 408) + (track-target? symbol :offset-assert 412) + (slow-down? symbol :offset-assert 416) + (tracking-player? symbol :offset-assert 420) + (force-spawn-pt int32 :offset-assert 424) + (speed float :offset-assert 428) + (anim-blend float :offset-assert 432) + (prev-charge-angle-diff float :offset-assert 436) + (charge-angle float :offset-assert 440) + (ground-y float :offset-assert 444) + (cprims-type uint64 :offset-assert 448) + (next-skid-sound-time uint64 :offset-assert 456) + (starting-pos vector :inline :offset-assert 464) + (target-pt vector :inline :offset-assert 480) + ) + :method-count-assert 76 + :size-assert #x1f0 + :heap-base #x180 + :flag-assert #x4c018001f0 + ) ;; - Functions -(define-extern ice-cube-default-event-handler function) +(define-extern ice-cube-default-event-handler (function process int symbol event-message-block object :behavior ice-cube)) ;; - Unknowns (define-extern *ice-cube-break-sg* skeleton-group) -;;(define-extern ice-cube-face-player object) ;; unknown type -;;(define-extern ice-cube-tired object) ;; unknown type -;;(define-extern ice-cube-retract-spikes object) ;; unknown type -;;(define-extern ice-cube-mean-charge-done object) ;; unknown type -;;(define-extern ice-cube-mean-turn-to-charge object) ;; unknown type -;;(define-extern ice-cube-become-mean object) ;; unknown type -;;(define-extern ice-cube-appear-land object) ;; unknown type -;;(define-extern ice-cube-appear object) ;; unknown type -;;(define-extern ice-cube-trying-to-appear object) ;; unknown type +(define-extern ice-cube-face-player (state ice-cube)) ;; unknown type +(define-extern ice-cube-tired (state ice-cube)) ;; unknown type +(define-extern ice-cube-retract-spikes (state ice-cube)) ;; unknown type +(define-extern ice-cube-mean-charge-done (state ice-cube)) ;; unknown type +(define-extern ice-cube-mean-turn-to-charge (state ice-cube)) ;; unknown type +(define-extern ice-cube-become-mean (state ice-cube)) ;; unknown type +(define-extern ice-cube-appear-land (state ice-cube)) ;; unknown type +(define-extern ice-cube-appear (state ice-cube)) ;; unknown type +(define-extern ice-cube-trying-to-appear (state ice-cube)) ;; unknown type (define-extern *ice-cube-sg* skeleton-group) (define-extern *ice-cube-nav-enemy-info* nav-enemy-info) -;;(define-extern ice-cube-shatter object) ;; unknown type -;;(define-extern ice-cube-mean-charge object) ;; unknown type +(define-extern ice-cube-shatter (state ice-cube)) ;; unknown type +(define-extern ice-cube-mean-charge (state ice-cube)) ;; unknown type ;; ---------------------- @@ -40005,107 +38588,75 @@ ;; - Types -; (deftype snow-ball-shadow (process-drawable) -; () -; :method-count-assert 20 -; :size-assert #xb0 -; :heap-base #x40 -; :flag-assert #x14004000b0 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype snow-ball-shadow (process-drawable) + () + :method-count-assert 20 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x14004000b0 + ) -; (deftype snow-ball-junction (structure) -; ((enter-time uint64 :offset-assert 0) -; (exit-time uint64 :offset-assert 8) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype snow-ball-junction (structure) + ((enter-time uint64 :offset-assert 0) + (exit-time uint64 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) -; (deftype snow-ball-path-info (structure) -; ((hug-path? basic :offset-assert 0) -; (path-pos vector :inline :offset-assert 16) -; ) -; :method-count-assert 9 -; :size-assert #x20 -; :flag-assert #x900000020 -; ) +(deftype snow-ball-path-info (structure) + ((hug-path? symbol :offset-assert 0) + (path-pos vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) -; (deftype snow-ball-roller (process-drawable) -; ((which-path int32 :offset-assert 176) -; (path-u float :offset-assert 180) -; (path-speed float :offset-assert 184) -; (path-length float :offset-assert 188) -; (path-fall-u float :offset-assert 192) -; (path-coming-out-u float :offset-assert 196) -; (path-faded-up-u float :offset-assert 200) -; (delay-til-bounce int32 :offset-assert 204) -; (rolling-sound-id sound-id :offset-assert 208) -; (rolling-sound-enabled? basic :offset-assert 212) -; (last-bounce-time uint64 :offset-assert 216) -; (hit-player-time uint64 :offset-assert 224) -; (path-info snow-ball-path-info :inline :offset-assert 240) -; (junctions UNKNOWN 4 :offset-assert 272) -; ) -; :method-count-assert 23 -; :size-assert #x150 -; :heap-base #xe0 -; :flag-assert #x1700e00150 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; ) -; ) +(deftype snow-ball-roller (process-drawable) + ((which-path int32 :offset-assert 176) + (path-u float :offset-assert 180) + (path-speed float :offset-assert 184) + (path-length float :offset-assert 188) + (path-fall-u float :offset-assert 192) + (path-coming-out-u float :offset-assert 196) + (path-faded-up-u float :offset-assert 200) + (delay-til-bounce int32 :offset-assert 204) + (rolling-sound-id sound-id :offset-assert 208) + (rolling-sound-enabled? symbol :offset-assert 212) + (last-bounce-time uint64 :offset-assert 216) + (hit-player-time uint64 :offset-assert 224) + (path-info snow-ball-path-info :inline :offset-assert 240) + (junctions snow-ball-junction 4 :inline :offset-assert 272) + ) + :method-count-assert 23 + :size-assert #x150 + :heap-base #xe0 + :flag-assert #x1700e00150 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + (dummy-22 () none 22) + ) + ) -; (deftype snow-ball (process) -; ((state-time uint64 :offset-assert 112) -; (last-path-picked int32 :offset-assert 120) -; (same-path-picked-count int32 :offset-assert 124) -; (delay-til-next int32 :offset-assert 128) -; (path UNKNOWN 2 :offset-assert 132) -; ) -; :method-count-assert 16 -; :size-assert #x8c -; :heap-base #x20 -; :flag-assert #x100020008c -; ;; inherited inspect of process -; (: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) -; ) -; ) +(deftype snow-ball (process) + ((state-time uint64 :offset-assert 112) + (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) + ) + :method-count-assert 16 + :size-assert #x8c + :heap-base #x20 + :flag-assert #x100020008c + (:methods + (dummy-14 () none 14) + (dummy-15 () none 15) + ) + ) ;; - Functions @@ -40116,12 +38667,12 @@ ;; - Unknowns -;;(define-extern snow-ball-idle object) ;; unknown type +(define-extern snow-ball-idle (state snow-ball)) ;; unknown type (define-extern *snow-ball-sg* skeleton-group) -;;(define-extern snow-ball-roller-idle object) ;; unknown type +(define-extern snow-ball-roller-idle (state snow-ball-roller)) ;; unknown type (define-extern *snow-ball-shadow-sg* skeleton-group) -;;(define-extern *snow-ball-shadow-control* object) ;; unknown type -;;(define-extern snow-ball-shadow-idle object) ;; unknown type +(define-extern *snow-ball-shadow-control* shadow-control) ;; unknown type +(define-extern snow-ball-shadow-idle (state snow-ball-shadow)) ;; unknown type ;; ---------------------- @@ -40619,43 +39170,31 @@ ;; - Types -; (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 basic :offset-assert 188) -; (last-shoved-player-time uint64 :offset-assert 192) -; ) -; :method-count-assert 22 -; :size-assert #xc8 -; :heap-base #x60 -; :flag-assert #x16006000c8 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype 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) + ) + :method-count-assert 22 + :size-assert #xc8 + :heap-base #x60 + :flag-assert #x16006000c8 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + ) + ) ;; - Unknowns (define-extern *snow-bumper-sg* skeleton-group) -;;(define-extern snow-bumper-spawn-fuel-cell object) ;; unknown type -;;(define-extern snow-bumper-inactive-idle object) ;; unknown type -;;(define-extern snow-bumper-active-far-idle object) ;; unknown type -;;(define-extern snow-bumper-deactivate object) ;; unknown type -;;(define-extern snow-bumper-active-close-idle object) ;; unknown type +(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 ;; ---------------------- @@ -40666,36 +39205,24 @@ ;; - Types -; (deftype ram (process-drawable) -; ((ram-id int32 :offset-assert 176) -; (give-fuel-cell? basic :offset-assert 180) -; (give-fuel-cell-anim basic :offset-assert 184) -; (part2 basic :offset-assert 188) -; (orient-ry float :offset-assert 192) -; (fuel-cell-dest-pos vector :inline :offset-assert 208) -; ) -; :method-count-assert 23 -; :size-assert #xe0 -; :heap-base #x70 -; :flag-assert #x17007000e0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; ) -; ) +(deftype ram (process-drawable) + ((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) + (orient-ry float :offset-assert 192) + (fuel-cell-dest-pos vector :inline :offset-assert 208) + ) + :method-count-assert 23 + :size-assert #xe0 + :heap-base #x70 + :flag-assert #x17007000e0 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + (dummy-22 () none 22) + ) + ) ;; ---------------------- @@ -40921,129 +39448,50 @@ ;; - Types -; (deftype yeti-slave (nav-enemy) -; ((ground-y float :offset-assert 400) -; (part2 basic :offset-assert 404) -; ) -; :method-count-assert 76 -; :size-assert #x198 -; :heap-base #x130 -; :flag-assert #x4c01300198 -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype yeti-slave (nav-enemy) + ((ground-y float :offset-assert 400) + (part2 sparticle-launch-control :offset-assert 404) + ) + :method-count-assert 76 + :size-assert #x198 + :heap-base #x130 + :flag-assert #x4c01300198 + ) -; (deftype yeti (process-drawable) -; ((desired-num-children int32 :offset-assert 176) -; (spawn-delay int32 :offset-assert 180) -; (first-time-spawn-dist float :offset-assert 184) -; (state-time uint64 :offset-assert 168) -; ) -; :method-count-assert 22 -; :size-assert #xc8 -; :heap-base #x60 -; :flag-assert #x16006000c8 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype yeti (process-drawable) + ((child-process (pointer yeti-slave) :score 100 :offset 20) + (desired-num-children int32 :offset-assert 176) + (spawn-delay int32 :offset-assert 180) + (first-time-spawn-dist float :offset-assert 184) + (unknown basic :offset-assert 188) + (unknown1 basic :offset-assert 192) + (unknown2 basic :offset-assert 196) + ) + :method-count-assert 22 + :size-assert #xc8 + :heap-base #x60 + :flag-assert #x16006000c8 + (:methods + (TODO-RENAME-20 (_type_ vector vector) symbol 20) + (aggro? (_type_ vector) symbol 21) + ) + ) ;; - Functions -(define-extern yeti-slave-init-by-other function) -(define-extern yeti-slave-default-event-handler function) +(define-extern yeti-slave-init-by-other (function entity yeti vector vector symbol none :behavior yeti-slave)) +(define-extern yeti-slave-default-event-handler (function process int symbol event-message-block object :behavior yeti-slave)) ;; - Unknowns -;;(define-extern yeti-resuming-start object) ;; unknown type -;;(define-extern yeti-first-time-start object) ;; unknown type -;;(define-extern yeti-idle object) ;; unknown type -;;(define-extern yeti-slave-appear-jump-up object) ;; unknown type +(define-extern yeti-resuming-start (state yeti)) ;; unknown type +(define-extern yeti-first-time-start (state yeti)) ;; unknown type +(define-extern yeti-idle (state yeti)) ;; unknown type +(define-extern yeti-slave-appear-jump-up (state yeti-slave)) ;; unknown type (define-extern *yeti-sg* skeleton-group) (define-extern *yeti-nav-enemy-info* nav-enemy-info) -;;(define-extern yeti-slave-appear-land object) ;; unknown type -;;(define-extern yeti-slave-show-anims object) ;; unknown type +(define-extern yeti-slave-appear-land (state yeti-slave)) ;; unknown type +(define-extern yeti-slave-show-anims (state yeti-slave)) ;; unknown type ;; ---------------------- @@ -41426,28 +39874,14 @@ ;; - Types -; (deftype energydoor (process-drawable) -; ((alt-actor basic :offset-assert 176) -; ) -; :method-count-assert 20 -; :size-assert #xb4 -; :heap-base #x50 -; :flag-assert #x14005000b4 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype energydoor (process-drawable) + ((alt-actor entity-actor :offset-assert 176) + ) + :method-count-assert 20 + :size-assert #xb4 + :heap-base #x50 + :flag-assert #x14005000b4 + ) ; (deftype energybase (process-drawable) ; () @@ -41642,60 +40076,13 @@ ;; - Types -; (deftype assistant-lavatube-start (process-taskable) -; () -; :method-count-assert 53 -; :size-assert #x17c -; :heap-base #x110 -; :flag-assert #x350110017c -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(deftype assistant-lavatube-start (process-taskable) + () + :method-count-assert 53 + :size-assert #x17c + :heap-base #x110 + :flag-assert #x350110017c + ) ;; - Unknowns 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 9f19cf059c..942dd707fa 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -737,5 +737,19 @@ [29, "(function process int symbol event-message-block object :behavior level-hint)"] ], + "process-taskable": [ + [46, "(function process-taskable symbol)"] + ], + + "fishermans-boat": [ + [5, "(function none :behavior fishermans-boat)"], + [21, "(function none :behavior fishermans-boat)"], + [29, "(function none :behavior fishermans-boat)"] + ], + + "muse": [ + [3, "(function none :behavior muse)"] + ], + "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 5947c1e211..a0005cf15e 100644 --- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc @@ -413,7 +413,10 @@ "(method 16 load-state)", "(method 15 load-state)", "build-continue-menu", - "entity-remap-names" + "entity-remap-names", + "(method 21 swamp-rat-nest-dummy-a)", + "(method 21 swamp-rat-nest-dummy-b)", + "(method 21 swamp-rat-nest-dummy-c)" ], // If format is used with the wrong number of arguments, diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index 341005becc..caf2d0026b 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -623,6 +623,107 @@ ["L192", "adgif-shader"] ], + "process-taskable": [ + ["L251", "attack-info"] + ], + + "babak-with-cannon": [ + ["L92", "vector"] + ], + + "flutflut": [ + ["L94", "vector"] + ], + + "fishermans-boat": [ + ["L210", "vector"], + ["L410", "attack-info"], + ["L411", "vector"], + ["L412", "vector"], + ["L413", "vector"], + ["L431", "(pointer float)", 32], + ["L432", "(pointer float)", 32], + ["L434", "rigid-body-platform-constants"] + ], + + "training-obs": [ + ["L175", "rigid-body-platform-constants"] + ], + + "bonelurker": [ + ["L72", "attack-info"], + ["L73", "attack-info"] + ], + + "balloonlurker": [ + ["L105", "vector"], + ["L113", "rigid-body-platform-constants"] + ], + + "assistant-village2": [ + ["L177", "vector"], + ["L219", "attack-info"], + ["L268", "vector"] + ], + + "citb-plat": [ + ["L155", "rigid-body-platform-constants"] + ], + + "qbert-plat": [ + ["L99", "rigid-body-platform-constants"] + ], + + "misty-conveyor": [ + ["L60", "vector"], + ["L65", "vector"], + ["L66", "vector"], + ["L71", "vector"], + ["L73", "attack-info"] + ], + + "swamp-bat": [ + ["L88", "matrix"], + ["L99", "vector"], + ["L102", "vector"], + ["L103", "attack-info"] + ], + + "cavecrystal-light": [ + ["L45", "vector"], + ["L46", "vector"] + ], + + "gnawer": [ + ["L216", "(inline-array gnawer-segment-info)", 10] + ], + + "target-tube": [ + ["L142", "vector"] + ], + + "assistant-village3": [ + ["L43", "vector"] + ], + + "sage-village3": [ + ["L74", "vector"] + ], + + "target-snowball": [ + ["L23", "vector"] + ], + + "ice-cube": [ + ["L212", "attack-info"], + ["L213", "attack-info"], + ["L215", "attack-info"] + ], + + "assistant-lavatube": [ + ["L30", "vector"] + ], + // 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 035f002f2d..2469d1d86f 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -1947,5 +1947,628 @@ [32, "vector"] ], + "(code nav-enemy-give-up babak)": [ + [16, "vector"] + ], + + "(method 10 gui-query)": [ + [16, "font-context"] + ], + + "(method 46 process-taskable)": [ + [16, "vector"], + [32, "vector"] + ], + + "(trans release process-taskable)": [ + [16, "event-message-block"] + ], + + "(trans give-cell process-taskable)": [ + [16, "event-message-block"] + ], + + "process-taskable-play-anim-code": [ + [16, "event-message-block"] + ], + + "(event idle process-taskable)": [ + [16, "event-message-block"] + ], + + "(trans idle process-taskable)": [ + [16, "font-context"], + [112, "event-message-block"] + ], + + "(post idle process-taskable)": [ + [16, "vector"] + ], + + "babak-with-cannon-ride-cannon-post": [ + [16, "vector"] + ], + + "(code babak-with-cannon-jump-onto-cannon)": [ + [16, "vector"] + ], + + "(code othercam-running)": [ + [16, "vector"], + [32, "vector"] + ], + + "(code wait-for-start flutflut)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(code idle flutflut)": [ + [16, "font-context"], + [112, "event-message-block"] + ], + + "(event wait-for-return flutflut)": [ + [16, "event-message-block"] + ], + + "yakow-generate-travel-vector": [ + [16, "vector"], + [32, "vector"] + ], + + "yakow-facing-direction?": [ + [16, "vector"], + [32, "vector"] + ], + + "yakow-facing-point?": [ + [16, "vector"] + ], + + "(enter yakow-graze)": [ + [16, "event-message-block"] + ], + + "(method 13 vehicle-path)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(method 12 vehicle-controller)": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 14 vehicle-controller)": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 10 vehicle-controller)": [ + [16, "vector"] + ], + + "(method 23 fishermans-boat)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"], + [96, "vector"], + [112, "vector"] + ], + + "fishermans-boat-wave": [ + [16, "vector"] + ], + + "fishermans-boat-spawn-particles": [ + [16, "vector"] + ], + + "fishermans-boat-play-sounds": [ + [16, "vector"] + ], + + "fishermans-boat-post": [ + [16, "event-message-block"] + ], + + "(code fishermans-boat-leaving-village)": [ + [16, "event-message-block"] + ], + + "(trans fishermans-boat-entering-village)": [ + [16, "event-message-block"] + ], + + "(code fishermans-boat-leaving-misty)": [ + [16, "event-message-block"] + ], + + "(trans fishermans-boat-entering-misty)": [ + [16, "event-message-block"] + ], + + "(exit fishermans-boat-player-control)": [ + [16, "event-message-block"] + ], + + "(code fishermans-boat-player-control)": [ + [16, "event-message-block"] + ], + + "(code fishermans-boat-ride-to-misty)": [ + [16, "event-message-block"] + ], + + "(event fishermans-boat-ride-to-village1)": [ + [16, "event-message-block"] + ], + + "(code fishermans-boat-ride-to-village1)": [ + [16, "event-message-block"] + ], + + "fishermans-boat-leave-dock?": [ + [16, "font-context"] + ], + + "(trans fishermans-boat-player-control)": [ + [16, "vector"] + ], + + "(code fishermans-boat-measurements)": [ + [16, "vector"] + ], + + "(method 15 vehicle-controller)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + + "analyze-point-on-path-segment": [ + [16, "vector"] + ], + + "(method 51 muse)": [ + [16, "vector"] + ], + + "muse-check-dest-point": [ + [16, "point-on-path-segment-info"] + ], + + "(code muse-caught)": [ + [16, "event-message-block"] + ], + + "(method 43 bonelurker)": [ + [16, "event-message-block"] + ], + + "bonelurker-stunned-event-handler": [ + [16, "event-message-block"] + ], + + "bonelurker-push-post": [ + [16, "vector"] + ], + + "(code nav-enemy-give-up bonelurker)": [ + [16, "vector"] + ], + + "(code bonelurker-stun)": [ + [16, "vector"] + ], + + "(method 32 assistant-bluehut)": [ + [16, "event-message-block"] + ], + + "(trans idle assistant-bluehut)": [ + [16, "event-message-block"] + ], + + "(exit play-anim assistant-bluehut)": [ + [16, "event-message-block"] + ], + + "(method 32 assistant-levitator)": [ + [16, "event-message-block"] + ], + + "(exit play-anim assistant-levitator)": [ + [16, "event-message-block"] + ], + + "(method 47 assistant-bluehut)": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 43 assistant-bluehut)": [ + [16, "vector"] + ], + + "check-drop-level-assistant-bluehut": [ + [16, "vector"] + ], + + "assistant-levitator-blue-glow": [ + [16, "vector"] + ], + + "(code idle assistant-bluehut)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "assistant-levitator-blue-beam": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "collide-mesh-cache-tri"], + [160, "event-message-block"] + ], + + "(trans hidden assistant-levitator)": [ + [16, "font-context"] + ], + + "(event square-platform-lowering)": [ + [16, "event-message-block"] + ], + + "(method 33 qbert-plat)": [ + [16, "event-message-block"] + ], + + "(method 32 qbert-plat)": [ + [16, "event-message-block"] + ], + + "(event qbert-plat-master-idle)": [ + [16, "event-message-block"] + ], + + "(code qbert-plat-master-do-door)": [ + [16, "event-message-block"] + ], + + "(code qbert-plat-master-wait-for-door)": [ + [16, "event-message-block"] + ], + + "(code qbert-plat-master-idle)": [ + [16, "event-message-block"], + [96, "vector"], + [112, "vector"] + ], + + "keg-event-handler": [ + [16, "event-message-block"] + ], + + "(code keg-paddle-to-path)": [ + [16, "vector"], + [32, "vector"], + [48, "quaternion"], + [64, "quaternion"], + [80, "vector"] + ], + + "(code keg-on-path)": [ + [16, "vector"], + [32, "vector3s"] + ], + + "(code keg-in-chute)": [ + [16, "vector"], + [32, "vector"] + ], + + "keg-init-by-other": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(code keg-conveyor-paddle-idle)": [ + [16, "event-message-block"] + ], + + "(method 11 keg-conveyor)": [ + [16, "vector"], + [32, "matrix"] + ], + + "swamp-bat-slave-event-handler": [ + [16, "event-message-block"] + ], + + "swamp-bat-launch-slave": [ + [16, "event-message-block"] + ], + + "swamp-bat-slave-path-post": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(code swamp-bat-slave-idle)": [ + [16, "vector"], + [32, "quaternion"], + [48, "quaternion"], + [64, "vector"] + ], + + "(code swamp-bat-slave-launch)": [ + [16, "vector"], + [32, "vector"] + ], + + "(code swamp-bat-slave-die)": [ + [16, "vector"] + ], + + "swamp-bat-make-path-select-plane": [ + [16, "vector"] + ], + + "(method 44 swamp-rat)": [ + [16, "event-message-block"] + ], + + "(method 39 swamp-rat)": [ + [16, "vector"] + ], + + "(method 38 swamp-rat)": [ + [16, "vector"] + ], + + "(code swamp-rat-spawn)": [ + [16, "vector"] + ], + + "swamp-rat-update-wiggle-target": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "swamp-rat-nest-dummy-event-handler": [ + [16, "event-message-block"] + ], + + "(trans swamp-rat-nest-gestate)": [ + [16, "event-message-block"] + ], + + "(code swamp-rat-nest-victory)": [ + [16, "event-message-block"] + ], + + "swamp-rat-nest-pick-spawn-joint": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "swamp-rat-nest-spawn-rat": [ + [16, "vector"], + [32, "vector"] + ], + + "cavecrystal-light-control-default-callback": [ + [16, "vector"] + ], + + "spiderwebs-default-event-handler": [ + [16, "event-message-block"] + ], + + "(enter nav-enemy-die baby-spider)": [ + [16, "event-message-block"] + ], + + "(code baby-spider-die-fast)": [ + [16, "event-message-block"] + ], + + "(method 39 baby-spider)": [ + [16, "vector"] + ], + + "(enter nav-enemy-idle baby-spider)": [ + [16, "vector"] + ], + + "(method 52 baby-spider)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "mother-spider-proj-update-velocity": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + + "(method 28 mother-spider-proj)": [ + [16, "vector"] + ], + + "(code blue-eco-charger-orb-active)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(method 21 blue-eco-charger)": [ + [16, "event-message-block"] + ], + + "(method 20 blue-eco-charger)": [ + [16, "event-message-block"] + ], + + "(code blue-eco-charger-idle)": [ + [16, "event-message-block"] + ], + + "(code exit-chamber-charger-puzzle-beaten)": [ + [16, "event-message-block"] + ], + + "(code exit-chamber-idle-in-sunken)": [ + [16, "event-message-block"] + ], + + "(event exit-chamber-idle-in-sunken)": [ + [16, "event-message-block"], + [32, "event-message-block"] + ], + + "(method 24 exit-chamber)": [ + [16, "vector"] + ], + + "(method 23 exit-chamber)": [ + [16, "vector"], + [32, "vector"], + [48, "exit-chamber-items"], + [128, "event-message-block"], + [208, "vector"] + ], + + "tube-thrust": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"], + [96, "vector"] + ], + + "target-tube-post": [ + [16, "vector"], + [32, "event-message-block"], + [112, "vector"] + ], + + "(event target-tube-start)": [ + [16, "event-message-block"] + ], + + "(exit target-tube-start)": [ + [16, "event-message-block"] + ], + + "(code target-tube-start)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(method 21 sunkenfisha)": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 24 sunkenfisha)": [ + [16, "vector"], + [32, "matrix"], + [96, "vector"] + ], + + "(method 23 sunkenfisha)": [ + [16, "vector"] + ], + + "(trans sunkenfisha-idle)": [ + [16, "vector"] + ], + + "(method 27 sunkenfisha)": [ + [64, "vector"] + ], + + "(event idle minecartsteel)": [ + [16, "collide-overlap-result"] + ], + + "(method 43 assistant-villagec)": [ + [16, "vector"] + ], + + "(method 32 sage-villagec)": [ + [16, "event-message-block"] + ], + + "(method 43 sage-villagec)": [ + [16, "vector"] + ], + + "(trans idle sage-villagec)": [ + [16, "event-message-block"] + ], + + "(exit play-anim sage-villagec)": [ + [16, "event-message-block"] + ], + + "(method 20 cave-trap)": [ + [16, "spawn-baby-spider-work"], + [80, "vector"], + [96, "event-message-block"], + [176, "vector"], + [192, "vector"], + [208, "vector"] + ], + + "(trans cave-trap-idle)": [ + [16, "event-message-block"] + ], + + "ice-cube-default-event-handler": [ + [16, "event-message-block"] + ], + + "(trans yeti-slave-appear-jump-up)": [ + [16, "vector"] + ], + + "(code nav-enemy-give-up yeti-slave)": [ + [16, "vector"] + ], + + "(code yeti-resuming-start)": [ + [16, "vector"], + [32, "vector"] + ], + + "(code yeti-idle)": [ + [16, "vector"], + [32, "vector"] + ], + + "(trans hidden assistant-lavatube-start)": [ + [16, "font-context"] + ], + + "(method 18 nav-control)": [ + [16, "vector"] + ], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 87e7ab8d48..4b61d8aca9 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -3063,7 +3063,7 @@ ], "(method 27 square-platform)": [ - [29, "a0", "water-vol"] + [[26, 33], "a0", "water-vol"] ], "(method 27 wedge-plat)": [ @@ -3253,5 +3253,464 @@ [[1, 6], "v1", "drawable"] ], + "(code nav-enemy-patrol babak)": [ + [25, "v1", "art-joint-anim"], + [79, "t9", "(function none)"] + ], + + "(code nav-enemy-chase babak)": [ + [55, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-stare babak)": [ + [154, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-give-up babak)": [ + [43, "v1", "art-joint-anim"], + [101, "v1", "art-joint-anim"] + ], + + "(method 33 process-taskable)": [ + [15, "s5", "spool-anim"] + ], + + "(method 51 process-taskable)": [ + [18, "v1", "spool-anim"] + ], + + "(method 35 process-taskable)": [ + [15, "s5", "spool-anim"] + ] + , + "(method 37 process-taskable)": [ + [15, "s5", "spool-anim"] + ], + + "process-taskable-play-anim-code": [ + [68, "gp", "spool-anim"], + [255, "gp", "art-joint-anim"] + ], + + "(event play-anim process-taskable)": [ + [19, "a1", "float"], + [24, "a0", "float"] + ], + + "(event be-clone process-taskable)": [ + [19, "a1", "float"], + [24, "a0", "float"] + ], + + "(event othercam-running)": [ + [23, "v1", "process-taskable"] + ], + + "(code nav-enemy-idle babak-with-cannon)": [ + [22, "v1", "art-joint-anim"] + ], + + "(code babak-run-to-cannon)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code babak-with-cannon-jump-onto-cannon)": [ + [118, "v1", "art-joint-anim"] + ], + + "(code babak-with-cannon-jump-off-cannon)": [ + [28, "v1", "art-joint-anim"] + ], + + "(trans nav-enemy-die babak-with-cannon)": [ + [40, "v0", "(state nav-enemy)"] + ], + + "(enter othercam-running)": [ + [50, "gp", "process-taskable"], + [53, "gp", "process-taskable"] + ], + + "(code othercam-running)": [ + [14, "s2", "process-taskable"], + [18, "s2", "process-taskable"], + [24, "s2", "process-taskable"], + [38, "s2", "process-taskable"], + [47, "s2", "process-taskable"] + ], + + "(method 10 gui-query)": [ + [[84, 88], "v1", "dma-packet"], + [[131, 135], "v1", "dma-packet"] + ], + + "(code yakow-idle)": [ + [46, "v1", "art-joint-anim"], + [102, "v1", "art-joint-anim"] + ], + + "(code yakow-graze)": [ + [73, "v1", "art-joint-anim"], + [131, "v1", "art-joint-anim"] + ], + + "(code yakow-graze-kicked)": [ + [10, "v1", "art-joint-anim"] + ], + + "(code yakow-kicked)": [ + [81, "v1", "art-joint-anim"] + ], + + "(method 7 fishermans-boat)": [ + [20, "t9", "(function rigid-body-platform int rigid-body-platform)"] + ], + + "(code muse-idle)": [ + [35, "v1", "art-joint-anim"], + [87, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-chase muse)": [ + [35, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-jump-land muse)": [ + [31, "v1", "art-joint-anim"] + ], + + "(code muse-caught)": [ + [50, "v0", "vector"], + [306, "gp", "handle"], + [321, "gp", "handle"] + ], + + "(code nav-enemy-idle bonelurker)": [ + [5, "t9", "(function none :behavior bonelurker)"] + ], + + "(code nav-enemy-patrol bonelurker)": [ + [7, "t9", "(function none :behavior bonelurker)"] + ], + + "(code nav-enemy-chase bonelurker)": [ + [60, "v1", "art-joint-anim"], + [108, "v1", "art-joint-anim"], + [171, "v1", "art-joint-anim"], + [220, "v1", "art-joint-anim"], + [277, "v1", "art-joint-anim"], + [334, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-stare bonelurker)": [ + [130, "v1", "art-joint-anim"] + ], + + "(code bonelurker-stun)": [ + [29, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-give-up bonelurker)": [ + [43, "v1", "art-joint-anim"], + [93, "v1", "art-joint-anim"], + [143, "v1", "art-joint-anim"], + [201, "v1", "art-joint-anim"] + ], + + "(method 32 assistant-bluehut)": [ + [104, "v1", "float"], + [162, "v1", "manipy"], + [255, "v1", "float"] + ], + + "(method 47 assistant-bluehut)": [ + [21, "s5", "sage-bluehut"], + [28, "s5", "sage-bluehut"], + [50, "s5", "sage-bluehut"], + [53, "s5", "sage-bluehut"] + ], + + "(method 43 assistant-bluehut)": [ + [19, "v1", "float"] + ], + + "check-drop-level-assistant-bluehut": [ + [17, "v1", "float"] + ], + + "(code idle assistant-bluehut)": [ + [31, "v1", "art-joint-anim"], + [83, "v1", "float"], + [104, "v1", "art-joint-anim"], + [161, "v1", "float"], + [261, "v1", "art-joint-anim"], + [317, "v1", "float"], + [554, "v1", "art-joint-anim"] + ], + + "assistant-levitator-blue-beam": [ + [15, "v1", "fireboulder"] + ], + + "(code idle assistant-levitator)": [ + [32, "v1", "art-joint-anim"], + [91, "v1", "float"], + [173, "v1", "art-joint-anim"], + [229, "v1", "float"], + [311, "v1", "art-joint-anim"] + ], + + "(event square-platform-lowered)": [ + [8, "a0", "square-platform-master"] + ], + + "(event square-platform-master-idle)": [ + [6, "a0", "square-platform-button"] + ], + + "(method 7 square-platform)": [ + [24, "t9", "(function baseplat int baseplat)"] + ], + + "(method 11 square-platform)": [ + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"], + [165, "v1", "(pointer float)"] + ], + + "(enter square-platform-master-activate)": [ + [51, "a0", "sunkencam"], + [84, "v1", "sunkencam"], + [119, "a0", "sunkencam"], + [152, "v1", "sunkencam"] + ], + + "(code qbert-plat-on-mimic)": [ + [13, "gp", "(pointer rigid-body-platform)"], + [21, "gp", "(pointer rigid-body-platform)"], + [27, "gp", "(pointer rigid-body-platform)"] + ], + + "(method 32 qbert-plat)": [ + [[4, 10], "a0", "qbert-plat-master"] + ], + + "(post rigid-body-platform-float qbert-plat)": [ + [3, "t9", "(function none :behavior qbert-plat)"] + ], + + "(method 23 qbert-plat)": [ + [9, "t9", "(function rigid-body-platform float none)"] + ], + + "(code keg-on-paddle)": [ + [5, "a0", "keg"], // i have learned that parent does not always equal the parent type! + [16, "v1", "process-drawable"] + ], + + "(code keg-paddle-to-path)": [ + [8, "v1", "process-drawable"], + [28, "v1", "process-drawable"] + ], + + "(code keg-on-path)": [ + [13, "v1", "process-drawable"], + [24, "v1", "process-drawable"], + [45, "v1", "process-drawable"], + [72, "v1", "process-drawable"], + [81, "v1", "process-drawable"] + ], + + "(code keg-in-chute)": [ + [2, "v1", "process-drawable"], + [9, "v1", "process-drawable"] + ], + + "keg-init-by-other": [ + [142, "v1", "process-drawable"] + ], + + "(method 7 keg-conveyor)": [ + [14, "t9", "(function process-drawable int process-drawable)"] + ], + + "(method 7 swamp-bat)": [ + [26, "t9", "(function process-drawable int process-drawable)"] + ], + + "(code swamp-bat-slave-die)": [ + [21, "v1", "swamp-bat"] + ], + + // these casts should not be required + "swamp-bat-check-slave-paths-match?": [ + [3, "a1", "swamp-bat-slave"], + [7, "a1", "swamp-bat-slave"] + ], + + "(method 39 swamp-rat)": [ + [37, "t9", "(function nav-enemy none)"] + ], + + "(code nav-enemy-patrol swamp-rat)": [ + [23, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-stare swamp-rat)": [ + [26, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-give-up swamp-rat)": [ + [14, "v1", "art-joint-anim"], + [72, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-attack swamp-rat)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code swamp-rat-spawn)": [ + [119, "v1", "art-joint-anim"] + ], + + "(code spiderwebs-bounce)": [ + [80, "v1", "art-joint-anim"] + ], + + "(method 39 baby-spider)": [ + [37, "t9", "(function nav-enemy none)"] + ], + + "(code baby-spider-hatching)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-attack baby-spider)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-give-up baby-spider)": [ + [14, "v1", "art-joint-anim"], + [72, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-patrol baby-spider)": [ + [23, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-notice baby-spider)": [ + [24, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-stare baby-spider)": [ + [26, "v1", "art-joint-anim"] + ], + + "(method 24 mother-spider-proj)": [ + [[11, 46], "s5", "sound-rpc-set-param"], + [30, "s4", "process-drawable"], + [33, "s4", "process-drawable"] + ], + + "(method 23 exit-chamber)": [ + [107, "a1", "fuel-cell"] + ], + + "(code exit-chamber-rise)": [ + [15, "v1", "fuel-cell"] + ], + + "(method 25 sunken-water)": [ + [121, "v1", "uint"], + [126, "v1", "uint"] + ], + + "(code sunkenfisha-idle)": [ + [10, "v1", "art-joint-anim"] + ], + + "(method 27 sunkenfisha)": [ + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"], + ["_stack_", 48, "res-tag"], + [40, "v0", "(pointer float)"], + [137, "v0", "(pointer float)"], + [174, "v0", "(pointer float)"] + ], + + "(method 43 assistant-villagec)": [ + [19, "v1", "float"] + ], + + "(code idle assistant-villagec)": [ + [32, "v1", "art-joint-anim"], + [89, "v1", "float"], + [176, "v1", "float"] + ], + + "(method 32 sage-villagec)": [ + [278, "v1", "float"] + ], + + "(method 43 sage-villagec)": [ + [19, "v1", "float"] + ], + + "(method 20 cave-trap)": [ + [77, "s2", "process-drawable"], + [95, "s2", "process-drawable"], + [181, "s3", "process-drawable"], + [221, "s3", "process-drawable"] + ], + + "(method 7 cave-trap)": [ + [14, "t9", "(function process-drawable int process-drawable)"] + ], + + "(method 57 ice-cube)": [ + [16, "v1", "collide-shape-prim-sphere"] + ], + + "(code yeti-slave-appear-jump-up)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code yeti-slave-appear-land)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-chase yeti-slave)": [ + [55, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-stare yeti-slave)": [ + [154, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-give-up yeti-slave)": [ + [43, "v1", "art-joint-anim"], + [101, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-patrol yeti-slave)": [ + [25, "v1", "art-joint-anim"], + [86, "v1", "art-joint-anim"], + [165, "v1", "art-joint-anim"], + [238, "v1", "art-joint-anim"] + ], + + "(method 7 yeti-slave)": [ + [14, "t9", "(function nav-enemy int nav-enemy)"] + ], + + "(method 21 yeti)": [ + [5, "s5", "(pointer yeti-slave)"] + ], + + "(code idle assistant-lavatube-start)": [ + [32, "v1", "float"], + [118, "v1", "art-joint-anim"] + ], + "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 65f455db1f..b8f745d98f 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -3519,5 +3519,17 @@ } }, + "(event be-clone process-taskable)": { + "vars": { + "v0-0": ["v0-0", "shadow-geo"] + } + }, + + "(event idle process-taskable)": { + "vars": { + "v0-0": ["v0-0", "symbol"] + } + }, + "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/decompiler/util/sparticle_decompile.cpp b/decompiler/util/sparticle_decompile.cpp index 26038002d3..4da07b7fe4 100644 --- a/decompiler/util/sparticle_decompile.cpp +++ b/decompiler/util/sparticle_decompile.cpp @@ -148,9 +148,9 @@ const SparticleFieldDecomp field_kinds[68] = { {true, FieldKind::FLOAT_WITH_RAND}, // SPT_FADE_G = 34 {true, FieldKind::FLOAT_WITH_RAND}, // SPT_FADE_B = 35 {true, FieldKind::FLOAT_WITH_RAND}, // SPT_FADE_A = 36 - {false}, // SPT_ACCEL_X = 37 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_ACCEL_X = 37 {true, FieldKind::FLOAT_WITH_RAND}, // SPT_ACCEL_Y = 38 - {false}, // SPT_ACCEL_Z = 39 + {true, FieldKind::FLOAT_WITH_RAND}, // SPT_ACCEL_Z = 39 {false}, // SPT_DUMMY = 40 {false}, // SPT_QUAT_X = 41 {false}, // SPT_QUAT_Y = 42 @@ -619,4 +619,4 @@ goos::Object decompile_sparticle_field_init(const TypeSpec& type, :size-assert #x10 :flag-assert #x900000010 ) - */ \ No newline at end of file + */ diff --git a/goal_src/engine/ambient/ambient.gc b/goal_src/engine/ambient/ambient.gc index 24fe9e1628..41e20794b6 100644 --- a/goal_src/engine/ambient/ambient.gc +++ b/goal_src/engine/ambient/ambient.gc @@ -5,6 +5,8 @@ ;; name in dgo: ambient ;; dgos: GAME, ENGINE +;; decomp begins + ;; definition for method 8 of type drawable-ambient ;; INFO: Return type mismatch int vs drawable-ambient. @@ -300,23 +302,15 @@ ) ) -;; definition for function level-hint-displayed? -;; INFO: Return type mismatch basic vs symbol. -(defun level-hint-displayed? ((arg0 symbol)) - (let* ((v1-0 *hint-semaphore*) - (a0-1 (the-as level-hint (if v1-0 - (the-as level-hint (-> v1-0 0 self)) - ) - ) - ) - ) +(defun level-hint-displayed? () + (let ((a0-0 (ppointer->process *hint-semaphore*))) (the-as symbol (and - a0-1 + (the-as level-hint a0-0) (and - (= (-> a0-1 next-state name) 'level-hint-normal) - (not (dummy-15 a0-1)) + (= (-> (the-as level-hint a0-0) next-state name) 'level-hint-normal) + (not (dummy-15 (the-as level-hint a0-0))) ) ) ) diff --git a/goal_src/engine/collide/collide-cache-h.gc b/goal_src/engine/collide/collide-cache-h.gc index 0d69f759ac..6a030dfe3b 100644 --- a/goal_src/engine/collide/collide-cache-h.gc +++ b/goal_src/engine/collide/collide-cache-h.gc @@ -5,6 +5,8 @@ ;; name in dgo: collide-cache-h ;; dgos: GAME, ENGINE +;; decomp begins + (deftype collide-using-spheres-params (structure) ((spheres uint32 :offset-assert 0) (num-spheres uint32 :offset-assert 4) diff --git a/goal_src/engine/collide/collide-shape-h.gc b/goal_src/engine/collide/collide-shape-h.gc index 955d761df3..591e611dc2 100644 --- a/goal_src/engine/collide/collide-shape-h.gc +++ b/goal_src/engine/collide/collide-shape-h.gc @@ -270,7 +270,7 @@ (dummy-46 (_type_) none 46) (dummy-47 (_type_) none 47) (dummy-48 (_type_) none 48) - (dummy-49 () none 49) + (dummy-49 (_type_) none 49) (dummy-50 (_type_) none 50) (dummy-51 () none 51) (dummy-52 () none 52) @@ -317,7 +317,7 @@ (dummy-58 (_type_ vector) none 58) (dummy-59 (_type_ vector uint float symbol symbol symbol) none 59) (dummy-60 (_type_ float float symbol uint) none 60) - (dummy-61 () none 61) + (TODO-RENAME-61 (_type_ vector vector vector) none 61) (dummy-62 (_type_ vector float) vector 62) (dummy-63 () none 63) (dummy-64 () none 64) diff --git a/goal_src/engine/collide/collide-target-h.gc b/goal_src/engine/collide/collide-target-h.gc index a70e38c63c..838cec7b81 100644 --- a/goal_src/engine/collide/collide-target-h.gc +++ b/goal_src/engine/collide/collide-target-h.gc @@ -90,6 +90,7 @@ (unknown-vector61 vector :inline :offset 1504) ;; from - logic-target::add-thrust (unknown-float70 float :offset 1520) ;; from - logic-target::add-thrust (unknown-vector70 vector :inline :offset 1536) ;; from - logic-target::add-thrust + (unknown-vector71 vector :inline :offset 1552) ;; from - target-tube::tube-thrust (unknown-handle00 handle :offset 1600) ;; from logic-target::reset-target-state (unknown-sphere-array00 collide-shape-prim-sphere 3 :offset 1608) ;; from target-util::target-collide-set! and from target-util::target-danger-set! (unknown-sphere00 collide-shape-prim-sphere :offset 1632) ;; from target-util::target-danger-set! diff --git a/goal_src/engine/data/art-h.gc b/goal_src/engine/data/art-h.gc index 9988f2d0c5..7efda16a5f 100644 --- a/goal_src/engine/data/art-h.gc +++ b/goal_src/engine/data/art-h.gc @@ -129,7 +129,7 @@ :flag-assert #xd00000014 (:methods (login (_type_) _type_ 9) - (dummy-10 (_type_ string type) art-element 10) + (dummy-10 (_type_ string type) joint 10) (dummy-11 (_type_ string type) int 11) (dummy-12 (_type_) symbol 12) ) @@ -140,11 +140,6 @@ :method-count-assert 13 :size-assert #x20 :flag-assert #xd00000020 - (:methods - (dummy-10 (_type_ string type) art-element 10) - (dummy-11 (_type_ string type) int 11) - (dummy-12 (_type_) symbol 12) - ) ) (deftype art-mesh-anim (art-element) diff --git a/goal_src/engine/draw/process-drawable.gc b/goal_src/engine/draw/process-drawable.gc index 9dc225c29a..a85850b0db 100644 --- a/goal_src/engine/draw/process-drawable.gc +++ b/goal_src/engine/draw/process-drawable.gc @@ -26,6 +26,12 @@ (define-extern anim-loop (function symbol)) ;; TODO - for bouncer (define-extern ja-min? (function int symbol)) +;; TODO - for process-drawable +(define-extern ja-num-frames (function int int)) +;; TODO - for flutflut +(define-extern ja-group-size (function int)) +;; TODO - for yakow +(define-extern ja-frame-num (function int float)) (defun vector<-cspace! ((arg0 vector) (arg1 cspace)) @@ -44,4 +50,4 @@ (.svf (&-> arg0 quad) vf2) arg0 ) - ) \ No newline at end of file + ) diff --git a/goal_src/engine/game/collectables.gc b/goal_src/engine/game/collectables.gc index 3b6f7733a0..e5cc2780bc 100644 --- a/goal_src/engine/game/collectables.gc +++ b/goal_src/engine/game/collectables.gc @@ -6,7 +6,7 @@ ;; dgos: GAME, ENGINE ;; TODO - for nav-enemy -(define-extern birth-pickup-at-point (function vector int float symbol process-drawable symbol none)) ;; TODO - unconfirmed - see beach-rocks +(define-extern birth-pickup-at-point (function vector int float symbol process-drawable symbol (pointer process)));; TODO - unconfirmed - see beach-rocks ;; TODO - for oracle (define-extern *fuel-cell-sg* skeleton-group) ;; unknown type (define-extern *money-sg* skeleton-group) ;; unknown type diff --git a/goal_src/engine/game/effect-control-h.gc b/goal_src/engine/game/effect-control-h.gc index 2e901302cb..b2dd021abe 100644 --- a/goal_src/engine/game/effect-control-h.gc +++ b/goal_src/engine/game/effect-control-h.gc @@ -21,7 +21,7 @@ (:methods (new (symbol type process-drawable) _type_ 0) (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-10 (_type_ symbol float int) none 10) (dummy-11 () none 11) (dummy-12 () none 12) (set-channel-offset! (_type_ int) none 13) diff --git a/goal_src/engine/game/generic-obs-h.gc b/goal_src/engine/game/generic-obs-h.gc index a27070424e..8b8c48a27f 100644 --- a/goal_src/engine/game/generic-obs-h.gc +++ b/goal_src/engine/game/generic-obs-h.gc @@ -5,6 +5,12 @@ ;; name in dgo: generic-obs-h ;; dgos: GAME, ENGINE +;; TODO - for babak-with-cannon +(define-extern mistycam-spawn (function none)) +;; TODO - for babak-with-cannon +(define-extern beachcam-spawn (function none)) + +;; decomp begins (deftype manipy (process-drawable) ((new-trans-hook function :offset-assert 176) @@ -125,10 +131,10 @@ (deftype gui-query (structure) ((x-position int32 :offset-assert 0) (y-position int32 :offset-assert 4) - (message basic :offset-assert 8) - (decision basic :offset-assert 12) - (only-allow-cancel basic :offset-assert 16) - (no-msg basic :offset-assert 20) + (message symbol :offset-assert 8) ;; a guess, i suspect its an `event-message-block` + (decision symbol :offset-assert 12) + (only-allow-cancel symbol :offset-assert 16) + (no-msg symbol :offset-assert 20) (message-space int32 :offset-assert 24) ) :pack-me @@ -136,13 +142,13 @@ :size-assert #x1c :flag-assert #xb0000001c (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (init! (_type_ symbol int int int symbol symbol) none 9) + (dummy-10 (_type_) symbol 10) ) ) (deftype othercam (process) - ((hand uint64 :offset-assert 112) + ((hand handle :offset-assert 112) (old-global-mask uint32 :offset-assert 120) (mask-to-clear uint32 :offset-assert 124) (cam-joint-index int32 :offset-assert 128) @@ -150,15 +156,14 @@ (old-mat-z vector :inline :offset-assert 160) (had-valid-frame basic :offset-assert 176) (border-value basic :offset-assert 180) - (die? basic :offset-assert 184) - (survive-anim-end? basic :offset-assert 188) - (spooling? basic :offset-assert 192) + (die? symbol :offset-assert 184) + (survive-anim-end? symbol :offset-assert 188) + (spooling? symbol :offset-assert 192) ) :heap-base #x60 :method-count-assert 14 :size-assert #xc4 :flag-assert #xe006000c4 - ;; inherited inspect of process ) (deftype process-hidden (process) diff --git a/goal_src/engine/game/task/process-taskable.gc b/goal_src/engine/game/task/process-taskable.gc index 893aded833..87625d6320 100644 --- a/goal_src/engine/game/task/process-taskable.gc +++ b/goal_src/engine/game/task/process-taskable.gc @@ -5,5 +5,4 @@ ;; name in dgo: process-taskable ;; dgos: GAME, ENGINE -;; TODO - for beach-rocks -(define-extern othercam-init-by-other (function int symbol symbol symbol none)) +;; DECOMP BEGINS diff --git a/goal_src/engine/game/task/task-control-h.gc b/goal_src/engine/game/task/task-control-h.gc index 9696a7583e..425c217e13 100644 --- a/goal_src/engine/game/task/task-control-h.gc +++ b/goal_src/engine/game/task/task-control-h.gc @@ -5,6 +5,10 @@ ;; name in dgo: task-control-h ;; dgos: GAME, ENGINE +;; for process-taskable +(declare-type process-taskable process-drawable) +(define-extern othercam-init-by-other (function process-taskable symbol symbol symbol none :behavior othercam)) + ;; There are a fixed number of game tasks. Most are just getting a power cell, ;; but there are also ones for using the levitator etc. @@ -43,6 +47,8 @@ (declare-type task-control basic) +;; decomp begins + ;; A task-cstage describes (deftype task-cstage (structure) ((game-task game-task :offset-assert 0) @@ -96,20 +102,21 @@ (:methods (dummy-9 (_type_ vector int float process-drawable) none 9) (TODO-RENAME-10 (_type_ vector int float process-drawable) vector 10) - (dummy-11 (_type_ string symbol vector) none 11) + (dummy-11 (_type_ string symbol vector) symbol 11) ) ) (deftype process-taskable (process-drawable) - ((tasks task-control :offset-assert 176) + ((root-override collide-shape :score 100 :offset 112) + (tasks task-control :offset-assert 176) (query gui-query :inline :offset-assert 180) (old-target-pos transformq :inline :offset-assert 208) (cell-for-task game-task :offset-assert 256) - (cell-x uint64 :offset-assert 264) + (cell-x handle :offset-assert 264) (cam-joint-index int32 :offset-assert 272) (skippable basic :offset-assert 276) ;; probably a symbol (blend-on-exit basic :offset-assert 280) ;; probably a symbol? - (camera uint64 :offset-assert 288) + (camera handle :offset-assert 288) (will-talk symbol :offset-assert 296) (talk-message uint32 :offset-assert 300) (last-talk uint64 :offset-assert 304) @@ -124,7 +131,7 @@ (music basic :offset-assert 360) (have-music symbol :offset-assert 364) ;; probably (been-kicked symbol :offset-assert 368) ;; probably - (cur-trans-hook function :offset-assert 372) + (cur-trans-hook (function none) :offset-assert 372) (shadow-backup shadow-geo :offset-assert 376) ) :heap-base #x110 @@ -132,38 +139,38 @@ :size-assert #x17c :flag-assert #x350110017c (:methods - (dummy-20 () none 20) + (release () _type_ :state 20) (give-cell () _type_ :state 21) ;; state - (dummy-22 () none 22) - (enter-playing () none 23) ;; state - (play-accept () none 24) ;; state - (dummy-25 () none 25) - (query () none 26) ;; state + (lose () _type_ :state 22) + (enter-playing () _type_ :state 23) ;; state + (play-accept () _type_ :state 24) ;; state + (play-reject () _type_ :state 25) + (query () _type_ :state 26) ;; state (play-anim () _type_ :state 27) ;; state (hidden () _type_ :state 28) ;; state - (dummy-29 () none 29) + (be-clone (handle) _type_ :state 29) (idle () _type_ :state 30) ;; state (get-art-elem (_type_) art-element 31) - (play-anim! (_type_ symbol) basic 32) + (play-anim! (_type_ symbol) basic 32) ;; ret - spool-anim | .. (dummy-33 (_type_) none 33) - (dummy-34 (_type_) none 34) + (TODO-RENAME-34 (_type_ symbol) symbol 34) (dummy-35 (_type_) none 35) - (dummy-36 (_type_) none 36) - (dummy-37 (_type_) none 37) + (get-spool-anim-or-?? (_type_ symbol) basic 36) ;; ret - spool-anim | .. + (spool-push-anim (_type_) none 37) (dummy-38 (_type_) none 38) (should-display? (_type_) symbol 39) (dummy-40 (_type_ object skeleton-group int int vector int) none 40) - (initialize-collision (_type_ int) none 41) + (initialize-collision (_type_ int vector) none 41) (dummy-42 (_type_) none 42) - (TODO-RENAME-43 (_type_) none 43) + (TODO-RENAME-43 (_type_) symbol 43) (play-reminder (_type_) symbol 44) (dummy-45 (_type_) none 45) (dummy-46 (_type_) none 46) (target-above-threshold? (_type_) symbol 47) - (draw-shadow (_type_) none 48) - (dummy-49 (_type_) none 49) - (dummy-50 (_type_) none 50) - (dummy-51 (_type_) none 51) + (draw-npc-shadow (_type_) none 48) + (hidden-other () _type_ :state 49) + (TODO-RENAME-50 (_type_) symbol 50) + (close-anim-file! (_type_) symbol 51) (dummy-52 (_type_) none 52) ) ) diff --git a/goal_src/engine/gfx/shadow/shadow-cpu-h.gc b/goal_src/engine/gfx/shadow/shadow-cpu-h.gc index 16fcb92406..d4475e7061 100644 --- a/goal_src/engine/gfx/shadow/shadow-cpu-h.gc +++ b/goal_src/engine/gfx/shadow/shadow-cpu-h.gc @@ -29,15 +29,15 @@ :size-assert #x60 :flag-assert #x1000000060 (:methods - (new (symbol type float float float float float) _type_ 0) - (clear-offset-bit (shadow-control) int 9) - (set-offset-bit (shadow-control) int 10) - (set-top-plane-offset (shadow-control float) int 11) - (set-bottom-plane-offset (shadow-control float) int 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) - ) + (new (symbol type float float float float float) _type_ 0) + (clear-offset-bit (shadow-control) int 9) + (set-offset-bit (shadow-control) int 10) + (set-top-plane-offset (shadow-control float) int 11) + (set-bottom-plane-offset (shadow-control float) int 12) + (dummy-13 (_type_) none 13) + (dummy-14 (_type_) none 14) + (dummy-15 (_type_ vector float float float) none 15) + ) ) (defmethod clear-offset-bit shadow-control ((obj shadow-control)) diff --git a/goal_src/engine/nav/navigate-h.gc b/goal_src/engine/nav/navigate-h.gc index 6679914f81..9953bdaeef 100644 --- a/goal_src/engine/nav/navigate-h.gc +++ b/goal_src/engine/nav/navigate-h.gc @@ -242,11 +242,11 @@ (dummy-11 (_type_ vector) none 11) (dummy-12 () none 12) (dummy-13 () none 13) - (dummy-14 (_type_) none 14) + (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? (dummy-17 () none 17) - (dummy-18 () none 18) + (TODO-RENAME-18 (_type_ vector) nav-poly 18) (dummy-19 (_type_ vector collide-shape-moving vector float) none 19) (dummy-20 () none 20) (dummy-21 () none 21) diff --git a/goal_src/engine/sparticle/sparticle-launcher-h.gc b/goal_src/engine/sparticle/sparticle-launcher-h.gc index 1bf3c82b5f..b44f591ade 100644 --- a/goal_src/engine/sparticle/sparticle-launcher-h.gc +++ b/goal_src/engine/sparticle/sparticle-launcher-h.gc @@ -149,7 +149,7 @@ (tex uint32 :offset 4) (pntr pointer :offset 4) ;; gap - (sound basic :offset 4) + (sound sound-spec :offset 4) ) :method-count-assert 9 :size-assert #x10 @@ -263,9 +263,9 @@ (deftype sparticle-launcher (basic) - ((birthaccum float :offset-assert 4) - (soundaccum float :offset-assert 8) - (init-specs (inline-array sp-field-init-spec) :offset-assert 12) + ((birthaccum float :offset-assert 4) + (soundaccum float :offset-assert 8) + (init-specs (inline-array sp-field-init-spec) :offset-assert 12) ) :method-count-assert 9 :size-assert #x10 @@ -376,16 +376,17 @@ ) ) + (deftype sparticle-launch-control (inline-array-class) - ((group sparticle-launch-group :offset-assert 16) - (proc process :offset-assert 20) - (local-clock int32 :offset-assert 24) - (fade float :offset-assert 28) - (matrix int32 :offset-assert 32) - (last-spawn-frame int32 :offset-assert 36) - (last-spawn-time int32 :offset-assert 40) - (center vector :inline :offset-assert 48) - (data sparticle-launch-state :inline :dynamic :offset-assert 64) + ((group sparticle-launch-group :offset-assert 16) + (proc process :offset-assert 20) + (local-clock int32 :offset-assert 24) + (fade float :offset-assert 28) + (matrix int32 :offset-assert 32) + (last-spawn-frame int32 :offset-assert 36) + (last-spawn-time int32 :offset-assert 40) + (center vector :inline :offset-assert 48) + (data sparticle-launch-state :inline :dynamic :offset-assert 64) ) :method-count-assert 14 :size-assert #x40 @@ -398,5 +399,7 @@ (kill-particles (_type_) none 13) ) ) + + (set! (-> sparticle-launch-control heap-base) (the-as uint 32)) diff --git a/goal_src/engine/target/logic-target.gc b/goal_src/engine/target/logic-target.gc index 870e614d44..859d66e201 100644 --- a/goal_src/engine/target/logic-target.gc +++ b/goal_src/engine/target/logic-target.gc @@ -5,8 +5,8 @@ ;; name in dgo: logic-target ;; dgos: GAME, ENGINE -;; definition for function build-conversions -;; Used lq/sq +;; DECOMP BEGINS + (defbehavior build-conversions target ((arg0 vector)) (surface-mult! (-> self control unknown-surface01) @@ -64,8 +64,6 @@ ) ) -;; definition for function vector-turn-to -;; Used lq/sq (defbehavior vector-turn-to target ((arg0 vector)) (let ((gp-0 forward-up-nopitch->quaternion) (s5-0 (-> self control dir-targ)) @@ -83,7 +81,6 @@ (build-conversions (-> self control transv)) ) -;; definition for function reverse-conversions (defbehavior reverse-conversions target ((arg0 vector)) (set! (-> self control unknown-float01) @@ -100,7 +97,6 @@ ) ) -;; definition (debug) for function draw-history (defun-debug draw-history ((arg0 control-info)) (when (nonzero? *display-collide-history*) (when (logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons l3)) @@ -211,8 +207,6 @@ ) ) -;; definition (debug) for function print-history -;; INFO: Return type mismatch int vs none. (defun-debug print-history ((arg0 control-info)) (dotimes (s5-0 128) (let @@ -332,12 +326,10 @@ (none) ) -;; definition (debug) for function target-print-stats ;; WARN: Stack slot load mismatch: defined as size 4, got size 16 ;; WARN: Stack slot load mismatch: defined as size 4, got size 16 ;; WARN: Stack slot load mismatch: defined as size 4, got size 16 ;; WARN: Stack slot load mismatch: defined as size 4, got size 16 -;; Used lq/sq (defun-debug target-print-stats ((arg0 target) (arg1 symbol)) (local-vars (sv-64 string) @@ -597,8 +589,6 @@ #f ) -;; definition for function read-pad -;; Used lq/sq (defbehavior read-pad target ((arg0 vector)) (when (!= (-> self control unknown-dword00) (-> *display* real-frame-counter)) (set! @@ -623,8 +613,6 @@ (vector-matrix*! arg0 arg0 (matrix-local->world #t #f)) ) -;; definition for function warp-vector-into-surface! -;; Used lq/sq (defun warp-vector-into-surface! ((arg0 vector) (arg1 vector) (arg2 vector)) (let ((a2-2 @@ -639,8 +627,6 @@ ) ) -;; definition for function vector<-pad-in-surface! -;; Used lq/sq (defbehavior vector<-pad-in-surface! target ((arg0 vector) (arg1 symbol)) (let ((a1-1 (read-pad (new-stack-vector0)))) (warp-vector-into-surface! arg0 a1-1 (-> self control local-normal)) @@ -651,8 +637,6 @@ arg0 ) -;; definition for function local-pad-angle -;; Used lq/sq (defbehavior local-pad-angle target () (let ((a0-1 (vector<-pad-in-surface! (new-stack-vector0) #f))) (vector-dot @@ -665,8 +649,6 @@ ) ) -;; definition for function turn-around? -;; Used lq/sq (defbehavior turn-around? target () (let* ((a0-1 (vector<-pad-in-surface! (new-stack-vector0) #f)) (gp-0 (vector-normalize! a0-1 1.0)) @@ -728,8 +710,6 @@ ) ) -;; definition for function target-move-dist -;; Used lq/sq (defbehavior target-move-dist target ((arg0 int)) (let ((s5-0 (new-stack-vector0)) (f30-0 0.0) @@ -786,8 +766,6 @@ ) ) -;; definition for function turn-to-vector -;; Used lq/sq (defbehavior turn-to-vector target ((arg0 vector) (arg1 float)) (let ((gp-0 (new-stack-vector0))) (warp-vector-into-surface! gp-0 arg0 (-> self control local-normal)) @@ -849,8 +827,6 @@ ) ) -;; definition for function add-thrust -;; Used lq/sq (defbehavior add-thrust target () (let ((s5-0 (-> self control unknown-vector01)) (gp-0 (-> self control unknown-vector00)) @@ -949,10 +925,7 @@ s5-0 (- f0-11 - (* - (* f30-1 f30-1) - (-> self control unknown-surface01 slope-up-factor) - ) + (* f30-1 f30-1 (-> self control unknown-surface01 slope-up-factor)) ) ) ) @@ -1139,8 +1112,6 @@ ) ) -;; definition for function add-gravity -;; Used lq/sq (defbehavior add-gravity target () (let ((s5-0 (new-stack-vector0)) (gp-0 (new-stack-vector0)) @@ -1188,8 +1159,6 @@ ) ) -;; definition for function target-compute-slopes -;; Used lq/sq (defbehavior target-compute-slopes target ((arg0 vector)) (let ((gp-0 (new-stack-vector0))) (let ((a1-0 (new-stack-vector0)) @@ -1222,7 +1191,6 @@ 0 ) -;; definition for function do-rotations1 (defbehavior do-rotations1 target () (rotate-toward-orientation! (-> self control) @@ -1232,8 +1200,6 @@ ) ) -;; definition for function do-rotations2 -;; Used lq/sq (defbehavior do-rotations2 target () (let ((gp-0 (vector-z-quaternion! (new-stack-vector0) (-> self control dir-targ))) @@ -1345,8 +1311,6 @@ (target-compute-slopes (-> self control dynam gravity-normal)) ) -;; definition for function level-setup -;; INFO: Return type mismatch int vs none. (defbehavior level-setup target () (let ((gp-0 (-> self current-level))) (set! (-> self current-level) (level-get-target-inside *level*)) @@ -1382,9 +1346,6 @@ (none) ) -;; definition for function flag-setup -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior flag-setup target () (level-setup) (set! (-> self control unknown-vector10 quad) (-> self control transv quad)) @@ -1669,8 +1630,6 @@ (none) ) -;; definition for function post-flag-setup -;; INFO: Return type mismatch int vs none. (defbehavior post-flag-setup target () (if (logtest? (-> self control status) 40) (set! (-> self control unknown-dword20) (-> *display* base-frame-counter)) @@ -1700,8 +1659,6 @@ (none) ) -;; definition for function bend-gravity -;; Used lq/sq (defbehavior bend-gravity target () (set! (-> self control unknown-float82) @@ -1791,8 +1748,6 @@ ) ) -;; definition for function target-compute-edge -;; Used lq/sq (defbehavior target-compute-edge target () (let ((s5-0 *edge-grab-info*)) (when (not (dummy-9 s5-0)) @@ -1919,8 +1874,6 @@ (none) ) -;; definition for function target-compute-edge-rider -;; Used lq/sq (defbehavior target-compute-edge-rider target () (let ((gp-0 *edge-grab-info*)) (when (not (dummy-9 gp-0)) @@ -1973,8 +1926,6 @@ (none) ) -;; definition for function target-compute-pole -;; Used lq/sq (defbehavior target-compute-pole target () (let* ((s4-0 (handle->process (-> self control unknown-handle10))) (gp-0 (-> (the-as swingpole s4-0) dir)) @@ -2138,9 +2089,6 @@ (none) ) -;; definition for function target-calc-camera-pos -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior target-calc-camera-pos target () (let ((gp-0 (new 'stack-no-clear 'vector))) (cond @@ -2220,9 +2168,6 @@ (none) ) -;; definition for function joint-points -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior joint-points target () (let ((v1-0 (-> self neck))) (set! (-> v1-0 blend) 0.0) @@ -2334,8 +2279,6 @@ (none) ) -;; definition for function target-real-post -;; Used lq/sq (defbehavior target-real-post target () (let ((gp-0 (the int (-> *display* time-ratio)))) (set-time-ratios *display* 1.0) @@ -2449,14 +2392,11 @@ (none) ) -;; definition for function target-post (defun target-post () (target-real-post) (none) ) -;; definition for function target-swim-post -;; Used lq/sq (defbehavior target-swim-post target () (let ((gp-0 (the int (-> *display* time-ratio)))) (set-time-ratios *display* 1.0) @@ -2520,8 +2460,6 @@ (none) ) -;; definition for function target-no-stick-post -;; Used lq/sq (defbehavior target-no-stick-post target () (let ((gp-0 (the int (-> *display* time-ratio)))) (set-time-ratios *display* 1.0) @@ -2586,7 +2524,6 @@ (none) ) -;; definition for function target-no-move-post (defbehavior target-no-move-post target () (let ((gp-0 (the int (-> *display* time-ratio)))) (set-time-ratios *display* 1.0) @@ -2632,8 +2569,6 @@ (none) ) -;; definition for function target-slide-down-post -;; Used lq/sq (defbehavior target-slide-down-post target () (let ((gp-0 (the int (-> *display* time-ratio)))) (set-time-ratios *display* 1.0) @@ -2722,7 +2657,6 @@ (none) ) -;; definition for function target-no-ja-move-post (defbehavior target-no-ja-move-post target () (vector-! (-> self control unknown-vector12) @@ -2740,8 +2674,6 @@ (none) ) -;; definition for function reset-target-state -;; Used lq/sq (defbehavior reset-target-state target ((arg0 symbol)) (when arg0 (vector-identity! (-> self control scale)) @@ -2776,8 +2708,6 @@ self ) -;; definition for function init-target -;; Used lq/sq (defbehavior init-target target ((arg0 continue-point)) (set-setting! *setting-control* self 'allow-pause #f 0.0 0) (set-setting! *setting-control* self 'allow-progress #f 0.0 0) @@ -2788,7 +2718,7 @@ (set-continue! *game-info* arg0) (stack-size-set! (-> self main-thread) 1024) (logior! (-> self mask) (process-mask target)) - (set! (-> self state-hook) nothing) + (set! (-> self state-hook) (the-as (function none :behavior target) nothing)) (let ((s5-0 (new 'process 'control-info self (collide-list-enum player)))) (set! (-> self control) s5-0) (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) @@ -2911,9 +2841,40 @@ (set! (-> self water flags) (the-as uint #x4000f0)) (reset-target-state #t) (set! (-> self control unknown-vector52 quad) (-> self control trans quad)) - (set!(-> self control unknown-vector52 y) (+ -819200.0 (-> self control unknown-vector52 y))) + (set! + (-> self control unknown-vector52 y) + (+ -819200.0 (-> self control unknown-vector52 y)) + ) (set! (-> self align) (new 'process 'align-control self)) - (set! (-> self sidekick) (make-init-process sidekick init-sidekick :from *16k-dead-pool* :to self :stack *scratch-memory-top*)) + (let ((s5-1 (get-process *16k-dead-pool* sidekick #x4000))) + (set! (-> self sidekick) (the-as (pointer sidekick) (when s5-1 + (let + ((t9-37 + (method-of-type + sidekick + activate + ) + ) + ) + (t9-37 + (the-as sidekick s5-1) + self + 'sidekick + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-1 + init-sidekick + ) + (-> s5-1 ppointer) + ) + ) + ) + ) (set! (-> self manipy) (the-as (pointer manipy) #f)) (set! (-> self event-hook) target-generic-event-handler) (set! (-> self current-level) #f) @@ -2922,14 +2883,12 @@ (none) ) -;; definition for method 10 of type target (defmethod deactivate target ((obj target)) (set-zero! *camera-smush-control*) ((the-as (function process-drawable none) (find-parent-method target 10)) obj) (none) ) -;; definition for function stop (defun stop ((arg0 symbol)) (when *target* (kill-by-name 'target *active-pool*) @@ -2939,12 +2898,25 @@ 0 ) -;; definition for function start (defun start ((arg0 symbol) (arg1 continue-point)) (set! (-> *level* border?) #f) (set! (-> *setting-control* default border-mode) #f) (stop arg0) - (let ((v1-3 (make-init-process target init-target arg1 :from *target-dead-pool* :to *target-pool*))) + (let* ((s5-0 (get-process *target-dead-pool* target #x4000)) + (v1-3 (when s5-0 + (let ((t9-2 (method-of-type target activate))) + (t9-2 + (the-as target s5-0) + *target-pool* + 'target + (&-> *dram-stack* 14336) + ) + ) + (run-now-in-process s5-0 init-target arg1) + (-> s5-0 ppointer) + ) + ) + ) (if v1-3 (set! *target* (the-as target (-> v1-3 0 self))) (set! *target* #f) @@ -2952,3 +2924,9 @@ ) *target* ) + +0 + + + + diff --git a/goal_src/engine/target/target-h.gc b/goal_src/engine/target/target-h.gc index d61361435b..ab5022f894 100644 --- a/goal_src/engine/target/target-h.gc +++ b/goal_src/engine/target/target-h.gc @@ -8,6 +8,8 @@ ;; definition of type target (declare-type sidekick basic) (declare-type collide-cache basic) +(declare-type snowball-info basic) +(declare-type tube-info basic) (deftype target (process-drawable) ((control control-info :score 100 :offset 112) (fact-info-target fact-info-target :score 100 :offset 144) @@ -16,7 +18,7 @@ (game game-info :offset-assert 184) (neck joint-mod :offset-assert 188) (state-hook-time uint64 :offset-assert 192) - (state-hook function :offset-assert 200) + (state-hook (function none :behavior target) :offset-assert 200) (cam-user-mode symbol :offset-assert 204) (sidekick (pointer sidekick) :offset-assert 208) (manipy (pointer manipy) :offset-assert 212) @@ -24,8 +26,8 @@ (attack-info-rec attack-info :inline :offset-assert 336) (anim-seed uint64 :offset-assert 440) (alt-cam-pos vector :inline :offset-assert 448) - (snowball basic :offset-assert 464) - (tube basic :offset-assert 468) + (snowball snowball-info :offset-assert 464) + (tube tube-info :offset-assert 468) (flut basic :offset-assert 472) (current-level level :offset-assert 476) (saved-pos transformq :inline :offset-assert 480) diff --git a/goal_src/engine/target/target.gc b/goal_src/engine/target/target.gc index 5f5dc658df..4edc3a3df9 100644 --- a/goal_src/engine/target/target.gc +++ b/goal_src/engine/target/target.gc @@ -7,3 +7,6 @@ ;; TODO - for final-door (define-extern target-stance (state target)) + +;; TODO - for target-snowball +(define-extern target-jump (state target)) diff --git a/goal_src/engine/ui/hud-classes.gc b/goal_src/engine/ui/hud-classes.gc index 70e049ad02..7366f69017 100644 --- a/goal_src/engine/ui/hud-classes.gc +++ b/goal_src/engine/ui/hud-classes.gc @@ -5,14 +5,12 @@ ;; name in dgo: hud-classes ;; dgos: GAME, ENGINE - (define-extern *fuelcell-naked-sg* skeleton-group) +;; TODO - for progress (defun hud-hidden? () #t ) -;; TODO - for assistant-firecanyon -(define-extern hide-hud (function none)) -;; TODO - for static-screen -(define-extern hide-hud-quick (function none)) +;; decomp begins + diff --git a/goal_src/engine/ui/hud-h.gc b/goal_src/engine/ui/hud-h.gc index 62d216fc81..73c2ea4fc0 100644 --- a/goal_src/engine/ui/hud-h.gc +++ b/goal_src/engine/ui/hud-h.gc @@ -5,6 +5,15 @@ ;; name in dgo: hud-h ;; dgos: GAME, ENGINE +;; TODO - for assistant-firecanyon | process-taskable +(define-extern hide-hud (function none)) +;; TODO - for static-screen +(define-extern hide-hud-quick (function none)) +;; TODO - for process-taskable +(define-extern hud-hidden? (function symbol)) + +;; decomp begins + ;; definition of type hud-icon (deftype hud-icon (basic) ((icon (pointer manipy) :offset-assert 4) diff --git a/goal_src/engine/ui/text-h.gc b/goal_src/engine/ui/text-h.gc index c7daa9b09f..66dbb77d01 100644 --- a/goal_src/engine/ui/text-h.gc +++ b/goal_src/engine/ui/text-h.gc @@ -13,6 +13,10 @@ :type uint32 :bitfield #f (zero 0) + (confirm #x103) + (press-to-use #x105) + (confirm-play #x106) + (quit #x108) (pause #x109) (sfx-volume #x10a) (music-volume #x10b) @@ -147,6 +151,8 @@ (misty-bike-jump #x266) (misty-eco-challenge #x267) + (misty-daxter-scared #x26f) + (beach-seagulls-avalanche #x273) (misty-teetertotter-bonk-dax-tutorial #x2a4) @@ -155,6 +161,8 @@ (firecanyon-collect-cells-text #x2b3) + (yakow-owed-powercell #x297) + (village2-gambler-money #x300) (village2-geologist-money #x301) (village2-warrior-money #x302) @@ -195,6 +203,20 @@ (rolling-ring-chase-1 #x324) (rolling-ring-chase-2 #x325) + (sunken-blue-eco-charger-hint #x345) + + (sunken-qbert-hint #x34a) + + (sunken-blue-eco-charger-all-hint #x34d) + + (swamp-rats-nest-hint #x358) + + (swamp-bats-hint #x364) ;; maybe we can ???? the bats. lol + (flutflut-reminder #x368) + + (village2-not-enough-cells-levitator #x36c) + (villlage2-levitator-cell-req-text #x372) + (village3-miner-money #x400) (village3-oracle-money #x401) (snow-ram-3-left #x402) @@ -227,9 +249,17 @@ (cave-swing-poles #x426) + (assistant-lavatube-powercell-hint #x428) + (snow-frozen-crate #x42b) ;; task name? (snow-bumpers #x42c) + (cave-trap-nest-hint #x440) + + (ice-cube-hint #x448) + + (lavatube-powercell-req-text #x455) + (fire-canyon-end #x500) (fire-canyon-buzzer #x501) diff --git a/goal_src/levels/beach/bird-lady.gc b/goal_src/levels/beach/bird-lady.gc index d48e7254d8..65a68df505 100644 --- a/goal_src/levels/beach/bird-lady.gc +++ b/goal_src/levels/beach/bird-lady.gc @@ -7,7 +7,8 @@ (define-extern *bird-lady-sg* skeleton-group) -;; definition of type bird-lady +;; DECOMP BEGINS + (deftype bird-lady (process-taskable) () :heap-base #x110 @@ -16,7 +17,7 @@ :flag-assert #x350110017c ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -35,12 +36,10 @@ (set! *bird-lady-sg* v1-1) ) -;; definition for method 52 of type bird-lady -;; INFO: Return type mismatch int vs none. (defmethod dummy-52 bird-lady ((obj bird-lady)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -1024.0 f0-0))) ) @@ -56,20 +55,19 @@ (none) ) -;; definition for method 48 of type bird-lady -(defmethod draw-shadow bird-lady ((obj bird-lady)) +(defmethod draw-npc-shadow bird-lady ((obj bird-lady)) (-> obj draw shadow-ctrl) (cond ((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) - (nonzero? (logand (-> obj draw status) 8)) + (logtest? (-> obj draw status) 8) ) (let ((v1-9 (-> obj draw shadow-ctrl))) (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -81,7 +79,6 @@ (none) ) -;; definition for method 32 of type bird-lady (defmethod play-anim! bird-lady ((obj bird-lady) (arg0 symbol)) (case (current-status (-> obj tasks)) ((2 3) @@ -220,12 +217,10 @@ ) ) -;; definition for method 31 of type bird-lady (defmethod get-art-elem bird-lady ((obj bird-lady)) (-> obj draw art-group data 3) ) -;; definition for method 43 of type bird-lady (defmethod TODO-RENAME-43 bird-lady ((obj bird-lady)) (when (TODO-RENAME-10 @@ -241,27 +236,23 @@ ) (cond ((< 0.66 f0-2) - (dummy-11 (-> obj ambient) "BIR-LO02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "BIR-LO02" #f (-> obj root-override trans)) ) ((< 0.33 f0-2) - (dummy-11 (-> obj ambient) "BIR-LO03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "BIR-LO03" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "BIR-am08" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "BIR-am08" #f (-> obj root-override trans)) ) ) ) ) - (none) ) -;; definition for method 47 of type bird-lady -;; INFO: Return type mismatch basic vs symbol. (defmethod target-above-threshold? bird-lady ((obj bird-lady)) (the-as symbol (and *target* (< (-> (target-pos 0) z) -81920.0))) ) -;; definition for method 11 of type bird-lady (defmethod copy-defaults! bird-lady ((obj bird-lady) (arg0 res-lump)) (dummy-40 obj @@ -286,3 +277,7 @@ ) (none) ) + + + + diff --git a/goal_src/levels/beach/mayor.gc b/goal_src/levels/beach/mayor.gc index d5e70b0bd1..8f1151af44 100644 --- a/goal_src/levels/beach/mayor.gc +++ b/goal_src/levels/beach/mayor.gc @@ -7,17 +7,17 @@ (define-extern *mayor-sg* skeleton-group) -;; definition of type mayor +;; DECOMP BEGINS + (deftype mayor (process-taskable) - ((root-override collide-shape :offset 112) - ) + () :heap-base #x110 :method-count-assert 53 :size-assert #x17c :flag-assert #x350110017c ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -35,8 +35,6 @@ (set! *mayor-sg* v1-1) ) -;; definition for method 52 of type mayor -;; INFO: Return type mismatch int vs none. (defmethod dummy-52 mayor ((obj mayor)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 @@ -53,20 +51,19 @@ (none) ) -;; definition for method 48 of type mayor -(defmethod draw-shadow mayor ((obj mayor)) +(defmethod draw-npc-shadow mayor ((obj mayor)) (-> obj draw shadow-ctrl) (cond ((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) - (nonzero? (logand (-> obj draw status) 8)) + (logtest? (-> obj draw status) 8) ) (let ((v1-9 (-> obj draw shadow-ctrl))) (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -81,7 +78,6 @@ (none) ) -;; definition for function mayor-lurkerm-reward-speech (defun mayor-lurkerm-reward-speech ((arg0 mayor) (arg1 symbol)) (when arg1 (set! (-> arg0 cell-for-task) (game-task jungle-lurkerm)) @@ -99,7 +95,6 @@ ) ) -;; definition for method 32 of type mayor (defmethod play-anim! mayor ((obj mayor) (arg0 symbol)) (with-pp (set! (-> obj talk-message) (the-as uint 260)) @@ -2035,12 +2030,10 @@ ) ) -;; definition for method 31 of type mayor (defmethod get-art-elem mayor ((obj mayor)) (-> obj draw art-group data 3) ) -;; definition for method 39 of type mayor (defmethod should-display? mayor ((obj mayor)) (if *target* (< (- (-> (target-pos 0) z) (-> obj root-override trans z)) 57344.0) @@ -2048,7 +2041,6 @@ ) ) -;; definition for method 43 of type mayor (defmethod TODO-RENAME-43 mayor ((obj mayor)) (when (TODO-RENAME-10 @@ -2147,10 +2139,8 @@ ) ) ) - (none) ) -;; failed to figure out what this is: (defstate idle (mayor) :virtual #t :trans @@ -2173,7 +2163,6 @@ ) ) -;; definition for method 11 of type mayor (defmethod copy-defaults! mayor ((obj mayor) (arg0 res-lump)) (dummy-40 obj @@ -2191,3 +2180,7 @@ (dummy-42 obj) (none) ) + + + + diff --git a/goal_src/levels/beach/sculptor.gc b/goal_src/levels/beach/sculptor.gc index b9b9bf9602..6ab1f944c6 100644 --- a/goal_src/levels/beach/sculptor.gc +++ b/goal_src/levels/beach/sculptor.gc @@ -7,41 +7,10 @@ (define-extern *sculptor-sg* skeleton-group) (define-extern *sculptor-muse-sg* skeleton-group) +(declare-type muse nav-enemy) -;; TODO - for sculptor -(deftype muse (nav-enemy) - ((current-path-index float :offset-assert 400) - (prev-path-index float :offset-assert 404) - (dest-path-index float :offset-assert 408) - (player-path-index float :offset-assert 412) - (max-path-index float :offset-assert 416) - (sprint-distance float :offset-assert 420) - (dest-point vector :inline :offset-assert 432) - (anim spool-anim :offset-assert 448) ; TODO - guess - (victory-anim spool-anim :offset-assert 452) ; TODO - guess - (old-target-pos transformq :inline :offset-assert 464) - ) - :method-count-assert 76 - :size-assert #x200 - :heap-base #x190 - :flag-assert #x4c01900200 - ) +;; DECOMP BEGINS -(deftype point-on-path-segment-info (structure) - ((point vector :inline :offset-assert 0) - (segment vector 2 :inline :offset-assert 16) ;; TODO - guess - (dir vector :inline :offset-assert 48) - (nearest-point vector :inline :offset-assert 64) - (segment-length float :offset-assert 80) - (distance-to-segment float :offset-assert 84) - (parametric-index float :offset-assert 88) - ) - :method-count-assert 9 - :size-assert #x5c - :flag-assert #x90000005c - ) - -;; definition of type sculptor (deftype sculptor (process-taskable) ((muse handle :offset-assert 384) ) @@ -51,7 +20,7 @@ :flag-assert #x3501200188 ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -68,7 +37,6 @@ (set! *sculptor-muse-sg* v1-1) ) -;; failed to figure out what this is: (let ((v1-2 (new 'static 'skeleton-group @@ -86,12 +54,10 @@ (set! *sculptor-sg* v1-2) ) -;; definition for method 52 of type sculptor -;; INFO: Return type mismatch int vs none. (defmethod dummy-52 sculptor ((obj sculptor)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -2048.0 f0-0))) ) @@ -104,8 +70,7 @@ (none) ) -;; definition for method 48 of type sculptor -(defmethod draw-shadow sculptor ((obj sculptor)) +(defmethod draw-npc-shadow sculptor ((obj sculptor)) (-> obj draw shadow-ctrl) (cond ((and @@ -117,7 +82,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -129,7 +94,6 @@ (none) ) -;; definition for function muse-to-idle (defbehavior muse-to-idle sculptor ((arg0 muse)) (when (not (handle->process (-> arg0 incomming-attack-id))) (let ((s5-0 (get-process *default-dead-pool* manipy #x4000))) @@ -209,7 +173,6 @@ ) ) -;; failed to figure out what this is: (defstate give-cell (sculptor) :virtual #t :enter @@ -219,7 +182,6 @@ ) ) -;; definition for method 32 of type sculptor (defmethod play-anim! sculptor ((obj sculptor) (arg0 symbol)) (with-pp (case (current-status (-> obj tasks)) @@ -338,7 +300,7 @@ (run-now-in-process s5-1 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *sculptor-muse-sg* #f @@ -395,7 +357,6 @@ ) ) -;; definition for method 31 of type sculptor (defmethod get-art-elem sculptor ((obj sculptor)) (let ((v1-1 (current-status (-> obj tasks)))) (if (or (zero? v1-1) (= v1-1 7)) @@ -405,7 +366,6 @@ ) ) -;; definition for method 43 of type sculptor (defmethod TODO-RENAME-43 sculptor ((obj sculptor)) (when (TODO-RENAME-10 @@ -421,33 +381,31 @@ ) (cond ((< 0.85714287 f0-2) - (dummy-11 (-> obj ambient) "SCU-LO01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-LO01" #f (-> obj root-override trans)) ) ((< 0.71428573 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM05" #f (-> obj root-override trans)) ) ((< 0.5714286 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM06" #f (-> obj root-override trans)) ) ((< 0.42857143 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM03" #f (-> obj root-override trans)) ) ((< 0.2857143 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM04" #f (-> obj root-override trans)) ) ((< 0.14285715 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM01" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "SCU-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM02" #f (-> obj root-override trans)) ) ) ) ) - (none) ) -;; failed to figure out what this is: (defstate idle (sculptor) :virtual #t :code @@ -1230,7 +1188,6 @@ ) ) -;; definition for method 11 of type sculptor (defmethod copy-defaults! sculptor ((obj sculptor) (arg0 res-lump)) (dummy-40 obj arg0 *sculptor-sg* 3 40 (new 'static 'vector :w 4096.0) 5) (set! (-> obj tasks) (get-task-control (game-task misty-muse))) @@ -1239,4 +1196,8 @@ (set! (-> obj draw light-index) (the-as uint 3)) (dummy-42 obj) (none) - ) \ No newline at end of file + ) + + + + diff --git a/goal_src/levels/common/babak-with-cannon.gc b/goal_src/levels/common/babak-with-cannon.gc index 6a42d4e8db..65b10f0f6d 100644 --- a/goal_src/levels/common/babak-with-cannon.gc +++ b/goal_src/levels/common/babak-with-cannon.gc @@ -5,3 +5,717 @@ ;; name in dgo: babak-with-cannon ;; dgos: BEA, L1, MIS +(declare-type babak-with-cannon babak) +(define-extern babak-with-cannon-jump-off-cannon (state babak-with-cannon)) ;; unknown type +(define-extern babak-with-cannon-shooting (state babak-with-cannon)) ;; unknown type +(define-extern babak-with-cannon-jump-onto-cannon (state babak-with-cannon)) ;; unknown type +(define-extern babak-run-to-cannon (state babak)) ;; unknown type + +;; DECOMP BEGINS + +(deftype babak-with-cannon (babak) + ((cannon-ent entity :offset-assert 400) + (distance float :offset-assert 404) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x198 + :flag-assert #x4c01300198 + ) + + +nav-enemy-default-event-handler + +(defstate nav-enemy-idle (babak-with-cannon) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-default-event-handler + ) + :trans + (behavior () + (if + (and + (and + *target* + (>= + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (-> self state-timeout) + ) + ) + (go-virtual nav-enemy-patrol) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + 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 (-> self nav-info idle-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-post) + (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! + ) + ) + ) + (anim-loop) + (none) + ) + :post + (the-as (function none :behavior babak-with-cannon) #f) + ) + +(defstate nav-enemy-patrol (babak-with-cannon) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-default-event-handler + ) + :trans + (behavior () + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 30 + ) + (let ((f30-0 (- (-> (target-pos 0) y) (-> self collide-info trans y)))) + (if + (and + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 900 + ) + (or + (or + (not *target*) + (< + (-> self distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (< f30-0 -40960.0) + ) + ) + (go babak-run-to-cannon) + ) + ) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (-> self state-timeout) + ) + (if + (or + (not *target*) + (< + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (go-virtual nav-enemy-idle) + ) + ) + (if (nav-enemy-notice-player?) + (go-virtual nav-enemy-notice) + ) + ) + (none) + ) + :code + (-> (method-of-type babak nav-enemy-patrol) code) + ) + +(defstate babak-run-to-cannon (babak) + :event + (the-as + (function process int symbol event-message-block object :behavior babak) + nav-enemy-default-event-handler + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self nav destination-pos quad) (-> self entity extra trans quad)) + (set! (-> self nav target-pos quad) (-> self entity extra trans quad)) + (none) + ) + :trans + (behavior () + (if (nav-enemy-notice-player?) + (go-virtual nav-enemy-chase) + ) + (if (logtest? (nav-control-flags bit19) (-> self nav flags)) + (go babak-with-cannon-jump-onto-cannon) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (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 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! + ) + ) + ) + ) + (none) + ) + :post + (behavior () + (nav-enemy-travel-post) + (none) + ) + ) + +(defun handle->process-safe ((arg0 handle)) + (let ((v0-0 (the-as process #f))) + (if (handle->process arg0) + (set! v0-0 (-> arg0 process 0)) + ) + v0-0 + ) + ) + +(defun babak-with-cannon-compute-cannon-dir ((arg0 mistycannon) (arg1 vector)) + (set! (-> arg1 quad) (-> arg0 node-list data 3 bone transform vector 2 quad)) + arg1 + ) + +(defun babak-with-cannon-compute-ride-point ((arg0 mistycannon) (arg1 vector)) + (set! (-> arg1 quad) (-> arg0 root 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)) + ) + (vector-matrix*! arg1 a1-4 a2-0) + ) + arg1 + ) + +(defbehavior babak-with-cannon-ride-cannon-post babak-with-cannon () + (let* ((v1-0 (-> self cannon-ent)) + (s5-0 (if v1-0 + (-> v1-0 extra process) + ) + ) + (gp-0 + (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) + s5-0 + ) + ) + ) + (when gp-0 + (let ((s5-1 (new 'stack-no-clear 'vector))) + (babak-with-cannon-compute-cannon-dir (the-as mistycannon gp-0) s5-1) + (forward-up->quaternion (-> self collide-info quat) s5-1 *y-vector*) + ) + (babak-with-cannon-compute-ride-point + (the-as mistycannon gp-0) + (-> self collide-info trans) + ) + ) + ) + (nav-enemy-simple-post) + (none) + ) + +(defstate babak-with-cannon-jump-onto-cannon (babak-with-cannon) + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-jump-event-handler + ) + :exit + (behavior () + (logior! (-> self nav-enemy-flags) 24) + (none) + ) + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) + (set! (-> self turn-time) (the-as int (-> self nav-info run-turn-time))) + (set! (-> self nav-enemy-flags) (logand -25 (-> self nav-enemy-flags))) + (nav-enemy-neck-control-inactive) + (let* ((v1-7 (-> self cannon-ent)) + (gp-0 (if v1-7 + (-> v1-7 extra process) + ) + ) + (a0-2 + (if + (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) + gp-0 + ) + ) + ) + (cond + (a0-2 + (babak-with-cannon-compute-ride-point + (the-as mistycannon a0-2) + (-> self event-param-point) + ) + (nav-enemy-initialize-jump (-> self event-param-point)) + ) + (else + (go-virtual nav-enemy-idle) + ) + ) + ) + (when (not (nav-enemy-facing-point? (-> self jump-dest) 5461.3335)) + (ja-channel-push! 1 60) + (nav-enemy-turn-to-face-point (-> self jump-dest) 1820.4445) + ) + (logior! (-> self nav-enemy-flags) 16) + (nav-enemy-execute-jump) + (set! (-> self nav-enemy-flags) (logand -25 (-> self nav-enemy-flags))) + (let* ((v1-20 (-> self cannon-ent)) + (gp-1 (if v1-20 + (-> v1-20 extra process) + ) + ) + (a0-9 + (if + (and (nonzero? gp-1) (type-type? (-> gp-1 type) process-drawable)) + gp-1 + ) + ) + ) + (when a0-9 + (let + ((gp-2 + (babak-with-cannon-compute-cannon-dir + (the-as mistycannon a0-9) + (new 'stack-no-clear 'vector) + ) + ) + ) + (when (not (nav-enemy-facing-direction? gp-2 1820.4445)) + (ja-channel-push! 1 60) + (nav-enemy-turn-to-face-dir gp-2 182.04445) + (forward-up->quaternion (-> self collide-info quat) gp-2 *y-vector*) + ) + ) + ) + ) + (ja-channel-push! 1 30) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 frame-group) + (the-as art-joint-anim (-> self draw art-group data 17)) + ) + (set! + (-> a0-15 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 17)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (the-as art-joint-anim (-> self draw art-group data 17)) + 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! + ) + ) + ) + (go babak-with-cannon-shooting) + (none) + ) + :post + (the-as (function none :behavior babak-with-cannon) nav-enemy-jump-post) + ) + +(defstate babak-with-cannon-jump-off-cannon (babak-with-cannon) + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-jump-event-handler + ) + :exit + (behavior () + (logior! (-> self nav-enemy-flags) 24) + (none) + ) + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (nav-enemy-initialize-jump (-> self entity extra trans)) + (nav-enemy-neck-control-look-at) + (set! (-> self nav-enemy-flags) (logand -25 (-> self nav-enemy-flags))) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 17)) + ) + (set! (-> a0-2 param 0) 0.0) + (set! (-> a0-2 param 1) 2.0) + (set! + (-> a0-2 frame-num) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 17)) + data + 0 + length + ) + -1 + ) + ) + ) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 17)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) 0.0) + (set! (-> a0-3 param 1) 2.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (not (nav-enemy-facing-point? (-> self jump-dest) 5461.3335)) + (ja-channel-push! 1 60) + (nav-enemy-turn-to-face-point (-> self jump-dest) 1820.4445) + ) + (logior! (-> self nav-enemy-flags) 16) + (nav-enemy-execute-jump) + (let ((a1-6 (dummy-16 (-> self nav) (-> self jump-dest)))) + (set-current-poly! (-> self nav) a1-6) + ) + (go-virtual nav-enemy-jump-land) + (none) + ) + :post + (the-as (function none :behavior babak-with-cannon) nav-enemy-jump-post) + ) + +(defstate babak-with-cannon-shooting (babak-with-cannon) + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-default-event-handler + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (let ((v1-2 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (if v1-2 + (logior! (-> v1-2 extra perm status) (entity-perm-status complete)) + ) + ) + (none) + ) + :exit + (behavior () + (let ((v1-0 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (if v1-0 + (logclear! (-> v1-0 extra perm status) (entity-perm-status complete)) + ) + ) + (none) + ) + :trans + (behavior () + (let ((f0-1 (- (-> (target-pos 0) y) (-> self collide-info trans y)))) + (if + (and + (< -40960.0 f0-1) + (and + (and + *target* + (>= + (-> self distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 900 + ) + ) + ) + (go babak-with-cannon-jump-off-cannon) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + babak-with-cannon-ride-cannon-post + ) + +(defstate nav-enemy-die (babak-with-cannon) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-default-event-handler + ) + :trans + (behavior () + (if (and *target* (= (-> *target* current-level name) 'beach)) + (spool-push *art-control* "beachcam-cannon" 0 self -1.0) + ) + (if (and *target* (= (-> *target* current-level name) 'misty)) + (spool-push *art-control* "mistycam-cannon" 0 self -1.0) + ) + (let + ((t9-3 + (-> + (the-as (state nav-enemy) (find-parent-method babak-with-cannon 23)) + trans + ) + ) + ) + (if t9-3 + (t9-3) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-fuel-cell (babak-with-cannon) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + process-drawable-fuel-cell-handler + ) + :code + (behavior () + (ja-channel-set! 0) + (dummy-48 (-> self collide-info)) + (ja-post) + (when (not (task-complete? *game-info* (-> self entity extra perm task))) + (when + (not + (and + (-> self entity) + (logtest? + (-> self entity extra perm status) + (entity-perm-status complete) + ) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (if (and *target* (= (-> *target* current-level name) 'beach)) + (beachcam-spawn) + ) + (if (and *target* (= (-> *target* current-level name) 'misty)) + (mistycam-spawn) + ) + ) + (if (not (-> self child)) + (birth-pickup-at-point + (-> self collide-info trans) + 6 + (the float (-> self entity extra perm task)) + #f + self + #f + ) + ) + (while (-> self child) + (suspend) + ) + ) + (dummy-18 self) + (none) + ) + ) + +(defmethod common-post babak-with-cannon ((obj babak-with-cannon)) + (cond + ((= (level-status *level* 'beach) 'active) + (spool-push *art-control* "beachcam-cannon" 0 obj -99.0) + ) + ((= (level-status *level* 'misty) 'active) + (spool-push *art-control* "mistycam-cannon" 0 obj -99.0) + ) + ) + ((method-of-type nav-enemy common-post) obj) + (none) + ) + +(defmethod + copy-defaults! + babak-with-cannon + ((obj babak-with-cannon) (arg0 res-lump)) + (initialize-collision obj) + (process-drawable-from-entity! obj arg0) + (TODO-RENAME-48 obj) + (set! (-> obj distance) (res-lump-float arg0 'distance :default 163840.0)) + (set! (-> obj cannon-ent) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (if + (or + (not + (and + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status complete)) + ) + ) + (zero? (logand (-> obj enemy-info options) 2)) + ) + (go (method-of-object obj nav-enemy-idle)) + ) + (go (method-of-object obj nav-enemy-fuel-cell)) + (none) + ) + + + + diff --git a/goal_src/levels/common/babak.gc b/goal_src/levels/common/babak.gc index f0b053a2f4..2eb9460587 100644 --- a/goal_src/levels/common/babak.gc +++ b/goal_src/levels/common/babak.gc @@ -7,12 +7,702 @@ (define-extern *babak-sg* skeleton-group) -;; TODO - for sidekick-human +;; DECOMP BEGINS + (deftype babak (nav-enemy) () + :heap-base #x120 :method-count-assert 76 :size-assert #x190 - :heap-base #x120 :flag-assert #x4c01200190 - ;; not enough basic ops ) + + +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "babak" + :bounds + (new 'static 'vector :y 8192.0 :w 12288.0) + :max-lod 2 + :longest-edge (meters 1.0) + :version #x6 + :shadow 4 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) -1) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 163840.0) + (set! (-> v1-1 mgeo 2) (the-as uint 3)) + (set! (-> v1-1 lod-dist 2) 4095996000.0) + (set! *babak-sg* v1-1) + ) + +(defstate nav-enemy-patrol (babak) + :virtual #t + :code + (behavior () + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 10) + ) + (ja-channel-push! 1 45) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> gp-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 12.0 0)) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (ja-channel-push! 1 60) + ) + ) + ((the-as + (function none) + (-> (method-of-type nav-enemy nav-enemy-patrol) code) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-chase (babak) + :virtual #t + :code + (behavior () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 14) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 51) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) f30-0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (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-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (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 (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-45 (-> self skel root-channel 0))) + (set! (-> v1-45 num-func) num-func-identity) + (set! (-> v1-45 frame-num) 0.0) + ) + ) + ) + (while #t + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) f30-0) + (joint-control-channel-group-eval! + a0-17 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-stare (babak) + :virtual #t + :code + (behavior () + (set! (-> self turn-time) 60) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (when + (or + (logtest? (-> self nav-enemy-flags) 256) + (and (nav-enemy-player-vulnerable?) (nav-enemy-rnd-percent? 0.5)) + ) + (ja-channel-push! 1 30) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! (-> gp-0 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-0 param 1) f30-0) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-1 param 1) f30-0) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (while #t + (when (not (nav-enemy-facing-player? 2730.6667)) + (logior! (-> self nav-enemy-flags) 16) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) 1.0) + (joint-control-channel-group! + a0-9 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (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 16)) + ) + ) + (let ((v1-28 (-> self skel root-channel 0))) + (set! (-> v1-28 num-func) num-func-identity) + (set! (-> v1-28 frame-num) 0.0) + ) + (until (nav-enemy-facing-player? 1820.4445) + (ja-blend-eval) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) 0.75) + (joint-control-channel-group-eval! + a0-15 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + ) + (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 ((a0-23 (-> self skel root-channel 0))) + (set! + (-> a0-23 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-23 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-23 param 1) f30-0) + (set! (-> a0-23 frame-num) 0.0) + (joint-control-channel-group! + a0-23 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-24 (-> self skel root-channel 0))) + (set! + (-> a0-24 param 0) + (the float (+ (-> a0-24 frame-group data 0 length) -1)) + ) + (set! (-> a0-24 param 1) f30-0) + (joint-control-channel-group-eval! + a0-24 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (nav-enemy-rnd-percent? 0.3) + (ja-channel-push! 1 30) + (let ((gp-2 (-> self skel root-channel 0))) + (set! + (-> gp-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! (-> gp-2 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-2 param 1) f30-0) + (set! (-> gp-2 frame-num) 0.0) + (joint-control-channel-group! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-3 param 1) f30-0) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-give-up (babak) + :virtual #t + :code + (behavior () + (set! (-> self rotate-speed) 218453.33) + (set! (-> self turn-time) 150) + (ja-channel-push! 1 45) + (let ((s4-0 (-> self collide-info)) + (s5-0 (target-pos 0)) + ) + (when + (< + (fabs + (deg-diff + (y-angle s4-0) + (vector-y-angle + (vector-! (new 'stack-no-clear 'vector) s5-0 (-> s4-0 trans)) + ) + ) + ) + 12743.111 + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 9)) + 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 9)) + 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! + ) + ) + ) + ) + ) + (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) + (nav-enemy-get-new-patrol-point) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-12 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + 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 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-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! + ) + ) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +(defstate nav-enemy-jump-land (babak) + :virtual #t + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 22) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + ) + (set! (-> gp-0 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-0 param 1) 0.5) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-1 param 1) 0.5) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +(define + *babak-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 5 + :walk-anim 6 + :turn-anim 16 + :notice-anim 7 + :run-anim 8 + :jump-anim 13 + :jump-land-anim 14 + :victory-anim 11 + :taunt-anim 11 + :die-anim 12 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 2880.0) + :run-acceleration (meters 1.0) + :run-turn-time #x1e + :walk-travel-speed (meters 3.0) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time #x96 + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 2.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :proximity-notice-distance (meters 20.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #t + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #t + :use-proximity-notice #t + :use-jump-blocked #t + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +(defmethod initialize-collision babak ((obj babak)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) 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! (-> s4-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s4-0 local-sphere) 0.0 8192.0 0.0 12288.0) + (dummy-46 s5-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 action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 4096.0 0.0 3072.0) + ) + (dummy-28 s4-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 action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 1) + (set-vector! (-> s3-1 local-sphere) 0.0 9830.4 0.0 3072.0) + ) + (dummy-28 s4-0) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (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) 2) + (set! (-> s3-2 transform-index) 6) + (set-vector! (-> s3-2 local-sphere) 0.0 0.0 0.0 2048.0) + ) + (dummy-28 s4-0) + ) + (set! (-> s5-0 nav-radius) 6144.0) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-48 babak ((obj babak)) + (dummy-14 obj *babak-sg* '()) + (TODO-RENAME-45 obj *babak-nav-enemy-info*) + (set! (-> obj neck up) (the-as uint 0)) + (set! (-> obj neck nose) (the-as uint 1)) + (set! (-> obj neck ear) (the-as uint 2)) + 0 + (none) + ) + +(defmethod TODO-RENAME-59 babak ((obj babak)) + (cond + ((and + (and + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status complete)) + ) + (logtest? (-> obj enemy-info options) 2) + ) + (go (method-of-object obj nav-enemy-fuel-cell)) + ) + ((logtest? (-> obj enemy-info options) 32) + (go (method-of-object obj nav-enemy-wait-for-cue)) + ) + (else + (go (method-of-object obj nav-enemy-idle)) + ) + ) + 0 + (none) + ) + + + + diff --git a/goal_src/levels/common/baseplat.gc b/goal_src/levels/common/baseplat.gc index cc69c31660..99e7fcef00 100644 --- a/goal_src/levels/common/baseplat.gc +++ b/goal_src/levels/common/baseplat.gc @@ -5,7 +5,8 @@ ;; name in dgo: baseplat ;; dgos: GAME, COMMON, L1 -;; definition of type baseplat +;; DECOMP BEGINS + (deftype baseplat (process-drawable) ((root-override collide-shape-moving :offset 112) (smush smush-control :inline :offset-assert 176) @@ -27,20 +28,7 @@ ) ) -;; definition for method 3 of type baseplat -(defmethod inspect baseplat ((obj baseplat)) - (let ((t9-0 (method-of-type process-drawable inspect))) - (t9-0 obj) - ) - (format #t "~T~Tsmush: #~%" (-> obj smush)) - (format #t "~T~Tbasetrans: #~%" (-> obj basetrans)) - (format #t "~T~Tbouncing: ~A~%" (-> obj bouncing)) - obj - ) -;; definition for method 21 of type baseplat -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod dummy-21 baseplat ((obj baseplat)) (logior! (-> obj skel status) 1) (set! (-> obj basetrans quad) (-> obj root-override trans quad)) @@ -49,8 +37,6 @@ (none) ) -;; definition for method 22 of type baseplat -;; INFO: Return type mismatch int vs none. (defmethod dummy-22 baseplat ((obj baseplat)) (activate! (-> obj smush) -1.0 60 150 1.0 1.0) (set! (-> obj bouncing) #t) @@ -60,7 +46,6 @@ (none) ) -;; definition for function plat-code (defbehavior plat-code baseplat () (transform-post) (suspend) @@ -79,8 +64,6 @@ (none) ) -;; definition for function plat-trans -;; Used lq/sq (defbehavior plat-trans baseplat () (rider-trans) (cond @@ -101,22 +84,16 @@ (none) ) -;; definition for function plat-post -;; INFO: Return type mismatch int vs none. (defbehavior plat-post baseplat () (dummy-20 self) (rider-post) (none) ) -;; definition for method 25 of type baseplat -;; INFO: Return type mismatch int vs sparticle-launch-group. (defmethod TODO-RENAME-25 baseplat ((obj baseplat)) (the-as sparticle-launch-group 0) ) -;; definition for method 20 of type baseplat -;; INFO: Return type mismatch object vs none. (defmethod dummy-20 baseplat ((obj baseplat)) (if (nonzero? (-> obj part)) (spawn (-> obj part) (-> obj root-override trans)) @@ -124,8 +101,6 @@ (none) ) -;; definition for function plat-event -;; INFO: Return type mismatch none vs object. (defbehavior plat-event baseplat ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -137,7 +112,6 @@ ) ) -;; definition of type eco-door (deftype eco-door (process-drawable) ((root-override collide-shape :offset 112) (speed float :offset-assert 176) @@ -167,28 +141,7 @@ ) ) -;; definition for method 3 of type eco-door -;; Used lq/sq -(defmethod inspect eco-door ((obj eco-door)) - (let ((t9-0 (method-of-type process-drawable inspect))) - (t9-0 obj) - ) - (format #t "~T~Tspeed: ~f~%" (-> obj speed)) - (format #t "~T~Topen-distance: ~f~%" (-> obj open-distance)) - (format #t "~T~Tclose-distance: ~f~%" (-> obj close-distance)) - (format #t "~T~Tout-dir: #~%" (-> obj out-dir)) - (format #t "~T~Topen-sound: ~D~%" (-> obj open-sound)) - (format #t "~T~Tclose-sound: ~D~%" (-> obj close-sound)) - (format #t "~T~Tstate-actor: ~A~%" (-> obj state-actor)) - (format #t "~T~Tflags: ~D~%" (-> obj flags)) - (format #t "~T~Tlocked: ~A~%" (-> obj locked)) - (format #t "~T~Tauto-close: ~A~%" (-> obj auto-close)) - (format #t "~T~Tone-way: ~A~%" (-> obj one-way)) - obj - ) -;; definition for function eco-door-event-handler -;; INFO: Return type mismatch symbol vs object. (defbehavior eco-door-event-handler eco-door ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -227,10 +180,8 @@ ) ) -;; failed to figure out what this is: eco-door-event-handler -;; failed to figure out what this is: (defstate door-closed (eco-door) :virtual #t :event @@ -298,7 +249,6 @@ eco-door-event-handler ) ) -;; failed to figure out what this is: (defstate door-opening (eco-door) :virtual #t :event @@ -375,7 +325,6 @@ eco-door-event-handler (the-as (function none :behavior eco-door) transform-post) ) -;; failed to figure out what this is: (defstate door-open (eco-door) :virtual #t :event @@ -428,14 +377,13 @@ eco-door-event-handler ) ) -;; failed to figure out what this is: (defstate door-closing (eco-door) :virtual #t :event eco-door-event-handler :code (behavior () - ((method-of-object (-> self root-override) dummy-49)) + (dummy-49 (-> self root-override)) (set! (-> self draw status) (logand -3 (-> self draw status))) (let ((gp-0 (new 'stack 'overlaps-others-params))) (set! (-> gp-0 options) (the-as uint 1)) @@ -483,8 +431,6 @@ eco-door-event-handler (the-as (function none :behavior eco-door) transform-post) ) -;; definition for method 26 of type eco-door -;; INFO: Return type mismatch int vs none. (defmethod dummy-26 eco-door ((obj eco-door)) (when (-> obj state-actor) (if @@ -500,8 +446,6 @@ eco-door-event-handler (none) ) -;; definition for method 24 of type eco-door -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-24 eco-door ((obj eco-door)) (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) @@ -532,14 +476,11 @@ eco-door-event-handler (none) ) -;; definition for method 25 of type eco-door -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-25 eco-door ((obj eco-door)) 0 (none) ) -;; definition for method 11 of type eco-door (defmethod copy-defaults! eco-door ((obj eco-door) (arg0 res-lump)) (TODO-RENAME-24 obj) (process-drawable-from-entity! obj arg0) diff --git a/goal_src/levels/common/mistycannon.gc b/goal_src/levels/common/mistycannon.gc index f1cbb36a0c..0d581266bd 100644 --- a/goal_src/levels/common/mistycannon.gc +++ b/goal_src/levels/common/mistycannon.gc @@ -5,3 +5,45 @@ ;; name in dgo: mistycannon ;; dgos: BEA, L1, MIS +;; TODO - for babak-with-cannon +(deftype angle-tracker (structure) + ((value float :offset-assert 0) + (min float :offset-assert 4) + (range float :offset-assert 8) + (speed float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) +(deftype mistycannon (process-drawable) + ((rotate angle-tracker :inline :offset-assert 176) + (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) + (launch-origin vector :inline :offset-assert 272) + (goggles vector :inline :offset-assert 288) + (avoid-entity basic :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) + ) + :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) + ) + ) diff --git a/goal_src/levels/common/nav-enemy-h.gc b/goal_src/levels/common/nav-enemy-h.gc index 650c3eac88..ebd12eca57 100644 --- a/goal_src/levels/common/nav-enemy-h.gc +++ b/goal_src/levels/common/nav-enemy-h.gc @@ -5,6 +5,14 @@ ;; name in dgo: nav-enemy-h ;; dgos: GAME, COMMON, L1 +(declare-type nav-enemy process-drawable) +(define-extern nav-enemy-send-attack (function process touching-shapes-entry symbol object :behavior nav-enemy)) +(define-extern nav-enemy-set-hit-from-direction (function process none :behavior nav-enemy)) +(define-extern nav-enemy-get-new-patrol-point (function int :behavior nav-enemy)) +(define-extern nav-enemy-test-point-near-nav-mesh? (function vector symbol :behavior nav-enemy)) + +;; DECOMP BEGINS + (deftype nav-enemy-info (basic) ((idle-anim int32 :offset-assert 4) (walk-anim int32 :offset-assert 8) @@ -45,57 +53,57 @@ (shadow-max-y meters :offset-assert 168) (shadow-min-y meters :offset-assert 172) (shadow-locus-dist meters :offset-assert 176) - (use-align symbol :offset-assert 180) - (draw-shadow symbol :offset-assert 184) - (move-to-ground symbol :offset-assert 188) - (hover-if-no-ground symbol :offset-assert 192) - (use-momentum symbol :offset-assert 196) - (use-flee symbol :offset-assert 200) - (use-proximity-notice symbol :offset-assert 204) - (use-jump-blocked symbol :offset-assert 208) - (use-jump-patrol symbol :offset-assert 212) + (use-align symbol :offset-assert 180) + (draw-shadow symbol :offset-assert 184) + (move-to-ground symbol :offset-assert 188) + (hover-if-no-ground symbol :offset-assert 192) + (use-momentum symbol :offset-assert 196) + (use-flee symbol :offset-assert 200) + (use-proximity-notice symbol :offset-assert 204) + (use-jump-blocked symbol :offset-assert 208) + (use-jump-patrol symbol :offset-assert 212) (gnd-collide-with uint64 :offset-assert 216) - (debug-draw-neck symbol :offset-assert 224) - (debug-draw-jump symbol :offset-assert 228) + (debug-draw-neck symbol :offset-assert 224) + (debug-draw-jump symbol :offset-assert 228) ) :method-count-assert 9 :size-assert #xe8 :flag-assert #x9000000e8 ) + (deftype nav-enemy (process-drawable) - ((collide-info collide-shape-moving :score 100 :offset 112) - (enemy-info fact-info-enemy :score 100 :offset 144) - (hit-from-dir vector :inline :offset-assert 176) - (event-param-point vector :inline :offset-assert 192) - (frustration-point vector :inline :offset-assert 208) - (jump-dest vector :inline :offset-assert 224) - (jump-trajectory trajectory :inline :offset-assert 240) - (jump-time uint64 :offset-assert 280) - (nav-info nav-enemy-info :offset-assert 288) - (target-speed float :offset-assert 292) - (momentum-speed float :offset-assert 296) - (acceleration float :offset-assert 300) - (rotate-speed float :offset-assert 304) - (turn-time int64 :offset-assert 312) - (frustration-time int64 :offset-assert 320) - (speed-scale float :offset-assert 328) - (neck joint-mod :offset-assert 332) ; this is what `neck` is on the pelican - (reaction-time int64 :offset-assert 336) - (notice-time int64 :offset-assert 344) - (state-timeout int64 :offset-assert 352) - (free-time int64 :offset-assert 360) - (touch-time int64 :offset-assert 368) - (nav-enemy-flags uint32 :offset-assert 376) - (incomming-attack-id handle :offset-assert 384) - (jump-return-state (state process) :offset-assert 392) - (rand-gen random-generator :offset-assert 396) + ((collide-info collide-shape-moving :offset 112) + (enemy-info fact-info-enemy :offset 144) + (hit-from-dir vector :inline :offset-assert 176) + (event-param-point vector :inline :offset-assert 192) + (frustration-point vector :inline :offset-assert 208) + (jump-dest vector :inline :offset-assert 224) + (jump-trajectory trajectory :inline :offset-assert 240) + (jump-time uint64 :offset-assert 280) + (nav-info nav-enemy-info :offset-assert 288) + (target-speed float :offset-assert 292) + (momentum-speed float :offset-assert 296) + (acceleration float :offset-assert 300) + (rotate-speed float :offset-assert 304) + (turn-time int64 :offset-assert 312) + (frustration-time int64 :offset-assert 320) + (speed-scale float :offset-assert 328) + (neck joint-mod :offset-assert 332) + (reaction-time int64 :offset-assert 336) + (notice-time int64 :offset-assert 344) + (state-timeout int64 :offset-assert 352) + (free-time int64 :offset-assert 360) + (touch-time int64 :offset-assert 368) + (nav-enemy-flags uint32 :offset-assert 376) + (incomming-attack-id handle :offset-assert 384) + (jump-return-state (state process) :offset-assert 392) + (rand-gen random-generator :offset-assert 396) ) :heap-base #x120 :method-count-assert 76 :size-assert #x190 :flag-assert #x4c01200190 - ;; inherited inspect of process-drawable (:methods (nav-enemy-attack () _type_ :state 20) (nav-enemy-chase () _type_ :state 21) @@ -128,9 +136,9 @@ (TODO-RENAME-48 (_type_) none 48) ;; - Stubbed (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) (TODO-RENAME-50 (_type_ vector) symbol 50) - (dummy-51 (_type_) none 51) - (dummy-52 (_type_) none 52) - (dummy-53 (_type_) none 53) + (dummy-51 (_type_) float 51) + (dummy-52 (_type_ vector) vector 52) + (dummy-53 (_type_) symbol 53) (dummy-54 (_type_) none 54) (dummy-55 (_type_) none 55) (dummy-56 (_type_) none 56) @@ -149,15 +157,16 @@ (dummy-69 (_type_) none 69) (dummy-70 (_type_) none 70) (dummy-71 (_type_) none 71) - (dummy-72 (_type_ process event-message-block) object 72) ;; TODO - args unknown, 3rd arg contains a touching-shapes-entry offset 16/20 + (dummy-72 (_type_ process event-message-block) object 72) (TODO-RENAME-73 (_type_ process) symbol 73) (nav-enemy-jump-blocked () _type_ :state 74) (dummy-75 (_type_) none 75) ) ) -;; NOTE - some forward declarations -(define-extern nav-enemy-send-attack (function process touching-shapes-entry symbol object :behavior nav-enemy)) -(define-extern nav-enemy-set-hit-from-direction (function process none :behavior nav-enemy)) -(define-extern nav-enemy-get-new-patrol-point (function int :behavior nav-enemy)) -(define-extern nav-enemy-test-point-near-nav-mesh? (function vector symbol :behavior nav-enemy)) + +0 + + + + diff --git a/goal_src/levels/common/nav-enemy.gc b/goal_src/levels/common/nav-enemy.gc index 3fff00e757..6a35762a13 100644 --- a/goal_src/levels/common/nav-enemy.gc +++ b/goal_src/levels/common/nav-enemy.gc @@ -5,32 +5,28 @@ ;; name in dgo: nav-enemy ;; dgos: GAME, COMMON, L1 -;; definition for function nav-enemy-rnd-float +;; DECOMP BEGINS + (defun nav-enemy-rnd-float () (rand-vu) ) -;; definition for function nav-enemy-rnd-percent? (defun nav-enemy-rnd-percent? ((arg0 float)) (>= arg0 (rand-vu)) ) -;; definition for function nav-enemy-rnd-float-range (defbehavior nav-enemy-rnd-float-range nav-enemy ((arg0 float) (arg1 float)) (+ arg0 (* (rand-vu) (- arg1 arg0))) ) -;; definition for function nav-enemy-rnd-int-count (defun nav-enemy-rnd-int-count ((arg0 int)) (the int (* (rand-vu) (the float arg0))) ) -;; definition for function nav-enemy-rnd-int-range (defun nav-enemy-rnd-int-range ((arg0 int) (arg1 int)) (+ arg0 (the int (* (rand-vu) (the float (+ (- 1 arg0) arg1))))) ) -;; definition for function nav-enemy-rnd-go-idle? (defun nav-enemy-rnd-go-idle? ((arg0 float)) (let* ((v1-3 (-> *display* frames (-> *display* last-screen) frame run-time)) (f1-2 (fmax 0.0 (fmin 1.0 (* 0.001 (+ -7000.0 (the float v1-3)))))) @@ -39,7 +35,6 @@ ) ) -;; definition for method 9 of type trajectory (defmethod eval-position! trajectory @@ -54,8 +49,6 @@ result ) -;; definition for method 7 of type nav-enemy -;; INFO: Return type mismatch none vs nav-enemy. (defmethod relocate nav-enemy ((obj nav-enemy) (arg0 int)) (if (nonzero? (-> obj neck)) (set! (-> obj neck) (the-as joint-mod (+ (the-as int (-> obj neck)) arg0))) @@ -78,7 +71,6 @@ ) ) -;; definition for method 42 of type nav-enemy (defmethod TODO-RENAME-42 nav-enemy ((obj nav-enemy)) (local-vars (v1-11 symbol)) (if (<= (-> obj path curve num-cverts) 0) @@ -102,8 +94,6 @@ 0 ) -;; definition for method 39 of type nav-enemy -;; INFO: Return type mismatch int vs none. (defmethod common-post nav-enemy ((obj nav-enemy)) (when (and @@ -119,7 +109,7 @@ (dummy-54 (-> obj collide-info) 2 1) (set! (-> obj nav-enemy-flags) (logand -257 (-> obj nav-enemy-flags))) ) - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) (when *target* (if *target* (look-at-enemy! @@ -148,7 +138,6 @@ (none) ) -;; definition for method 44 of type nav-enemy (defmethod dummy-44 nav-enemy @@ -170,7 +159,6 @@ ) ) -;; definition for method 72 of type nav-enemy (defmethod dummy-72 nav-enemy @@ -192,7 +180,6 @@ ) ) -;; definition for method 73 of type nav-enemy (defmethod TODO-RENAME-73 nav-enemy ((obj nav-enemy) (arg0 process)) (with-pp (let ((v1-0 (new 'stack-no-clear 'event-message-block))) @@ -208,8 +195,6 @@ ) ) -;; definition for method 43 of type nav-enemy -;; INFO: Return type mismatch none vs object. ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? (defmethod dummy-43 @@ -239,8 +224,6 @@ ) ) -;; definition for function nav-enemy-send-attack -;; INFO: Return type mismatch symbol vs object. (defbehavior nav-enemy-send-attack nav-enemy ((arg0 process) (arg1 touching-shapes-entry) (arg2 symbol)) @@ -264,8 +247,6 @@ ) ) -;; definition for function nav-enemy-default-event-handler -;; Used lq/sq (defbehavior nav-enemy-default-event-handler nav-enemy ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -320,7 +301,6 @@ (none) ) -;; definition for function nav-enemy-jump-event-handler (defbehavior nav-enemy-jump-event-handler nav-enemy ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -336,7 +316,6 @@ ) ) -;; definition for function process-drawable-death-event-handler (defbehavior process-drawable-death-event-handler process-drawable ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -353,17 +332,13 @@ ) ) -;; failed to figure out what this is: nav-enemy-default-event-handler -;; definition for function nav-enemy-common-post (defbehavior nav-enemy-common-post nav-enemy () (common-post self) (none) ) -;; definition for function nav-enemy-simple-post -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-simple-post nav-enemy () (TODO-RENAME-9 (-> self align)) (nav-enemy-common-post) @@ -372,17 +347,12 @@ nav-enemy-default-event-handler (none) ) -;; definition for method 40 of type nav-enemy -;; INFO: Return type mismatch int vs none. (defmethod dummy-40 nav-enemy ((obj nav-enemy)) (dummy-11 (-> obj nav) (-> obj nav target-pos)) 0 (none) ) -;; definition for method 41 of type nav-enemy -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod dummy-41 nav-enemy ((obj nav-enemy)) (cond ((-> obj nav-info use-align) @@ -446,8 +416,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for method 37 of type nav-enemy -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-37 nav-enemy ((obj nav-enemy)) (when (logtest? (-> obj nav-enemy-flags) 16) (if @@ -473,8 +441,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for method 38 of type nav-enemy -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-38 nav-enemy ((obj nav-enemy)) (if (-> obj nav-info move-to-ground) (dummy-59 @@ -492,8 +458,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-travel-post -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-travel-post nav-enemy () (cond ((logtest? (-> self nav-enemy-flags) 8) @@ -526,8 +490,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-patrol-post -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-patrol-post nav-enemy () (when (or @@ -553,9 +515,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-chase-post -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior nav-enemy-chase-post nav-enemy () (set! (-> self nav target-pos quad) (-> (target-pos 0) quad)) (nav-enemy-travel-post) @@ -563,9 +522,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-flee-post -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior nav-enemy-flee-post nav-enemy () (let ((gp-1 @@ -597,8 +553,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-face-player-post -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-face-player-post nav-enemy () (if (and *target* (logtest? (-> self nav-enemy-flags) 16)) (seek-to-point-toward-point! @@ -613,9 +567,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-falling-post -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior nav-enemy-falling-post nav-enemy () (vector-v++! (-> self collide-info transv) @@ -631,9 +582,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-death-post -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior nav-enemy-death-post nav-enemy () (vector-v++! (-> self collide-info transv) @@ -645,8 +593,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-neck-control-look-at -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-neck-control-look-at nav-enemy () (logior! (-> self nav-enemy-flags) #x4000) (if (nonzero? (-> self neck)) @@ -656,8 +602,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-neck-control-inactive -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-neck-control-inactive nav-enemy () (when (and (nonzero? (-> self neck)) (logtest? (-> self nav-enemy-flags) #x4000)) @@ -668,8 +612,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-player-vulnerable? -;; INFO: Return type mismatch basic vs symbol. (defun nav-enemy-player-vulnerable? () (the-as symbol @@ -677,7 +619,6 @@ nav-enemy-default-event-handler ) ) -;; definition for method 46 of type nav-enemy (defmethod TODO-RENAME-46 nav-enemy ((obj nav-enemy) (arg0 float)) (and *target* @@ -695,7 +636,6 @@ nav-enemy-default-event-handler ) ) -;; definition for function nav-enemy-notice-player? (defbehavior nav-enemy-notice-player? nav-enemy () (let ((gp-0 #f)) (cond @@ -734,8 +674,6 @@ nav-enemy-default-event-handler ) ) -;; definition for function nav-enemy-facing-direction? -;; Used lq/sq (defbehavior nav-enemy-facing-direction? nav-enemy ((arg0 vector) (arg1 float)) (let ((s4-0 @@ -753,7 +691,6 @@ nav-enemy-default-event-handler ) ) -;; definition for function nav-enemy-facing-point? (defbehavior nav-enemy-facing-point? nav-enemy ((arg0 vector) (arg1 float)) (let ((v1-1 @@ -764,19 +701,14 @@ nav-enemy-default-event-handler ) ) -;; definition for function nav-enemy-facing-player? (defun nav-enemy-facing-player? ((arg0 float)) (nav-enemy-facing-point? (target-pos 0) arg0) ) -;; definition for function nav-enemy-test-nav-mesh-intersection-xz? -;; INFO: Return type mismatch nav-poly vs symbol. (defbehavior nav-enemy-test-nav-mesh-intersection-xz? nav-enemy ((arg0 vector)) (the-as symbol (dummy-16 (-> self nav) arg0)) ) -;; definition for function nav-enemy-test-point-in-nav-mesh? -;; INFO: Return type mismatch structure vs symbol. (defbehavior nav-enemy-test-point-in-nav-mesh? nav-enemy ((arg0 vector)) (the-as symbol @@ -790,7 +722,6 @@ nav-enemy-default-event-handler ) ) -;; definition for function nav-enemy-test-point-near-nav-mesh? (defbehavior nav-enemy-test-point-near-nav-mesh? nav-enemy ((arg0 vector)) (and (dummy-25 (-> self nav) arg0 (-> self nav-info notice-nav-radius)) @@ -801,14 +732,11 @@ nav-enemy-default-event-handler ) ) -;; definition for function nav-enemy-get-new-patrol-point (defbehavior nav-enemy-get-new-patrol-point nav-enemy () (TODO-RENAME-42 self) 0 ) -;; definition for function nav-enemy-set-base-collide-sphere-collide-with -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-set-base-collide-sphere-collide-with nav-enemy ((arg0 uint)) @@ -886,9 +814,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-set-hit-from-direction -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior nav-enemy-set-hit-from-direction nav-enemy ((arg0 process)) (let* ((gp-0 (-> self hit-from-dir)) (s5-0 arg0) @@ -913,8 +838,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-fall-and-play-death-anim -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-fall-and-play-death-anim nav-enemy ((arg0 art-joint-anim) (arg1 float) (arg2 float) (arg3 float) (arg4 int)) @@ -1001,8 +924,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-turn-to-face-dir -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-turn-to-face-dir nav-enemy ((arg0 vector) (arg1 float)) (local-vars (v1-16 symbol)) (let ((s4-0 (-> *display* base-frame-counter))) @@ -1049,8 +970,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-turn-to-face-point -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-turn-to-face-point nav-enemy ((arg0 vector) (arg1 float)) (let ((gp-1 @@ -1067,7 +986,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for method 12 of type nav-enemy (defmethod run-logic? nav-enemy ((obj nav-enemy)) (or (zero? (logand (-> obj mask) (process-mask actor-pause))) @@ -1097,7 +1015,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-idle (nav-enemy) :virtual #t :event @@ -1185,7 +1102,6 @@ nav-enemy-default-event-handler (the-as (function none :behavior nav-enemy) ja-post) ) -;; failed to figure out what this is: (defstate nav-enemy-patrol (nav-enemy) :virtual #t :event @@ -1531,7 +1447,6 @@ nav-enemy-default-event-handler nav-enemy-patrol-post ) -;; failed to figure out what this is: (defstate nav-enemy-notice (nav-enemy) :virtual #t :event @@ -1627,7 +1542,6 @@ nav-enemy-default-event-handler nav-enemy-simple-post ) -;; definition for function ja-group-index? (defbehavior ja-group-index? nav-enemy ((arg0 int)) (= (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) @@ -1636,7 +1550,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-flee (nav-enemy) :virtual #t :event @@ -1804,9 +1717,6 @@ nav-enemy-default-event-handler nav-enemy-face-player-post ) -;; definition for function nav-enemy-reset-frustration -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior nav-enemy-reset-frustration nav-enemy () (set! (-> self nav-enemy-flags) (logand -8193 (-> self nav-enemy-flags))) (if *target* @@ -1817,7 +1727,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-player-at-frustration-point? (defbehavior nav-enemy-player-at-frustration-point? nav-enemy () (if *target* (< @@ -1830,7 +1739,6 @@ nav-enemy-default-event-handler ) ) -;; definition for function nav-enemy-frustrated? (defbehavior nav-enemy-frustrated? nav-enemy () (and (logtest? (-> self nav-enemy-flags) 8192) @@ -1838,7 +1746,6 @@ nav-enemy-default-event-handler ) ) -;; failed to figure out what this is: (defstate nav-enemy-chase (nav-enemy) :virtual #t :event @@ -1947,7 +1854,6 @@ nav-enemy-default-event-handler nav-enemy-chase-post ) -;; failed to figure out what this is: (defstate nav-enemy-stop-chase (nav-enemy) :virtual #t :event @@ -2061,7 +1967,6 @@ nav-enemy-default-event-handler nav-enemy-chase-post ) -;; failed to figure out what this is: (defstate nav-enemy-stare (nav-enemy) :virtual #t :event @@ -2190,7 +2095,6 @@ nav-enemy-default-event-handler nav-enemy-face-player-post ) -;; failed to figure out what this is: (defstate nav-enemy-give-up (nav-enemy) :virtual #t :event @@ -2230,7 +2134,6 @@ nav-enemy-default-event-handler nav-enemy-simple-post ) -;; failed to figure out what this is: (defstate nav-enemy-attack (nav-enemy) :virtual #t :event @@ -2247,7 +2150,6 @@ nav-enemy-default-event-handler nav-enemy-simple-post ) -;; failed to figure out what this is: (defstate nav-enemy-victory (nav-enemy) :virtual #t :event @@ -2324,7 +2226,6 @@ nav-enemy-default-event-handler nav-enemy-simple-post ) -;; failed to figure out what this is: (defstate nav-enemy-die (nav-enemy) :virtual #t :event @@ -2375,7 +2276,6 @@ nav-enemy-default-event-handler nav-enemy-death-post ) -;; failed to figure out what this is: (defstate nav-enemy-fuel-cell (nav-enemy) :virtual #t :event @@ -2412,9 +2312,6 @@ nav-enemy-default-event-handler ) ) -;; definition for function nav-enemy-jump-post -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior nav-enemy-jump-post nav-enemy () (if (logtest? (-> self nav-enemy-flags) 16) (seek-to-point-toward-point! @@ -2456,9 +2353,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-initialize-custom-jump -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior nav-enemy-initialize-custom-jump nav-enemy ((arg0 vector) (arg1 symbol) (arg2 float) (arg3 float) (arg4 float)) @@ -2517,8 +2411,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-initialize-jump -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-initialize-jump nav-enemy ((arg0 vector)) (nav-enemy-initialize-custom-jump arg0 @@ -2531,9 +2423,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-execute-custom-jump -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defbehavior nav-enemy-execute-custom-jump nav-enemy ((arg0 int) (arg1 float) (arg2 float)) @@ -2669,8 +2558,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-execute-jump -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-execute-jump nav-enemy () (nav-enemy-execute-custom-jump (-> self nav-info jump-anim) @@ -2681,8 +2568,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for function nav-enemy-jump-land-anim -;; INFO: Return type mismatch int vs none. (defbehavior nav-enemy-jump-land-anim nav-enemy () (let ((a0-0 (-> self skel root-channel 0))) (set! @@ -2750,7 +2635,6 @@ nav-enemy-default-event-handler (none) ) -;; failed to figure out what this is: (defstate nav-enemy-jump (nav-enemy) :virtual #t :event @@ -2784,7 +2668,7 @@ nav-enemy-default-event-handler (set! a1-0 (dummy-16 (-> self nav) (-> self jump-dest))) ) (if a1-0 - (dummy-14 (-> self nav)) + (set-current-poly! (-> self nav) a1-0) ) ) (go-virtual nav-enemy-jump-land) @@ -2794,8 +2678,6 @@ nav-enemy-default-event-handler nav-enemy-jump-post ) -;; definition for function nav-enemy-jump-land-post -;; Used lq/sq (defbehavior nav-enemy-jump-land-post nav-enemy () (TODO-RENAME-9 (-> self align)) (dummy-11 (-> self nav) (-> self nav target-pos)) @@ -2857,7 +2739,6 @@ nav-enemy-default-event-handler (none) ) -;; failed to figure out what this is: (defstate nav-enemy-jump-land (nav-enemy) :virtual #t :event @@ -2906,7 +2787,6 @@ nav-enemy-default-event-handler nav-enemy-jump-land-post ) -;; failed to figure out what this is: (defstate nav-enemy-jump-blocked (nav-enemy) :virtual #t :event @@ -2988,7 +2868,6 @@ nav-enemy-default-event-handler nav-enemy-simple-post ) -;; failed to figure out what this is: (defstate nav-enemy-wait-for-cue (nav-enemy) :virtual #t :event @@ -3054,7 +2933,6 @@ nav-enemy-default-event-handler nav-enemy-simple-post ) -;; failed to figure out what this is: (defstate nav-enemy-jump-to-point (nav-enemy) :virtual #t :event @@ -3094,7 +2972,6 @@ nav-enemy-default-event-handler nav-enemy-jump-post ) -;; definition for symbol *nav-enemy-dummy-shadow-control*, type shadow-control (define *nav-enemy-dummy-shadow-control* (new 'static 'shadow-control @@ -3110,8 +2987,6 @@ nav-enemy-default-event-handler ) ) -;; definition for method 45 of type nav-enemy -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-45 nav-enemy ((obj nav-enemy) (arg0 nav-enemy-info)) (set! (-> obj rand-gen) (new 'process 'random-generator)) (set! (-> obj rand-gen seed) (the-as uint #x666edd1e)) @@ -3174,7 +3049,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for method 49 of type nav-enemy (defmethod TODO-RENAME-49 nav-enemy ((obj nav-enemy) (arg0 nav-enemy-info)) (set! (-> obj nav-info) arg0) (set! (-> obj rotate-speed) (-> obj nav-info walk-rotate-speed)) @@ -3202,8 +3076,6 @@ nav-enemy-default-event-handler ) ) -;; definition for function nav-enemy-init-by-other -;; Used lq/sq (defbehavior nav-enemy-init-by-other nav-enemy ((arg0 nav-enemy) (arg1 vector) (arg2 vector)) @@ -3225,30 +3097,22 @@ nav-enemy-default-event-handler (none) ) -;; definition for method 47 of type nav-enemy -;; INFO: Return type mismatch int vs none. (defmethod initialize-collision nav-enemy ((obj nav-enemy)) 0 (none) ) -;; definition for method 48 of type nav-enemy -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-48 nav-enemy ((obj nav-enemy)) 0 (none) ) -;; definition for method 59 of type nav-enemy -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-59 nav-enemy ((obj nav-enemy)) (go (method-of-object obj nav-enemy-idle)) 0 (none) ) -;; definition for method 11 of type nav-enemy -;; INFO: Return type mismatch int vs none. (defmethod copy-defaults! nav-enemy ((obj nav-enemy) (arg0 res-lump)) (initialize-collision obj) (process-drawable-from-entity! obj arg0) @@ -3258,8 +3122,6 @@ nav-enemy-default-event-handler (none) ) -;; definition for method 50 of type nav-enemy -;; Used lq/sq (defmethod TODO-RENAME-50 nav-enemy ((obj nav-enemy) (arg0 vector)) (let ((s4-0 (new 'stack-no-clear 'vector))) (set! (-> s4-0 quad) (-> obj collide-info trans quad)) diff --git a/goal_src/levels/common/rigid-body.gc b/goal_src/levels/common/rigid-body.gc index 35d4aa0406..6aee07786c 100644 --- a/goal_src/levels/common/rigid-body.gc +++ b/goal_src/levels/common/rigid-body.gc @@ -5,9 +5,8 @@ ;; name in dgo: rigid-body ;; dgos: GAME, COMMON, L1 -;; definition for method 11 of type rigid-body -;; INFO: Return type mismatch int vs none. -;; Used lq/sq +;; DECOMP BEGINS + (defmethod clear-force-torque! rigid-body ((obj rigid-body)) (set! (-> obj force quad) (-> *null-vector* quad)) (set! (-> obj torque quad) (-> *null-vector* quad)) @@ -15,9 +14,6 @@ (none) ) -;; definition for method 12 of type rigid-body -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod clear-momentum! rigid-body ((obj rigid-body)) (set! (-> obj lin-momentum quad) (-> *null-vector* quad)) (set! (-> obj ang-momentum quad) (-> *null-vector* quad)) @@ -25,8 +21,6 @@ (none) ) -;; definition for method 21 of type rigid-body -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-21 rigid-body ((obj rigid-body)) (quaternion->matrix (-> obj matrix) (-> obj rotation)) (TODO-RENAME-18 obj (-> obj matrix vector 3)) @@ -34,9 +28,6 @@ (none) ) -;; definition for method 22 of type rigid-body -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod TODO-RENAME-22 rigid-body @@ -61,8 +52,6 @@ (none) ) -;; definition for method 9 of type rigid-body -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-9 rigid-body @@ -109,7 +98,6 @@ (none) ) -;; definition for method 17 of type rigid-body (defmethod TODO-RENAME-17 rigid-body @@ -121,7 +109,6 @@ arg1 ) -;; definition for function matrix-3x3-triple-transpose-product (defun matrix-3x3-triple-transpose-product ((arg0 matrix) (arg1 matrix) (arg2 matrix)) @@ -143,9 +130,6 @@ arg0 ) -;; definition for method 10 of type rigid-body -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod dummy-10 rigid-body ((obj rigid-body) (arg0 float)) (vector+*! (-> obj lin-momentum) (-> obj lin-momentum) (-> obj force) arg0) (vector+*! (-> obj ang-momentum) (-> obj ang-momentum) (-> obj torque) arg0) @@ -189,8 +173,6 @@ (none) ) -;; definition for method 13 of type rigid-body -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-13 rigid-body @@ -205,8 +187,6 @@ (none) ) -;; definition for method 16 of type rigid-body -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-16 rigid-body @@ -226,8 +206,6 @@ (none) ) -;; definition for method 14 of type rigid-body -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-14 rigid-body @@ -244,15 +222,12 @@ (none) ) -;; definition for method 15 of type rigid-body -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-15 rigid-body ((obj rigid-body) (arg0 vector)) (vector+! (-> obj force) (-> obj force) arg0) 0 (none) ) -;; definition for method 18 of type rigid-body (defmethod TODO-RENAME-18 rigid-body ((obj rigid-body) (arg0 vector)) (let ((gp-0 (new 'stack-no-clear 'vector))) (vector-rotate*! gp-0 (-> obj cm-offset-joint) (-> obj matrix)) @@ -261,8 +236,6 @@ arg0 ) -;; definition for method 19 of type rigid-body -;; INFO: Return type mismatch int vs none. (defmethod dummy-19 rigid-body ((obj rigid-body)) (format #t @@ -325,8 +298,6 @@ (none) ) -;; definition for method 20 of type rigid-body -;; INFO: Return type mismatch int vs none. (defmethod dummy-20 rigid-body ((obj rigid-body)) (format #t @@ -346,7 +317,6 @@ (none) ) -;; definition of type rigid-body-platform-constants (deftype rigid-body-platform-constants (structure) ((drag-factor float :offset-assert 0) (buoyancy-factor float :offset-assert 4) @@ -371,15 +341,14 @@ (cm-joint-y meters :offset-assert 84) (cm-joint-z meters :offset-assert 88) (idle-distance meters :offset-assert 92) - (platform basic :offset-assert 96) - (sound-name basic :offset-assert 100) + (platform symbol :offset-assert 96) + (sound-name symbol :offset-assert 100) ) :method-count-assert 9 :size-assert #x68 :flag-assert #x900000068 ) -;; definition for method 3 of type rigid-body-platform-constants (defmethod inspect rigid-body-platform-constants @@ -417,7 +386,6 @@ obj ) -;; definition of type rigid-body-control-point-inline-array (deftype rigid-body-control-point-inline-array (inline-array-class) ((data rigid-body-control-point :inline :dynamic :offset 16) ) @@ -426,7 +394,6 @@ :flag-assert #x900000010 ) -;; definition for method 3 of type rigid-body-control-point-inline-array (defmethod inspect rigid-body-control-point-inline-array @@ -438,10 +405,8 @@ obj ) -;; failed to figure out what this is: (set! (-> rigid-body-control-point-inline-array heap-base) (the-as uint 48)) -;; definition of type rigid-body-platform (deftype rigid-body-platform (process-drawable) ((root-overlay collide-shape-moving :offset 112) (info rigid-body-platform-constants :offset-assert 176) @@ -466,9 +431,9 @@ (:methods (rigid-body-platform-idle () _type_ :state 20) (rigid-body-platform-float () _type_ :state 21) - (TODO-RENAME-22 (_type_ vector basic) float 22) - (TODO-RENAME-23 (_type_ basic) none 23) - (TODO-RENAME-24 (_type_ rigid-body-control-point basic) none 24) + (TODO-RENAME-22 (_type_ vector float) float 22) + (TODO-RENAME-23 (_type_ float) none 23) + (TODO-RENAME-24 (_type_ rigid-body-control-point float) none 24) (TODO-RENAME-25 (_type_) none 25) (TODO-RENAME-26 (_type_) none 26) (TODO-RENAME-27 (_type_ vector) none 27) @@ -476,48 +441,13 @@ (TODO-RENAME-29 (_type_ rigid-body-platform-constants) none 29) (TODO-RENAME-30 (_type_) none 30) (TODO-RENAME-31 (_type_) none 31) - (dummy-32 (_type_) none 32) - (dummy-33 (_type_) none 33) + (dummy-32 (_type_) sound-id 32) + (dummy-33 (_type_) object 33) (TODO-RENAME-34 (_type_) none 34) ) ) -;; definition for method 3 of type rigid-body-platform -(defmethod inspect rigid-body-platform ((obj rigid-body-platform)) - (let ((t9-0 (method-of-type process-drawable inspect))) - (t9-0 obj) - ) - (format - #t - "~T~Tinfo: #~%" - (-> obj info) - ) - (format #t "~T~Trbody: #~%" (-> obj rbody)) - (format #t "~T~Tcontrol-point-array: ~A~%" (-> obj control-point-array)) - (format #t "~T~Tplayer-velocity: #~%" (-> obj player-velocity)) - (format - #t - "~T~Tplayer-velocity-prev: #~%" - (-> obj player-velocity-prev) - ) - (format - #t - "~T~Tplayer-force-position: #~%" - (-> obj player-force-position) - ) - (format #t "~T~Tplayer-force: #~%" (-> obj player-force)) - (format #t "~T~Tsim-time-remaining: ~f~%" (-> obj sim-time-remaining)) - (format #t "~T~Tfloat-height-offset: ~f~%" (-> obj float-height-offset)) - (format #t "~T~Tplayer-attack-id: ~D~%" (-> obj player-attack-id)) - (format #t "~T~Tplayer-bonk-timeout: ~D~%" (-> obj player-bonk-timeout)) - (format #t "~T~Twater-anim: ~A~%" (-> obj water-anim)) - (format #t "~T~Tplayer-contact: ~A~%" (-> obj player-contact)) - (format #t "~T~Tplayer-impulse: ~A~%" (-> obj player-impulse)) - obj - ) -;; definition for method 7 of type rigid-body-platform -;; INFO: Return type mismatch process-drawable vs rigid-body-platform. (defmethod relocate rigid-body-platform ((obj rigid-body-platform) (arg0 int)) (if (nonzero? (-> obj control-point-array)) (set! @@ -540,11 +470,10 @@ ) ) -;; definition for method 22 of type rigid-body-platform (defmethod TODO-RENAME-22 rigid-body-platform - ((obj rigid-body-platform) (arg0 vector) (arg1 basic)) + ((obj rigid-body-platform) (arg0 vector) (arg1 float)) (let ((v1-0 (-> obj water-anim))) 0.0 (+ (the-as float (cond @@ -571,12 +500,10 @@ ) ) -;; definition for method 24 of type rigid-body-platform -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-24 rigid-body-platform - ((obj rigid-body-platform) (arg0 rigid-body-control-point) (arg1 basic)) + ((obj rigid-body-platform) (arg0 rigid-body-control-point) (arg1 float)) (set! (-> arg0 world-pos w) (TODO-RENAME-22 obj (-> arg0 world-pos) arg1)) (let* ((s4-0 (new 'stack-no-clear 'vector)) (f0-2 (- (-> arg0 world-pos w) (-> arg0 world-pos y))) @@ -587,13 +514,10 @@ s4-0 *y-vector* (* - (* - (* - (* (-> obj rbody mass) (fmin 1.0 f30-0)) - (/ (-> obj info gravity) (the float (-> obj info control-point-count))) - ) - (-> obj info gravity-factor) - ) + (-> obj rbody mass) + (fmin 1.0 f30-0) + (/ (-> obj info gravity) (the float (-> obj info control-point-count))) + (-> obj info gravity-factor) (-> obj info buoyancy-factor) ) ) @@ -601,7 +525,7 @@ (vector-float*! s4-0 (-> arg0 velocity) - (* (* -1.0 (-> obj info drag-factor)) (fmin 1.0 f30-0)) + (* -1.0 (-> obj info drag-factor) (fmin 1.0 f30-0)) ) (TODO-RENAME-13 (-> obj rbody) (-> arg0 world-pos) s4-0) ) @@ -611,8 +535,6 @@ (none) ) -;; definition for method 25 of type rigid-body-platform -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-25 rigid-body-platform ((obj rigid-body-platform)) (when (or (-> obj player-impulse) (-> obj player-contact)) (set! (-> obj player-impulse) #f) @@ -627,15 +549,15 @@ (none) ) -;; definition for method 26 of type rigid-body-platform -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-26 rigid-body-platform ((obj rigid-body-platform)) (let ((a1-0 (new 'stack-no-clear 'vector))) (vector-float*! a1-0 *y-vector* (* - (* (* -1.0 (-> obj info gravity-factor)) (-> obj info gravity)) + -1.0 + (-> obj info gravity-factor) + (-> obj info gravity) (-> obj rbody mass) ) ) @@ -645,8 +567,6 @@ (none) ) -;; definition for method 27 of type rigid-body-platform -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-27 rigid-body-platform @@ -667,12 +587,10 @@ (none) ) -;; definition for method 23 of type rigid-body-platform -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-23 rigid-body-platform - ((obj rigid-body-platform) (arg0 basic)) + ((obj rigid-body-platform) (arg0 float)) (let ((s4-0 (-> obj rbody matrix))) (dotimes (s3-0 (-> obj info control-point-count)) (let ((s2-0 (-> obj control-point-array data s3-0))) @@ -688,9 +606,6 @@ (none) ) -;; definition for method 28 of type rigid-body-platform -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod TODO-RENAME-28 rigid-body-platform ((obj rigid-body-platform)) (if (-> obj info platform) (dummy-35 (-> obj root-overlay)) @@ -720,7 +635,7 @@ ) (while (>= (-> obj sim-time-remaining) (* 0.5 f30-0)) (clear-force-torque! (-> obj rbody)) - (TODO-RENAME-23 obj (the-as basic f28-0)) + (TODO-RENAME-23 obj f28-0) (dummy-10 (-> obj rbody) f30-0) (set! (-> obj sim-time-remaining) (- (-> obj sim-time-remaining) f30-0)) ) @@ -730,8 +645,6 @@ (none) ) -;; definition for function rigid-body-platform-event-handler -;; Used lq/sq (defbehavior rigid-body-platform-event-handler rigid-body-platform ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -764,10 +677,9 @@ ((f0-4 (fmin (* - (* - (* 0.00012207031 (the-as float (-> arg3 param 1))) - (-> self info player-bonk-factor) - ) + 0.00012207031 + (the-as float (-> arg3 param 1)) + (-> self info player-bonk-factor) (-> self info player-weight) ) (-> self info player-force-clamp) @@ -822,7 +734,8 @@ ((f0-9 (fmin (* - (* 16.0 (-> self info player-weight)) + 16.0 + (-> self info player-weight) (-> self info player-dive-factor) ) (-> self info player-force-clamp) @@ -943,7 +856,6 @@ ) ) -;; definition for function rigid-body-platform-post (defbehavior rigid-body-platform-post rigid-body-platform () (set! (-> self rbody lin-momentum-damping-factor) @@ -973,7 +885,6 @@ ) ) -;; failed to figure out what this is: (defstate rigid-body-platform-idle (rigid-body-platform) :virtual #t :trans @@ -1004,7 +915,6 @@ (the-as (function none :behavior rigid-body-platform) ja-post) ) -;; failed to figure out what this is: (defstate rigid-body-platform-float (rigid-body-platform) :virtual #t :event @@ -1040,9 +950,6 @@ ) ) -;; definition for method 29 of type rigid-body-platform -;; INFO: Return type mismatch int vs none. -;; Used lq/sq (defmethod TODO-RENAME-29 rigid-body-platform @@ -1093,8 +1000,6 @@ (none) ) -;; definition for method 30 of type rigid-body-platform -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-30 rigid-body-platform ((obj rigid-body-platform)) (let ((s5-0 @@ -1132,7 +1037,6 @@ (none) ) -;; definition for symbol *rigid-body-platform-constants*, type rigid-body-platform-constants (define *rigid-body-platform-constants* (new 'static 'rigid-body-platform-constants @@ -1161,16 +1065,12 @@ ) ) -;; definition for method 34 of type rigid-body-platform -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-34 rigid-body-platform ((obj rigid-body-platform)) (go (method-of-object obj rigid-body-platform-idle)) 0 (none) ) -;; definition for method 31 of type rigid-body-platform -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-31 rigid-body-platform ((obj rigid-body-platform)) (set! (-> obj float-height-offset) 0.0) (TODO-RENAME-29 obj *rigid-body-platform-constants*) @@ -1190,8 +1090,6 @@ (none) ) -;; definition for method 11 of type rigid-body-platform -;; INFO: Return type mismatch int vs none. (defmethod copy-defaults! rigid-body-platform @@ -1204,3 +1102,7 @@ 0 (none) ) + + + + diff --git a/goal_src/levels/darkcave/darkcave-obs.gc b/goal_src/levels/darkcave/darkcave-obs.gc index 4ca3201b5e..c946b7bfcc 100644 --- a/goal_src/levels/darkcave/darkcave-obs.gc +++ b/goal_src/levels/darkcave/darkcave-obs.gc @@ -5,3 +5,33 @@ ;; name in dgo: darkcave-obs ;; dgos: DAR, L1 +;; TODO - for cavecrystal-light +(deftype cavecrystal (process-drawable) + ((root-override collide-shape :score 100 :offset 112) + (is-master? symbol :offset-assert 176) + (crystal-id int32 :offset-assert 180) + (glow-u float :offset-assert 184) + (glow-wf-period int32 :offset-assert 188) + (glow-wf-offset int32 :offset-assert 192) + (prev-compute-glow-time uint64 :offset-assert 200) + (start-fade-time uint64 :offset-assert 208) + (end-fade-time uint64 :offset-assert 216) + (activated-time uint64 :offset-assert 224) + (last-updated-user-lighting uint64 :offset-assert 232) + (player-attack-id uint64 :offset-assert 240) + (on-color-mult vector :inline :offset-assert 256) + (on-color-emissive vector :inline :offset-assert 272) + (off-color-mult vector :inline :offset-assert 288) + (off-color-emissive vector :inline :offset-assert 304) + ) + :method-count-assert 22 + :size-assert #x140 + :heap-base #xd0 + :flag-assert #x1600d00140 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + ) + ) + +;; decomp begins diff --git a/goal_src/levels/firecanyon/assistant-firecanyon.gc b/goal_src/levels/firecanyon/assistant-firecanyon.gc index 8d61cf45a8..54101cd167 100644 --- a/goal_src/levels/firecanyon/assistant-firecanyon.gc +++ b/goal_src/levels/firecanyon/assistant-firecanyon.gc @@ -7,7 +7,8 @@ (define-extern *assistant-firecanyon-sg* skeleton-group) -;; definition of type assistant-firecanyon +;; DECOMP BEGINS + (deftype assistant-firecanyon (process-taskable) () :heap-base #x110 @@ -16,15 +17,7 @@ :flag-assert #x350110017c ) -;; definition for method 3 of type assistant-firecanyon -(defmethod inspect assistant-firecanyon ((obj assistant-firecanyon)) - (let ((t9-0 (method-of-type process-taskable inspect))) - (t9-0 obj) - ) - obj - ) -;; failed to figure out what this is: (let ((v1-1 (new 'static 'skeleton-group @@ -42,7 +35,6 @@ (set! *assistant-firecanyon-sg* v1-1) ) -;; definition for method 32 of type assistant-firecanyon (defmethod play-anim! assistant-firecanyon @@ -122,7 +114,6 @@ ) ) -;; definition for method 31 of type assistant-firecanyon (defmethod get-art-elem assistant-firecanyon ((obj assistant-firecanyon)) (if (zero? (current-status (-> obj tasks))) (-> obj draw art-group data 8) @@ -130,7 +121,6 @@ ) ) -;; failed to figure out what this is: (defstate hidden (assistant-firecanyon) :virtual #t :trans @@ -142,7 +132,7 @@ (>= 61440.0 (vector-vector-distance - (-> self root trans) + (-> self root-override trans) (-> *target* control trans) ) ) @@ -157,30 +147,28 @@ #f ) ) - (let ((a0-1 (-> self tasks))) - (and - (not - (closed? - a0-1 - (game-task firecanyon-assistant) - (task-status need-reward-speech) - ) + (and + (not + (closed? + (-> self tasks) + (game-task firecanyon-assistant) + (task-status need-reward-speech) ) - (not (movie?)) - (not (level-hint-displayed? (the-as symbol a0-1))) - (not - (and - *cheat-mode* - (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) - ) + ) + (not (movie?)) + (not (level-hint-displayed?)) + (not + (and + *cheat-mode* + (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) ) - (< - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - 3000 + ) + (< + (- + (-> *display* base-frame-counter) + (the-as int (-> self state-time)) ) + 3000 ) ) ) @@ -242,7 +230,6 @@ ) ) -;; failed to figure out what this is: (defstate idle (assistant-firecanyon) :virtual #t :code @@ -854,13 +841,11 @@ ) ) -;; definition for method 39 of type assistant-firecanyon (defmethod should-display? assistant-firecanyon ((obj assistant-firecanyon)) (first-any (-> obj tasks) #t) (= (current-status (-> obj tasks)) 6) ) -;; definition for method 11 of type assistant-firecanyon (defmethod copy-defaults! assistant-firecanyon diff --git a/goal_src/levels/flut_common/flutflut.gc b/goal_src/levels/flut_common/flutflut.gc index 178a0fabc5..6edff8bdc8 100644 --- a/goal_src/levels/flut_common/flutflut.gc +++ b/goal_src/levels/flut_common/flutflut.gc @@ -5,3 +5,626 @@ ;; name in dgo: flutflut ;; dgos: L1, SNO, SWA +(define-extern *flutflut-sg* skeleton-group) + +;; DECOMP BEGINS + +(if (not (nmember "flutp" *kernel-packages*)) + (set! *kernel-packages* (cons "flutp" *kernel-packages*)) + ) + +(deftype flutflut (process-drawable) + ((root-override collide-shape-moving :offset 112) + (extra-trans vector :inline :offset-assert 176) + (condition int32 :offset-assert 192) + (auto-get-off symbol :offset-assert 196) + (cell handle :offset-assert 200) + (path-data path-control 2 :offset-assert 208) + (path-target path-control :offset 208) + (path-flut path-control :offset 212) + (touch-time uint64 :offset-assert 216) + ) + :pack-me + :heap-base #x70 + :method-count-assert 24 + :size-assert #xe0 + :flag-assert #x18007000e0 + (:methods + (wait-for-start () _type_ :state 20) + (idle () _type_ :state 21) + (pickup ((state flutflut)) _type_ :state 22) + (wait-for-return () _type_ :state 23) + ) + ) + + +(defmethod relocate flutflut ((obj flutflut) (arg0 int)) + (countdown (v1-0 2) + (if (-> obj path-data v1-0) + (&+! (-> obj path-data v1-0) arg0) + ) + ) + (the-as flutflut ((method-of-type process-drawable relocate) obj arg0)) + ) + +(define + *flutflut-shadow-control* + (new 'static 'shadow-control + :settings + (new 'static 'shadow-settings + :center + (new 'static 'vector :w (the-as float #xa)) + :shadow-dir + (new 'static 'vector :y -1.0 :w 614400.0) + :bot-plane (new 'static 'plane :y 1.0 :w 81920.0) + :top-plane (new 'static 'plane :y 1.0 :w -2867.2) + ) + ) + ) + +(let + ((v1-5 + (new 'static 'skeleton-group + :art-group-name "flut-saddle" + :bounds (new 'static 'vector :w 14336.0) + :version #x6 + :shadow 2 + :sort 1 + ) + ) + ) + (set! (-> v1-5 jgeo) 0) + (set! (-> v1-5 janim) -1) + (set! (-> v1-5 mgeo 0) (the-as uint 1)) + (set! (-> v1-5 lod-dist 0) 4095996000.0) + (set! *flutflut-sg* v1-5) + ) + +(defbehavior flutflut-effect flutflut () + (spawn (-> self part) (-> self root-override trans)) + (update! (-> self sound)) + 0 + (none) + ) + +(defstate wait-for-start (flutflut) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'trans) + (vector+! + (the-as vector (-> arg3 param 0)) + (-> self root-override trans) + (-> self extra-trans) + ) + ) + ((= v1-0 'notify) + (let ((v0-1 (the-as structure #t))) + (set! (-> self auto-get-off) (the-as symbol v0-1)) + v0-1 + ) + ) + ((or (= v1-0 'touch) (= v1-0 'attack)) + (set! + (-> self touch-time) + (the-as uint (-> *display* base-frame-counter)) + ) + #f + ) + ) + ) + ) + ) + :exit + (behavior () + (set! (-> self root-override root-prim prim-core action) (the-as uint 0)) + (set! (-> self root-override root-prim prim-core offense) 0) + 0 + (none) + ) + :code + (behavior () + (while #t + (let ((v1-0 (-> self condition))) + (cond + ((or (zero? v1-0) (= v1-0 1)) + (if + (or + (and + (task-complete? *game-info* (game-task beach-flutflut)) + (or + (and + (zero? (-> self condition)) + (task-closed? + (game-task village2-levitator) + (task-status need-hint) + ) + ) + (and + (= (-> self condition) 1) + (task-closed? (game-task village3-button) (task-status need-hint)) + ) + ) + ) + (and + *cheat-mode* + (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) + ) + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + ) + (goto cfg-75) + ) + ) + ((= v1-0 4) + (if + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + (goto cfg-75) + ) + ) + ((= v1-0 3) + (cond + ((and + (task-complete? *game-info* (-> self entity extra perm task)) + (not (handle->process (-> self cell))) + ) + (when + (and + (-> self auto-get-off) + (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) + (send-event-function *target* a1-6) + ) + ) + (set! (-> self auto-get-off) #f) + (go-virtual pickup (method-of-object self idle)) + ) + (set! (-> self auto-get-off) #f) + (if (= (-> self condition) 3) + (goto cfg-75) + ) + (if + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + (< + (- + (-> *display* base-frame-counter) + (the-as int (-> self touch-time)) + ) + 15 + ) + ) + (go-virtual pickup (method-of-object self idle)) + ) + ) + ((not (handle->process (-> self cell))) + (set! + (-> self cell) + (ppointer->handle + (birth-pickup-at-point + (vector+! + (new 'stack-no-clear 'vector) + (-> self root-override trans) + (new 'static 'vector :y 8192.0 :w 1.0) + ) + 6 + (the float (-> self entity extra perm task)) + #f + self + (the-as symbol (-> self fact)) + ) + ) + ) + ) + ) + ) + (else + (goto cfg-75) + ) + ) + ) + (flutflut-effect) + (suspend) + ) + (label cfg-75) + (if + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + (go-virtual wait-for-return) + (go-virtual idle) + ) + (none) + ) + ) + +(defstate idle (flutflut) + :virtual #t + :event + (-> (method-of-type flutflut wait-for-start) event) + :enter + (behavior () + (blocking-plane-destroy) + (blocking-plane-spawn (the-as curve-control (-> self path-target))) + (none) + ) + :exit + (-> (method-of-type flutflut wait-for-start) exit) + :code + (behavior () + (ja-channel-set! 1) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + (set! (-> self root-override root-prim prim-core action) (the-as uint 2049)) + (set! (-> self root-override root-prim prim-core offense) 4) + (while #t + (if + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + (go-virtual wait-for-return) + ) + (when (logtest? (-> self draw status) 8) + (if + (and + *target* + (>= + 40960.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (level-hint-spawn + (game-text-id flutflut-reminder) + "sksp0160" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (when + (and + (and + *target* + (>= + 20480.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (not (movie?)) + (not (level-hint-displayed?)) + (!= (-> self condition) 4) + ) + (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 + ((gp-0 + (new + 'stack + 'font-context + *font-default-matrix* + 32 + 160 + 0.0 + (font-color default) + (font-flags shadow kerning) + ) + ) + ) + (let ((v1-34 gp-0)) + (set! (-> v1-34 width) (the float 440)) + ) + (let ((v1-35 gp-0)) + (set! (-> v1-35 height) (the float 80)) + ) + (set! (-> gp-0 flags) (font-flags shadow kerning large)) + (print-game-text + (lookup-text! *common-text* (game-text-id press-to-use) #f) + gp-0 + #f + 128 + 22 + ) + ) + (if + (and + (logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons circle)) + (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) 'change-mode) + (set! (-> a1-7 param 0) (the-as uint 'flut)) + (set! (-> a1-7 param 1) (the-as uint self)) + (send-event-function *target* a1-7) + ) + ) + (go-virtual pickup (method-of-object self wait-for-return)) + ) + ) + ) + (flutflut-effect) + (suspend) + (let ((a0-26 (-> self skel root-channel 0))) + (set! (-> a0-26 param 0) 1.0) + (joint-control-channel-group-eval! + a0-26 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior flutflut) ja-post) + ) + +(defstate pickup (flutflut) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('draw) + (ja-channel-set! 1) + (let ((v1-3 (-> self skel root-channel 0))) + (set! + (-> v1-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + (set! + (-> self root-override root-prim prim-core action) + (the-as uint 2049) + ) + (set! (-> self root-override root-prim prim-core offense) 4) + (transform-post) + ) + (('trans) + (vector+! + (the-as vector (-> arg3 param 0)) + (-> self root-override trans) + (-> self extra-trans) + ) + ) + (('touch 'attack) + #f + ) + ) + ) + :enter + (behavior ((arg0 (state flutflut))) + ((-> arg0 enter)) + (none) + ) + :code + (behavior ((arg0 (state flutflut))) + (ja-channel-set! 0) + (ja-post) + (while (zero? (ja-group-size)) + (if + (or + (not *target*) + (< + 24576.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go arg0) + ) + (flutflut-effect) + (suspend) + ) + (while + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + (flutflut-effect) + (suspend) + ) + (let ((s5-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s5-0) 300) + (flutflut-effect) + (suspend) + ) + ) + (go arg0) + (none) + ) + ) + +(defstate wait-for-return (flutflut) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (if + (and + (or (= arg2 'touch) (= arg2 'attack)) + (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) 'end-mode) + (send-event-function *target* a1-1) + ) + ) + (go-virtual pickup (method-of-object self idle)) + ) + (the-as object (if (= arg2 'trans) + (vector+! + (the-as vector (-> arg3 param 0)) + (-> self root-override trans) + (-> self extra-trans) + ) + ) + ) + ) + :enter + (behavior () + (blocking-plane-destroy) + (blocking-plane-spawn (the-as curve-control (-> self path-flut))) + (none) + ) + :code + (behavior () + (ja-channel-set! 0) + (ja-post) + (while #t + (if + (not + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + ) + (go-virtual idle) + ) + (flutflut-effect) + (suspend) + ) + (none) + ) + ) + +(defmethod copy-defaults! flutflut ((obj flutflut) (arg0 res-lump)) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (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-vector! (-> s3-0 local-sphere) 0.0 6144.0 0.0 6144.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set-yaw-angle-clear-roll-pitch! + (-> obj root-override) + (res-lump-float arg0 'rotoffset) + ) + (dummy-14 obj *flutflut-sg* '()) + (logior! (-> obj skel status) 256) + (set! (-> obj draw shadow-ctrl) *flutflut-shadow-control*) + (let ((v1-24 (-> obj node-list data))) + (set! (-> v1-24 0 param0) cspace<-transformq+trans!) + (set! (-> v1-24 0 param1) (the-as basic (-> obj root-override trans))) + (set! (-> v1-24 0 param2) (the-as basic (-> obj extra-trans))) + ) + (dotimes (s4-2 2) + (let ((v1-27 (new 'process 'curve-control obj 'path (the float (+ s4-2 1))))) + (set! (-> obj path-data s4-2) v1-27) + (if v1-27 + (logior! + (-> v1-27 flags) + (path-control-flag display draw-line draw-point draw-text) + ) + ) + ) + ) + (set! (-> obj condition) (res-lump-value arg0 'index int)) + (set! + (-> obj fact) + (new + 'process + 'fact-info + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 120) obj) + ) + (set! (-> obj auto-get-off) #f) + (dummy-60 (-> obj root-override) 40960.0 40960.0 #t (the-as uint 1)) + (set! (-> obj cell) (the-as handle #f)) + (blocking-plane-spawn + (the-as + curve-control + (if + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + (-> obj path-flut) + (-> obj path-target) + ) + ) + ) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name-char + (new 'static 'array uint8 16 + #x7a + #x6f + #x6f + #x6d + #x2d + #x74 + #x65 + #x6c + #x65 + #x70 + #x6f + #x72 + #x74 + #x0 + #x0 + #x0 + ) + :volume #x400 + :fo-max 30 + ) + (-> obj root-override trans) + ) + ) + (go (method-of-object obj wait-for-start)) + (none) + ) + + + + diff --git a/goal_src/levels/lavatube/assistant-lavatube.gc b/goal_src/levels/lavatube/assistant-lavatube.gc index 2d2046ede6..ee07988781 100644 --- a/goal_src/levels/lavatube/assistant-lavatube.gc +++ b/goal_src/levels/lavatube/assistant-lavatube.gc @@ -5,3 +5,338 @@ ;; name in dgo: assistant-lavatube ;; dgos: L1, LAV +(define-extern *assistant-lavatube-start-sg* skeleton-group) + +;; DECOMP BEGINS + +(deftype assistant-lavatube-start (process-taskable) + () + :heap-base #x110 + :method-count-assert 53 + :size-assert #x17c + :flag-assert #x350110017c + ) + + +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "assistant-lavatube-start" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 3) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *assistant-lavatube-start-sg* v1-1) + ) + +(defmethod + play-anim! + assistant-lavatube-start + ((obj assistant-lavatube-start) (arg0 symbol)) + (case (current-status (-> obj tasks)) + ((6) + (if arg0 + (close-current! (-> obj tasks)) + ) + (new 'static 'spool-anim + :name "assistant-lavatube-start-resolution" + :index 5 + :parts 11 + :command-list + '( + ((the binteger 232) + joint + "cameraB" + ) + ((the binteger 491) + joint + "camera" + ) + ((the binteger 866) + joint + "cameraB" + ) + ((the binteger 1061) joint "camera") + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string (the-as task-status (current-status (-> obj tasks)))) + ) + ) + (get-art-elem obj) + ) + ) + ) + +(defmethod get-art-elem assistant-lavatube-start ((obj assistant-lavatube-start)) + (-> obj draw art-group data 3) + ) + +(defstate hidden (assistant-lavatube-start) + :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 + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + #f + ) + ) + (and + (not + (closed? + (-> self tasks) + (game-task lavatube-start) + (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)) + ) + ) + (< + (- + (-> *display* base-frame-counter) + (the-as int (-> self state-time)) + ) + 3000 + ) + ) + ) + (hide-hud) + (kill-current-level-hint '() '(sidekick voicebox) 'exit) + (when + (and + (seen-text? *game-info* (game-text-id assistant-lavatube-powercell-hint)) + (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-26 gp-0)) + (set! (-> v1-26 width) (the float 448)) + ) + (let ((v1-27 gp-0)) + (set! (-> v1-27 height) (the float 80)) + ) + (let ((v1-28 gp-0)) + (set! (-> v1-28 scale) 0.8) + ) + (set! (-> gp-0 flags) (font-flags shadow kerning middle large)) + (print-game-text + (lookup-text! + *common-text* + (game-text-id lavatube-powercell-req-text) + #f + ) + gp-0 + #f + 128 + 22 + ) + ) + ) + (level-hint-spawn + (game-text-id assistant-lavatube-powercell-hint) + "asstva74" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (none) + ) + ) + +(defstate idle (assistant-lavatube-start) + :virtual #t + :code + (behavior () + (while #t + (when (!= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (get-art-elem self) + ) + (ja-channel-push! 1 15) + (let ((v1-5 (-> self skel root-channel 0))) + (set! + (-> v1-5 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + ) + (let* ((f30-0 2.0) + (v1-7 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-8 (the-as number (logior #x3f800000 v1-7))) + ) + (countdown (gp-0 (+ (the int (* f30-0 (+ -1.0 (the-as float v1-8)))) 2)) + (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! + ) + ) + ) + ) + ) + (ja-channel-push! 1 15) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-16 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + 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 4)) + 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) + ) + ) + +(defmethod + should-display? + assistant-lavatube-start + ((obj assistant-lavatube-start)) + (first-any (-> obj tasks) #t) + (= (current-status (-> obj tasks)) 6) + ) + +(defmethod + copy-defaults! + assistant-lavatube-start + ((obj assistant-lavatube-start) (arg0 res-lump)) + (dummy-40 + obj + arg0 + *assistant-lavatube-start-sg* + 3 + 29 + (new 'static 'vector :w 4096.0) + 5 + ) + (set! (-> obj tasks) (get-task-control (game-task lavatube-start))) + (first-any (-> obj tasks) #t) + (dummy-42 obj) + (none) + ) + + + + diff --git a/goal_src/levels/maincave/baby-spider.gc b/goal_src/levels/maincave/baby-spider.gc index be961d0a2f..cabf401ca2 100644 --- a/goal_src/levels/maincave/baby-spider.gc +++ b/goal_src/levels/maincave/baby-spider.gc @@ -5,3 +5,1257 @@ ;; name in dgo: baby-spider ;; dgos: L1, MAI, MAINCAVE +(define-extern *baby-spider-sg* skeleton-group) + +(declare-type baby-spider nav-enemy) +(define-extern baby-spider-hatching (state baby-spider)) ;; unknown type +(define-extern baby-spider-resume (state baby-spider)) ;; unknown type +(define-extern baby-spider-die-fast (state baby-spider)) ;; unknown type + +(declare-type cave-trap process-drawable) + +;; DECOMP BEGINS + +(deftype baby-spider-spawn-params (structure) + ((hatched? symbol :offset-assert 0) + (fast-start? symbol :offset-assert 4) + (hack-move-above-ground? symbol :offset-assert 8) + (die-if-not-visible? symbol :offset-assert 12) + (pickup int32 :offset-assert 16) + (pickup-amount int32 :offset-assert 20) + (event-death symbol :offset-assert 24) + (delay-before-dying-if-not-visible uint64 :offset-assert 32) + ) + :method-count-assert 11 + :size-assert #x28 + :flag-assert #xb00000028 + (:methods + (init! (_type_ symbol symbol symbol symbol int int symbol) int 9) + (set-delay! (_type_ uint) uint 10) + ) + ) + + +(deftype baby-spider (nav-enemy) + ((die-if-not-visible? symbol :offset-assert 400) + (hack-move-above-ground? symbol :offset-assert 404) + (state-float float :offset-assert 408) + (wiggle-angle float :offset-assert 412) + (delta-wiggle-angle float :offset-assert 416) + (wiggle-factor float :offset-assert 420) + (event-death symbol :offset-assert 424) + (delay-before-dying-if-not-visible uint64 :offset-assert 432) + (chase-rest-time uint64 :offset-assert 440) + (target-nav-time uint64 :offset-assert 448) + (unknown00 basic :offset-assert 456) + (unknown01 basic :offset-assert 460) + (wiggle-time uint64 :offset-assert 464) + (last-visible-time uint64 :offset-assert 472) + (up-vector vector :inline :offset-assert 480) + (state-vector vector :inline :offset-assert 496) + ) + :heap-base #x190 + :method-count-assert 76 + :size-assert #x200 + :flag-assert #x4c01900200 + ) + + +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "baby-spider" + :bounds + (new 'static 'vector :y 4096.0 :w 9216.0) + :max-lod 2 + :version #x6 + :shadow 4 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 81920.0) + (set! (-> v1-2 mgeo 1) (the-as uint 2)) + (set! (-> v1-2 lod-dist 1) 163840.0) + (set! (-> v1-2 mgeo 2) (the-as uint 3)) + (set! (-> v1-2 lod-dist 2) 4095996000.0) + (set! *baby-spider-sg* v1-2) + ) + +(define + *baby-spider-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 6 + :walk-anim 8 + :turn-anim 8 + :notice-anim 11 + :run-anim 7 + :jump-anim 9 + :jump-land-anim 10 + :victory-anim 12 + :taunt-anim 12 + :die-anim 13 + :neck-joint 18 + :run-travel-speed (meters 7.0) + :run-rotate-speed (degrees 7999.9995) + :run-acceleration (meters 1.0) + :run-turn-time #x16 + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 7999.9995) + :walk-acceleration (meters 1.0) + :walk-turn-time #x16 + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 1.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 3.0) + :frustration-time #x1c2 + :die-anim-hold-frame 10000000000.0 + :jump-anim-start-frame 2.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #f + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +(define + *baby-spider-nav-enemy-info-for-cave-trap* + (new 'static 'nav-enemy-info + :idle-anim 6 + :walk-anim 8 + :turn-anim 8 + :notice-anim 11 + :run-anim 7 + :jump-anim 9 + :jump-land-anim 10 + :victory-anim 12 + :taunt-anim 12 + :die-anim 13 + :neck-joint 18 + :run-travel-speed (meters 7.0) + :run-rotate-speed (degrees 7999.9995) + :run-acceleration (meters 1.0) + :run-turn-time #x16 + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 7999.9995) + :walk-acceleration (meters 1.0) + :walk-turn-time #x16 + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 1.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 80.0) + :stop-chase-distance (meters 90.0) + :frustration-distance (meters 3.0) + :frustration-time #x1c2 + :die-anim-hold-frame 10000000000.0 + :jump-anim-start-frame 2.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #f + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +(defmethod + init! + baby-spider-spawn-params + ((obj baby-spider-spawn-params) + (arg0 symbol) + (arg1 symbol) + (arg2 symbol) + (arg3 symbol) + (arg4 int) + (arg5 int) + (arg6 symbol) + ) + (set! (-> obj hatched?) arg0) + (set! (-> obj fast-start?) arg1) + (set! (-> obj die-if-not-visible?) arg2) + (set! (-> obj hack-move-above-ground?) arg3) + (set! (-> obj pickup) arg4) + (set! (-> obj pickup-amount) arg5) + (set! (-> obj event-death) arg6) + (let ((v0-0 600)) + (set! (-> obj delay-before-dying-if-not-visible) (the-as uint v0-0)) + v0-0 + ) + ) + +(defmethod + set-delay! + baby-spider-spawn-params + ((obj baby-spider-spawn-params) (arg0 uint)) + (set! (-> obj delay-before-dying-if-not-visible) arg0) + arg0 + ) + +(defmethod + dummy-44 + baby-spider + ((obj baby-spider) (arg0 process) (arg1 event-message-block)) + (the-as + object + (when + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + (if + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (go (method-of-object obj nav-enemy-victory)) + ) + ) + ) + ) + +(defbehavior + baby-spider-default-event-handler baby-spider + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'victory) + (go-virtual nav-enemy-victory) + (nav-enemy-default-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + +baby-spider-default-event-handler + +(defmethod common-post baby-spider ((obj baby-spider)) + (when (logtest? (-> obj collide-info status) 1) + (vector-deg-seek + (-> obj up-vector) + (-> obj up-vector) + (-> obj collide-info surface-normal) + 910.2222 + ) + (vector-normalize! (-> obj up-vector) 1.0) + ) + (forward-up-nopitch->quaternion + (-> obj collide-info quat) + (vector-z-quaternion! (new-stack-vector0) (-> obj collide-info quat)) + (-> obj up-vector) + ) + ((the-as (function nav-enemy none) (find-parent-method baby-spider 39)) obj) + (none) + ) + +(defmethod TODO-RENAME-38 baby-spider ((obj baby-spider)) + (dummy-59 + (-> obj collide-info) + (-> obj collide-info transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (none) + ) + +(defmethod dummy-51 baby-spider ((obj baby-spider)) + (let* ((f0-0 (rand-vu-float-range 0.0 1.0)) + (f1-1 (+ 1.0 (* 2.0 f0-0))) + (f2-2 f1-1) + (f2-4 (/ 1.0 f2-2)) + (f0-2 (+ 1.0 (* 0.2 f0-0))) + ) + (set! (-> obj delta-wiggle-angle) (* 910.2222 f1-1)) + (set! (-> obj wiggle-factor) (* 1.5 f2-4)) + (let ((f0-3 (* 28672.0 f0-2))) + (set! (-> obj target-speed) f0-3) + f0-3 + ) + ) + ) + +(defmethod dummy-52 baby-spider ((obj baby-spider) (arg0 vector)) + (+! (-> obj wiggle-angle) (-> obj delta-wiggle-angle)) + (if (< 65536.0 (-> obj wiggle-angle)) + (set! (-> obj wiggle-angle) (+ -65536.0 (-> obj wiggle-angle))) + ) + (let* ((v1-3 (-> obj collide-info trans)) + (a1-2 (vector-! (new 'stack-no-clear 'vector) v1-3 arg0)) + (s2-0 + (vector-rotate-around-y! (new 'stack-no-clear 'vector) a1-2 16384.0) + ) + (v1-4 + (vector+*! + (new 'stack-no-clear 'vector) + arg0 + s2-0 + (* (-> obj wiggle-factor) (sin (-> obj wiggle-angle))) + ) + ) + (v0-3 (-> obj nav target-pos)) + ) + (set! (-> v0-3 quad) (-> v1-4 quad)) + v0-3 + ) + ) + +(defmethod dummy-53 baby-spider ((obj baby-spider)) + (cond + ((logtest? (-> obj draw status) 8) + (set! + (-> obj last-visible-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (return #f) + ) + (else + (if (-> obj die-if-not-visible?) + (return + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> obj last-visible-time)) + ) + (the-as int (-> obj delay-before-dying-if-not-visible)) + ) + ) + ) + ) + ) + #f + ) + +(defstate baby-spider-hatching (baby-spider) + :event + baby-spider-default-event-handler + :code + (behavior () + (ja-channel-push! 1 0) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go baby-spider-resume) + (none) + ) + :post + (the-as (function none :behavior baby-spider) nav-enemy-simple-post) + ) + +(defstate baby-spider-resume (baby-spider) + :event + baby-spider-default-event-handler + :code + (behavior () + (cond + ((not *target*) + (go-virtual nav-enemy-idle) + ) + ((TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + ) + ((and + (and + *target* + (>= + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (-> self state-timeout) + ) + (nonzero? (-> self draw)) + (logtest? (-> self draw status) 8) + ) + (go-virtual nav-enemy-patrol) + ) + ) + (go-virtual nav-enemy-idle) + (none) + ) + ) + +(defstate nav-enemy-idle (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :enter + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self collide-info trans quad)) + (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-idle) enter))) + (if t9-0 + (t9-0) + ) + ) + (if (-> self hack-move-above-ground?) + (set! (-> self collide-info trans quad) (-> gp-0 quad)) + ) + ) + (none) + ) + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-idle) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :post + (behavior () + (ja-post) + (none) + ) + ) + +(defstate nav-enemy-patrol (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-patrol) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (behavior () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) f30-0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) f30-0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-notice (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-notice) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 51) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 11)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +(defstate nav-enemy-chase (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (if + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> self chase-rest-time)) + ) + (go-virtual nav-enemy-victory) + ) + (let ((t9-3 (-> (method-of-type nav-enemy nav-enemy-chase) trans))) + (if t9-3 + (t9-3) + ) + ) + (none) + ) + :code + (behavior () + (set! + (-> self target-nav-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (set! + (-> self wiggle-time) + (the-as uint (+ (-> *display* base-frame-counter) -3000)) + ) + (set! (-> self wiggle-angle) 0.0) + (set! (-> self chase-rest-time) (the-as uint (rand-vu-int-range 300 1200))) + (ja-channel-push! 1 51) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self wiggle-time))) + 300 + ) + (set! + (-> self wiggle-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (dummy-51 self) + ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (behavior () + (dummy-52 self (target-pos 0)) + (nav-enemy-travel-post) + (none) + ) + ) + +(defstate nav-enemy-stop-chase (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-stop-chase) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (-> (method-of-type nav-enemy nav-enemy-stop-chase) code) + ) + +(defstate nav-enemy-stare (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-stare) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (behavior () + (set! (-> self rotate-speed) 1456355.5) + (set! (-> self turn-time) 22) + (let ((f30-0 (rand-vu-float-range 0.8 1.2))) + (while #t + (logior! (-> self nav-enemy-flags) 16) + (ja-channel-push! 1 30) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 12)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 12)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 12)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) f30-0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (let ((gp-0 (rand-vu-int-range 300 600)) + (s5-0 (-> *display* base-frame-counter)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-0) gp-0) + (let ((v1-33 (-> self skel root-channel 0))) + (set! (-> v1-33 num-func) num-func-identity) + (set! (-> v1-33 frame-num) 0.0) + ) + (ja-blend-eval) + (suspend) + (suspend) + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-give-up (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-give-up) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) + (nav-enemy-get-new-patrol-point) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +(defstate nav-enemy-attack (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-attack) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-victory) + (none) + ) + ) + +(defstate nav-enemy-victory (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-victory) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (-> (method-of-type nav-enemy nav-enemy-victory) code) + ) + +(defstate nav-enemy-die (baby-spider) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior baby-spider) + process-drawable-death-event-handler + ) + :enter + (behavior () + (let ((v1-0 (-> self event-death))) + (when v1-0 + (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) v1-0) + (send-event-function (ppointer->process (-> self parent)) a1-0) + ) + ) + ) + (set! (-> self draw bounds y) 8192.0) + (set! (-> self draw bounds w) 22528.0) + (let ((t9-1 (-> (method-of-type nav-enemy nav-enemy-die) enter))) + (if t9-1 + (t9-1) + ) + ) + (none) + ) + ) + +(defstate baby-spider-die-fast (baby-spider) + :event + baby-spider-default-event-handler + :code + (behavior () + (dummy-18 self) + (let ((v1-2 (-> self event-death))) + (when v1-2 + (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) v1-2) + (send-event-function (ppointer->process (-> self parent)) a1-0) + ) + ) + ) + (none) + ) + ) + +(defmethod initialize-collision baby-spider ((obj baby-spider)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 2) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) 4096.0) + (dummy-50 s5-0) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-48 baby-spider ((obj baby-spider)) + (set! + (-> obj last-visible-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (dummy-14 obj *baby-spider-sg* '()) + (if (= (-> obj parent 0 type) cave-trap) + (TODO-RENAME-45 obj *baby-spider-nav-enemy-info-for-cave-trap*) + (TODO-RENAME-45 obj *baby-spider-nav-enemy-info*) + ) + (let ((v1-11 (-> obj draw shadow-ctrl settings))) + (set! (-> v1-11 flags) (logand -9 (-> v1-11 flags))) + (set! (-> v1-11 fade-dist) 98304.0) + ) + (vector-float*! (-> obj collide-info scale) *identity-vector* 0.63) + (set! (-> obj neck up) (the-as uint 1)) + (set! (-> obj neck nose) (the-as uint 2)) + (set! (-> obj neck ear) (the-as uint 0)) + (set! (-> obj wiggle-angle) 0.0) + (set! (-> obj delta-wiggle-angle) 910.2222) + (set! (-> obj wiggle-factor) 1.5) + (set! (-> obj reaction-time) (rand-vu-int-range 30 240)) + (set! (-> obj chase-rest-time) (the-as uint 300)) + (set! (-> obj up-vector quad) (-> *y-vector* quad)) + 0 + (none) + ) + +(defbehavior + baby-spider-init-by-other baby-spider + ((arg0 baby-spider) + (arg1 vector) + (arg2 vector) + (arg3 baby-spider-spawn-params) + ) + (set! (-> self event-death) (-> arg3 event-death)) + (set! (-> self die-if-not-visible?) (-> arg3 die-if-not-visible?)) + (set! + (-> self delay-before-dying-if-not-visible) + (-> arg3 delay-before-dying-if-not-visible) + ) + (initialize-collision self) + (logior! (-> self mask) (process-mask actor-pause)) + (set! (-> self collide-info trans quad) (-> arg1 quad)) + (forward-up->quaternion (-> self collide-info quat) arg2 *up-vector*) + (vector-float*! (-> self collide-info scale) *identity-vector* 0.63) + (vector-float*! (-> self collide-info transv) arg2 8192.0) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (set! (-> self entity) (-> arg0 entity)) + (TODO-RENAME-48 self) + (set! (-> self enemy-info pickup-type) (the-as pickup-type (-> arg3 pickup))) + (set! (-> self enemy-info pickup-amount) (the float (-> arg3 pickup-amount))) + (create-connection! + *cavecrystal-light-control* + (the-as cavecrystal self) + (-> self entity) + (the-as + (function object object object object object) + cavecrystal-light-control-default-callback + ) + -1 + 4096.0 + ) + (cond + ((-> arg3 hatched?) + (go baby-spider-hatching) + ) + ((-> arg3 fast-start?) + (go baby-spider-resume) + ) + (else + (go-virtual nav-enemy-idle) + ) + ) + (none) + ) + +(defmethod copy-defaults! baby-spider ((obj baby-spider) (arg0 res-lump)) + (set! (-> obj die-if-not-visible?) #f) + (set! (-> obj delay-before-dying-if-not-visible) (the-as uint 600)) + (set! (-> obj hack-move-above-ground?) #f) + (set! (-> obj event-death) #f) + (initialize-collision obj) + (process-drawable-from-entity! obj arg0) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (logior! (-> obj mask) (process-mask actor-pause)) + (set! + (-> obj nav) + (new 'process 'nav-control (-> obj collide-info) 24 40960.0) + ) + (logior! + (-> obj nav flags) + (nav-control-flags display-marks bit3 bit5 bit6 bit7) + ) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! + (-> obj path flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (create-connection! + *cavecrystal-light-control* + (the-as cavecrystal obj) + (-> obj entity) + (the-as + (function object object object object object) + cavecrystal-light-control-default-callback + ) + -1 + 4096.0 + ) + (TODO-RENAME-48 obj) + (go (method-of-object obj nav-enemy-idle)) + (none) + ) + + + + diff --git a/goal_src/levels/maincave/cavecrystal-light.gc b/goal_src/levels/maincave/cavecrystal-light.gc index b24fbcb387..2e4732dac7 100644 --- a/goal_src/levels/maincave/cavecrystal-light.gc +++ b/goal_src/levels/maincave/cavecrystal-light.gc @@ -5,3 +5,254 @@ ;; name in dgo: cavecrystal-light ;; dgos: L1, MAI, MAINCAVE +;; DECOMP BEGINS + +(define *cavecrystal-engine* (new 'loading-level 'engine 'cavecrystal 64)) + +(deftype cavecrystal-light (structure) + ((next cavecrystal-light :offset-assert 0) + (crystal-id int32 :offset-assert 4) + (intensity float :offset-assert 8) + (fade-start float :offset-assert 12) + (fade-end float :offset-assert 16) + (crystal-handle handle :offset-assert 24) + (trans vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + + +(deftype cavecrystal-light-control (basic) + ((active-count int32 :offset-assert 4) + (head cavecrystal-light :offset-assert 8) + (last-known-valid-time uint64 :offset-assert 16) + (crystal cavecrystal-light 7 :inline :offset-assert 32) + ) + :method-count-assert 15 + :size-assert #x170 + :flag-assert #xf00000170 + (:methods + (TODO-RENAME-9 (_type_ int float cavecrystal) object 9) + (TODO-RENAME-10 (_type_ vector) float 10) + (inc-intensites! (_type_) int 11) + (TODO-RENAME-12 (_type_) symbol 12) + (create-connection! (_type_ cavecrystal res-lump (function object object object object object) object object) connection 13) + (execute-connections (_type_) int 14) + ) + ) + + +(define + *cavecrystal-light-control* + (new 'static 'cavecrystal-light-control :head #f) + ) + +(defun + cavecrystal-light-control-default-callback + ((arg0 (pointer process-drawable)) (arg1 int) (arg2 float)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let ((v1-1 (-> arg0 0 node-list))) + (if (and (>= arg1 0) (nonzero? v1-1)) + (vector<-cspace! s5-0 (-> v1-1 data arg1)) + (set! (-> s5-0 quad) (-> arg0 0 root trans quad)) + ) + ) + (set! (-> s5-0 w) arg2) + (let ((f0-1 (TODO-RENAME-10 *cavecrystal-light-control* s5-0)) + (a2-2 (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0)) + (a1-5 (new 'static 'vector :x 0.05 :y 0.05 :z 0.05 :w 1.0)) + ) + (vector-lerp! (-> arg0 0 draw color-mult) a1-5 a2-2 f0-1) + ) + ) + (none) + ) + +(defmethod + create-connection! + cavecrystal-light-control + ((obj cavecrystal-light-control) + (arg0 cavecrystal) + (arg1 res-lump) + (arg2 (function object object object object object)) + (arg3 object) + (arg4 object) + ) + (if (nonzero? (res-lump-value arg1 'crystal-light uint128)) + (add-connection + *cavecrystal-engine* + arg0 + arg2 + (process->ppointer arg0) + arg3 + arg4 + ) + ) + ) + +(defmethod + execute-connections + cavecrystal-light-control + ((obj cavecrystal-light-control)) + (execute-connections *cavecrystal-engine* #f) + ) + +(defmethod + TODO-RENAME-12 + cavecrystal-light-control + ((obj cavecrystal-light-control)) + (let ((v1-0 (-> obj last-known-valid-time)) + (a1-1 (-> *display* base-frame-counter)) + ) + (when (!= v1-0 a1-1) + (set! (-> obj last-known-valid-time) (the-as uint a1-1)) + (cond + ((zero? v1-0) + (set! (-> obj active-count) 0) + (set! (-> obj head) #f) + (dotimes (v1-1 7) + (let ((a1-5 (-> obj crystal v1-1))) + (set! (-> a1-5 next) #f) + (set! (-> a1-5 crystal-id) v1-1) + (set! (-> a1-5 intensity) 0.0) + (set! (-> a1-5 fade-start) 20480.0) + (set! (-> a1-5 fade-end) 286720.0) + (set! (-> a1-5 crystal-handle) (the-as handle #f)) + ) + ) + #f + ) + (else + (when (> (-> obj active-count) 0) + (let ((v1-4 (the-as cavecrystal-light #f)) + (a1-7 (-> obj head)) + ) + (while a1-7 + (cond + ((handle->process (-> a1-7 crystal-handle)) + (set! v1-4 a1-7) + (set! a1-7 (-> a1-7 next)) + ) + (else + (let ((a2-4 (-> a1-7 next))) + (+! (-> obj active-count) -1) + (set! (-> a1-7 next) #f) + (set! (-> a1-7 intensity) 0.0) + (if v1-4 + (set! (-> obj head) a2-4) + (set! (-> v1-4 next) a2-4) + ) + (set! a1-7 a2-4) + ) + ) + ) + ) + ) + #f + ) + ) + ) + ) + ) + ) + +(defmethod + inc-intensites! + cavecrystal-light-control + ((obj cavecrystal-light-control)) + (set! (-> obj head) #f) + (let ((a1-0 (the-as cavecrystal-light #f)) + (v0-0 0) + ) + (dotimes (v1-0 7) + (let ((a2-3 (-> obj crystal v1-0))) + (set! (-> a2-3 next) #f) + (when (< 0.0 (-> a2-3 intensity)) + (+! v0-0 1) + (if a1-0 + (set! (-> a1-0 next) a2-3) + (set! (-> obj head) a2-3) + ) + (set! a1-0 a2-3) + ) + ) + ) + (set! (-> obj active-count) v0-0) + v0-0 + ) + ) + +(defmethod + TODO-RENAME-9 + cavecrystal-light-control + ((obj cavecrystal-light-control) (arg0 int) (arg1 float) (arg2 cavecrystal)) + (TODO-RENAME-12 obj) + (when (or (< arg0 0) (>= arg0 7)) + (format 0 "ERROR: Bogus cavecrystal id!~%") + (return #f) + ) + (let ((s3-0 (-> obj crystal arg0))) + (cond + ((and (< 0.0 arg1) (>= 0.0 (-> s3-0 intensity))) + (+! (-> obj active-count) 1) + (set! (-> s3-0 intensity) arg1) + (set! (-> s3-0 crystal-handle) (process->handle arg2)) + (set! (-> s3-0 trans quad) (-> arg2 root-override trans quad)) + (inc-intensites! obj) + ) + ((and (>= 0.0 arg1) (< 0.0 (-> s3-0 intensity))) + (+! (-> obj active-count) -1) + (set! (-> s3-0 intensity) 0.0) + (inc-intensites! obj) + ) + ((< 0.0 arg1) + (set! (-> s3-0 intensity) arg1) + ) + ) + (TODO-RENAME-10 *palette-fade-controls* (+ arg0 1) arg1 0.0 (-> s3-0 trans)) + ) + ) + +(defmethod + TODO-RENAME-10 + cavecrystal-light-control + ((obj cavecrystal-light-control) (arg0 vector)) + (TODO-RENAME-12 obj) + (let ((s5-1 (-> obj head)) + (f30-0 0.0) + ) + (when s5-1 + (until (not s5-1) + (let* ((f26-0 (-> s5-1 fade-start)) + (f28-0 (- (-> s5-1 fade-end) f26-0)) + (f1-1 + (fmin + (fmax + 0.0 + (- + (- (vector-vector-distance (-> s5-1 trans) arg0) (-> arg0 w)) + f26-0 + ) + ) + f28-0 + ) + ) + (f0-7 (* (- 1.0 (/ f1-1 f28-0)) (-> s5-1 intensity))) + ) + (if (< f30-0 f0-7) + (set! f30-0 f0-7) + ) + ) + (set! s5-1 (-> s5-1 next)) + ) + (set! f30-0 (fmin 2.0 f30-0)) + ) + f30-0 + ) + ) + + + + diff --git a/goal_src/levels/maincave/mother-spider-h.gc b/goal_src/levels/maincave/mother-spider-h.gc index 05e2a52271..a8b64d62cb 100644 --- a/goal_src/levels/maincave/mother-spider-h.gc +++ b/goal_src/levels/maincave/mother-spider-h.gc @@ -5,3 +5,130 @@ ;; name in dgo: mother-spider-h ;; dgos: L1, MAI, MAINCAVE +;; DECOMP BEGINS + +(deftype mother-spider-leg (process-drawable) + ((gravity float :offset-assert 176) + (transv vector :inline :offset-assert 192) + (facing-rot vector :inline :offset-assert 208) + (facing-rotv vector :inline :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 20 + :size-assert #xf0 + :flag-assert #x14008000f0 + ) + + +(deftype mother-spider-thread (structure) + ((joint-index int32 :offset-assert 0) + (trans-u float :offset-assert 4) + (swing-arc-u float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + + +(deftype mother-spider-leg-info (structure) + ((joint-index0 int32 :offset-assert 0) + (joint-index1 int32 :offset-assert 4) + (cprim-index int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + + +(deftype mother-spider-history (structure) + ((trans vector :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(deftype mother-spider-history-array (inline-array-class) + ((data mother-spider-history :dynamic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(set! (-> mother-spider-history-array heap-base) (the-as uint 16)) + +(deftype mother-spider (process-drawable) + ((mode uint64 :offset-assert 176) + (damage int32 :offset-assert 184) + (baby-count int32 :offset-assert 188) + (max-baby-count int32 :offset-assert 192) + (birthing-counter int32 :offset-assert 196) + (spit-counter int32 :offset-assert 200) + (leg-socket-part-mask int32 :offset-assert 204) + (dist-from-anchor float :offset-assert 208) + (targ-dist-from-anchor float :offset-assert 212) + (idle-dist-from-anchor float :offset-assert 216) + (player-sticky-dist-from-anchor float :offset-assert 220) + (max-dist-from-anchor float :offset-assert 224) + (activate-xz-dist float :offset-assert 228) + (deactivate-xz-dist float :offset-assert 232) + (max-spit-xz-dist float :offset-assert 236) + (max-swing-radius float :offset-assert 240) + (spin-vel float :offset-assert 244) + (thread-speed float :offset-assert 248) + (thread-vel float :offset-assert 252) + (history mother-spider-history-array :offset-assert 256) + (history-len int32 :offset-assert 260) + (history-next-index int32 :offset-assert 264) + (hit? symbol :offset-assert 268) + (going-up? symbol :offset-assert 272) + (check-z-thresh? symbol :offset-assert 276) + (activate-z-thresh float :offset-assert 280) + (deactivate-z-thresh float :offset-assert 284) + (spawned-time uint64 :offset-assert 288) + (last-update-time uint64 :offset-assert 296) + (spin-time uint64 :offset-assert 304) + (last-spit-time uint64 :offset-assert 312) + (last-player-in-air-time uint64 :offset-assert 320) + (started-birthing-time uint64 :offset-assert 328) + (neck joint-mod :offset-assert 336) + (player-attack-id uint64 :offset-assert 344) + (leg-socket-part-time uint64 6 :offset-assert 352) + (orient-rot vector :inline :offset-assert 400) + (anchor-trans vector :inline :offset-assert 416) + (thread-min-trans vector :inline :offset-assert 432) + (swing-pos vector :inline :offset-assert 448) + (swing-base-pos vector :inline :offset-assert 464) + (swing-vel vector :inline :offset-assert 480) + ) + :heap-base #x180 + :method-count-assert 32 + :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) + ) + ) + + +0 + + + + diff --git a/goal_src/levels/maincave/mother-spider-proj.gc b/goal_src/levels/maincave/mother-spider-proj.gc index 546757afb0..746cb2b3c3 100644 --- a/goal_src/levels/maincave/mother-spider-proj.gc +++ b/goal_src/levels/maincave/mother-spider-proj.gc @@ -5,3 +5,575 @@ ;; name in dgo: mother-spider-proj ;; dgos: L1, MAI, MAINCAVE +;; DECOMP BEGINS + +(deftype mother-spider-proj (projectile) + ((parent-process (pointer projectile) :offset 12) + (facing-dir vector :inline :offset-assert 416) + ) + :heap-base #x140 + :method-count-assert 29 + :size-assert #x1b0 + :flag-assert #x1d014001b0 + ) + + +(set! + (-> *part-group-id-table* 326) + (new 'static 'sparticle-launch-group + :length 48 + :duration #x12c + :linger-duration #x5dc + :name "group-mother-spider-proj-fly" + :launcher + (new 'static 'inline-array sparticle-group-item 48 + (sp-item 718 :flags (launch-asap) :binding 716) + (sp-item 716 :flags (start-dead) :binding 717) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + ) + :bounds (new 'static 'sphere :w 12288.0) + ) + ) + +(set! + (-> *part-id-table* 718) + (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* 716) + (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 1.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 720) + (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* 720) + (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* 717) + (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 720) + (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* 327) + (new 'static 'sparticle-launch-group + :length 3 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-mother-spider-proj-hit" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 722) + (sp-item 723) + (sp-item 724) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! + (-> *part-id-table* 722) + (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 720) + (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* 724) + (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 720) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 180.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 723) + (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* 328) + (new 'static 'sparticle-launch-group + :length 1 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-mother-spider-proj-die" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 722)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(defmethod dummy-24 mother-spider-proj ((obj mother-spider-proj)) + (with-pp + (spawn + (-> obj part) + (the-as vector (-> obj root-override root-prim prim-core)) + ) + (let ((s5-0 (the-as sound-rpc-set-param (get-sound-buffer-entry)))) + (set! (-> s5-0 command) (sound-command set-param)) + (set! (-> s5-0 id) (-> obj sound-id)) + (let ((a1-1 (-> obj root-override trans))) + (let ((s4-0 pp)) + (when (= a1-1 #t) + (if + (and + s4-0 + (type-type? (-> s4-0 type) process-drawable) + (nonzero? (-> (the-as process-drawable s4-0) root)) + ) + (set! a1-1 (-> (the-as process-drawable s4-0) root trans)) + (set! a1-1 (the-as vector #f)) + ) + ) + ) + (sound-trans-convert (-> s5-0 parms trans) a1-1) + ) + (set! (-> s5-0 parms mask) (the-as uint 32)) + (-> s5-0 id) + ) + (let + ((f0-5 + (* + 5120.0 + (+ + 0.9 + (* + 0.1 + (cos + (* 873.81335 (the float (mod (-> *display* base-frame-counter) 75))) + ) + ) + ) + ) + ) + ) + (find-ground-and-draw-shadow + (-> obj root-override trans) + (the-as vector #f) + f0-5 + (the-as uint 1) + (the-as process #f) + 0.0 + 81920.0 + ) + ) + (none) + ) + ) + +(defun mother-spider-proj-update-velocity ((arg0 mother-spider-proj)) + (when + (>= + (vector-vector-xz-distance + (-> arg0 parent-process 0 root-override trans) + (-> arg0 target) + ) + (vector-vector-xz-distance + (-> arg0 parent-process 0 root-override trans) + (-> arg0 root-override trans) + ) + ) + (let + ((s3-1 + (vector-! + (new 'stack-no-clear 'vector) + (-> arg0 target) + (-> arg0 root-override trans) + ) + ) + (s4-0 (new 'stack-no-clear 'vector)) + (s5-0 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> arg0 root-override transv) + 1.0 + ) + ) + ) + (if (logtest? (-> arg0 root-override status) 4) + (vector-flatten! s3-1 s3-1 (-> arg0 root-override local-normal)) + ) + (vector-normalize-copy! s4-0 s3-1 1.0) + (let ((s3-2 (new 'stack-no-clear 'vector))) + (matrix-from-two-vectors-max-angle-partial! + (the-as matrix s3-2) + s5-0 + s4-0 + (* (-> arg0 max-turn) (-> *display* seconds-per-frame)) + (-> arg0 tween) + ) + (vector-matrix*! s5-0 s5-0 (the-as matrix s3-2)) + ) + (vector-normalize! s5-0 1.0) + (vector-float*! (-> arg0 root-override transv) s5-0 (-> arg0 max-speed)) + ) + ) + 0 + (none) + ) + +(defmethod dummy-26 mother-spider-proj ((obj mother-spider-proj)) + (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) projectile-collision-reaction) + (set! (-> s5-0 no-reaction) 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 1024)) + (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) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 1228.8) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> s5-0 event-self) 'touched) + (set! (-> obj root-override) s5-0) + ) + (logclear! (-> obj mask) (process-mask enemy)) + (logclear! (-> obj mask) (process-mask crate)) + (logclear! (-> obj mask) (process-mask attackable)) + (set! (-> obj mask) (logior (process-mask projectile) (-> obj mask))) + 0 + (none) + ) + +(defmethod dummy-27 mother-spider-proj ((obj mother-spider-proj)) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 326) obj) + ) + (set! (-> obj max-speed) 32768.0) + (set! (-> obj update-velocity) mother-spider-proj-update-velocity) + (set! (-> obj max-turn) 5916.4443) + (set! (-> obj tween) 0.02) + (set! (-> obj attack-mode) 'mother-spider-proj) + (set! (-> obj timeout) (the-as uint 1200)) + (set! (-> obj target quad) (-> (target-pos 0) quad)) + (set! (-> obj target y) (+ 4915.2 (-> obj target y))) + (set! (-> obj target-base quad) (-> obj target quad)) + (set! + (-> obj sound-id) + (sound-play-by-name + (static-sound-name "mother-track") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (sound-play-by-name + (static-sound-name "mother-fire") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (none) + ) + +(defmethod dummy-28 mother-spider-proj ((obj mother-spider-proj)) + (when (and *target* (zero? (logand (-> *target* state-flags) #x80f8))) + (let ((gp-0 (-> obj target))) + (set! (-> gp-0 quad) (-> (target-pos 0) quad)) + (set! (-> gp-0 y) (+ 4915.2 (-> gp-0 y))) + (let ((f0-2 (vector-vector-distance gp-0 (-> obj root-override trans))) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (if (>= 0.0 f0-2) + (set! f0-2 409.6) + ) + (set! (-> a2-0 quad) (-> *target* control transv quad)) + (set! (-> a2-0 y) 0.0) + (let ((f0-3 (/ f0-2 (* 32768.0 (-> *display* seconds-per-frame))))) + (vector+float*! gp-0 gp-0 a2-0 (* f0-3 (-> *display* seconds-per-frame))) + ) + ) + ) + ) + (none) + ) + +(defstate projectile-impact (mother-spider-proj) + :virtual #t + :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* 327) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (if (nonzero? (-> self sound-id)) + (sound-stop (-> self sound-id)) + ) + (sound-play-by-name + (static-sound-name "mother-hit") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (suspend) + (go-virtual projectile-die) + (none) + ) + ) + +(defstate projectile-dissipate (mother-spider-proj) + :virtual #t + :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* 328) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (if (nonzero? (-> self sound-id)) + (sound-stop (-> self sound-id)) + ) + (suspend) + (go-virtual projectile-die) + (none) + ) + ) + + + + diff --git a/goal_src/levels/maincave/spiderwebs.gc b/goal_src/levels/maincave/spiderwebs.gc index 1628f9ac65..c4b84002ed 100644 --- a/goal_src/levels/maincave/spiderwebs.gc +++ b/goal_src/levels/maincave/spiderwebs.gc @@ -5,3 +5,343 @@ ;; name in dgo: spiderwebs ;; dgos: L1, MAI, MAINCAVE +(define-extern *spiderwebs-sg* skeleton-group) + +(declare-type spiderwebs process-drawable) +(define-extern spiderwebs-bounce (state spiderwebs)) ;; unknown type +(define-extern spiderwebs-idle (state spiderwebs)) ;; unknown type + +;; DECOMP BEGINS + +(define + *spider-jump-mods* + (new 'static 'surface + :name 'jump + :turnv 131072.0 + :turnvv 18204.445 + :tiltv 32768.0 + :tiltvv 131072.0 + :transv-max 49152.0 + :target-speed 49152.0 + :seek0 0.6 + :seek90 0.6 + :seek180 0.6 + :fric 0.2 + :nonlin-fric-dist 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :mode 'air + :flags #xc00 + ) + ) + +(deftype spiderwebs (process-drawable) + ((spring-height meters :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + ) + + +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "spiderwebs" + :bounds (new 'static 'vector :w 14336.0) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *spiderwebs-sg* v1-2) + ) + +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defbehavior + spiderwebs-default-event-handler spiderwebs + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'bonk) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 3) + (set! (-> a1-1 message) 'jump) + (set! + (-> a1-1 param 0) + (the-as uint (-> self spring-height)) + ) + (set! + (-> a1-1 param 1) + (the-as uint (-> self spring-height)) + ) + (set! (-> a1-1 param 2) (the-as uint *spider-jump-mods*)) + (if (send-event-function arg0 a1-1) + (go spiderwebs-bounce) + ) + ) + ) + ((= v1-0 'touch) + (when (= (-> arg0 type) target) + (let* ((a0-8 (target-pos 0)) + (f1-1 (- (-> a0-8 y) (-> self root trans y))) + ) + (if + (and + (>= 2048.0 (fabs f1-1)) + (and + (>= + 13516.8 + (vector-vector-distance a0-8 (-> self root trans)) + ) + (let + ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 3) + (set! (-> a1-3 message) 'jump) + (set! + (-> a1-3 param 0) + (the-as uint (-> self spring-height)) + ) + (set! + (-> a1-3 param 1) + (the-as uint (-> self spring-height)) + ) + (set! + (-> a1-3 param 2) + (the-as uint *spider-jump-mods*) + ) + (send-event-function arg0 a1-3) + ) + ) + ) + (go spiderwebs-bounce) + ) + ) + ) + ) + ((= v1-0 'attack) + (if + (and + (= (-> arg3 param 1) 'flop) + (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) 'jump) + (set! + (-> a1-4 param 0) + (the-as uint (-> self spring-height)) + ) + (set! + (-> a1-4 param 1) + (the-as uint (-> self spring-height)) + ) + (set! (-> a1-4 param 2) (the-as uint *spider-jump-mods*)) + (send-event-function arg0 a1-4) + ) + ) + (go spiderwebs-bounce) + ) + #f + ) + ) + ) + ) + ) + +(defstate spiderwebs-idle (spiderwebs) + :event + spiderwebs-default-event-handler + :code + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate spiderwebs-bounce (spiderwebs) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (sound-play-by-name + (static-sound-name "web-tramp") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((gp-1 (-> self skel root-channel 0))) + (set! + (-> gp-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! (-> gp-1 param 0) (ja-aframe 10.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 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (ja-aframe 10.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! + ) + ) + ) + (set! (-> self event-hook) (-> spiderwebs-idle event)) + (let ((gp-3 (-> self skel root-channel 0))) + (set! + (-> gp-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> gp-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-3 param 1) 1.0) + (set! (-> gp-3 frame-num) (ja-aframe 10.0 0)) + (joint-control-channel-group! + gp-3 + (the-as art-joint-anim (-> self draw art-group data 2)) + 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 spiderwebs-idle) + (none) + ) + :post + (the-as (function none :behavior spiderwebs) transform-post) + ) + +(defmethod copy-defaults! spiderwebs ((obj spiderwebs) (arg0 res-lump)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let + ((s3-0 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 14336.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) 13926.4) + (dummy-50 s4-0) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *spiderwebs-sg* '()) + (set! + (-> obj spring-height) + (res-lump-float arg0 'spring-height :default 45056.0) + ) + (ja-channel-set! 1) + (let ((a0-11 (-> obj 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! + a0-11 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (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) + ) + (nav-mesh-connect obj (-> obj root) (the-as nav-control #f)) + (transform-post) + (go spiderwebs-idle) + (none) + ) + + + + diff --git a/goal_src/levels/misty/bonelurker.gc b/goal_src/levels/misty/bonelurker.gc index 901fbb7a48..78b45353a8 100644 --- a/goal_src/levels/misty/bonelurker.gc +++ b/goal_src/levels/misty/bonelurker.gc @@ -5,5 +5,1209 @@ ;; name in dgo: bonelurker ;; dgos: L1, MIS -;; TODO - for sidekick-human (define-extern *bonelurker-sg* skeleton-group) + +(declare-type bonelurker nav-enemy) +(define-extern bonelurker-stun (state bonelurker)) + +;; DECOMP BEGINS + +(deftype bonelurker (nav-enemy) + ((bump-player-time uint64 :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x198 + :flag-assert #x4c01300198 + ) + + +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "bonelurker" + :bounds + (new 'static 'vector :y 8192.0 :w 24576.0) + :max-lod 2 + :version #x6 + :shadow 4 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 5) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 163840.0) + (set! (-> v1-1 mgeo 2) (the-as uint 3)) + (set! (-> v1-1 lod-dist 2) 4095996000.0) + (set! *bonelurker-sg* v1-1) + ) + +(defbehavior bonelurker-set-small-bounds-sphere bonelurker () + (set! (-> self draw bounds w) 12288.0) + 0 + (none) + ) + +(defbehavior bonelurker-set-large-bounds-sphere bonelurker () + (set! (-> self draw bounds w) 24576.0) + 0 + (none) + ) + +(defmethod + dummy-44 + bonelurker + ((obj bonelurker) (arg0 process) (arg1 event-message-block)) + (the-as + object + (when + (and + (logtest? (-> obj nav-enemy-flags) 64) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + ) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (set! (-> obj speed-scale) 0.5) + #t + ) + ) + ) + ) + +(defmethod + dummy-43 + bonelurker + ((obj bonelurker) (arg0 process) (arg1 event-message-block)) + (with-pp + (set! (-> obj state-time) (the-as seconds (-> *display* base-frame-counter))) + (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) 'query) + (set! (-> a1-1 param 0) (the-as uint 'powerup)) + (set! (-> a1-1 param 1) (the-as uint 2)) + (the-as object (cond + ((or + (send-event-function *target* a1-1) + (= (-> arg1 param 1) 'explode) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go (method-of-object obj nav-enemy-die)) + 'die + ) + (else + (cond + (((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 2) + ) + (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) 'shove) + (set! (-> a1-3 param 0) (-> arg1 param 0)) + (let ((v1-19 (new 'static 'attack-info :mask #x40))) + (set! (-> v1-19 shove-back) 16384.0) + (set! (-> a1-3 param 1) (the-as uint v1-19)) + ) + (send-event-function arg0 a1-3) + ) + (go bonelurker-stun) + #t + ) + ((and + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + (= (-> obj skel root-channel 0) (-> obj skel channel)) + (let ((v1-30 (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + ) + ) + (or + (= v1-30 (-> obj draw art-group data 9)) + (= v1-30 (-> obj draw art-group data 10)) + ) + ) + ) + (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) 'shove) + (set! (-> a1-6 param 0) (-> arg1 param 0)) + (let ((v1-36 (new 'static 'attack-info :mask #x40))) + (set! (-> v1-36 shove-back) 16384.0) + (set! (-> a1-6 param 1) (the-as uint v1-36)) + ) + (send-event-function arg0 a1-6) + ) + (set! + (-> obj bump-player-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (set! + (-> obj nav-enemy-flags) + (logand -65 (-> obj nav-enemy-flags)) + ) + 'push + ) + ) + ) + ) + ) + ) + ) + ) + +(defbehavior + bonelurker-stunned-event-handler bonelurker + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'attack) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self state-time)) + ) + 150 + ) + (nav-enemy-set-hit-from-direction arg0) + (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) 'get-attack-count) + (set! (-> a1-1 param 0) (the-as uint 1)) + (send-event-function arg0 a1-1) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (go-virtual nav-enemy-die) + 'die + ) + ) + ) + ) + ) + +nav-enemy-default-event-handler + +(defbehavior bonelurker-push-post bonelurker () + (TODO-RENAME-9 (-> self align)) + (dummy-11 (-> self nav) (-> self nav target-pos)) + (TODO-RENAME-11 + (-> self align) + 4 + (-> self nav travel) + (the-as int 1.0) + 1.0 + (* (-> self enemy-info speed) (-> self speed-scale)) + ) + (vector-v++! + (-> self collide-info transv) + (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0) + ) + (TODO-RENAME-10 (-> self align) 16 1.0 1.0 1.0) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (nav-enemy-common-post) + (none) + ) + +(defstate nav-enemy-idle (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (bonelurker-set-large-bounds-sphere) + (none) + ) + :code + (behavior () + (bonelurker-set-small-bounds-sphere) + ((the-as + (function none :behavior bonelurker) + (-> (method-of-type nav-enemy nav-enemy-idle) code) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-patrol (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (behavior () + (ja-channel-push! 1 60) + ((the-as + (function none :behavior bonelurker) + (-> (method-of-type nav-enemy nav-enemy-patrol) code) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-notice (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (-> (method-of-type nav-enemy nav-enemy-notice) code) + ) + +(defstate nav-enemy-chase (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :trans + (behavior () + ((-> (method-of-type nav-enemy nav-enemy-chase) trans)) + (if + (and + (zero? (logand (-> self nav-enemy-flags) 64)) + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self bump-player-time)) + ) + 150 + ) + ) + (logior! (-> self nav-enemy-flags) 64) + ) + (none) + ) + :code + (behavior () + (set! (-> self rotate-speed) 524288.0) + (set! (-> self turn-time) 30) + (set! (-> self speed-scale) 1.0) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 13) + ) + (ja-channel-push! 1 90) + ) + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 15) + ) + (ja-channel-push! 1 60) + ) + (else + (ja-channel-push! 1 45) + ) + ) + (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) f30-0) + (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) f30-0) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-15 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) f30-0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (the-as art-joint-anim (-> self draw art-group data 10)) + 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) f30-0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (cond + ((or + (not *target*) + (< + 36864.0 + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (let ((a0-19 (-> self skel root-channel 0))) + (set! + (-> a0-19 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! + (-> a0-19 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-19 param 1) f30-0) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! + a0-19 + (the-as art-joint-anim (-> self draw art-group data 8)) + 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) f30-0) + (joint-control-channel-group-eval! + a0-20 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (let ((a0-22 (-> self skel root-channel 0))) + (set! + (-> a0-22 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + (set! + (-> a0-22 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 9)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-22 param 1) f30-0) + (set! (-> a0-22 frame-num) 0.0) + (joint-control-channel-group! + a0-22 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-23 (-> self skel root-channel 0))) + (set! + (-> a0-23 param 0) + (the float (+ (-> a0-23 frame-group data 0 length) -1)) + ) + (set! (-> a0-23 param 1) f30-0) + (joint-control-channel-group-eval! + a0-23 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (if (logtest? (-> self nav-enemy-flags) 256) + (go-virtual nav-enemy-victory) + ) + (let ((a0-25 (-> self skel root-channel 0))) + (set! + (-> a0-25 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-25 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-25 param 1) f30-0) + (set! (-> a0-25 frame-num) 0.0) + (joint-control-channel-group! + a0-25 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-26 (-> self skel root-channel 0))) + (set! + (-> a0-26 param 0) + (the float (+ (-> a0-26 frame-group data 0 length) -1)) + ) + (set! (-> a0-26 param 1) f30-0) + (joint-control-channel-group-eval! + a0-26 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (if (logtest? (-> self nav-enemy-flags) 256) + (go-virtual nav-enemy-victory) + ) + (let ((a0-28 (-> self skel root-channel 0))) + (set! + (-> a0-28 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! + (-> a0-28 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-28 param 1) f30-0) + (set! (-> a0-28 frame-num) 0.0) + (joint-control-channel-group! + a0-28 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 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) f30-0) + (joint-control-channel-group-eval! + a0-29 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-stop-chase (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (-> (method-of-type nav-enemy nav-enemy-stop-chase) code) + ) + +(defstate nav-enemy-stare (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (behavior () + (set! (-> self rotate-speed) 524288.0) + (set! (-> self turn-time) 60) + (let ((f30-0 (rand-vu-float-range 0.8 1.2))) + (when (and (nav-enemy-player-vulnerable?) (nav-enemy-rnd-percent? 0.5)) + (ja-channel-push! 1 30) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 13)) + ) + (set! (-> gp-0 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-0 param 1) f30-0) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 13)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-1 param 1) f30-0) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (while #t + (when (not (nav-enemy-facing-player? 2730.6667)) + (logior! (-> self nav-enemy-flags) 16) + (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 16)) + ) + ) + (let ((v1-23 (-> self skel root-channel 0))) + (set! (-> v1-23 num-func) num-func-identity) + (set! (-> v1-23 frame-num) 0.0) + ) + (until (nav-enemy-facing-player? 1820.4445) + (ja-blend-eval) + (suspend) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 param 0) 1.0) + (joint-control-channel-group-eval! + a0-14 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + ) + (ja-channel-push! 1 75) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-18 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-18 param 1) f30-0) + (set! (-> a0-18 frame-num) 0.0) + (joint-control-channel-group! + a0-18 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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) f30-0) + (joint-control-channel-group-eval! + a0-19 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-21 (-> self skel root-channel 0))) + (set! (-> a0-21 param 0) 1.0) + (joint-control-channel-group! + a0-21 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (when (rand-vu-percent? 0.15) + (ja-channel-push! 1 30) + (let ((gp-2 (-> self skel root-channel 0))) + (set! + (-> gp-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 13)) + ) + (set! (-> gp-2 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-2 param 1) f30-0) + (set! (-> gp-2 frame-num) 0.0) + (joint-control-channel-group! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 13)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-3 param 1) f30-0) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-give-up (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (behavior () + (set! (-> self rotate-speed) 524288.0) + (set! (-> self turn-time) 30) + (ja-channel-push! 1 45) + (let ((s4-0 (-> self collide-info)) + (s5-0 (target-pos 0)) + ) + (when + (< + (fabs + (deg-diff + (y-angle s4-0) + (vector-y-angle + (vector-! (new 'stack-no-clear 'vector) s5-0 (-> s4-0 trans)) + ) + ) + ) + 12743.111 + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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! + ) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-9 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! + a0-9 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-12 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + 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 5)) + 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! + ) + ) + ) + ) + ) + (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) + (nav-enemy-get-new-patrol-point) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-18 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-18 param 1) 1.0) + (set! (-> a0-18 frame-num) 0.0) + (joint-control-channel-group! + a0-18 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-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! + ) + ) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +(defstate nav-enemy-victory (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (-> (method-of-type nav-enemy nav-enemy-victory) code) + ) + +(defstate bonelurker-stun (bonelurker) + :event + bonelurker-stunned-event-handler + :enter + (behavior () + (nav-enemy-neck-control-inactive) + (none) + ) + :exit + (behavior () + (nav-enemy-neck-control-look-at) + (none) + ) + :code + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector-normalize-copy! gp-0 (-> self hit-from-dir) 16384.0) + (vector+! gp-0 (-> self collide-info trans) gp-0) + (set! (-> self nav target-pos quad) (-> gp-0 quad)) + ) + (ja-channel-push! 1 30) + (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! + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + :post + bonelurker-push-post + ) + +(define + *bonelurker-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 5 + :walk-anim 6 + :turn-anim 16 + :notice-anim 7 + :run-anim 8 + :jump-anim 17 + :jump-land-anim 18 + :victory-anim 13 + :taunt-anim 13 + :die-anim 14 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 2880.0) + :run-acceleration (meters 1.0) + :run-turn-time #x1e + :walk-travel-speed (meters 3.0) + :walk-rotate-speed (degrees 2880.0) + :walk-acceleration (meters 1.0) + :walk-turn-time #x1e + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 5.0) + :nav-nearest-y-threshold (meters 5.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 32.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #t + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #t + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +(defmethod initialize-collision bonelurker ((obj bonelurker)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) 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! (-> s4-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s4-0 local-sphere) 0.0 10240.0 0.0 24576.0) + (dummy-46 s5-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 action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 8192.0 0.0 4096.0) + ) + (dummy-28 s4-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 action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 1) + (set-vector! (-> s3-1 local-sphere) 0.0 11468.8 0.0 4096.0) + ) + (dummy-28 s4-0) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (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) 2) + (set! (-> s3-2 transform-index) 29) + (set-vector! (-> s3-2 local-sphere) 0.0 4915.2 0.0 4915.2) + ) + (dummy-28 s4-0) + ) + (set! (-> s5-0 nav-radius) 8192.0) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 1)) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-48 bonelurker ((obj bonelurker)) + (dummy-14 obj *bonelurker-sg* '()) + (TODO-RENAME-45 obj *bonelurker-nav-enemy-info*) + (set! (-> obj neck up) (the-as uint 0)) + (set! (-> obj neck nose) (the-as uint 1)) + (set! (-> obj neck ear) (the-as uint 2)) + 0 + (none) + ) + + + + diff --git a/goal_src/levels/misty/muse.gc b/goal_src/levels/misty/muse.gc index 1e4792d9c8..61af5a38d9 100644 --- a/goal_src/levels/misty/muse.gc +++ b/goal_src/levels/misty/muse.gc @@ -5,3 +5,979 @@ ;; name in dgo: muse ;; dgos: L1, MIS +(define-extern *muse-sg* skeleton-group) +(define-extern muse-idle (state muse)) ;; unknown type +(define-extern muse-caught (state muse)) ;; unknown type + +;; DECOMP BEGINS + +(deftype muse (nav-enemy) + ((root-override collide-shape-moving :offset 112) + (current-path-index float :offset-assert 400) + (prev-path-index float :offset-assert 404) + (dest-path-index float :offset-assert 408) + (player-path-index float :offset-assert 412) + (max-path-index float :offset-assert 416) + (sprint-distance float :offset-assert 420) + (dest-point vector :inline :offset-assert 432) + (anim spool-anim :offset-assert 448) + (victory-anim spool-anim :offset-assert 452) + (old-target-pos transformq :inline :offset-assert 464) + ) + :heap-base #x190 + :method-count-assert 76 + :size-assert #x200 + :flag-assert #x4c01900200 + ) + + +(deftype point-on-path-segment-info (structure) + ((point vector :inline :offset-assert 0) + (segment vector 2 :inline :offset-assert 16) + (dir vector :inline :offset-assert 48) + (nearest-point vector :inline :offset-assert 64) + (segment-length float :offset-assert 80) + (distance-to-segment float :offset-assert 84) + (parametric-index float :offset-assert 88) + ) + :method-count-assert 9 + :size-assert #x5c + :flag-assert #x90000005c + ) + + +; (defun analyze-point-on-path-segment ((arg0 point-on-path-segment-info)) +; (vector-! (-> arg0 dir) (-> arg0 segment 1) (the-as vector (-> arg0 segment))) +; (vector-normalize! (-> arg0 dir) 1.0) +; (set! +; (-> arg0 segment-length) +; (vector-vector-distance +; (the-as vector (-> arg0 segment)) +; (-> arg0 segment 1) +; ) +; ) +; (let ((s5-0 (new 'stack-no-clear 'vector))) +; (vector-! s5-0 (the-as vector (-> arg0 segment)) (-> arg0 point)) +; (vector+*! s5-0 s5-0 (-> arg0 dir) (- (vector-dot s5-0 (-> arg0 dir)))) +; (vector+! (-> arg0 nearest-point) (-> arg0 point) s5-0) +; (set! (-> arg0 distance-to-segment) (vector-length s5-0)) +; (vector-! s5-0 (-> arg0 point) (the-as vector (-> arg0 segment))) +; (set! +; (-> arg0 parametric-index) +; (/ (vector-dot (-> arg0 dir) s5-0) (-> arg0 segment-length)) +; ) +; ) +; (cond +; ((< (-> arg0 parametric-index) 0.0) +; (set! (-> arg0 parametric-index) 0.0) +; (set! (-> arg0 nearest-point quad) (-> arg0 segment 0 quad)) +; (let +; ((f0-10 (vector-vector-distance (-> arg0 nearest-point) (-> arg0 point)))) +; (set! (-> arg0 distance-to-segment) f0-10) +; f0-10 +; ) +; ) +; ((< 1.0 (-> arg0 parametric-index)) +; (set! (-> arg0 parametric-index) 1.0) +; (set! (-> arg0 nearest-point quad) (-> arg0 segment 1 quad)) +; (let +; ((f0-13 (vector-vector-distance (-> arg0 nearest-point) (-> arg0 point)))) +; (set! (-> arg0 distance-to-segment) f0-13) +; f0-13 +; ) +; ) +; ) +; ) + +; (defbehavior muse-get-path-point muse ((arg0 vector) (arg1 int)) +; (eval-path-curve-div! (-> self path) arg0 (the float arg1) 'interp) +; 0 +; (none) +; ) + +; (defbehavior muse-check-dest-point muse () +; (let ((gp-0 (new 'stack-no-clear 'point-on-path-segment-info)) +; (f26-0 4096000.0) +; (f30-0 0.0) +; (f24-0 4096000.0) +; (f28-0 0.0) +; ) +; (let ((s5-0 (+ (-> self path curve num-cverts) -1)) +; (s4-0 (target-pos 0)) +; ) +; (dotimes (s3-0 s5-0) +; (let ((f22-0 (the float s3-0))) +; (let ((f20-0 (the float (+ s3-0 1)))) +; (eval-path-curve-div! +; (-> self path) +; (the-as vector (-> gp-0 segment)) +; f22-0 +; 'interp +; ) +; (eval-path-curve-div! (-> self path) (-> gp-0 segment 1) f20-0 'interp) +; ) +; (set! (-> gp-0 point quad) (-> s4-0 quad)) +; (analyze-point-on-path-segment gp-0) +; (when (< (-> gp-0 distance-to-segment) f24-0) +; (set! f24-0 (-> gp-0 distance-to-segment)) +; (set! f28-0 (+ f22-0 (-> gp-0 parametric-index))) +; ) +; (set! (-> gp-0 point quad) (-> self collide-info trans quad)) +; (analyze-point-on-path-segment gp-0) +; (when (< (-> gp-0 distance-to-segment) f26-0) +; (set! f26-0 (-> gp-0 distance-to-segment)) +; (set! f30-0 (+ f22-0 (-> gp-0 parametric-index))) +; ) +; ) +; 0 +; ) +; ) +; (let ((f0-6 (- f30-0 f28-0))) +; (if (< f0-6 (* -0.5 (-> self max-path-index))) +; (+! f0-6 (-> self max-path-index)) +; ) +; (if (< (* 0.5 (-> self max-path-index)) f0-6) +; (set! f0-6 (- f0-6 (-> self max-path-index))) +; ) +; (cond +; ((>= f0-6 0.0) +; (set! (-> self dest-path-index) (the float (the int (+ 2.5 f30-0)))) +; (if (>= (-> self dest-path-index) (-> self max-path-index)) +; (set! +; (-> self dest-path-index) +; (- (-> self dest-path-index) (-> self max-path-index)) +; ) +; ) +; ) +; (else +; (set! (-> self dest-path-index) (+ -1.5 f30-0)) +; (if (< (-> self dest-path-index) 0.0) +; (+! (-> self dest-path-index) (-> self max-path-index)) +; ) +; (set! +; (-> self dest-path-index) +; (the float (the int (-> self dest-path-index))) +; ) +; ) +; ) +; ) +; ) +; (eval-path-curve-div! +; (-> self path) +; (-> self dest-point) +; (-> self dest-path-index) +; 'interp +; ) +; 0 +; (none) +; ) + +; (defmethod dummy-51 muse ((obj muse)) +; (dotimes (s5-0 2) +; (let ((v1-2 (rand-vu-int-range 3 (+ (-> obj node-list length) -1)))) +; (sp-launch-particles-var +; *sp-particle-system-2d* +; (-> *part-id-table* 271) +; (vector<-cspace! +; (new 'stack-no-clear 'vector) +; (-> obj node-list data v1-2) +; ) +; #f +; #f +; 1.0 +; ) +; ) +; ) +; 0 +; (none) +; ) + +; (defmethod TODO-RENAME-39 muse ((obj muse)) +; (spool-push *art-control* (-> obj anim name) 0 obj -99.0) +; (dummy-51 obj) +; ((method-of-type nav-enemy TODO-RENAME-39) obj) +; (none) +; ) + +; (let +; ((v1-5 +; (new 'static 'skeleton-group +; :art-group-name "muse" +; :bounds +; (new 'static 'vector :y 8192.0 :w 12288.0) +; :version #x6 +; :shadow 2 +; ) +; ) +; ) +; (set! (-> v1-5 jgeo) 0) +; (set! (-> v1-5 janim) 3) +; (set! (-> v1-5 mgeo 0) (the-as uint 1)) +; (set! (-> v1-5 lod-dist 0) 4095996000.0) +; (set! *muse-sg* v1-5) +; ) + +; (defmethod dummy-44 muse ((obj muse) (arg0 process) (arg1 event-message-block)) +; (the-as object (go muse-caught)) +; ) + +; (defmethod dummy-43 muse ((obj muse) (arg0 process) (arg1 event-message-block)) +; (the-as object (go muse-caught)) +; ) + +; nav-enemy-default-event-handler + +; (defstate muse-idle (muse) +; :event +; (the-as +; (function process int symbol event-message-block object :behavior muse) +; nav-enemy-default-event-handler +; ) +; :trans +; (behavior () +; (set! +; (-> self sprint-distance) +; (seek +; (-> self sprint-distance) +; 61440.0 +; (* 8192.0 (-> *display* seconds-per-frame)) +; ) +; ) +; (if +; (and +; *target* +; (>= +; 102400.0 +; (vector-vector-distance +; (-> self collide-info trans) +; (-> *target* control trans) +; ) +; ) +; ) +; (level-hint-spawn +; (game-text-id zero) +; (the-as string #f) +; (the-as symbol (-> self entity)) +; *entity-pool* +; 0 +; ) +; ) +; (if +; (and +; *target* +; (>= +; 81920.0 +; (vector-vector-distance +; (-> self collide-info trans) +; (-> *target* control trans) +; ) +; ) +; ) +; (go-virtual nav-enemy-chase) +; ) +; (none) +; ) +; :code +; (behavior () +; (when (= (if (> (-> self skel active-channels) 0) +; (-> self skel root-channel 0 frame-group) +; ) +; (-> self draw art-group data 4) +; ) +; (ja-channel-push! 1 30) +; (let ((a0-5 (-> self skel root-channel 0))) +; (set! (-> a0-5 param 0) 1.0) +; (joint-control-channel-group! +; a0-5 +; (the-as art-joint-anim #f) +; num-func-loop! +; ) +; ) +; (let ((a0-6 (-> self skel root-channel 0))) +; (set! +; (-> a0-6 frame-group) +; (the-as art-joint-anim (-> self draw art-group data 6)) +; ) +; (set! +; (-> a0-6 param 0) +; (the +; float +; (+ +; (-> +; (the-as art-joint-anim (-> self draw art-group data 6)) +; data +; 0 +; length +; ) +; -1 +; ) +; ) +; ) +; (set! (-> a0-6 param 1) 1.0) +; (set! (-> a0-6 frame-num) 0.0) +; (joint-control-channel-group! +; a0-6 +; (the-as art-joint-anim (-> self draw art-group data 6)) +; num-func-seek! +; ) +; ) +; (until (ja-done? 0) +; (ja-blend-eval) +; (suspend) +; (let ((a0-7 (-> self skel root-channel 0))) +; (set! +; (-> a0-7 param 0) +; (the float (+ (-> a0-7 frame-group data 0 length) -1)) +; ) +; (set! (-> a0-7 param 1) 1.0) +; (joint-control-channel-group-eval! +; a0-7 +; (the-as art-joint-anim #f) +; num-func-seek! +; ) +; ) +; ) +; ) +; (while #t +; (let ((a0-9 (-> self skel root-channel 0))) +; (set! +; (-> a0-9 frame-group) +; (the-as art-joint-anim (-> self draw art-group data 3)) +; ) +; (set! +; (-> a0-9 param 0) +; (the +; float +; (+ +; (-> +; (the-as art-joint-anim (-> self draw art-group data 3)) +; data +; 0 +; length +; ) +; -1 +; ) +; ) +; ) +; (set! (-> a0-9 param 1) 1.0) +; (set! (-> a0-9 frame-num) 0.0) +; (joint-control-channel-group! +; a0-9 +; (the-as art-joint-anim (-> self draw art-group data 3)) +; num-func-seek! +; ) +; ) +; (until (ja-done? 0) +; (spool-push *art-control* (-> self anim name) 0 self -99.0) +; (dummy-51 self) +; (suspend) +; (let ((a0-12 (-> self skel root-channel 0))) +; (set! +; (-> a0-12 param 0) +; (the float (+ (-> a0-12 frame-group data 0 length) -1)) +; ) +; (set! (-> a0-12 param 1) 1.0) +; (joint-control-channel-group-eval! +; a0-12 +; (the-as art-joint-anim #f) +; num-func-seek! +; ) +; ) +; ) +; ) +; (none) +; ) +; :post +; (the-as (function none :behavior muse) ja-post) +; ) + +; (defstate nav-enemy-chase (muse) +; :virtual #t +; :event +; (the-as +; (function process int symbol event-message-block object :behavior muse) +; nav-enemy-default-event-handler +; ) +; :enter +; (behavior () +; (set! +; (-> self state-time) +; (the-as seconds (-> *display* base-frame-counter)) +; ) +; (none) +; ) +; :trans +; (behavior () +; (cond +; ((or +; (not *target*) +; (< +; 102400.0 +; (vector-vector-distance +; (-> self collide-info trans) +; (-> *target* control trans) +; ) +; ) +; ) +; (set! (-> self target-speed) 0.0) +; (if (= (-> self momentum-speed) 0.0) +; (go muse-idle) +; ) +; ) +; ((or +; (not *target*) +; (< +; (-> self sprint-distance) +; (vector-vector-distance +; (-> self collide-info trans) +; (-> *target* control trans) +; ) +; ) +; ) +; (set! (-> self target-speed) 40960.0) +; ) +; (else +; (set! (-> self target-speed) 61440.0) +; ) +; ) +; (set! +; (-> self sprint-distance) +; (seek +; (-> self sprint-distance) +; 0.0 +; (* 4096.0 (-> *display* seconds-per-frame)) +; ) +; ) +; (muse-check-dest-point) +; (none) +; ) +; :code +; (behavior () +; (cond +; ((= (if (> (-> self skel active-channels) 0) +; (-> self skel root-channel 0 frame-group) +; ) +; (-> self draw art-group data 3) +; ) +; (ja-channel-push! 1 30) +; (let ((a0-5 (-> self skel root-channel 0))) +; (set! (-> a0-5 param 0) 1.0) +; (joint-control-channel-group! +; a0-5 +; (the-as art-joint-anim #f) +; num-func-loop! +; ) +; ) +; (let ((a0-6 (-> self skel root-channel 0))) +; (set! +; (-> a0-6 frame-group) +; (the-as art-joint-anim (-> self draw art-group data 5)) +; ) +; (set! +; (-> a0-6 param 0) +; (the +; float +; (+ +; (-> +; (the-as art-joint-anim (-> self draw art-group data 5)) +; data +; 0 +; length +; ) +; -1 +; ) +; ) +; ) +; (set! (-> a0-6 param 1) 1.0) +; (set! (-> a0-6 frame-num) 0.0) +; (joint-control-channel-group! +; a0-6 +; (the-as art-joint-anim (-> self draw art-group data 5)) +; num-func-seek! +; ) +; ) +; (until (ja-done? 0) +; (ja-blend-eval) +; (suspend) +; (let ((a0-7 (-> self skel root-channel 0))) +; (set! +; (-> a0-7 param 0) +; (the float (+ (-> a0-7 frame-group data 0 length) -1)) +; ) +; (set! (-> a0-7 param 1) 1.0) +; (joint-control-channel-group-eval! +; a0-7 +; (the-as art-joint-anim #f) +; num-func-seek! +; ) +; ) +; ) +; ) +; (else +; (ja-channel-push! 1 30) +; ) +; ) +; (let ((gp-0 (-> self skel root-channel 0))) +; (joint-control-channel-group-eval! +; gp-0 +; (the-as art-joint-anim (-> self draw art-group data 4)) +; num-func-identity +; ) +; (set! (-> gp-0 frame-num) 0.0) +; ) +; (while #t +; (suspend) +; (let ((a0-11 (-> self skel root-channel 0))) +; (set! (-> a0-11 param 0) (* 0.000016276043 (-> self momentum-speed))) +; (joint-control-channel-group-eval! +; a0-11 +; (the-as art-joint-anim #f) +; num-func-loop! +; ) +; ) +; ) +; (none) +; ) +; :post +; (behavior () +; (set! (-> self nav destination-pos quad) (-> self dest-point quad)) +; (dummy-19 +; (-> self nav) +; (-> self nav target-pos) +; (-> self collide-info) +; (-> self nav destination-pos) +; 546133.3 +; ) +; (if (logtest? (nav-control-flags bit21) (-> self nav flags)) +; (logclear! (-> self nav flags) (nav-control-flags bit10)) +; ) +; (nav-enemy-travel-post) +; (none) +; ) +; ) + +; (defstate nav-enemy-jump (muse) +; :virtual #t +; :event +; (the-as +; (function process int symbol event-message-block object :behavior muse) +; nav-enemy-default-event-handler +; ) +; :enter +; (behavior () +; ((-> (method-of-type nav-enemy nav-enemy-jump) enter)) +; (set! (-> self nav-enemy-flags) (logand -513 (-> self nav-enemy-flags))) +; (none) +; ) +; :code +; (-> (method-of-type nav-enemy nav-enemy-jump) code) +; ) + +; (defstate nav-enemy-jump-land (muse) +; :virtual #t +; :event +; (the-as +; (function process int symbol event-message-block object :behavior muse) +; nav-enemy-default-event-handler +; ) +; :code +; (behavior () +; (let ((a0-0 (-> self skel root-channel 0))) +; (set! +; (-> a0-0 param 0) +; (the float (+ (-> a0-0 frame-group data 0 length) -1)) +; ) +; (set! (-> a0-0 param 1) 1.0) +; (joint-control-channel-group! +; a0-0 +; (the-as art-joint-anim #f) +; num-func-seek! +; ) +; ) +; (ja-channel-push! 1 22) +; (let ((gp-0 (-> self skel root-channel 0))) +; (set! +; (-> gp-0 frame-group) +; (the-as art-joint-anim (-> self draw art-group data 4)) +; ) +; (set! +; (-> gp-0 param 0) +; (the +; float +; (+ +; (-> +; (the-as art-joint-anim (-> self draw art-group data 4)) +; data +; 0 +; length +; ) +; -1 +; ) +; ) +; ) +; (set! (-> gp-0 param 1) 0.8) +; (set! (-> gp-0 frame-num) (ja-aframe 6.0 0)) +; (joint-control-channel-group! +; gp-0 +; (the-as art-joint-anim (-> self draw art-group data 4)) +; num-func-seek! +; ) +; ) +; (until (ja-done? 0) +; (ja-blend-eval) +; (suspend) +; (let ((a0-4 (-> self skel root-channel 0))) +; (set! +; (-> a0-4 param 0) +; (the float (+ (-> a0-4 frame-group data 0 length) -1)) +; ) +; (set! (-> a0-4 param 1) 0.8) +; (joint-control-channel-group-eval! +; a0-4 +; (the-as art-joint-anim #f) +; num-func-seek! +; ) +; ) +; ) +; (go-virtual nav-enemy-chase) +; (none) +; ) +; ) + +; (defstate muse-caught (muse) +; :event +; (the-as +; (function process int symbol event-message-block object :behavior muse) +; #f +; ) +; :trans +; (behavior () +; (spool-push *art-control* (-> self anim name) 0 self -1.0) +; (none) +; ) +; :code +; (behavior () +; (sound-play-by-name +; (static-sound-name "money-pickup") +; (new-sound-id) +; 1024 +; 0 +; 0 +; (the-as uint 1) +; (the-as vector #t) +; ) +; (close-specific-task! (game-task misty-muse) (task-status need-reminder)) +; (process-entity-status! self (entity-perm-status dead) #t) +; (suspend) +; (let ((a1-3 (new 'stack-no-clear 'event-message-block))) +; (set! (-> a1-3 from) self) +; (set! (-> a1-3 num-params) 1) +; (set! (-> a1-3 message) 'clone-anim) +; (set! (-> a1-3 param 0) (the-as uint self)) +; (when (send-event-function *target* a1-3) +; (set-blackout-frames 3000) +; (let ((gp-1 (res-lump-struct (-> self entity) 'movie-pos vector))) +; (cond +; (gp-1 +; (TODO-RENAME-30 (-> self collide-info) gp-1) +; (set-yaw-angle-clear-roll-pitch! (-> self collide-info) (-> gp-1 w)) +; ) +; (else +; (TODO-RENAME-30 (-> self collide-info) (-> *target* control trans)) +; (quaternion-copy! +; (-> self collide-info quat) +; (-> *target* control quat) +; ) +; (dummy-60 (-> self collide-info) 40960.0 40960.0 #f (the-as uint 1)) +; ) +; ) +; ) +; (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) 'trans) +; (set! (-> a1-10 param 0) (the-as uint 'save)) +; (set! (-> a1-10 param 1) (the-as uint (-> self old-target-pos))) +; (send-event-function *target* a1-10) +; ) +; (let ((a1-11 (new 'stack-no-clear 'event-message-block))) +; (set! (-> a1-11 from) self) +; (set! (-> a1-11 num-params) 1) +; (set! (-> a1-11 message) 'matrix) +; (set! (-> a1-11 param 0) (the-as uint 'play-anim)) +; (send-event-function (ppointer->process (-> *target* sidekick)) a1-11) +; ) +; (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) 'blend-shape) +; (set! (-> a1-12 param 0) (the-as uint #t)) +; (send-event-function *target* a1-12) +; ) +; (if (!= *kernel-boot-message* 'play) +; (set! +; (-> self trans-hook) +; (lambda :behavior muse +; () +; (spool-push *art-control* (-> self victory-anim name) 0 self -1.0) +; (none) +; ) +; ) +; ) +; (push-setting! +; *setting-control* +; self +; (the-as (function object object object object object) 'music-volume) +; 'rel +; (-> *setting-control* current music-volume-movie) +; 0 +; ) +; (push-setting! +; *setting-control* +; self +; (the-as (function object object object object object) 'sfx-volume) +; 'rel +; (-> *setting-control* current sfx-volume-movie) +; 0 +; ) +; (push-setting! +; *setting-control* +; self +; (the-as (function object object object object object) 'ambient-volume) +; 'rel +; (-> *setting-control* current ambient-volume-movie) +; 0 +; ) +; (logclear! (-> self mask) (process-mask enemy)) +; (let ((gp-2 (get-process *default-dead-pool* othercam #x4000))) +; (when gp-2 +; (let ((t9-19 (method-of-type othercam activate))) +; (t9-19 +; (the-as othercam gp-2) +; self +; 'othercam +; (the-as pointer #x70004000) +; ) +; ) +; (run-now-in-process gp-2 othercam-init-by-other self 3 #f #t) +; (-> gp-2 ppointer) +; ) +; ) +; (auto-save-command 'auto-save 0 0 *default-pool*) +; (ja-play-spooled-anim +; (-> self anim) +; (the-as art-joint-anim (-> self draw art-group data 3)) +; (the-as art-joint-anim (-> self draw art-group data 3)) +; (the-as (function process-drawable symbol) false-func) +; ) +; (clear-pending-settings-from-process *setting-control* self 'music-volume) +; (clear-pending-settings-from-process *setting-control* self 'sfx-volume) +; (clear-pending-settings-from-process +; *setting-control* +; self +; 'ambient-volume +; ) +; (let ((a1-24 (new 'stack-no-clear 'event-message-block))) +; (set! (-> a1-24 from) self) +; (set! (-> a1-24 num-params) 1) +; (set! (-> a1-24 message) 'blend-shape) +; (set! (-> a1-24 param 0) (the-as uint #f)) +; (send-event-function *target* a1-24) +; ) +; (cond +; ((!= *kernel-boot-message* 'play) +; (set-blackout-frames 0) +; (ja-channel-set! 0) +; (ja-post) +; (dummy-48 (-> self collide-info)) +; (let ((a1-25 (new 'stack-no-clear 'event-message-block))) +; (set! (-> a1-25 from) self) +; (set! (-> a1-25 num-params) 1) +; (set! (-> a1-25 message) 'trans) +; (set! (-> a1-25 param 0) (the-as uint 'reset)) +; (send-event-function *target* a1-25) +; ) +; (let +; ((gp-4 +; (ppointer->handle +; (birth-pickup-at-point +; (target-pos 0) +; 6 +; (the float (-> self entity extra perm task)) +; #f +; self +; #f +; ) +; ) +; ) +; ) +; (let ((a1-27 (new 'stack-no-clear 'event-message-block))) +; (set! (-> a1-27 from) self) +; (set! (-> a1-27 num-params) 0) +; (set! (-> a1-27 message) 'pickup) +; (send-event-function (handle->process (the-as handle gp-4)) a1-27) +; ) +; (while (handle->process (the-as handle gp-4)) +; (suspend) +; ) +; ) +; ) +; (else +; (let ((a1-29 (new 'stack-no-clear 'event-message-block))) +; (set! (-> a1-29 from) self) +; (set! (-> a1-29 num-params) 2) +; (set! (-> a1-29 message) 'trans) +; (set! (-> a1-29 param 0) (the-as uint 'restore)) +; (set! (-> a1-29 param 1) (the-as uint (-> self old-target-pos))) +; (send-event-function *target* a1-29) +; ) +; (set-blackout-frames 0) +; (set-blackout-frames 30) +; ) +; ) +; ) +; ) +; (none) +; ) +; :post +; (behavior () +; (dummy-51 self) +; (level-hint-surpress!) +; (kill-current-level-hint '() '() 'exit) +; (ja-post) +; (none) +; ) +; ) + +; (define +; *muse-nav-enemy-info* +; (new 'static 'nav-enemy-info +; :idle-anim 3 +; :walk-anim 4 +; :turn-anim -1 +; :notice-anim 3 +; :run-anim 4 +; :jump-anim 7 +; :jump-land-anim 8 +; :victory-anim 3 +; :taunt-anim 3 +; :die-anim 3 +; :neck-joint 6 +; :player-look-at-joint 5 +; :run-travel-speed (meters 10.0) +; :run-rotate-speed (degrees 999.99994) +; :run-acceleration (meters 5.0) +; :run-turn-time #x2d +; :walk-travel-speed (meters 10.0) +; :walk-rotate-speed (degrees 999.99994) +; :walk-acceleration (meters 1.0) +; :walk-turn-time #x2d +; :attack-shove-back (meters 3.0) +; :attack-shove-up (meters 2.0) +; :shadow-size (meters 2.0) +; :notice-nav-radius (meters 1.0) +; :nav-nearest-y-threshold (meters 10.0) +; :notice-distance (meters 30.0) +; :stop-chase-distance (meters 40.0) +; :frustration-distance (meters 8.0) +; :frustration-time #x4b0 +; :die-anim-hold-frame 10000000000.0 +; :jump-anim-start-frame 6.5 +; :jump-land-anim-end-frame 10000000000.0 +; :jump-height-min (meters 1.0) +; :jump-height-factor 0.5 +; :jump-start-anim-speed 1.0 +; :shadow-max-y (meters 1.0) +; :shadow-min-y (meters -1.0) +; :shadow-locus-dist (meters 150.0) +; :use-align #f +; :draw-shadow #t +; :move-to-ground #t +; :hover-if-no-ground #f +; :use-momentum #f +; :use-flee #f +; :use-proximity-notice #f +; :use-jump-blocked #f +; :use-jump-patrol #f +; :gnd-collide-with #x1 +; :debug-draw-neck #f +; :debug-draw-jump #f +; ) +; ) + +; (defmethod copy-defaults! muse ((obj muse) (arg0 res-lump)) +; (stack-size-set! (-> obj main-thread) 512) +; (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) +; (let +; ((s4-0 +; (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) +; ) +; ) +; (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) +; (set! (-> s4-0 reaction) default-collision-reaction) +; (set! (-> s4-0 no-reaction) nothing) +; (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) +; (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) +; (set! (-> s3-0 collide-with) (the-as uint 16)) +; (set! (-> s3-0 prim-core action) (the-as uint 1)) +; (set! (-> s3-0 prim-core offense) 4) +; (set-vector! (-> s3-0 local-sphere) 0.0 2457.6 0.0 2457.6) +; ) +; (dummy-46 s4-0) +; (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) +; (dummy-50 s4-0) +; (set! (-> obj collide-info) s4-0) +; ) +; (process-drawable-from-entity! obj arg0) +; (dummy-14 obj *muse-sg* '()) +; (logclear! (-> obj mask) (process-mask actor-pause)) +; (TODO-RENAME-45 obj *muse-nav-enemy-info*) +; (set! +; (-> obj max-path-index) +; (the float (+ (-> obj path curve num-cverts) -1)) +; ) +; (set! (-> obj current-path-index) 7.0) +; (set! (-> obj prev-path-index) 7.0) +; (set! (-> obj dest-path-index) 7.0) +; (set! (-> obj player-path-index) 0.0) +; (eval-path-curve-div! +; (-> obj path) +; (-> obj dest-point) +; (-> obj current-path-index) +; 'interp +; ) +; (set! (-> obj collide-info trans quad) (-> obj dest-point quad)) +; (set! (-> obj nav nearest-y-threshold) 20480.0) +; (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) +; (set! (-> obj neck up) (the-as uint 0)) +; (set! (-> obj neck nose) (the-as uint 1)) +; (set! (-> obj neck ear) (the-as uint 2)) +; (set! (-> obj neck max-dist) 102400.0) +; (set! (-> obj neck ignore-angle) 16384.0) +; (set! +; (-> obj anim) +; (new 'static 'spool-anim +; :name "muse-victory" +; :index 9 +; :parts 2 +; :command-list +; '( +; ((the binteger 1) +; blackout +; 0 +; ) +; ((the binteger 219) blackout (the binteger 60)) +; ) +; ) +; ) +; (set! +; (-> obj victory-anim) +; (the-as spool-anim (fuel-cell-pick-anim (the-as process-taskable obj))) +; ) +; (go muse-idle) +; (none) +; ) + + + + diff --git a/goal_src/levels/snow/snow-ram-h.gc b/goal_src/levels/snow/snow-ram-h.gc index f947dae44f..23d222b606 100644 --- a/goal_src/levels/snow/snow-ram-h.gc +++ b/goal_src/levels/snow/snow-ram-h.gc @@ -5,3 +5,30 @@ ;; name in dgo: snow-ram-h ;; dgos: L1, SNO +;; DECOMP BEGINS + +(deftype ram (process-drawable) + ((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) + (orient-ry float :offset-assert 192) + (fuel-cell-dest-pos vector :inline :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 23 + :size-assert #xe0 + :flag-assert #x17007000e0 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + (dummy-22 () none 22) + ) + ) + + +0 + + + + diff --git a/goal_src/levels/snow/target-snowball.gc b/goal_src/levels/snow/target-snowball.gc index 21c10793ce..3927c85c0a 100644 --- a/goal_src/levels/snow/target-snowball.gc +++ b/goal_src/levels/snow/target-snowball.gc @@ -5,3 +5,158 @@ ;; name in dgo: target-snowball ;; dgos: L1, SNO +(define-extern target-snowball (state target)) ;; unknown type + +;; DECOMP BEGINS + +(deftype snowball-info (basic) + ((entity basic :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + + +(deftype snowball-bank (basic) + () + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +(define *SNOWBALL-bank* (new 'static 'snowball-bank)) + +(defbehavior target-snowball-post target () + (let ((gp-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s5-0 gp-0) + (set! (-> self control unknown-int40) s5-0) + (flag-setup) + (build-conversions (-> self control transv)) + (reverse-conversions (-> self control transv)) + (post-flag-setup) + ) + (set-time-ratios *display* (the float gp-0)) + ) + (rot->dir-targ! (-> self control)) + (ja-post) + (joint-points) + (do-target-shadow) + (target-powerup-process) + 0 + (none) + ) + +(defstate target-snowball-start (target) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (the-as object (cond + ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + 'snowball + ) + ((let ((v1-3 arg2)) + (= v1-3 'end-mode) + ) + enter-state + (-> *TARGET-bank* duck-jump-height-min) + (-> *TARGET-bank* duck-jump-height-max) + (go target-jump) + ) + (else + (target-generic-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + :exit + (behavior () + (when (!= (-> self next-state name) 'target-snowball) + (let ((v1-1 (-> self manipy))) + (when v1-1 + (deactivate (-> v1-1 0)) + (set! (-> self manipy) (the-as (pointer manipy) #f)) + ) + ) + (set! + (-> self control root-prim prim-core action) + (logand -4097 (-> self control root-prim prim-core action)) + ) + (set! (-> self control unknown-surface00) *walk-mods*) + (set! + (-> self control dynam gravity-max) + (-> self control unknown-dynamics00 gravity-max) + ) + (set! + (-> self control dynam gravity-length) + (-> self control unknown-dynamics00 gravity-length) + ) + (target-collide-set! 'normal 0.0) + (set! (-> self control reaction) target-collision-reaction) + (target-exit) + ) + (none) + ) + :code + (behavior ((arg0 handle)) + (target-exit) + (set! *display-profile* #f) + (set! *display-entity-errors* #f) + (if (zero? (-> self snowball)) + (set! (-> self snowball) (new 'process 'snowball-info)) + ) + (set! (-> self snowball entity) #f) + (let ((a0-2 (handle->process arg0))) + (if a0-2 + (set! (-> self snowball entity) (-> a0-2 entity)) + ) + ) + (reset-target-state #t) + (set! (-> self control transv quad) (the-as uint128 0)) + (set! (-> self control unknown-float01) 0.0) + (let* ((a0-6 (-> self control)) + (t9-3 (method-of-object a0-6 TODO-RENAME-28)) + ) + (new 'static 'vector :y 4096.0 :w 1.0) + (t9-3 a0-6) + ) + (logior! (-> self control root-prim prim-core action) 4096) + (ja-channel-set! 1) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (remove-exit) + (go target-snowball) + (none) + ) + :post + (the-as (function none :behavior target) target-post) + ) + +(defstate target-snowball (target) + :event + (-> target-snowball-start event) + :exit + (-> target-snowball-start exit) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (behavior () + (target-snowball-post) + (none) + ) + ) + + + + diff --git a/goal_src/levels/snow/yeti.gc b/goal_src/levels/snow/yeti.gc index f2d4271b84..6caf1451fc 100644 --- a/goal_src/levels/snow/yeti.gc +++ b/goal_src/levels/snow/yeti.gc @@ -5,3 +5,1463 @@ ;; name in dgo: yeti ;; dgos: L1, SNO +(define-extern *yeti-sg* skeleton-group) + +(declare-type yeti process-drawable) +(declare-type yeti-slave nav-enemy) +(define-extern yeti-resuming-start (state yeti)) ;; unknown type +(define-extern yeti-first-time-start (state yeti)) ;; unknown type +(define-extern yeti-idle (state yeti)) ;; unknown type +(define-extern yeti-slave-appear-jump-up (state yeti-slave)) ;; unknown type +(define-extern yeti-slave-appear-land (state yeti-slave)) ;; unknown type +(define-extern yeti-slave-show-anims (state yeti-slave)) ;; unknown type + +;; DECOMP BEGINS + +(deftype yeti-slave (nav-enemy) + ((ground-y float :offset-assert 400) + (part2 sparticle-launch-control :offset-assert 404) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x198 + :flag-assert #x4c01300198 + ) + + +(deftype yeti (process-drawable) + ((child-process (pointer yeti-slave) :offset 20) + (desired-num-children int32 :offset-assert 176) + (spawn-delay int32 :offset-assert 180) + (first-time-spawn-dist float :offset-assert 184) + (unknown basic :offset-assert 188) + (unknown1 basic :offset-assert 192) + (unknown2 basic :offset-assert 196) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xc8 + :flag-assert #x16006000c8 + (:methods + (TODO-RENAME-20 (_type_ vector vector) symbol 20) + (aggro? (_type_ vector) symbol 21) + ) + ) + + +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "yeti" + :bounds + (new 'static 'vector :y 3072.0 :w 15974.4) + :longest-edge (meters 1.3) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *yeti-sg* v1-2) + ) + +(define + *yeti-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 2 + :walk-anim 3 + :turn-anim -1 + :notice-anim 4 + :run-anim 5 + :jump-anim 10 + :jump-land-anim 11 + :victory-anim 8 + :taunt-anim 8 + :die-anim 9 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 2880.0) + :run-acceleration (meters 1.0) + :run-turn-time #x1e + :walk-travel-speed (meters 3.0) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time #x96 + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 2.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #t + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +(set! + (-> *part-group-id-table* 538) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-yeti-slave-appear1" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1928 :fade-after (meters 70.0) :falloff-to (meters 70.0)) + (sp-item 1929 :fade-after (meters 70.0) :falloff-to (meters 70.0)) + ) + :bounds (new 'static 'sphere :w 65536.0) + ) + ) + +(set! + (-> *part-id-table* 1929) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.24) (meters 0.24) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.05) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -2.4) (degrees 3.4666667) 1.0) + (sp-flt spt-accel-y -5.4613333) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 40.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1928) + (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 32.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 16.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.05) (meters 0.016666668) 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.07111111) + (sp-flt spt-accel-y -5.4613333) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 40.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-group-id-table* 539) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-yeti-slave-appear2" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 1930 :fade-after (meters 70.0) :falloff-to (meters 70.0)) + ) + :bounds (new 'static 'sphere :w 65536.0) + ) + ) + +(set! + (-> *part-id-table* 1930) + (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-rnd-flt spt-num 1.0 2.0 1.0) + (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-z -1024.0 2048.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-flt spt-r 128.0) + (sp-flt spt-g 128.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.0) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -2.4) (degrees 3.4666667) 1.0) + (sp-flt spt-accel-y -5.4613333) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-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? +(defbehavior + yeti-slave-default-event-handler yeti-slave + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'attack) + (nav-enemy-set-hit-from-direction arg0) + (go-virtual nav-enemy-die) + ) + ((= v1-0 'touch) + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg3 param 0)) + 'generic + ) + ) + ) + ) + ) + ) + +(defstate yeti-slave-appear-jump-up (yeti-slave) + :event + yeti-slave-default-event-handler + :enter + (behavior () + (nav-enemy-neck-control-inactive) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (if (-> self nav-info move-to-ground) + (dummy-60 (-> self collide-info) 40960.0 40960.0 #t (the-as uint 1)) + ) + (set! (-> self nav-enemy-flags) (logand -7 (-> self nav-enemy-flags))) + (set! (-> self state-timeout) 300) + (set! (-> self ground-y) (-> self collide-info trans y)) + (spawn (-> self part) (-> self collide-info trans)) + (set! + (-> self collide-info trans y) + (+ -12288.0 (-> self collide-info trans y)) + ) + (set! (-> self collide-info transv quad) (-> *null-vector* quad)) + (set! + (-> self collide-info transv y) + (rand-vu-float-range 102400.0 114688.0) + ) + (none) + ) + :trans + (behavior () + (when + (and + (< (-> self collide-info trans y) (-> self ground-y)) + (< (-> self collide-info transv y) 0.0) + ) + (set! (-> self collide-info trans y) (-> self ground-y)) + (set! (-> self collide-info transv quad) (-> *null-vector* quad)) + (go yeti-slave-appear-land) + ) + (let* ((s5-0 (-> self node-list)) + (a0-2 (-> s5-0 length)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! gp-0 (-> s5-0 data (nav-enemy-rnd-int-count a0-2))) + (spawn (-> self part2) gp-0) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> gp-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 10.0 0)) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 10)) + 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! + ) + ) + ) + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior yeti-slave) nav-enemy-falling-post) + ) + +(defstate yeti-slave-appear-land (yeti-slave) + :event + yeti-slave-default-event-handler + :code + (behavior () + (ja-channel-push! 1 15) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 11)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 0.5) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 0.5) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (if (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + (go-virtual nav-enemy-idle) + ) + (none) + ) + :post + (the-as (function none :behavior yeti-slave) ja-post) + ) + +(defstate yeti-slave-show-anims (yeti-slave) + :trans + (behavior () + 0 + (none) + ) + :code + (behavior () + 0 + (none) + ) + :post + (the-as (function none :behavior yeti-slave) transform-post) + ) + +(defstate nav-enemy-patrol (yeti-slave) + :virtual #t + :code + (behavior () + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + (ja-channel-push! 1 45) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> gp-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 12.0 0)) + (joint-control-channel-group! + gp-0 + (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! + ) + ) + ) + ) + (else + (ja-channel-push! 1 60) + ) + ) + (while #t + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-10 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + 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 3)) + 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! + ) + ) + ) + (when (nav-enemy-rnd-percent? 0.2) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 param 0) 1.0) + (joint-control-channel-group! + a0-14 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 180) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (let ((gp-1 (nav-enemy-rnd-int-range 2 6))) + (dotimes (s5-0 gp-1) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-18 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-18 param 1) 1.0) + (set! (-> a0-18 frame-num) 0.0) + (joint-control-channel-group! + a0-18 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (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! + ) + ) + ) + ) + ) + (logior! (-> self nav-enemy-flags) 8) + (let ((a0-21 (-> self skel root-channel 0))) + (set! (-> a0-21 param 0) 1.0) + (joint-control-channel-group! + a0-21 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 180) + (let ((a0-23 (-> self skel root-channel 0))) + (set! + (-> a0-23 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-23 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + 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 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-24 (-> self 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-eval! + a0-24 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-chase (yeti-slave) + :virtual #t + :code + (behavior () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 11) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 51) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) f30-0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (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-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (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 (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-45 (-> self skel root-channel 0))) + (set! (-> v1-45 num-func) num-func-identity) + (set! (-> v1-45 frame-num) 0.0) + ) + ) + ) + (while #t + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) f30-0) + (joint-control-channel-group-eval! + a0-17 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-stare (yeti-slave) + :virtual #t + :code + (behavior () + (set! (-> self turn-time) 60) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (when + (or + (logtest? (-> self nav-enemy-flags) 256) + (and (nav-enemy-player-vulnerable?) (nav-enemy-rnd-percent? 0.5)) + ) + (ja-channel-push! 1 30) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! (-> gp-0 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-0 param 1) f30-0) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-1 param 1) f30-0) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (while #t + (when (not (nav-enemy-facing-player? 2730.6667)) + (logior! (-> self nav-enemy-flags) 16) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) 1.0) + (joint-control-channel-group! + a0-9 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (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 12)) + ) + ) + (let ((v1-28 (-> self skel root-channel 0))) + (set! (-> v1-28 num-func) num-func-identity) + (set! (-> v1-28 frame-num) 0.0) + ) + (until (nav-enemy-facing-player? 1820.4445) + (ja-blend-eval) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) 0.75) + (joint-control-channel-group-eval! + a0-15 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + ) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 2) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((a0-23 (-> self skel root-channel 0))) + (set! + (-> a0-23 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-23 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-23 param 1) f30-0) + (set! (-> a0-23 frame-num) 0.0) + (joint-control-channel-group! + a0-23 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-24 (-> self skel root-channel 0))) + (set! + (-> a0-24 param 0) + (the float (+ (-> a0-24 frame-group data 0 length) -1)) + ) + (set! (-> a0-24 param 1) f30-0) + (joint-control-channel-group-eval! + a0-24 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (nav-enemy-rnd-percent? 0.3) + (ja-channel-push! 1 30) + (let ((gp-2 (-> self skel root-channel 0))) + (set! + (-> gp-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! (-> gp-2 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-2 param 1) f30-0) + (set! (-> gp-2 frame-num) 0.0) + (joint-control-channel-group! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-3 param 1) f30-0) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-give-up (yeti-slave) + :virtual #t + :code + (behavior () + (set! (-> self rotate-speed) 218453.33) + (set! (-> self turn-time) 150) + (ja-channel-push! 1 45) + (let ((s4-0 (-> self collide-info)) + (s5-0 (target-pos 0)) + ) + (when + (< + (fabs + (deg-diff + (y-angle s4-0) + (vector-y-angle + (vector-! (new 'stack-no-clear 'vector) s5-0 (-> s4-0 trans)) + ) + ) + ) + 12743.111 + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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! + ) + ) + ) + ) + ) + (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) + (nav-enemy-get-new-patrol-point) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> a0-12 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + 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 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-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! + ) + ) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +(defstate nav-enemy-jump-land (yeti-slave) + :virtual #t + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 22) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + ) + (set! (-> gp-0 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-0 param 1) 0.5) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-1 param 1) 0.5) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +(defmethod initialize-collision yeti-slave ((obj yeti-slave)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) 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! (-> s4-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s4-0 local-sphere) 0.0 8192.0 0.0 12288.0) + (dummy-46 s5-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 action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 4096.0 0.0 3072.0) + ) + (dummy-28 s4-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 action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 1) + (set-vector! (-> s3-1 local-sphere) 0.0 9830.4 0.0 3072.0) + ) + (dummy-28 s4-0) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (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) 2) + (set! (-> s3-2 transform-index) 6) + (set-vector! (-> s3-2 local-sphere) 0.0 0.0 0.0 2048.0) + ) + (dummy-28 s4-0) + ) + (set! (-> s5-0 nav-radius) 6144.0) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-48 yeti-slave ((obj yeti-slave)) + (dummy-14 obj *yeti-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (TODO-RENAME-45 obj *yeti-nav-enemy-info*) + (set! (-> obj neck up) (the-as uint 0)) + (set! (-> obj neck nose) (the-as uint 1)) + (set! (-> obj neck ear) (the-as uint 2)) + 0 + (none) + ) + +(defmethod deactivate yeti-slave ((obj yeti-slave)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(defmethod relocate yeti-slave ((obj yeti-slave) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (the-as + yeti-slave + ((the-as + (function nav-enemy int nav-enemy) + (find-parent-method yeti-slave 7) + ) + obj + arg0 + ) + ) + ) + +(defbehavior + yeti-slave-init-by-other yeti-slave + ((arg0 entity) (arg1 yeti) (arg2 vector) (arg3 vector) (arg4 symbol)) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 538) self) + ) + (set! + (-> self part2) + (create-launch-control (-> *part-group-id-table* 539) self) + ) + (initialize-collision self) + (set! (-> self collide-info trans quad) (-> arg2 quad)) + (vector-identity! (-> self collide-info scale)) + (forward-up->quaternion (-> self collide-info quat) arg3 *up-vector*) + (set! (-> self entity) (-> arg1 entity)) + (TODO-RENAME-48 self) + (if arg4 + (go-virtual nav-enemy-idle) + (go yeti-slave-appear-jump-up) + ) + (none) + ) + +(defmethod aggro? yeti ((obj yeti) (arg0 vector)) + (let ((s5-0 (the-as (pointer process-tree) (-> obj child-process)))) + (while s5-0 + (if + (< + (vector-vector-xz-distance-squared + arg0 + (-> (the-as (pointer yeti-slave) s5-0) 0 collide-info trans) + ) + 603979800.0 + ) + (return #f) + ) + (set! s5-0 (-> s5-0 0 brother)) + ) + ) + (when *target* + (if (< (vector-vector-xz-distance-squared arg0 (target-pos 0)) 603979800.0) + (return #f) + ) + ) + #t + ) + +(defmethod TODO-RENAME-20 yeti ((obj yeti) (arg0 vector) (arg1 vector)) + (let ((s3-0 (-> obj path curve num-cverts))) + (if (<= s3-0 0) + (return #f) + ) + (let ((s1-0 (rand-vu-int-count s3-0)) + (s2-0 s3-0) + ) + (while (> s2-0 0) + (eval-path-curve-div! (-> obj path) arg0 (the float s1-0) 'interp) + (when (aggro? obj arg0) + (cond + (*target* + (vector-! arg1 (target-pos 0) arg0) + (set! (-> arg1 y) 0.0) + ) + (else + (set-vector! + arg1 + (rand-vu-float-range -4096.0 4096.0) + 0.0 + (rand-vu-float-range -4096.0 4096.0) + 1.0 + ) + (set! (-> arg1 x) (+ 409.6 (-> arg1 x))) + ) + ) + (vector-normalize! arg1 1.0) + (return #t) + ) + (set! s1-0 (mod (+ s1-0 1) s3-0)) + (+! s2-0 -1) + ) + ) + ) + #f + ) + +(defstate yeti-first-time-start (yeti) + :code + (behavior () + (while #t + (when *target* + (when + (>= + (-> self first-time-spawn-dist) + (vector-vector-xz-distance (target-pos 0) (-> self root trans)) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (go yeti-idle) + ) + ) + (suspend) + ) + (none) + ) + ) + +(defstate yeti-resuming-start (yeti) + :code + (behavior () + (let ((gp-0 0)) + (let ((v1-0 (the-as (pointer process-tree) (-> self child-process)))) + (while v1-0 + (+! gp-0 1) + (set! v1-0 (-> v1-0 0 brother)) + (nop!) + (nop!) + ) + ) + (while (< gp-0 (-> self desired-num-children)) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (if (not (TODO-RENAME-20 self s5-0 s4-0)) + (go yeti-idle) + ) + (let ((s3-0 (get-process *default-dead-pool* yeti-slave #x4000))) + (when s3-0 + (let ((t9-3 (method-of-type yeti-slave activate))) + (t9-3 + (the-as yeti-slave s3-0) + self + 'yeti-slave + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s3-0 + yeti-slave-init-by-other + (-> self entity) + self + s5-0 + s4-0 + #t + ) + (-> s3-0 ppointer) + ) + ) + ) + (+! gp-0 1) + ) + ) + (go yeti-idle) + (none) + ) + ) + +(defstate yeti-idle (yeti) + :code + (behavior () + (while #t + (cond + ((zero? (-> self spawn-delay)) + (let ((v1-1 0)) + (let ((a0-0 (the-as (pointer process-tree) (-> self child-process)))) + (while a0-0 + (+! v1-1 1) + (set! a0-0 (-> a0-0 0 brother)) + (nop!) + (nop!) + ) + ) + (when (< v1-1 (-> self desired-num-children)) + (set! (-> self spawn-delay) (rand-vu-int-range 150 1200)) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + ) + ) + ) + (else + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (-> self spawn-delay) + ) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (when (TODO-RENAME-20 self gp-0 s5-0) + (let ((s4-0 (get-process *default-dead-pool* yeti-slave #x4000))) + (when s4-0 + (let ((t9-3 (method-of-type yeti-slave activate))) + (t9-3 + (the-as yeti-slave s4-0) + self + 'yeti-slave + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s4-0 + yeti-slave-init-by-other + (-> self entity) + self + gp-0 + s5-0 + #f + ) + (-> s4-0 ppointer) + ) + ) + (set! (-> self spawn-delay) 0) + 0 + ) + ) + ) + ) + ) + (suspend) + ) + (none) + ) + ) + +(defmethod copy-defaults! yeti ((obj yeti) (arg0 res-lump)) + (set! (-> obj spawn-delay) 0) + (set! (-> obj root) (new 'process 'trsqv)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (process-drawable-from-entity! obj arg0) + (set! + (-> obj desired-num-children) + (res-lump-value + arg0 + 'num-lurkers + int + :default + (the-as uint128 (-> obj path curve num-cverts)) + ) + ) + (set! + (-> obj first-time-spawn-dist) + (res-lump-float arg0 'notice-dist :default 204800.0) + ) + (if + (and + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status complete)) + ) + (go yeti-resuming-start) + (go yeti-first-time-start) + ) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/qbert-plat.gc b/goal_src/levels/sunken/qbert-plat.gc index 2989ccca4e..1f945de69b 100644 --- a/goal_src/levels/sunken/qbert-plat.gc +++ b/goal_src/levels/sunken/qbert-plat.gc @@ -5,3 +5,981 @@ ;; name in dgo: qbert-plat ;; dgos: L1, SUN, SUNKEN +(define-extern *qbert-plat-sg* skeleton-group) +(define-extern *qbert-plat-on-sg* skeleton-group) + +(declare-type qbert-plat-master process-drawable) +(declare-type qbert-plat rigid-body-platform) +(define-extern qbert-plat-master-wait-for-door (state qbert-plat-master)) ;; unknown type +(define-extern qbert-plat-master-idle (state qbert-plat-master)) ;; unknown type +(define-extern qbert-plat-master-do-door (state symbol qbert-plat-master)) ;; unknown type +(define-extern qbert-plat-wait-for-master (state qbert-plat)) ;; unknown type +(define-extern qbert-plat-on-mimic (state qbert-plat)) ;; unknown type +(define-extern qbert-plat-on-die (state qbert-plat)) ;; unknown type + +;; DECOMP BEGINS + +(deftype qbert-plat-on (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + + +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "qbert-plat-on" + :bounds + (new 'static 'vector :y -8192.0 :w 18432.0) + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 2) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *qbert-plat-on-sg* v1-1) + ) + +(deftype qbert-plat (rigid-body-platform) + ((anchor-point vector :inline :offset-assert 736) + (plat-id int32 :offset-assert 752) + (on? symbol :offset-assert 756) + (player-is-riding? symbol :offset-assert 760) + (master entity-actor :offset-assert 764) + ) + :heap-base #x290 + :method-count-assert 35 + :size-assert #x300 + :flag-assert #x2302900300 + ) + + +(let + ((v1-3 + (new 'static 'skeleton-group + :art-group-name "qbert-plat" + :bounds + (new 'static 'vector :y -8192.0 :w 18432.0) + :version #x6 + ) + ) + ) + (set! (-> v1-3 jgeo) 0) + (set! (-> v1-3 janim) 2) + (set! (-> v1-3 mgeo 0) (the-as uint 1)) + (set! (-> v1-3 lod-dist 0) 4095996000.0) + (set! *qbert-plat-sg* v1-3) + ) + +(define + *qbert-plat-constants* + (new 'static 'rigid-body-platform-constants + :drag-factor 2.0 + :buoyancy-factor 1.5 + :max-buoyancy-depth (meters 1.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 4 + :mass 4.0 + :inertial-tensor-x (meters 4.0) + :inertial-tensor-y (meters 4.0) + :inertial-tensor-z (meters 4.0) + :idle-distance (meters 70.0) + :platform #t + :sound-name #f + ) + ) + +(deftype qbert-plat-master (process-drawable) + ((last-plat-triggered int32 :offset-assert 176) + (plat-states uint32 :offset-assert 180) + (plat-states-needed-to-open-door uint32 :offset-assert 184) + (player-in-bounds? symbol :offset-assert 188) + (player-in-water? symbol :offset-assert 192) + (play-door-cam? symbol :offset-assert 196) + (puzzle-beaten? symbol :offset-assert 200) + (door entity-actor :offset-assert 204) + (door-plat entity-actor :offset-assert 208) + (bounds-start vector :inline :offset-assert 224) + (bounds-end vector :inline :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 21 + :size-assert #x100 + :flag-assert #x1500900100 + (:methods + (plat-state-set? (_type_ uint) symbol 20) + ) + ) + + +(defstate qbert-plat-on-mimic (qbert-plat) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'die) + (go qbert-plat-on-die) + ) + ) + ) + ) + :code + (behavior () + (set-vector! (-> self draw color-emissive) 0.0 0.0 1.0 0.0) + (while #t + (let ((gp-0 (-> self parent))) + (set! + (-> self root-overlay trans quad) + (-> (the-as (pointer rigid-body-platform) gp-0) 0 root-overlay trans quad) + ) + (quaternion-copy! + (-> self root-overlay quat) + (-> (the-as (pointer rigid-body-platform) gp-0) 0 root-overlay quat) + ) + (set! + (-> self root-overlay scale quad) + (-> (the-as (pointer rigid-body-platform) gp-0) 0 root-overlay scale quad) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior qbert-plat) ja-post) + ) + +(defstate qbert-plat-on-die (qbert-plat) + :code + (behavior () + '() + (none) + ) + ) + +(defbehavior + qbert-plat-on-init-by-other qbert-plat + ((arg0 entity) (arg1 qbert-plat)) + (set! (-> self entity) arg0) + (set! (-> self mask) (logior (process-mask platform) (-> self mask))) + (set! + (-> self root-overlay) + (the-as collide-shape-moving (new 'process 'trsqv)) + ) + (set! (-> self root-overlay trans quad) (-> arg1 root-overlay trans quad)) + (quaternion-copy! (-> self root-overlay quat) (-> arg1 root-overlay quat)) + (set! (-> self root-overlay scale quad) (-> arg1 root-overlay scale quad)) + (dummy-14 self *qbert-plat-on-sg* '()) + (logior! (-> self skel status) 1) + (ja-channel-set! 1) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (go qbert-plat-on-mimic) + (none) + ) + +(defbehavior + qbert-plat-event-handler qbert-plat + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (dummy-32 self) + ) + (else + (rigid-body-platform-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + +(defmethod dummy-33 qbert-plat ((obj qbert-plat)) + (with-pp + (let* ((a1-0 (-> obj master)) + (v1-0 (if a1-0 + (-> a1-0 extra process) + ) + ) + ) + (when v1-0 + (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) 'trigger) + (set! (-> a1-1 param 0) (the-as uint (-> obj plat-id))) + (send-event-function v1-0 a1-1) + ) + ) + ) + ) + ) + +(defmethod dummy-32 qbert-plat ((obj qbert-plat)) + (with-pp + (let* ((v1-0 (-> obj master)) + (a0-1 (if v1-0 + (-> v1-0 extra process) + ) + ) + ) + (when (the-as qbert-plat-master a0-1) + (let + ((v1-3 + (plat-state-set? + (the-as qbert-plat-master a0-1) + (the-as uint (-> obj plat-id)) + ) + ) + ) + (when (!= v1-3 (-> obj on?)) + (set! (-> obj on?) v1-3) + (cond + (v1-3 + (let ((s5-0 (get-process *default-dead-pool* qbert-plat-on #x4000))) + (when s5-0 + (let ((t9-2 (method-of-type qbert-plat-on activate))) + (t9-2 + (the-as qbert-plat-on s5-0) + obj + 'qbert-plat-on + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + qbert-plat-on-init-by-other + (-> obj entity) + obj + ) + (-> s5-0 ppointer) + ) + ) + (sound-play-by-name + (static-sound-name "plat-light-on") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (else + (let ((gp-2 (-> obj child))) + (while gp-2 + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 0) + (set! (-> a1-5 message) 'die) + (send-event-function (ppointer->process gp-2) a1-5) + ) + (set! gp-2 (-> gp-2 0 brother)) + ) + ) + (sound-play-by-name + (static-sound-name "plat-light-off") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + ) + ) + ) + ) + ) + ) + +(defstate qbert-plat-wait-for-master (qbert-plat) + :code + (behavior () + (while #t + (let ((v1-0 (-> self master))) + (when (if v1-0 + (-> v1-0 extra process) + ) + (suspend) + (dummy-32 self) + (go-virtual rigid-body-platform-idle) + ) + ) + (suspend) + 0 + ) + (none) + ) + :post + (the-as (function none :behavior qbert-plat) ja-post) + ) + +(defstate rigid-body-platform-idle (qbert-plat) + :virtual #t + :event + qbert-plat-event-handler + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior qbert-plat) ja-post) + ) + +(defstate rigid-body-platform-float (qbert-plat) + :virtual #t + :event + qbert-plat-event-handler + :exit + (behavior () + (if (-> self on?) + (logior! (-> self draw status) 2) + ) + (none) + ) + :trans + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + ((-> (method-of-type rigid-body-platform rigid-body-platform-float) trans)) + (let* ((v1-5 (-> self root-overlay riders)) + (gp-1 (nonzero? (-> v1-5 num-riders))) + ) + (when gp-1 + (if (not (-> self player-is-riding?)) + (dummy-33 self) + ) + ) + (set! (-> self player-is-riding?) gp-1) + ) + (none) + ) + :post + (behavior () + ((the-as + (function none :behavior qbert-plat) + (-> (method-of-type rigid-body-platform rigid-body-platform-float) post) + ) + ) + (if (-> self on?) + (logior! (-> self draw status) 2) + ) + (none) + ) + ) + +(defmethod + TODO-RENAME-22 + qbert-plat + ((obj qbert-plat) (arg0 vector) (arg1 float)) + (+ + (-> obj anchor-point y) + (-> obj float-height-offset) + (* + 512.0 + (cos + (* 546.13336 (+ (* 60.0 arg1) (* 0.03 (-> arg0 x)) (* 0.03 (-> arg0 z)))) + ) + ) + ) + ) + +(defmethod TODO-RENAME-23 qbert-plat ((obj qbert-plat) (arg0 float)) + ((the-as + (function rigid-body-platform float none) + (find-parent-method qbert-plat 23) + ) + obj + arg0 + ) + (TODO-RENAME-27 obj (-> obj anchor-point)) + 0 + (none) + ) + +(defmethod TODO-RENAME-30 qbert-plat ((obj qbert-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) 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 -8192.0 0.0 18432.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-overlay) s5-0) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-31 qbert-plat ((obj qbert-plat)) + (dummy-14 obj *qbert-plat-sg* '()) + (set! (-> obj anchor-point quad) (-> obj root-overlay trans quad)) + (logior! (-> obj skel status) 1) + (dummy-47 (-> obj root-overlay)) + (TODO-RENAME-29 obj *qbert-plat-constants*) + (set! (-> obj float-height-offset) 6144.0) + (let ((v1-11 (-> obj control-point-array data))) + (set! (-> v1-11 0 local-pos x) -14336.0) + (set! (-> v1-11 0 local-pos y) 0.0) + (set! (-> v1-11 0 local-pos z) -14336.0) + (set! (-> v1-11 0 local-pos w) 1.0) + ) + (let ((v1-13 (-> obj control-point-array data 1))) + (set! (-> v1-13 local-pos x) -14336.0) + (set! (-> v1-13 local-pos y) 0.0) + (set! (-> v1-13 local-pos z) 14336.0) + (set! (-> v1-13 local-pos w) 1.0) + ) + (let ((v1-15 (-> obj control-point-array data 2))) + (set! (-> v1-15 local-pos x) 14336.0) + (set! (-> v1-15 local-pos y) 0.0) + (set! (-> v1-15 local-pos z) 14336.0) + (set! (-> v1-15 local-pos w) 1.0) + ) + (let ((v1-17 (-> obj control-point-array data 3))) + (set! (-> v1-17 local-pos x) 14336.0) + (set! (-> v1-17 local-pos y) 0.0) + (set! (-> v1-17 local-pos z) -14336.0) + (set! (-> v1-17 local-pos w) 1.0) + ) + (set! (-> obj on?) #f) + (set! (-> obj player-is-riding?) #f) + (set! (-> obj master) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj plat-id) (actor-count-before (-> obj link))) + 0 + (none) + ) + +(defmethod copy-defaults! qbert-plat ((obj qbert-plat) (arg0 res-lump)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (TODO-RENAME-30 obj) + (process-drawable-from-entity! obj arg0) + (TODO-RENAME-31 obj) + (go qbert-plat-wait-for-master) + (none) + ) + +(defmethod + plat-state-set? + qbert-plat-master + ((obj qbert-plat-master) (arg0 uint)) + (logtest? (-> obj plat-states) (ash 1 arg0)) + ) + +(defstate qbert-plat-master-idle (qbert-plat-master) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'trigger) + (start-hint-timer (the-as level-hint-control 842)) + (close-specific-task! + (game-task sunken-platforms) + (task-status need-hint) + ) + (when (not (-> self puzzle-beaten?)) + (let ((v1-2 (-> arg3 param 0))) + (when (!= v1-2 (-> self last-plat-triggered)) + (set! (-> self last-plat-triggered) (the-as int v1-2)) + (let + ((s5-1 + (= + (-> self plat-states-needed-to-open-door) + (-> self plat-states) + ) + ) + ) + (let ((v1-3 (ash 1 v1-2))) + (set! + (-> self plat-states) + (logxor (-> self plat-states) (the-as uint v1-3)) + ) + (if (zero? (logand v1-3 (-> self plat-states))) + (level-hint-spawn + (game-text-id sunken-qbert-hint) + "sksp0130" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'notify) + (send-event-function arg0 a1-4) + ) + (let + ((a0-13 + (= + (-> self plat-states-needed-to-open-door) + (-> self plat-states) + ) + ) + ) + (if (!= s5-1 a0-13) + (go qbert-plat-master-do-door a0-13) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (while #t + (when (not (-> self puzzle-beaten?)) + (when (task-complete? *game-info* (game-task sunken-platforms)) + (set! (-> self puzzle-beaten?) #t) + (set! (-> self plat-states) (-> self plat-states-needed-to-open-door)) + (set! (-> self play-door-cam?) #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) 'trigger) + (let ((t9-1 send-event-function) + (v1-8 (-> self door)) + ) + (t9-1 (if v1-8 + (-> v1-8 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) 'trigger) + (let ((t9-2 send-event-function) + (v1-12 (-> self door-plat)) + ) + (t9-2 (if v1-12 + (-> v1-12 extra process) + ) + a1-2 + ) + ) + ) + (send-to-all (-> self link) 'notify) + ) + ) + (when (and *target* (not (-> self puzzle-beaten?))) + (let ((gp-0 #f)) + (let ((s5-1 (logtest? (-> *target* water flags) 512))) + (when s5-1 + (when (not (-> self player-in-water?)) + (set! gp-0 #t) + (level-hint-spawn + (game-text-id sunken-qbert-hint) + "sksp0130" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (set! (-> self player-in-water?) s5-1) + ) + (when (logtest? (-> *target* control status) 1) + (let ((s5-2 #t)) + (let ((s3-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s3-0 (target-pos 0) (-> self bounds-start)) + (set! (-> s3-0 y) 0.0) + (vector-! s4-0 (-> self bounds-end) (-> self bounds-start)) + (if (< (vector-dot s3-0 s4-0) 0.0) + (set! s5-2 #f) + ) + ) + (when (and (not s5-2) (-> self player-in-bounds?)) + (set! gp-0 #t) + (level-hint-spawn + (game-text-id sunken-qbert-hint) + "sksp0130" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (set! (-> self player-in-bounds?) s5-2) + ) + ) + (when gp-0 + (set! (-> self plat-states) (the-as uint 0)) + (set! (-> self last-plat-triggered) -1) + (send-to-all (-> self link) 'notify) + (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) 'untrigger) + (let ((t9-8 send-event-function) + (v1-47 (-> self door)) + ) + (t9-8 (if v1-47 + (-> v1-47 extra process) + ) + a1-9 + ) + ) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 0) + (set! (-> a1-10 message) 'untrigger) + (let ((t9-9 send-event-function) + (v1-51 (-> self door-plat)) + ) + (t9-9 (if v1-51 + (-> v1-51 extra process) + ) + a1-10 + ) + ) + ) + ) + ) + ) + (suspend) + ) + (none) + ) + ) + +(defstate qbert-plat-master-do-door (qbert-plat-master) + :code + (behavior ((arg0 symbol)) + (when (not (-> self play-door-cam?)) + (cond + (arg0 + (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) 'trigger) + (let ((t9-0 send-event-function) + (v1-3 (-> self door)) + ) + (t9-0 (if v1-3 + (-> v1-3 extra process) + ) + a1-0 + ) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'trigger) + (let ((t9-1 send-event-function) + (v1-7 (-> self door-plat)) + ) + (t9-1 (if v1-7 + (-> v1-7 extra process) + ) + a1-1 + ) + ) + ) + ) + (else + (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) 'untrigger) + (let ((t9-2 send-event-function) + (v1-11 (-> self door)) + ) + (t9-2 (if v1-11 + (-> v1-11 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) 'untrigger) + (let ((t9-3 send-event-function) + (v1-15 (-> self door-plat)) + ) + (t9-3 (if v1-15 + (-> v1-15 extra process) + ) + a1-3 + ) + ) + ) + ) + ) + (go qbert-plat-master-idle) + ) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (cond + (arg0 + (ambient-hint-spawn "gamcam08" (the-as vector #f) *entity-pool* 'camera) + (let ((s5-0 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-0 + (let ((t9-7 (method-of-type pov-camera activate))) + (t9-7 + (the-as pov-camera s5-0) + self + 'pov-camera + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> s5-0 ppointer) + ) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 420 + ) + (suspend) + ) + ) + (else + (ambient-hint-spawn "gamcam07" (the-as vector #f) *entity-pool* 'camera) + (let ((s5-1 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-1 + (let ((t9-11 (method-of-type pov-camera activate))) + (t9-11 + (the-as pov-camera s5-1) + self + 'pov-camera + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-close" + 0 + #f + '() + ) + (-> s5-1 ppointer) + ) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 300 + ) + (suspend) + ) + ) + ) + (cond + (arg0 + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 0) + (set! (-> a1-12 message) 'trigger) + (let ((t9-13 send-event-function) + (v1-41 (-> self door)) + ) + (t9-13 (if v1-41 + (-> v1-41 extra process) + ) + a1-12 + ) + ) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 0) + (set! (-> a1-13 message) 'trigger) + (let ((t9-14 send-event-function) + (v1-45 (-> self door-plat)) + ) + (t9-14 (if v1-45 + (-> v1-45 extra process) + ) + a1-13 + ) + ) + ) + ) + (else + (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) 'untrigger) + (let ((t9-15 send-event-function) + (v1-49 (-> self door)) + ) + (t9-15 (if v1-49 + (-> v1-49 extra process) + ) + a1-14 + ) + ) + ) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) self) + (set! (-> a1-15 num-params) 0) + (set! (-> a1-15 message) 'untrigger) + (let ((t9-16 send-event-function) + (v1-53 (-> self door-plat)) + ) + (t9-16 (if v1-53 + (-> v1-53 extra process) + ) + a1-15 + ) + ) + ) + (set! (-> self play-door-cam?) #f) + ) + ) + (go qbert-plat-master-idle) + (none) + ) + ) + +(defstate qbert-plat-master-wait-for-door (qbert-plat-master) + :code + (behavior () + (while #t + (let* ((v1-0 (-> self door)) + (gp-0 (if v1-0 + (-> v1-0 extra process) + ) + ) + (v1-2 (-> self door-plat)) + (s5-0 (if v1-2 + (-> v1-2 extra process) + ) + ) + ) + (when (and gp-0 s5-0) + (logclear! (-> s5-0 mask) (process-mask platform)) + (when (-> self puzzle-beaten?) + (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) 'trigger) + (send-event-function gp-0 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) 'trigger) + (send-event-function s5-0 a1-1) + ) + ) + (go qbert-plat-master-idle) + ) + ) + (suspend) + ) + (none) + ) + ) + +(defmethod + copy-defaults! + qbert-plat-master + ((obj qbert-plat-master) (arg0 res-lump)) + (set! (-> obj last-plat-triggered) -1) + (set! (-> obj player-in-water?) #f) + (set! (-> obj player-in-bounds?) #f) + (set! (-> obj play-door-cam?) #t) + (set! (-> obj puzzle-beaten?) #f) + (set! (-> obj plat-states) (the-as uint 0)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! + (-> obj plat-states-needed-to-open-door) + (the-as uint (get-matching-actor-type-mask (-> obj link) qbert-plat)) + ) + (set! (-> obj door) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj door-plat) (entity-actor-lookup arg0 'alt-actor 1)) + (set-vector! (-> obj bounds-start) -39034.88 0.0 27729.92 1.0) + (vector+! (-> obj bounds-start) (-> obj bounds-start) (-> obj root trans)) + (set-vector! (-> obj bounds-end) 128573.44 0.0 -38420.48 1.0) + (vector+! (-> obj bounds-end) (-> obj bounds-end) (-> obj root trans)) + (let ((v1-11 (task-complete? *game-info* (game-task sunken-platforms)))) + (set! (-> obj puzzle-beaten?) v1-11) + (when v1-11 + (set! (-> obj plat-states) (-> obj plat-states-needed-to-open-door)) + (set! (-> obj play-door-cam?) #f) + ) + ) + (go qbert-plat-master-wait-for-door) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/square-platform.gc b/goal_src/levels/sunken/square-platform.gc index 01aeca7510..f441d50c68 100644 --- a/goal_src/levels/sunken/square-platform.gc +++ b/goal_src/levels/sunken/square-platform.gc @@ -5,3 +5,937 @@ ;; name in dgo: square-platform ;; dgos: L1, SUN, SUNKEN +(define-extern *square-platform-sg* skeleton-group) + +(declare-type square-platform baseplat) +(define-extern square-platform-lowered (state square-platform)) ;; unknown type +(define-extern square-platform-rising (state square-platform)) ;; unknown type +(define-extern square-platform-lowering (state square-platform)) ;; unknown type +(define-extern square-platform-raised (state square-platform)) ;; unknown type +(declare-type square-platform-master process-drawable) +(define-extern square-platform-master-idle (state square-platform-master)) ;; unknown type +(define-extern square-platform-master-activate (state square-platform-master)) ;; unknown type + +;; DECOMP BEGINS + +(deftype square-platform (baseplat) + ((plat-id int32 :offset-assert 228) + (pos-u float :offset-assert 232) + (water-entity entity-actor :offset-assert 236) + (splash-counter int32 :offset-assert 240) + (start-splash-time uint64 :offset-assert 248) + (part2 sparticle-launch-control :offset-assert 256) + (part3 sparticle-launch-control :offset-assert 260) + (part4 sparticle-launch-control :offset-assert 264) + (up-pos vector :inline :offset-assert 272) + (down-pos vector :inline :offset-assert 288) + ) + :heap-base #xc0 + :method-count-assert 28 + :size-assert #x130 + :flag-assert #x1c00c00130 + (:methods + (TODO-RENAME-27 (_type_ symbol) none 27) + ) + ) + + +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "square-platform" + :bounds + (new 'static 'vector :y -45056.0 :w 32768.0) + :max-lod 1 + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 3) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 4095996000.0) + (set! *square-platform-sg* v1-1) + ) + +(deftype square-platform-button (basebutton) + () + :heap-base #x90 + :method-count-assert 32 + :size-assert #x100 + :flag-assert #x2000900100 + ) + + +(deftype square-platform-master (process-drawable) + ((button-id int32 :offset-assert 176) + (plat-id int32 :offset-assert 180) + (plat-mask uint32 :offset-assert 184) + (plat-id-dir int32 :offset-assert 188) + (wiggled? symbol :offset-assert 192) + (timeout uint64 :offset-assert 200) + (last-plat-activated-time uint64 :offset-assert 208) + (delay-til-wiggle uint64 :offset-assert 216) + (ticker ticky :inline :offset-assert 224) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #x100 + :flag-assert #x1400900100 + ) + + +(set! + (-> *part-group-id-table* 437) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-square-platform-breach-splash" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 2222 :flags (is-3d)) + (sp-item 2315 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! + (-> *part-id-table* 2222) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters 0.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 3.5) (meters 3.5) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 3.2) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 10 29 1) + (sp-launcher-by-id spt-next-launcher 2316) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2316) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.17066666) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2315) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters 3.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.5) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 3.2) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 10 29 1) + (sp-launcher-by-id spt-next-launcher 2316) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-group-id-table* 438) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name + "group-square-platform-submerge-bubbles" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2223)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! + (-> *part-id-table* 2223) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-x (meters -4.0) (meters 8.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 900) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-flt spt-userdata -663298.44) + (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 2317) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2317) + (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-group-id-table* 439) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-square-platform-submerge-splash" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 2222 :flags (is-3d)) + (sp-item 2315 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(defmethod TODO-RENAME-27 square-platform ((obj square-platform) (arg0 symbol)) + (local-vars (v0-3 sound-id) (sv-48 int)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set! (-> s4-0 quad) (-> obj root-override trans quad)) + (set! (-> s4-0 y) (+ -20480.0 (-> s4-0 y))) + (let* ((v1-1 (-> obj water-entity)) + (a0-4 (if v1-1 + (-> v1-1 extra process) + ) + ) + ) + (when (not a0-4) + (set! + (-> obj water-entity) + (entity-actor-lookup (-> obj entity) 'alt-actor 0) + ) + (let ((v1-4 (-> obj water-entity))) + (set! a0-4 (if v1-4 + (-> v1-4 extra process) + ) + ) + ) + ) + (when (the-as water-vol a0-4) + (let ((f0-2 (get-ripple-height (the-as water-vol a0-4) s4-0)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s3-0 quad) (-> s4-0 quad)) + (set! (-> s3-0 y) f0-2) + (if (zero? (-> obj start-splash-time)) + (set! v0-3 (cond + (arg0 + (if (>= (-> s4-0 y) f0-2) + (set! + (-> obj start-splash-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + v0-3 + ) + (else + (when (>= f0-2 (-> s4-0 y)) + (set! + (-> obj start-splash-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (let ((s2-0 sound-play-by-name) + (s1-0 + (make-u128 + #x6873616c + (the-as uint #x70732d656772616c) + ) + ) + (s0-0 (new-sound-id)) + ) + (set! sv-48 1024) + (let + ((a3-0 + (the int (* 1524.0 (rand-vu-float-range -0.8 0.8))) + ) + (t0-0 0) + (t1-0 1) + (t2-0 #t) + ) + (s2-0 + (the-as sound-name s1-0) + s0-0 + sv-48 + a3-0 + t0-0 + (the-as uint t1-0) + (the-as vector t2-0) + ) + ) + ) + ) + ) + ) + ) + ) + (when (nonzero? (-> obj start-splash-time)) + (cond + (arg0 + (let ((v1-21 (-> obj splash-counter))) + (when (< v1-21 2) + (set! (-> obj splash-counter) (+ v1-21 1)) + (spawn (-> obj part2) s3-0) + ) + ) + ) + (else + (spawn (-> obj part3) s4-0) + ) + ) + ) + (when (not arg0) + (let ((v1-25 (-> obj splash-counter))) + (when (< v1-25 2) + (set! (-> obj splash-counter) (+ v1-25 1)) + (spawn (-> obj part4) s3-0) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + +(defstate square-platform-lowered (square-platform) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'trigger) + (if + (and + (= (-> arg0 type) square-platform-master) + (= + (-> (the-as square-platform-master arg0) plat-id) + (-> self plat-id) + ) + ) + (go square-platform-rising) + ) + ) + ) + ) + ) + :code + (behavior () + (set! (-> self pos-u) 0.0) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate square-platform-rising (square-platform) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((or (= v1-0 'bonk) (= v1-0 'bounce)) + (dummy-22 self) + ) + ((= v1-0 'untrigger) + (go square-platform-lowering) + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self start-splash-time) (the-as uint 0)) + (set! (-> self splash-counter) 0) + 0 + (none) + ) + :trans + (behavior () + (set! + (-> self pos-u) + (seek-with-smooth + (-> self pos-u) + 1.0 + (/ 1.0 (* 0.75 (-> *display* frames-per-second))) + 0.8 + 0.01 + ) + ) + (vector-lerp! + (-> self basetrans) + (-> self down-pos) + (-> self up-pos) + (-> self pos-u) + ) + (plat-trans) + (when (= (-> self pos-u) 1.0) + (plat-post) + (go square-platform-raised) + ) + (TODO-RENAME-27 self #t) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior square-platform) plat-post) + ) + +(defstate square-platform-raised (square-platform) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((or (= v1-0 'bonk) (= v1-0 'bounce)) + (dummy-22 self) + ) + ((= v1-0 'untrigger) + (go square-platform-lowering) + ) + ) + ) + ) + ) + :trans + (the-as (function none :behavior square-platform) plat-trans) + :code + (behavior () + (set! (-> self pos-u) 1.0) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior square-platform) plat-post) + ) + +(defstate square-platform-lowering (square-platform) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((or (= v1-0 'bonk) (= v1-0 'bounce)) + (dummy-22 self) + ) + ((= v1-0 'trigger) + (go square-platform-rising) + ) + ((= v1-0 'touch) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'no-look-around) + (set! (-> a1-8 param 0) (the-as uint 450)) + (send-event-function arg0 a1-8) + ) + #f + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self start-splash-time) (the-as uint 0)) + (set! (-> self splash-counter) 0) + 0 + (none) + ) + :trans + (behavior () + (set! + (-> self pos-u) + (seek-with-smooth + (-> self pos-u) + 0.0 + (/ 1.0 (* 0.75 (-> *display* frames-per-second))) + 0.8 + 0.01 + ) + ) + (vector-lerp! + (-> self basetrans) + (-> self down-pos) + (-> self up-pos) + (-> self pos-u) + ) + (plat-trans) + (when (= (-> self pos-u) 0.0) + (plat-post) + (go square-platform-lowered) + ) + (TODO-RENAME-27 self #f) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior square-platform) plat-post) + ) + +(defmethod deactivate square-platform ((obj square-platform)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + (if (nonzero? (-> obj part3)) + (kill-and-free-particles (-> obj part3)) + ) + (if (nonzero? (-> obj part4)) + (kill-and-free-particles (-> obj part4)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(defmethod relocate square-platform ((obj square-platform) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (if (nonzero? (-> obj part3)) + (&+! (-> obj part3) arg0) + ) + (if (nonzero? (-> obj part4)) + (&+! (-> obj part4) arg0) + ) + (the-as + square-platform + ((the-as + (function baseplat int baseplat) + (find-parent-method square-platform 7) + ) + obj + arg0 + ) + ) + ) + +(defmethod copy-defaults! square-platform ((obj square-platform) (arg0 res-lump)) + (local-vars (sv-16 res-tag) (sv-32 res-tag)) + (set! (-> obj pos-u) 0.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) 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 -24576.0 0.0 32768.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj plat-id) (actor-count-before (-> obj link))) + (dummy-14 obj *square-platform-sg* '()) + (dummy-21 obj) + (ja-channel-set! 1) + (let ((s4-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (set! sv-16 (new 'static 'res-tag)) + (let* + ((v1-32 (res-lump-data (-> obj entity) 'distance pointer :tag-ptr (& sv-16))) + (f30-0 (if (and v1-32 (> (the-as int (-> sv-16 elt-count)) 0)) + (-> (the-as (pointer float) v1-32)) + -8192.0 + ) + ) + ) + (set! sv-32 (new 'static 'res-tag)) + (let* + ((v1-35 + (res-lump-data (-> obj entity) 'distance pointer :tag-ptr (& sv-32)) + ) + (f0-10 (if (and v1-35 (< 1 (the-as int (-> sv-32 elt-count)))) + (-> (the-as (pointer float) v1-35) 1) + 16384.0 + ) + ) + ) + (set! (-> obj down-pos quad) (-> obj root-override trans quad)) + (+! (-> obj down-pos y) f30-0) + (set! (-> obj up-pos quad) (-> obj root-override trans quad)) + (+! (-> obj up-pos y) f0-10) + ) + ) + (set! (-> obj basetrans quad) (-> obj down-pos quad)) + (set! (-> obj root-override trans quad) (-> obj basetrans quad)) + (set! + (-> obj part2) + (create-launch-control (-> *part-group-id-table* 437) obj) + ) + (set! + (-> obj part3) + (create-launch-control (-> *part-group-id-table* 438) obj) + ) + (set! + (-> obj part4) + (create-launch-control (-> *part-group-id-table* 439) obj) + ) + (set! (-> obj water-entity) (entity-actor-lookup arg0 'alt-actor 0)) + (ja-post) + (dummy-47 (-> obj root-override)) + (go square-platform-lowered) + (none) + ) + +(defstate square-platform-master-idle (square-platform-master) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'trigger) + (when (= (-> arg0 type) square-platform-button) + (set! + (-> self button-id) + (-> (the-as square-platform-button arg0) button-id) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go square-platform-master-activate) + ) + ) + ) + ) + ) + :code + (behavior () + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +(defstate square-platform-master-activate (square-platform-master) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self wiggled?) #f) + (sleep (-> self ticker) (-> self timeout)) + (set! (-> self plat-id) -1) + (send-to-all (-> self link) 'trigger) + (set! (-> self plat-id) 0) + (let ((gp-0 1)) + (let ((v1-7 (-> self button-id))) + (cond + ((zero? v1-7) + (let* ((s5-0 (get-process *default-dead-pool* sunkencam #x4000)) + (a0-4 (when s5-0 + (let ((t9-3 (method-of-type sunkencam activate))) + (t9-3 + (the-as sunkencam s5-0) + self + 'sunkencam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> s5-0 ppointer) + ) + ) + ) + (set! (-> (the-as sunkencam (-> a0-4 0)) seq) (the-as uint 3)) + ) + ) + ((= v1-7 1) + (let* ((gp-1 (get-process *default-dead-pool* sunkencam #x4000)) + (v1-13 (when gp-1 + (let ((t9-6 (method-of-type sunkencam activate))) + (t9-6 + (the-as sunkencam gp-1) + self + 'sunkencam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-1 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> gp-1 ppointer) + ) + ) + ) + (set! (-> (the-as sunkencam (-> v1-13 0)) seq) (the-as uint 4)) + ) + (set! gp-0 -1) + ) + ((= v1-7 2) + (let* ((s5-1 (get-process *default-dead-pool* sunkencam #x4000)) + (a0-17 (when s5-1 + (let ((t9-9 (method-of-type sunkencam activate))) + (t9-9 + (the-as sunkencam s5-1) + self + 'sunkencam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> s5-1 ppointer) + ) + ) + ) + (set! (-> (the-as sunkencam (-> a0-17 0)) seq) (the-as uint 5)) + ) + ) + ((= v1-7 3) + (let* ((gp-2 (get-process *default-dead-pool* sunkencam #x4000)) + (v1-24 (when gp-2 + (let ((t9-12 (method-of-type sunkencam activate))) + (t9-12 + (the-as sunkencam gp-2) + self + 'sunkencam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-2 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> gp-2 ppointer) + ) + ) + ) + (set! (-> (the-as sunkencam (-> v1-24 0)) seq) (the-as uint 6)) + ) + (set! gp-0 -1) + ) + ) + ) + (if (< gp-0 0) + (set! (-> self plat-id) 32) + ) + (set! (-> self plat-id-dir) gp-0) + ) + (none) + ) + :exit + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (none) + ) + :trans + (behavior () + (when (completed? (-> self ticker)) + (send-to-all (-> self link) 'untrigger) + (go square-platform-master-idle) + ) + (when (reached-delay? (-> self ticker) (-> self delay-til-wiggle)) + (when (not (-> self wiggled?)) + (set! (-> self wiggled?) #t) + (send-to-all (-> self link) 'bounce) + ) + ) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self last-plat-activated-time)) + ) + 90 + ) + (set! + (-> self last-plat-activated-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (let ((v1-20 (-> self plat-id)) + (a0-5 (-> self plat-id-dir)) + (a1-3 (-> self plat-mask)) + ) + (while #t + (+! v1-20 a0-5) + (cond + ((<= v1-20 0) + (set! (-> self plat-id) 0) + (return #f) + ) + ((>= v1-20 32) + (set! (-> self plat-id) 32) + (return #f) + ) + (else + (when (logtest? a1-3 (ash 1 v1-20)) + (set! (-> self plat-id) v1-20) + (send-to-all (-> self link) 'trigger) + (return #f) + ) + ) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +(defmethod + copy-defaults! + square-platform-master + ((obj square-platform-master) (arg0 res-lump)) + (set! (-> obj button-id) -1) + (set! (-> obj plat-id) -1) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! + (-> obj timeout) + (the-as + uint + (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 10.0))) + ) + ) + (set! (-> obj delay-til-wiggle) (+ (-> obj timeout) -120)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! + (-> obj plat-mask) + (the-as uint (get-matching-actor-type-mask (-> obj link) square-platform)) + ) + (go square-platform-master-idle) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/sunken-fish.gc b/goal_src/levels/sunken/sunken-fish.gc index c4c9472176..1826913796 100644 --- a/goal_src/levels/sunken/sunken-fish.gc +++ b/goal_src/levels/sunken/sunken-fish.gc @@ -5,3 +5,587 @@ ;; name in dgo: sunken-fish ;; dgos: L1, SUN, SUNKEN +(define-extern *sunkenfisha-red-yellow-sg* skeleton-group) +(define-extern *sunkenfisha-yellow-blue-sg* skeleton-group) +(define-extern *sunkenfisha-yellow-eye-sg* skeleton-group) + +;; DECOMP BEGINS + +(deftype sunkenfisha (process-drawable) + ((path-u float :offset-assert 176) + (path-speed float :offset-assert 180) + (path-speed-seek-speed float :offset-assert 184) + (targ-path-speed float :offset-assert 188) + (path-normal-speed-lo float :offset-assert 192) + (path-normal-speed-hi float :offset-assert 196) + (path-dir float :offset-assert 200) + (change-path-dir-time uint64 :offset-assert 208) + (local-path-offset vector :inline :offset-assert 224) + (targ-local-path-offset vector :inline :offset-assert 240) + (local-path-offset-dir vector :inline :offset-assert 256) + (max-local-path-offset vector :inline :offset-assert 272) + (facing-rot vector :inline :offset-assert 288) + (path-trans-offset vector :inline :offset-assert 304) + ) + :heap-base #xd0 + :method-count-assert 28 + :size-assert #x140 + :flag-assert #x1c00d00140 + (:methods + (TODO-RENAME-20 (_type_) float 20) + (TODO-RENAME-orbit?-21 (_type_ vector float vector) vector 21) + (dummy-22 (_type_) none 22) + (TODO-RENAME-23 (_type_) quaternion 23) + (TODO-RENAME-24 (_type_) vector 24) + (dummy-25 (_type_) none 25) + (TODO-RENAME-26 (_type_) float 26) + (TODO-RENAME-27 (_type_) float 27) + ) + ) + + +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "sunkenfisha" + :bounds + (new 'static 'vector :y 6144.0 :w 10240.0) + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) -1) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *sunkenfisha-red-yellow-sg* v1-1) + ) + +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "sunkenfisha" + :bounds + (new 'static 'vector :y 6144.0 :w 10240.0) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 2) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 3)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *sunkenfisha-yellow-blue-sg* v1-2) + ) + +(let + ((v1-3 + (new 'static 'skeleton-group + :art-group-name "sunkenfisha" + :bounds + (new 'static 'vector :y 6144.0 :w 10240.0) + :version #x6 + ) + ) + ) + (set! (-> v1-3 jgeo) 4) + (set! (-> v1-3 janim) -1) + (set! (-> v1-3 mgeo 0) (the-as uint 5)) + (set! (-> v1-3 lod-dist 0) 4095996000.0) + (set! *sunkenfisha-yellow-eye-sg* v1-3) + ) + +(defmethod dummy-22 sunkenfisha ((obj sunkenfisha)) + 0 + (none) + ) + +(defmethod + TODO-RENAME-orbit?-21 + sunkenfisha + ((obj sunkenfisha) (arg0 vector) (arg1 float) (arg2 vector)) + (eval-path-curve! (-> obj path) arg0 arg1 'interp) + (vector+! arg0 arg0 (-> obj path-trans-offset)) + (let ((s2-0 (new 'stack-no-clear 'vector))) + (TODO-RENAME-14 (-> obj path) s2-0 arg1) + (let ((f0-2 (atan (-> s2-0 x) (-> s2-0 z))) + (s4-1 (new 'stack-no-clear 'vector)) + ) + (vector-rotate-around-y! s4-1 arg2 f0-2) + (vector+! arg0 arg0 s4-1) + ) + ) + ) + +(defmethod TODO-RENAME-24 sunkenfisha ((obj sunkenfisha)) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'matrix)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s4-0 (-> obj targ-local-path-offset) (-> obj local-path-offset)) + (when (>= (* 4096.0 (-> *display* seconds-per-frame)) (vector-length s4-0)) + (until (< (* 16384.0 (-> *display* seconds-per-frame)) (vector-length s4-0)) + (set! + (-> obj targ-local-path-offset x) + (rand-vu-float-range + (- (-> obj max-local-path-offset x)) + (-> obj max-local-path-offset x) + ) + ) + (set! + (-> obj targ-local-path-offset y) + (rand-vu-float-range + (- (-> obj max-local-path-offset y)) + (-> obj max-local-path-offset y) + ) + ) + (vector-! s4-0 (-> obj targ-local-path-offset) (-> obj local-path-offset)) + ) + ) + (vector-normalize! s4-0 1.0) + (matrix-from-two-vectors-max-angle-partial! + s3-0 + (-> obj local-path-offset-dir) + s4-0 + (* 16384.0 (-> *display* seconds-per-frame)) + 0.1 + ) + (vector-matrix*! + (-> obj local-path-offset-dir) + (-> obj local-path-offset-dir) + s3-0 + ) + (vector-normalize! (-> obj local-path-offset-dir) 1.0) + (vector-float*! + gp-0 + (-> obj local-path-offset-dir) + (* 4096.0 (-> *display* seconds-per-frame)) + ) + (vector+! (-> obj local-path-offset) (-> obj local-path-offset) gp-0) + ) + ) + +(defmethod dummy-25 sunkenfisha ((obj sunkenfisha)) + (let* ((f0-0 (-> obj path-speed)) + (f1-1 + (seek + f0-0 + (-> obj targ-path-speed) + (* (-> obj path-speed-seek-speed) (-> *display* seconds-per-frame)) + ) + ) + ) + (set! (-> obj path-speed) f1-1) + (let + ((f30-0 + (+ + (-> obj path-u) + (* (-> obj path-dir) f1-1 (-> *display* seconds-per-frame)) + ) + ) + ) + (cond + ((< f30-0 0.0) + (set! f30-0 (- f30-0)) + (TODO-RENAME-20 obj) + ) + ((< 1.0 f30-0) + (+! f30-0 (* 2.0 (- 1.0 f30-0))) + (TODO-RENAME-20 obj) + ) + ) + (set! (-> obj path-u) f30-0) + ) + ) + (none) + ) + +(defmethod TODO-RENAME-23 sunkenfisha ((obj sunkenfisha)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set-vector! + s5-0 + (- (vector-x-angle (-> obj root transv))) + (vector-y-angle (-> obj root transv)) + 0.0 + 1.0 + ) + (set! + (-> obj facing-rot x) + (deg-seek-smooth + (-> obj facing-rot x) + (-> s5-0 x) + (* 16384.0 (-> *display* seconds-per-frame)) + 0.1 + ) + ) + (set! + (-> obj facing-rot y) + (deg-seek-smooth + (-> obj facing-rot y) + (-> s5-0 y) + (* 32768.0 (-> *display* seconds-per-frame)) + 0.1 + ) + ) + ) + (quaternion-zxy! (-> obj root quat) (-> obj facing-rot)) + ) + +(defmethod TODO-RENAME-20 sunkenfisha ((obj sunkenfisha)) + (set! (-> obj path-dir) (- (-> obj path-dir))) + (set! (-> obj path-speed) 0.0) + (set! + (-> obj targ-path-speed) + (rand-vu-float-range + (-> obj path-normal-speed-lo) + (-> obj path-normal-speed-hi) + ) + ) + (set! + (-> obj change-path-dir-time) + (the-as + uint + (+ (-> *display* base-frame-counter) (rand-vu-int-range 1500 5400)) + ) + ) + (set! + (-> obj targ-local-path-offset y) + (* 0.5 (+ (-> obj targ-local-path-offset y) (-> obj local-path-offset y))) + ) + (let* ((f0-8 (-> obj local-path-offset x)) + (f1-3 (- (-> obj targ-local-path-offset x) f0-8)) + ) + (when (< (fabs f1-3) 12288.0) + (cond + ((>= f1-3 0.0) + (let ((f0-10 (fmin (+ 12288.0 f0-8) (-> obj max-local-path-offset x)))) + (set! (-> obj targ-local-path-offset x) f0-10) + f0-10 + ) + ) + (else + (let + ((f0-12 (fmax (+ -12288.0 f0-8) (- (-> obj max-local-path-offset x))))) + (set! (-> obj targ-local-path-offset x) f0-12) + f0-12 + ) + ) + ) + ) + ) + ) + +(defstate sunkenfisha-idle (sunkenfisha) + :trans + (behavior () + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (if + (>= + (-> *display* base-frame-counter) + (the-as int (-> self change-path-dir-time)) + ) + (TODO-RENAME-20 self) + ) + (TODO-RENAME-24 self) + (dummy-25 self) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (TODO-RENAME-orbit?-21 + self + gp-0 + (-> self path-u) + (-> self local-path-offset) + ) + (vector-! (-> self root transv) gp-0 (-> self root trans)) + (set! (-> self root trans quad) (-> gp-0 quad)) + ) + (let ((v1-16 (-> self root transv))) + (.lvf vf1 (&-> (-> self root transv) quad)) + (let ((f0-1 (-> *display* frames-per-second))) + (.mov at-0 f0-1) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-16 quad) vf1) + ) + (TODO-RENAME-23 self) + (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 6)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + 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 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior sunkenfisha) ja-post) + ) + +(defmethod TODO-RENAME-26 sunkenfisha ((obj sunkenfisha)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj (-> obj entity)) + (set-vector! (-> obj root scale) 6.0 6.0 6.0 1.0) + (let ((v1-3 (rand-vu-int-count 3))) + (cond + ((zero? v1-3) + (dummy-14 obj *sunkenfisha-red-yellow-sg* '()) + ) + ((= v1-3 1) + (dummy-14 obj *sunkenfisha-yellow-blue-sg* '()) + ) + ((= v1-3 2) + (dummy-14 obj *sunkenfisha-yellow-eye-sg* '()) + ) + ) + ) + (ja-channel-set! 1) + (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 6)) + num-func-identity + ) + (let ((f0-4 0.0)) + (set! (-> s5-0 frame-num) f0-4) + f0-4 + ) + ) + ) + +(defmethod TODO-RENAME-27 sunkenfisha ((obj sunkenfisha)) + (local-vars (sv-16 res-tag) (sv-32 res-tag) (sv-48 res-tag)) + (vector-reset! (-> obj path-trans-offset)) + (set! (-> obj path-u) (rand-vu-float-range 0.0 1.0)) + (if (zero? (rand-vu-int-count 2)) + (set! (-> obj path-dir) 1.0) + (set! (-> obj path-dir) -1.0) + ) + (set-vector! (-> obj max-local-path-offset) 16384.0 28672.0 0.0 1.0) + (set! sv-16 (new 'static 'res-tag)) + (let + ((v1-5 + (res-lump-data + (-> obj entity) + 'path-max-offset + (pointer float) + :tag-ptr + (& sv-16) + ) + ) + ) + (when v1-5 + (set! (-> obj max-local-path-offset x) (-> v1-5 0)) + (set! (-> obj max-local-path-offset y) (-> v1-5 1)) + ) + ) + (set-vector! (-> obj local-path-offset) 0.0 0.0 0.0 1.0) + (set! + (-> obj local-path-offset x) + (rand-vu-float-range + (- (-> obj max-local-path-offset x)) + (-> obj max-local-path-offset x) + ) + ) + (set! + (-> obj local-path-offset y) + (rand-vu-float-range + (- (-> obj max-local-path-offset y)) + (-> obj max-local-path-offset y) + ) + ) + (set! (-> obj targ-local-path-offset quad) (-> obj local-path-offset quad)) + (set! + (-> obj targ-local-path-offset x) + (rand-vu-float-range + (- (-> obj max-local-path-offset x)) + (-> obj max-local-path-offset x) + ) + ) + (set! + (-> obj targ-local-path-offset y) + (rand-vu-float-range + (- (-> obj max-local-path-offset y)) + (-> obj max-local-path-offset y) + ) + ) + (vector-! + (-> obj local-path-offset-dir) + (-> obj targ-local-path-offset) + (-> obj local-path-offset) + ) + (vector-normalize! (-> obj local-path-offset-dir) 1.0) + (set! + (-> obj change-path-dir-time) + (the-as + uint + (+ (-> *display* base-frame-counter) (rand-vu-int-range 1500 5400)) + ) + ) + (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) + ) + (set! sv-32 (new 'static 'res-tag)) + (let + ((v1-16 + (res-lump-data + (-> obj entity) + 'path-trans-offset + (pointer float) + :tag-ptr + (& sv-32) + ) + ) + ) + (when v1-16 + (+! (-> obj path-trans-offset x) (-> v1-16 0)) + (+! (-> obj path-trans-offset y) (-> v1-16 1)) + (+! (-> obj path-trans-offset z) (-> v1-16 2)) + ) + ) + (if (< (-> obj path curve num-cverts) 2) + (go process-drawable-art-error "bad path") + ) + (let ((f28-0 8192.0) + (f30-0 26624.0) + ) + (set! sv-48 (new 'static 'res-tag)) + (let + ((v1-23 + (res-lump-data (-> obj entity) 'speed (pointer float) :tag-ptr (& sv-48)) + ) + ) + (when v1-23 + (set! f28-0 (-> v1-23 0)) + (set! f30-0 (-> v1-23 1)) + ) + ) + (let ((f0-35 (path-distance (-> obj path)))) + (set! (-> obj path-normal-speed-lo) (/ f28-0 f0-35)) + (set! (-> obj path-normal-speed-hi) (/ f30-0 f0-35)) + ) + ) + (set! + (-> obj path-speed-seek-speed) + (* 2.0 (- (-> obj path-normal-speed-hi) (-> obj path-normal-speed-lo))) + ) + (set! + (-> obj path-speed) + (rand-vu-float-range + (-> obj path-normal-speed-lo) + (-> obj path-normal-speed-hi) + ) + ) + (set! (-> obj targ-path-speed) (-> obj path-speed)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (TODO-RENAME-14 (-> obj path) s4-0 (-> obj path-u)) + (set-vector! (-> obj facing-rot) 0.0 (atan (-> s4-0 x) (-> s4-0 z)) 0.0 1.0) + ) + (when (< (-> obj path-dir) 0.0) + (let ((f0-52 (- (-> obj facing-rot y)))) + (set! (-> obj facing-rot y) f0-52) + f0-52 + ) + ) + ) + +(defbehavior sunkenfisha-init-by-other sunkenfisha ((arg0 entity)) + (set! (-> self entity) arg0) + (TODO-RENAME-26 self) + (TODO-RENAME-27 self) + (go sunkenfisha-idle) + (none) + ) + +(defmethod copy-defaults! sunkenfisha ((obj sunkenfisha) (arg0 res-lump)) + (TODO-RENAME-26 obj) + (TODO-RENAME-27 obj) + (let + ((s5-0 + (+ + (res-lump-value + (-> obj entity) + 'count + uint128 + :default + (the-as uint128 1) + ) + -1 + ) + ) + ) + (while (> (the-as int s5-0) 0) + (let ((s4-0 (get-process *default-dead-pool* sunkenfisha #x4000))) + (when s4-0 + (let ((t9-4 (method-of-type sunkenfisha activate))) + (t9-4 + (the-as sunkenfisha s4-0) + obj + 'sunkenfisha + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s4-0 sunkenfisha-init-by-other (-> obj entity)) + (-> s4-0 ppointer) + ) + ) + (+! s5-0 -1) + ) + ) + (go sunkenfisha-idle) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/sunken-obs.gc b/goal_src/levels/sunken/sunken-obs.gc index eea8a6db53..31966f1be2 100644 --- a/goal_src/levels/sunken/sunken-obs.gc +++ b/goal_src/levels/sunken/sunken-obs.gc @@ -5,3 +5,16 @@ ;; name in dgo: sunken-obs ;; dgos: L1, SUN, SUNKEN +(define-extern *sunkencam-sg* skeleton-group) + +;; TODO - for square-platform +(deftype sunkencam (pov-camera) + ((seq uint64 :offset-assert 224) + ) + :method-count-assert 30 + :size-assert #xe8 + :heap-base #x80 + :flag-assert #x1e008000e8 + ) + +;; decomp begins diff --git a/goal_src/levels/sunken/sunken-water.gc b/goal_src/levels/sunken/sunken-water.gc index 09b2508666..d807497717 100644 --- a/goal_src/levels/sunken/sunken-water.gc +++ b/goal_src/levels/sunken/sunken-water.gc @@ -5,3 +5,350 @@ ;; name in dgo: sunken-water ;; dgos: L1, SUN, SUNKEN +;; DECOMP BEGINS + +(deftype sunken-water (water-anim) + ((use-sync? symbol :offset-assert 220) + (playing-deadly-sound? symbol :offset-assert 224) + (deadly-time float :offset-assert 228) + (deadly-fade float :offset-assert 232) + (sync sync-info :inline :offset-assert 236) + (safe-color-mult vector :inline :offset-assert 256) + (safe-color-emissive vector :inline :offset-assert 272) + (deadly-color-mult vector :inline :offset-assert 288) + (deadly-color-emissive vector :inline :offset-assert 304) + ) + :heap-base #xd0 + :method-count-assert 31 + :size-assert #x140 + :flag-assert #x1f00d00140 + (:methods + (draw-ripple (_type_) symbol 30) + ) + ) + + +(define + ripple-for-sunken-water + (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + +(set! + (-> *part-group-id-table* 446) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-sunken-water-deadly-water" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 1736 :fade-after (meters 50.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! + (-> *part-id-table* 1736) + (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-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) + (sp-flt spt-scale-y (meters 0.25)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.1875)) + (sp-flt spt-scalevel-y (meters -0.001875)) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 81) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 2022) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 2022) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-fade-a -1.28) + (sp-end) + ) + ) + ) + +(defmethod draw-ripple sunken-water ((obj sunken-water)) + (set! (-> obj draw ripple send-query) #t) + (let ((gp-0 (-> obj draw ripple query))) + (let ((a0-1 (-> *display* base-frame-counter))) + (set! (-> gp-0 start-vertex) (logand (* 13 (logand a0-1 127)) 127)) + ) + (set! (-> gp-0 vertex-skip) 128) + (dotimes (s5-0 (-> gp-0 vertex-count)) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 1736) + (-> gp-0 data s5-0) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + #f + ) + +(defstate water-vol-idle (sunken-water) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (if (= (-> arg3 param 0) 'attack) + (sound-play-by-name + (static-sound-name "get-shocked") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + (else + ((-> (method-of-type water-anim water-vol-idle) event) arg0 arg1 arg2 arg3) + ) + ) + ) + :trans + (behavior () + (let ((t9-0 (-> (method-of-type water-anim water-vol-idle) trans))) + (if t9-0 + (t9-0) + ) + ) + (cond + ((-> self use-sync?) + (cond + ((< (get-current-phase (-> self sync)) (-> self deadly-time)) + (when (!= (-> self deadly-fade) 1.0) + (set! + (-> self deadly-fade) + (seek + (-> self deadly-fade) + 1.0 + (* 8.0 (-> *display* seconds-per-frame)) + ) + ) + (let ((f30-0 (-> self deadly-fade))) + (vector-lerp! + (-> self draw color-mult) + (-> self safe-color-mult) + (-> self deadly-color-mult) + f30-0 + ) + (vector-lerp! + (-> self draw color-emissive) + (-> self safe-color-emissive) + (-> self deadly-color-emissive) + f30-0 + ) + (set! (-> self draw color-mult w) 0.5) + (if (= f30-0 1.0) + (set! (-> self flags) (logior #x80000 (-> self flags))) + ) + ) + ) + (draw-ripple self) + (when (not (-> self playing-deadly-sound?)) + (set! (-> self playing-deadly-sound?) #t) + (sound-play-by-name + (static-sound-name "water-on") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (update! (-> self sound)) + ) + (else + (set! (-> self flags) (logand -524289 (-> self flags))) + (when (!= (-> self deadly-fade) 0.0) + (set! + (-> self deadly-fade) + (seek + (-> self deadly-fade) + 0.0 + (* 8.0 (-> *display* seconds-per-frame)) + ) + ) + (let ((f30-1 (-> self deadly-fade))) + (vector-lerp! + (-> self draw color-mult) + (-> self safe-color-mult) + (-> self deadly-color-mult) + f30-1 + ) + (vector-lerp! + (-> self draw color-emissive) + (-> self safe-color-emissive) + (-> self deadly-color-emissive) + f30-1 + ) + (set! (-> self draw color-mult w) 0.5) + (if (= f30-1 0.0) + (set! (-> self flags) (logand -524289 (-> self flags))) + ) + ) + ) + (when (-> self playing-deadly-sound?) + (set! (-> self playing-deadly-sound?) #f) + (stop! (-> self sound)) + (sound-play-by-name + (static-sound-name "water-off") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + ) + (TODO-RENAME-10 + *palette-fade-controls* + 3 + (-> self deadly-fade) + (vector-vector-distance (-> self root trans) (camera-pos)) + (the-as vector #f) + ) + ) + (else + (when (logtest? #x80000 (-> self flags)) + (draw-ripple self) + (update! (-> self sound)) + (set! (-> self playing-deadly-sound?) #t) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior sunken-water) ja-post) + ) + +(defmethod TODO-RENAME-25 sunken-water ((obj sunken-water)) + (local-vars (v0-3 uint)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-25))) + (t9-0 obj) + ) + (set! (-> obj playing-deadly-sound?) #f) + (set-vector! (-> obj safe-color-mult) 0.125 0.225 0.22 0.5) + (set-vector! (-> obj safe-color-emissive) 0.0 0.0 0.0 1.0) + (set-vector! (-> obj deadly-color-mult) 0.125 0.225 0.22 0.5) + (set-vector! (-> obj deadly-color-emissive) 0.33 0.6 0.0 1.0) + (let + ((s5-0 (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15))) + (let ((f0-16 (res-lump-float (-> obj entity) 'percent :default -1.0))) + (if (or (< f0-16 0.0) (< 1.0 f0-16)) + (set! f0-16 (cond + (s5-0 + 0.5 + ) + ((logtest? #x80000 (-> obj flags)) + 1.0 + ) + (else + 0.0 + ) + ) + ) + ) + (when (and s5-0 (or (= f0-16 0.0) (= f0-16 1.0))) + (set! s5-0 #f) + (if (= f0-16 0.0) + (set! (-> obj flags) (logior #x80000 (-> obj flags))) + (set! (-> obj flags) (logand -524289 (-> obj flags))) + ) + ) + (set! (-> obj use-sync?) s5-0) + (set! (-> obj deadly-time) f0-16) + ) + (the-as object (when s5-0 + (cond + ((< (get-current-phase (-> obj sync)) (-> obj deadly-time)) + (set! v0-3 (logior (the-as uint #x80000) (-> obj flags))) + (set! (-> obj flags) v0-3) + ) + (else + (set! v0-3 (logand (the-as uint -524289) (-> obj flags))) + (set! (-> obj flags) v0-3) + ) + ) + v0-3 + ) + ) + ) + ) + +(defmethod TODO-RENAME-22 sunken-water ((obj sunken-water)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (set! (-> obj play-ambient-sound?) #f) + (cond + ((logtest? #x80000 (-> obj flags)) + (set! (-> obj draw color-mult quad) (-> obj deadly-color-mult quad)) + (set! (-> obj draw color-emissive quad) (-> obj deadly-color-emissive quad)) + (set! (-> obj deadly-fade) 1.0) + ) + (else + (set! (-> obj draw color-mult quad) (-> obj safe-color-mult quad)) + (set! (-> obj draw color-emissive quad) (-> obj safe-color-emissive quad)) + (set! (-> obj deadly-fade) 0.0) + ) + ) + (let ((s5-0 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) s5-0) + (set! (-> s5-0 global-scale) 3072.0) + (set! (-> s5-0 close-fade-dist) 163840.0) + (set! (-> s5-0 far-fade-dist) 245760.0) + (set! (-> s5-0 waveform) ripple-for-sunken-water) + (let ((v0-2 (new 'process 'ripple-merc-query 100))) + (set! (-> s5-0 query) v0-2) + (the-as ripple-wave-set v0-2) + ) + ) + ) + + + + diff --git a/goal_src/levels/sunken/wall-plat.gc b/goal_src/levels/sunken/wall-plat.gc index fda208942d..ef30f4b514 100644 --- a/goal_src/levels/sunken/wall-plat.gc +++ b/goal_src/levels/sunken/wall-plat.gc @@ -14,7 +14,8 @@ (define-extern wall-plat-extended (state wall-plat)) ;; unknown type (define-extern wall-plat-extending (state wall-plat)) ;; unknown type -;; definition of type wall-plat +;; DECOMP BEGINS + (deftype wall-plat (process-drawable) ((root-override collide-shape-moving :offset 112) (use-sync? symbol :offset-assert 176) @@ -29,7 +30,7 @@ :flag-assert #x14008000f0 ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -47,7 +48,6 @@ (set! *wall-plat-sg* v1-1) ) -;; failed to figure out what this is: (defstate wall-plat-retracted (wall-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -72,7 +72,6 @@ ) ) -;; failed to figure out what this is: (defstate wall-plat-extending (wall-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -107,7 +106,7 @@ (the-as (function none :behavior wall-plat) rider-trans) :code (behavior () - ((method-of-object (-> self root-override) dummy-49)) + (dummy-49 (-> self root-override)) (set! (-> self state-time) (the-as seconds (-> *display* base-frame-counter)) @@ -141,7 +140,6 @@ (the-as (function none :behavior wall-plat) rider-post) ) -;; failed to figure out what this is: (defstate wall-plat-extended (wall-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -165,7 +163,6 @@ ) ) -;; failed to figure out what this is: (defstate wall-plat-retracting (wall-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -233,7 +230,6 @@ (the-as (function none :behavior wall-plat) rider-post) ) -;; failed to figure out what this is: (defstate wall-plat-sync-idle (wall-plat) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) @@ -279,7 +275,7 @@ ) ((= f30-0 1.0) (set! gp-0 #f) - ((method-of-object (-> self root-override) dummy-49)) + (dummy-49 (-> self root-override)) ) (else (when (not gp-0) @@ -294,7 +290,7 @@ ) (set! gp-0 #t) ) - ((method-of-object (-> self root-override) dummy-49)) + (dummy-49 (-> self root-override)) ) ) ) @@ -307,7 +303,6 @@ (the-as (function none :behavior wall-plat) rider-post) ) -;; definition for method 11 of type wall-plat (defmethod copy-defaults! wall-plat ((obj wall-plat) (arg0 res-lump)) (set! (-> obj extended-amount) 0.0) (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) diff --git a/goal_src/levels/swamp/swamp-bat.gc b/goal_src/levels/swamp/swamp-bat.gc index 6decc880fa..8d1219f0e4 100644 --- a/goal_src/levels/swamp/swamp-bat.gc +++ b/goal_src/levels/swamp/swamp-bat.gc @@ -5,3 +5,1033 @@ ;; name in dgo: swamp-bat ;; dgos: L1, SWA +(define-extern *swamp-bat-slave-sg* skeleton-group) + +(declare-type swamp-bat-slave process-drawable) +(define-extern swamp-bat-slave-idle (state swamp-bat-slave)) ;; unknown type +(define-extern swamp-bat-slave-return (state swamp-bat-slave)) ;; unknown type +(define-extern swamp-bat-slave-strafe (state swamp-bat-slave)) ;; unknown type +(define-extern swamp-bat-slave-swoop (state swamp-bat-slave)) ;; unknown type +(define-extern swamp-bat-slave-die (state handle swamp-bat-slave)) ;; unknown type +(define-extern swamp-bat-slave-launch (state swamp-bat-slave)) ;; unknown type +(declare-type swamp-bat process-drawable) +(define-extern swamp-bat-idle (state swamp-bat)) ;; unknown type +(define-extern swamp-bat-launch-slaves (state swamp-bat)) ;; unknown type + +;; DECOMP BEGINS + +(deftype swamp-bat-idle-path (structure) + ((origin vector :inline :offset-assert 0) + (x-axis vector :inline :offset-assert 16) + (y-axis vector :inline :offset-assert 32) + ) + :method-count-assert 10 + :size-assert #x30 + :flag-assert #xa00000030 + (:methods + (TODO-RENAME-9 (_type_ vector float) vector 9) + ) + ) + + +(defmethod + TODO-RENAME-9 + swamp-bat-idle-path + ((obj swamp-bat-idle-path) (arg0 vector) (arg1 float)) + (let ((f30-0 (* 65536.0 arg1))) + (set! (-> arg0 quad) (-> obj origin quad)) + (vector+*! arg0 arg0 (-> obj x-axis) (cos f30-0)) + (vector+*! arg0 arg0 (-> obj y-axis) (sin f30-0)) + ) + arg0 + ) + +(deftype swamp-bat (process-drawable) + ((child-process (pointer swamp-bat-slave) :offset 20) + (root-override collide-shape :offset 112) + (fact-override fact-info-enemy :offset 144) + (path-origin vector :inline :offset-assert 176) + (idle-position-angle float 8 :offset-assert 192) + (path-select-plane plane 2 :inline :offset-assert 224) + (path-list curve-control 2 :offset-assert 256) + (path-select int8 :offset-assert 264) + (slave-count int8 :offset-assert 265) + (path-count int8 :offset-assert 266) + ) + :heap-base #xa0 + :method-count-assert 20 + :size-assert #x10b + :flag-assert #x1400a0010b + ) + + +(defmethod relocate swamp-bat ((obj swamp-bat) (arg0 int)) + (dotimes (v1-0 2) + (if (nonzero? (-> obj path-list v1-0)) + (&+! (-> obj path-list v1-0) arg0) + ) + ) + (the-as + swamp-bat + ((the-as + (function process-drawable int process-drawable) + (find-parent-method swamp-bat 7) + ) + obj + arg0 + ) + ) + ) + +(deftype swamp-bat-slave (process-drawable) + ((parent-process (pointer swamp-bat) :offset 12) + (root-override collide-shape-moving :offset 112) + (sync sync-info :inline :offset-assert 176) + (idle-anim-speed float :offset-assert 184) + (strafe-envelope float :offset-assert 188) + (strafe-distance float :offset-assert 192) + (path-point-count float :offset-assert 196) + (idle-path swamp-bat-idle-path :inline :offset-assert 208) + (idle-position vector :inline :offset-assert 256) + (idle-position-index int8 :offset-assert 272) + (path-select int8 :offset-assert 273) + (launch-ready symbol :offset-assert 276) + ) + :heap-base #xb0 + :method-count-assert 21 + :size-assert #x118 + :flag-assert #x1500b00118 + (:methods + (dummy-20 (_type_) float 20) + ) + ) + + +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defbehavior + swamp-bat-slave-event-handler swamp-bat-slave + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'attack) + (logclear! (-> self mask) (process-mask actor-pause)) + (go swamp-bat-slave-die (process->handle arg0)) + ) + ((= v1-0 'touch) + (level-hint-spawn + (game-text-id swamp-bats-hint) + "sksp0156" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (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)) + (set! + (-> a1-2 param 1) + (the-as uint (new 'static 'attack-info)) + ) + (send-event-function arg0 a1-2) + ) + ) + ((= v1-0 'launch) + (if (-> self launch-ready) + (go swamp-bat-slave-launch) + ) + ) + ) + ) + ) + ) + +swamp-bat-slave-event-handler + +(defbehavior swamp-bat-slave-post swamp-bat-slave () + (transform-post) + ) + +(defmethod dummy-20 swamp-bat-slave ((obj swamp-bat-slave)) + (* (get-current-phase (-> obj sync)) (-> obj path-point-count)) + ) + +(defbehavior swamp-bat-slave-path-post swamp-bat-slave () + (let ((s2-0 (-> self parent-process 0 path-list (-> self path-select))) + (s5-0 (new-stack-vector0)) + (gp-0 (new-stack-vector0)) + (s4-0 (new-stack-vector0)) + (f30-0 (dummy-20 self)) + (s3-0 (new 'static 'vector :y 1.0 :w 1.0)) + ) + (eval-path-curve-div! s2-0 s5-0 f30-0 'interp) + (TODO-RENAME-12 s2-0 gp-0 f30-0) + (vector-cross! s4-0 gp-0 s3-0) + (vector-normalize! s4-0 1.0) + (let + ((f0-4 + (fmax + (fmin + (- (vector-dot (target-pos 0) s4-0) (vector-dot s5-0 s4-0)) + (-> self strafe-envelope) + ) + (- (-> self strafe-envelope)) + ) + ) + ) + (set! + (-> self strafe-distance) + (seek + (-> self strafe-distance) + f0-4 + (* 20480.0 (-> *display* seconds-per-frame)) + ) + ) + ) + (vector-float*! s4-0 s4-0 (-> self strafe-distance)) + (vector+! (-> self root-override trans) s5-0 s4-0) + (forward-up->quaternion (-> self root-override quat) gp-0 s3-0) + ) + (swamp-bat-slave-post) + ) + +(let + ((v1-7 + (new 'static 'skeleton-group + :art-group-name "swamp-bat" + :bounds (new 'static 'vector :w 10240.0) + :max-lod 2 + :version #x6 + ) + ) + ) + (set! (-> v1-7 jgeo) 0) + (set! (-> v1-7 janim) 4) + (set! (-> v1-7 mgeo 0) (the-as uint 1)) + (set! (-> v1-7 lod-dist 0) 81920.0) + (set! (-> v1-7 mgeo 1) (the-as uint 2)) + (set! (-> v1-7 lod-dist 1) 163840.0) + (set! (-> v1-7 mgeo 2) (the-as uint 3)) + (set! (-> v1-7 lod-dist 2) 4095996000.0) + (set! *swamp-bat-slave-sg* v1-7) + ) + +(defbehavior swamp-bat-slave-get-new-path swamp-bat-slave () + (set! (-> self path-select) (-> self parent-process 0 path-select)) + (set! + (-> self idle-path origin quad) + (-> self parent-process 0 path-origin quad) + ) + (let* + ((f28-0 + (-> + self + parent-process + 0 + idle-position-angle + (-> self idle-position-index) + ) + ) + (f30-0 (cos f28-0)) + (f26-0 (sin f28-0)) + (f28-1 (cos 8192.0)) + ) + (let ((f0-0 (sin 8192.0))) + (set! (-> self idle-path x-axis x) (* 12288.0 f30-0)) + (set! (-> self idle-path x-axis y) 0.0) + (set! (-> self idle-path x-axis z) (* 12288.0 f26-0)) + (set! (-> self idle-path x-axis w) 1.0) + (set! (-> self idle-path y-axis x) (* -12288.0 f26-0 f28-1)) + (set! (-> self idle-path y-axis y) (* 12288.0 f0-0)) + ) + (set! (-> self idle-path y-axis z) (* 12288.0 f30-0 f28-1)) + ) + (set! (-> self idle-path y-axis w) 1.0) + (vector+! + (-> self idle-position) + (the-as vector (-> self idle-path)) + (-> self idle-path x-axis) + ) + (let + ((f0-8 + (the + float + (+ + (-> + self + parent-process + 0 + path-list + (-> self path-select) + curve + num-cverts + ) + -1 + ) + ) + ) + ) + (set! (-> self path-point-count) f0-8) + f0-8 + ) + ) + +(defstate swamp-bat-slave-idle (swamp-bat-slave) + :event + swamp-bat-slave-event-handler + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self launch-ready) #f) + (ja-channel-push! 1 49) + (let ((v1-4 (-> self skel root-channel 0))) + (set! + (-> v1-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> s5-0 quad) (-> self root-override trans quad)) + (let + ((s4-0 + (quaternion-copy! + (new 'stack-no-clear 'quaternion) + (-> self root-override quat) + ) + ) + (gp-0 (new-stack-quaternion0)) + ) + (let + ((s2-0 + (TODO-RENAME-12 + (-> self parent-process 0 path-list (-> self path-select)) + (new 'stack-no-clear 'vector) + 0.1 + ) + ) + ) + 0 + (let* ((f0-0 300.0) + (f1-0 32768.0) + (s3-0 + (the + int + (* + f0-0 + (/ 1.0 f1-0) + (vector-vector-distance s5-0 (-> self idle-position)) + ) + ) + ) + ) + (forward-up->quaternion gp-0 s2-0 (new 'static 'vector :y 1.0 :w 1.0)) + (while #t + (let + ((v1-17 + (- + (-> *display* base-frame-counter) + (the-as int (-> self state-time)) + ) + ) + ) + (when (>= v1-17 s3-0) + 0 + (goto cfg-10) + ) + (let ((f30-1 (/ (the float v1-17) (the float s3-0)))) + (when *run-time-assert-enable* + (set-pos + *__private-assert-info* + "swamp-bat" + (the-as uint 283) + (the-as uint 20) + ) + (__assert (< f30-1 1.0) "(< interp 1.0)") + ) + (vector-lerp! + (-> self root-override trans) + s5-0 + (-> self idle-position) + f30-1 + ) + (quaternion-slerp! (-> self root-override quat) s4-0 gp-0 f30-1) + ) + ) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 param 0) (-> self idle-anim-speed)) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + 0 + ) + ) + ) + (label cfg-10) + (set! (-> self root-override trans quad) (-> self idle-position quad)) + (quaternion-copy! (-> self root-override quat) gp-0) + ) + ) + (set! (-> self launch-ready) #t) + (logior! (-> self mask) (process-mask actor-pause)) + (let ((f30-2 0.0)) + (while #t + (let ((f26-0 (cos f30-2)) + (f28-0 (sin f30-2)) + ) + (set! (-> self root-override trans quad) (-> self idle-path origin quad)) + (vector+*! + (-> self root-override trans) + (-> self root-override trans) + (-> self idle-path x-axis) + f26-0 + ) + (vector+*! + (-> self root-override trans) + (-> self root-override trans) + (-> self idle-path y-axis) + f28-0 + ) + ) + (let ((a0-26 (-> self skel root-channel 0))) + (set! (-> a0-26 param 0) (-> self idle-anim-speed)) + (joint-control-channel-group-eval! + a0-26 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + (+! + f30-2 + (* 32768.0 (-> *display* seconds-per-frame) (-> self idle-anim-speed)) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-post) + ) + +(defstate swamp-bat-slave-launch (swamp-bat-slave) + :event + swamp-bat-slave-event-handler + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self launch-ready) #f) + (ja-channel-push! 1 30) + (let ((gp-0 (new-stack-vector0))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (let ((s5-0 (new-stack-vector0))) + (eval-path-curve-div! + (-> self parent-process 0 path-list (-> self path-select)) + s5-0 + 0.0 + 'interp + ) + (let ((v1-12 (-> self skel root-channel 0))) + (set! + (-> v1-12 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + ) + (while #t + (let + ((s4-0 + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + ) + ) + (if (>= s4-0 90) + (go swamp-bat-slave-swoop) + ) + (let ((f0-1 (* 0.011111111 (the float s4-0)))) + (vector-lerp! (-> self root-override trans) gp-0 s5-0 f0-1) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (-> self idle-anim-speed)) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + 0 + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-post) + ) + +(defstate swamp-bat-slave-swoop (swamp-bat-slave) + :event + swamp-bat-slave-event-handler + :code + (behavior () + (set! (-> self strafe-envelope) 0.0) + (ja-channel-push! 1 30) + (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) + ) + (until (ja-done? 0) + (if (< (ja-aframe-num 0) 10.0) + (sync-now! (-> self sync) 0.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 strafe-envelope) 20480.0) + (ja-channel-push! 1 30) + (let ((v1-18 (-> self skel root-channel 0))) + (set! + (-> v1-18 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + (while #t + (if (>= (dummy-20 self) 2.0) + (go swamp-bat-slave-strafe) + ) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) 1.0) + (joint-control-channel-group-eval! + a0-11 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-path-post) + ) + +(defstate swamp-bat-slave-strafe (swamp-bat-slave) + :event + swamp-bat-slave-event-handler + :code + (behavior () + (set! (-> self strafe-envelope) 20480.0) + (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 7)) + ) + ) + (while #t + (if (>= (dummy-20 self) 6.0) + (go swamp-bat-slave-return) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-path-post) + ) + +(defstate swamp-bat-slave-return (swamp-bat-slave) + :event + swamp-bat-slave-event-handler + :code + (behavior () + (set! (-> self strafe-envelope) 0.0) + (ja-channel-push! 1 22) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + ) + (let ((f30-0 (+ -1.0 (-> self path-point-count))) + (gp-0 #t) + ) + (while #t + (let ((f28-0 (dummy-20 self))) + (if (>= f28-0 f30-0) + (go swamp-bat-slave-idle) + ) + (when (and gp-0 (>= f28-0 7.0) (< f28-0 8.0)) + (set! gp-0 #f) + (when (!= (-> self path-select) (-> self parent-process 0 path-select)) + (swamp-bat-slave-get-new-path) + (go swamp-bat-slave-idle) + ) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) 1.0) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-path-post) + ) + +(defstate swamp-bat-slave-die (swamp-bat-slave) + :event + (the-as + (function process int symbol event-message-block object :behavior swamp-bat-slave) + process-drawable-death-event-handler + ) + :code + (behavior ((arg0 handle)) + (ja-channel-push! 1 21) + (let ((gp-0 (new-stack-vector0))) + (let ((v1-1 (handle->process arg0))) + (if v1-1 + (vector-! + gp-0 + (-> self root-override trans) + (-> (the-as swamp-bat v1-1) root-override trans) + ) + ) + ) + (set! (-> gp-0 y) (+ -6144.0 (-> gp-0 y))) + (vector-normalize! gp-0 98304.0) + (let ((v1-8 (-> self skel root-channel 0))) + (set! + (-> v1-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + ) + (until (ja-done? 0) + (vector-v++! (-> self root-override trans) gp-0) + (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) 0.5) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (suspend) + ) + ) + (dummy-18 self) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-post) + ) + +(defbehavior + swamp-bat-slave-init-by-other swamp-bat-slave + ((arg0 swamp-bat-slave) (arg1 int)) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (let + ((s4-0 + (new + 'process + 'collide-shape-moving + self + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 1) 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 6144.0) + (dummy-46 s4-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 3) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> self root-override) s4-0) + ) + (set! (-> self root-override trans quad) (-> arg0 root-override trans quad)) + (set! + (-> self root-override quat vec quad) + (-> arg0 root-override quat vec quad) + ) + (vector-float*! (-> self root-override scale) *identity-vector* 2.0) + (set! (-> self root-override pause-adjust-distance) 286720.0) + (set! + (-> self fact) + (new + 'process + 'fact-info-enemy + self + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! (-> self idle-anim-speed) (rand-vu-float-range 0.9 1.1)) + (set! (-> self strafe-distance) 0.0) + (set! (-> self strafe-envelope) 0.0) + (set! (-> self idle-position-index) arg1) + (swamp-bat-slave-get-new-path) + (set! (-> self root-override trans quad) (-> self idle-position quad)) + (setup-params! (-> self sync) (the-as uint 1200) 0.0 0.15 0.15) + (dummy-14 self *swamp-bat-slave-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (go swamp-bat-slave-idle) + (none) + ) + +(defbehavior swamp-bat-setup-new-path swamp-bat ((arg0 int)) + (when *run-time-assert-enable* + (set-pos + *__private-assert-info* + "swamp-bat" + (the-as uint 520) + (the-as uint 2) + ) + (__assert-zero-lim-range-int + arg0 + (-> self path-count) + "path-index" + "(-> self path-count)" + ) + ) + (when (< 0.0 (the float (+ (-> self path-list arg0 curve num-cverts) -1))) + (set! (-> self path-select) arg0) + (let ((f30-0 0.0) + (f28-0 (/ 65536.0 (the float (-> self slave-count)))) + ) + (eval-path-curve-div! + (-> self path-list arg0) + (-> self path-origin) + 0.0 + 'interp + ) + (dotimes (v1-16 (-> self slave-count)) + (set! (-> self idle-position-angle v1-16) f30-0) + (+! f30-0 f28-0) + ) + ) + #f + ) + ) + +(defbehavior swamp-bat-make-path-select-plane swamp-bat ((arg0 int)) + (when *run-time-assert-enable* + (set-pos + *__private-assert-info* + "swamp-bat" + (the-as uint 538) + (the-as uint 2) + ) + (__assert-zero-lim-range-int + arg0 + (-> self path-count) + "path-index" + "(-> self path-count)" + ) + ) + (let* ((s5-0 (-> self path-list arg0)) + (gp-1 (TODO-RENAME-12 s5-0 (-> self path-select-plane arg0) 5.0)) + (s5-1 + (eval-path-curve-div! s5-0 (new 'stack-no-clear 'vector) 5.0 'interp) + ) + ) + (set! (-> gp-1 y) 0.0) + (vector-normalize! gp-1 1.0) + (let ((f0-3 (- (vector-dot s5-1 gp-1)))) + (set! (-> gp-1 w) f0-3) + f0-3 + ) + ) + ) + +(defbehavior swamp-bat-update-path swamp-bat () + (dotimes (gp-0 (-> self path-count)) + (when (!= (-> self path-select) gp-0) + (let* ((s5-0 (-> self path-select-plane gp-0)) + (f0-2 + (+ (vector-dot (target-pos 0) (the-as vector s5-0)) (-> s5-0 w)) + ) + ) + (if (< 0.0 f0-2) + (swamp-bat-setup-new-path gp-0) + ) + ) + ) + ) + (none) + ) + +(defbehavior swamp-bat-debug swamp-bat () + 0 + (none) + ) + +(defbehavior swamp-bat-check-slave-paths-match? swamp-bat ((arg0 int)) + (let ((v1-0 (the-as (pointer process-tree) (-> self child-process)))) + (while v1-0 + (if + (and + (-> (the-as swamp-bat-slave (-> v1-0 0)) launch-ready) + (!= (-> (the-as swamp-bat-slave (-> v1-0 0)) path-select) arg0) + ) + (return #f) + ) + (set! v1-0 (-> v1-0 0 brother)) + ) + ) + #t + ) + +(defstate swamp-bat-idle (swamp-bat) + :trans + swamp-bat-debug + :code + (behavior () + (when (zero? (-> self path-count)) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + ) + (while #t + (when + (and + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 60 + ) + *target* + (>= + (-> self fact-override idle-distance) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (when (not (-> self child-process)) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + ) + (swamp-bat-update-path) + (let ((s5-0 (method-of-object (-> self vol) dummy-10))) + (target-pos 5) + (if + (or + (s5-0) + (not (swamp-bat-check-slave-paths-match? (-> self path-select))) + ) + (go swamp-bat-launch-slaves) + ) + ) + ) + (let ((gp-1 (new 'static 'matrix))) + (quaternion->matrix gp-1 (-> self root-override quat)) + (set! (-> gp-1 vector 3 quad) (-> self root-override trans quad)) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat) #f) + ) + +(defbehavior swamp-bat-launch-slave swamp-bat () + (let ((gp-0 (the-as (pointer process-tree) (-> self child-process))) + (v0-0 (the-as object #f)) + ) + (while (and gp-0 (not v0-0)) + (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) 'launch) + (set! v0-0 (send-event-function (ppointer->process gp-0) a1-0)) + ) + (set! gp-0 (-> gp-0 0 brother)) + ) + v0-0 + ) + ) + +(defstate swamp-bat-launch-slaves (swamp-bat) + :trans + swamp-bat-debug + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (while #t + (swamp-bat-update-path) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 150 + ) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (if (not (swamp-bat-launch-slave)) + (go swamp-bat-idle) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat) #f) + ) + +(defmethod copy-defaults! swamp-bat ((obj swamp-bat) (arg0 res-lump)) + (let + ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (set-vector! + (-> + (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)) + local-sphere + ) + 0.0 + 0.0 + 0.0 + 0.0 + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (set! (-> obj vol) (new 'process 'vol-control obj)) + (logior! (-> obj vol flags) 3) + (set! + (-> obj path-list 0) + (new 'process 'curve-control obj 'path -1000000000.0) + ) + (set! + (-> obj path-list 1) + (new 'process 'curve-control obj 'pathb -1000000000.0) + ) + (logior! + (-> obj path-list 0 flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (logior! + (-> obj path-list 1 flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (set! (-> obj path-count) 0) + (when (< 0.0 (the float (+ (-> obj path-list 0 curve num-cverts) -1))) + (+! (-> obj path-count) 1) + (swamp-bat-make-path-select-plane 0) + ) + (when (< 0.0 (the float (+ (-> obj path-list 1 curve num-cverts) -1))) + (+! (-> obj path-count) 1) + (swamp-bat-make-path-select-plane 1) + ) + (if (!= (-> obj path-count) 2) + (go process-drawable-art-error "need 2 paths") + ) + (set! + (-> obj fact-override) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (let + ((a1-10 + (res-lump-value arg0 'num-lurkers uint128 :default (the-as uint128 6)) + ) + ) + (set! (-> obj slave-count) (max 2 (min 8 (the-as int a1-10)))) + ) + (swamp-bat-setup-new-path 0) + (swamp-bat-update-path) + (dotimes (s5-1 (-> obj slave-count)) + (let ((s4-1 (get-process *default-dead-pool* swamp-bat-slave 4512))) + (when s4-1 + (let ((t9-16 (method-of-type swamp-bat-slave activate))) + (t9-16 + (the-as swamp-bat-slave s4-1) + obj + 'swamp-bat-slave + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s4-1 swamp-bat-slave-init-by-other obj s5-1) + (-> s4-1 ppointer) + ) + ) + ) + (go swamp-bat-idle) + (none) + ) + + + + diff --git a/goal_src/levels/swamp/swamp-rat-nest.gc b/goal_src/levels/swamp/swamp-rat-nest.gc index 9a2190612e..22114f5395 100644 --- a/goal_src/levels/swamp/swamp-rat-nest.gc +++ b/goal_src/levels/swamp/swamp-rat-nest.gc @@ -5,3 +5,1936 @@ ;; name in dgo: swamp-rat-nest ;; dgos: L1, SWA +(declare-type swamp-rat-nest-dummy process-drawable) +(define-extern *swamp-rat-nest-dummy-c-sg* skeleton-group) +(define-extern *swamp-rat-nest-dummy-b-sg* skeleton-group) +(define-extern *swamp-rat-nest-dummy-a-sg* skeleton-group) + +(declare-type swamp-rat-nest process-drawable) +(define-extern swamp-rat-nest-idle (state swamp-rat-nest)) ;; unknown type +(define-extern swamp-rat-nest-active (state swamp-rat-nest)) ;; unknown type +(define-extern swamp-rat-nest-gestate (state swamp-rat-nest)) ;; unknown type +(define-extern swamp-rat-nest-die (state swamp-rat-nest)) ;; unknown type +(define-extern swamp-rat-nest-victory (state swamp-rat-nest)) ;; unknown type +(define-extern swamp-rat-nest-dummy-idle (state swamp-rat-nest-dummy)) ;; unknown type +(define-extern swamp-rat-nest-dummy-hit (state swamp-rat-nest-dummy)) ;; unknown type +(define-extern swamp-rat-nest-dummy-die (state swamp-rat-nest-dummy)) ;; unknown type +(define-extern swamp-rat-nest-dummy-shake (state swamp-rat-nest-dummy)) ;; unknown type + +;; DECOMP BEGINS + +(set! + (-> *part-group-id-table* 292) + (new 'static 'sparticle-launch-group + :length 6 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-a-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 6 + (sp-item 1334) + (sp-item 1335) + (sp-item 1336) + (sp-item 1337) + (sp-item 1338) + (sp-item 1339) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +(set! + (-> *part-group-id-table* 293) + (new 'static 'sparticle-launch-group + :length 4 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-b-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1342) + (sp-item 1339) + (sp-item 1337) + (sp-item 1334) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +(set! + (-> *part-group-id-table* 294) + (new 'static 'sparticle-launch-group + :length 4 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-c-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1335) + (sp-item 1339) + (sp-item 1337) + (sp-item 1334) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +(set! + (-> *part-group-id-table* 295) + (new 'static 'sparticle-launch-group + :length 3 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-a-puff" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 1346) + (sp-item 1347) + (sp-item 1348) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +(set! + (-> *part-group-id-table* 296) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-b-puff" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1350) + (sp-item 1351) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +(set! + (-> *part-group-id-table* 297) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-c-puff" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1353) + (sp-item 1354) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +(set! + (-> *part-id-table* 1353) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 1.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 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 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.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.14222223) + (sp-rnd-flt spt-accel-y -0.34133333 -0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1354) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 85.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.0)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1355) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters -4.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 48.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 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.07111111) + (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 80.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1350) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters -0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 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 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.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.14222223) + (sp-rnd-flt spt-accel-y -0.34133333 -0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1351) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters -1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 85.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 3.0)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1352) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters -10.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 48.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 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.07111111) + (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 80.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1334) + (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 1.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-flt spt-r 196.0) + (sp-flt spt-g 160.0) + (sp-flt spt-b 96.0) + (sp-flt spt-a 32.0) + (sp-flt spt-fade-a -1.0) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1341) + (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 -12.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-flt spt-r 128.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 96.0) + (sp-flt spt-a 16.0) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1339) + (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-rnd-flt spt-num 8.0 8.0 1.0) + (sp-rnd-flt spt-y (meters -1.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.75) (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 48.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.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.08) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.85333335) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-flt spt-friction 0.92) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 40.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.5) (meters 1.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1335) + (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-rnd-flt spt-num 16.0 8.0 1.0) + (sp-rnd-flt spt-y (meters -2.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 48.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.21333334) + (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1340) + (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-rnd-flt spt-num 10.0 5.0 1.0) + (sp-rnd-flt spt-y (meters -12.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 48.0 32.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.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.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.10666667) + (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1336) + (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-rnd-flt spt-num 12.0 8.0 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 48.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.21333334) + (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 50.000004) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 1.0) (meters 1.75) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1337) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 8.0 16.0 1.0) + (sp-rnd-flt spt-y (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.6) 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 32.0 16.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 2.4) 1.0) + (sp-rnd-flt spt-accel-y -8.192 -2.7306666 1.0) + (sp-int spt-timer 750) + (sp-cpuinfo-flags bit2 bit12) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-rnd-flt spt-conerot-x (degrees 15.0) (degrees 60.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 3.5) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1338) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) + (sp-rnd-flt spt-num 32.0 32.0 1.0) + (sp-rnd-flt spt-y (meters 2.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.25) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -6.826667 1.0) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 3.5) (meters 1.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1346) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 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 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.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.14222223) + (sp-rnd-flt spt-accel-y -0.34133333 -0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.5) (meters 1.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1349) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters -12.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 48.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 8.0 8.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.035555556) + (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 80.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.5) (meters 1.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1347) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (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.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 3.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1348) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) + (sp-rnd-flt spt-num 0.5 0.5 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.25) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 3.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1342) + (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-rnd-flt spt-num 20.0 8.0 1.0) + (sp-rnd-flt spt-y (meters -3.5) (meters 2.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 48.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.21333334) + (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1343) + (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-rnd-flt spt-num 16.0 5.0 1.0) + (sp-rnd-flt spt-y (meters -10.5) (meters 2.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 48.0 32.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.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.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.10666667) + (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1344) + (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 -5.0) + (sp-flt spt-y (meters -12.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-flt spt-r 128.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 96.0) + (sp-flt spt-a 16.0) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1345) + (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-rnd-flt spt-num 12.0 4.0 1.0) + (sp-rnd-flt spt-y (meters -4.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 48.0 32.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 48.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.16) + (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) + +(deftype swamp-rat-nest (process-drawable) + ((child-process (pointer swamp-rat-nest-dummy) :offset 20) + (fact-override fact-info-enemy :offset 144) + (dummy (pointer swamp-rat-nest-dummy) :offset-assert 176) + (damaged symbol :offset-assert 180) + (dummy-type int8 :offset-assert 184) + (rat-count int8 :offset-assert 185) + (hit-points int8 :offset-assert 186) + (defensive-rat-count int8 :offset-assert 187) + (spawn-period float :offset-assert 188) + (spawn-period-scale float :offset-assert 192) + (test-interval uint64 :offset-assert 200) + (player-attack-id int32 :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xd4 + :flag-assert #x14007000d4 + ) + + +(deftype swamp-rat-nest-dummy (process-drawable) + ((parent-process (pointer swamp-rat-nest) :offset 12) + (root-override collide-shape :offset 112) + (top-sphere sphere :inline :offset-assert 176) + (death-part sparticle-launch-group :offset-assert 192) + (spawn-joint-array int8 6 :offset-assert 196) + (spawn-joint-count int8 :offset-assert 202) + (particle-spawn-joint int8 :offset-assert 203) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xcc + :flag-assert #x16006000cc + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) int 21) + ) + ) + + +(deftype swamp-rat-nest-dummy-a (swamp-rat-nest-dummy) + () + :heap-base #x60 + :method-count-assert 22 + :size-assert #xcc + :flag-assert #x16006000cc + ) + + +(deftype swamp-rat-nest-dummy-b (swamp-rat-nest-dummy) + () + :heap-base #x60 + :method-count-assert 22 + :size-assert #xcc + :flag-assert #x16006000cc + ) + + +(deftype swamp-rat-nest-dummy-c (swamp-rat-nest-dummy) + () + :heap-base #x60 + :method-count-assert 22 + :size-assert #xcc + :flag-assert #x16006000cc + ) + + +(defbehavior swamp-rat-nest-dummy-draw-spawn-joints swamp-rat-nest-dummy () + (dotimes (gp-0 (-> self spawn-joint-count)) + (let* ((a0-0 (-> self spawn-joint-array gp-0)) + (a2-0 (-> self node-list data a0-0 bone transform)) + ) + (add-debug-matrix #t (bucket-id debug-draw1) a2-0) + ) + ) + #f + ) + +(defbehavior swamp-rat-nest-dummy-take-damage swamp-rat-nest-dummy ((arg0 int)) + (when (not (-> self parent-process 0 damaged)) + (set! (-> self parent-process 0 damaged) #t) + (+! + (-> self parent-process 0 rat-count) + (-> self parent-process 0 defensive-rat-count) + ) + (set! (-> self parent-process 0 spawn-period) 600.0) + ) + (let ((v0-0 (- (-> self parent-process 0 hit-points) arg0))) + (set! (-> self parent-process 0 hit-points) v0-0) + v0-0 + ) + ) + +(defbehavior + swamp-rat-nest-dummy-event-handler swamp-rat-nest-dummy + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'shake) + (if (= (-> self next-state name) 'swamp-rat-nest-dummy-idle) + (go swamp-rat-nest-dummy-shake) + ) + ) + ((= v1-0 'attack) + (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) 'hit) + (send-event-function + (ppointer->process (-> self parent-process)) + a1-1 + ) + ) + (let ((v1-7 (-> arg3 param 2))) + (when (!= v1-7 (-> self parent-process 0 player-attack-id)) + (set! + (-> self parent-process 0 player-attack-id) + (the-as int v1-7) + ) + (cond + ((and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (swamp-rat-nest-dummy-take-damage 3) + (when + (< + (vector-vector-distance + (target-pos 0) + (-> self top-sphere) + ) + (-> self top-sphere w) + ) + (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) 'no-look-around) + (set! (-> a1-3 param 0) (the-as uint 75)) + (send-event-function *target* a1-3) + ) + ) + (go swamp-rat-nest-dummy-hit) + ) + (else + (level-hint-spawn + (game-text-id swamp-rats-nest-hint) + "sksp0144" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (swamp-rat-nest-dummy-take-damage 0) + (go swamp-rat-nest-dummy-hit) + ) + ) + ) + ) + ) + ) + ) + ) + ) + +(defstate swamp-rat-nest-dummy-idle (swamp-rat-nest-dummy) + :event + swamp-rat-nest-dummy-event-handler + :code + (behavior () + (while #t + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 num-func) num-func-identity) + (set! + (-> v1-2 frame-num) + (the float (+ (-> v1-2 frame-group data 0 length) -1)) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest-dummy) transform-post) + ) + +(defstate swamp-rat-nest-dummy-hit (swamp-rat-nest-dummy) + :event + swamp-rat-nest-dummy-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (if (<= (-> self parent-process 0 hit-points) 0) + (go swamp-rat-nest-dummy-die) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-0 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (< (-> self parent-process 0 hit-points) 3) + (spawn + (-> self part) + (-> + self + node-list + data + (-> self particle-spawn-joint) + bone + transform + vector + 3 + ) + ) + ) + (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 swamp-rat-nest-dummy-idle) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest-dummy) transform-post) + ) + +(defstate swamp-rat-nest-dummy-shake (swamp-rat-nest-dummy) + :event + swamp-rat-nest-dummy-event-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-0 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go swamp-rat-nest-dummy-idle) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest-dummy) transform-post) + ) + +(defstate swamp-rat-nest-dummy-die (swamp-rat-nest-dummy) + :event + (the-as + (function process int symbol event-message-block object :behavior swamp-rat-nest-dummy) + #f + ) + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! + (-> self parent-process 0 dummy) + (the-as (pointer swamp-rat-nest-dummy) #f) + ) + (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 + (-> self death-part) + -1 + #f + #f + #f + (-> + self + node-list + data + (-> self particle-spawn-joint) + bone + transform + vector + 3 + ) + ) + (-> gp-0 ppointer) + ) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 30 + ) + (suspend) + ) + (ja-channel-set! 0) + (while (-> self child) + (suspend) + ) + (deactivate self) + (none) + ) + ) + +(defbehavior + swamp-rat-nest-dummy-init-by-other swamp-rat-nest-dummy + ((arg0 swamp-rat-nest-dummy)) + (let ((gp-0 (-> arg0 entity))) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (dummy-20 self) + (process-drawable-from-entity! self gp-0) + (set! (-> self top-sphere quad) (-> self root-override trans quad)) + (set! (-> self top-sphere y) (+ 24576.0 (-> self top-sphere y))) + (set! (-> self top-sphere w) 18432.0) + (set! (-> self entity) gp-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-current-poly! + (-> self nav) + (TODO-RENAME-18 (-> self nav) (-> self root-override trans)) + ) + (+! (-> self parent-process 0 hit-points) 3) + (dummy-21 self) + (when (zero? (-> self skel)) + (set! (-> self spawn-joint-count) 0) + 0 + ) + (if (zero? (-> self parent-process 0 dummy-type)) + (go swamp-rat-nest-dummy-idle) + (go swamp-rat-nest-dummy-hit) + ) + (none) + ) + +(defbehavior + swamp-rat-nest-default-event-handler swamp-rat-nest + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'victory) + (go swamp-rat-nest-victory) + ) + ) + ) + ) + +swamp-rat-nest-default-event-handler + +(defbehavior swamp-rat-nest-pick-spawn-joint swamp-rat-nest () + (when + (and + *target* + (>= + 32768.0 + (vector-vector-distance (-> self root trans) (-> *target* control trans)) + ) + ) + (dotimes (gp-0 5) + (let* + ((s5-0 + (-> + self + dummy + 0 + spawn-joint-array + (rand-vu-int-count (-> self dummy 0 spawn-joint-count)) + ) + ) + (v1-15 (-> self dummy 0 node-list data s5-0 bone)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s3-0 quad) (-> v1-15 transform vector 3 quad)) + (let + ((s2-0 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> v1-15 transform vector 1) + 1.0 + ) + ) + (s4-1 (vector-! (new 'stack-no-clear 'vector) (target-pos 0) s3-0)) + ) + (set! (-> s4-1 y) 0.0) + (vector-normalize! s4-1 1.0) + (if (< (vector-dot s2-0 s4-1) (cos 8192.0)) + (return s5-0) + ) + ) + ) + ) + ) + (-> + self + dummy + 0 + spawn-joint-array + (rand-vu-int-count (-> self dummy 0 spawn-joint-count)) + ) + ) + +(defbehavior swamp-rat-nest-spawn-rat swamp-rat-nest () + (when (and (-> self dummy) (> (-> self dummy 0 spawn-joint-count) 0)) + (let* ((v1-5 (swamp-rat-nest-pick-spawn-joint)) + (v1-8 (-> self dummy 0 node-list data v1-5 bone)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> gp-0 quad) (-> v1-8 transform vector 3 quad)) + (let + ((s5-0 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> v1-8 transform vector 1) + 1.0 + ) + ) + (s4-0 (if (= (-> self fact-override pickup-type) (pickup-type none)) + 0 + 9 + ) + ) + (s3-0 (get-process *default-dead-pool* swamp-rat #x4000)) + ) + (when s3-0 + (let ((t9-3 (method-of-type swamp-rat activate))) + (t9-3 + (the-as swamp-rat s3-0) + self + 'swamp-rat + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s3-0 swamp-rat-init-by-other self gp-0 s5-0 s4-0) + (-> s3-0 ppointer) + ) + ) + ) + ) + ) + +(defbehavior swamp-rat-nest-check-dummy swamp-rat-nest () + (when (not (-> self dummy)) + (let ((v1-1 (-> self dummy-type))) + (cond + ((zero? v1-1) + (let + ((gp-0 (get-process *default-dead-pool* swamp-rat-nest-dummy-a #x4000))) + (set! (-> self dummy) (the-as (pointer swamp-rat-nest-dummy) (when gp-0 + (let + ((t9-1 + (method-of-type + swamp-rat-nest-dummy-a + activate + ) + ) + ) + (t9-1 + (the-as + swamp-rat-nest-dummy-a + gp-0 + ) + self + 'swamp-rat-nest-dummy-a + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + gp-0 + swamp-rat-nest-dummy-init-by-other + self + ) + (-> + gp-0 + ppointer + ) + ) + ) + ) + ) + ) + ((= v1-1 1) + (let + ((gp-1 (get-process *default-dead-pool* swamp-rat-nest-dummy-b #x4000))) + (set! (-> self dummy) (the-as (pointer swamp-rat-nest-dummy) (when gp-1 + (let + ((t9-4 + (method-of-type + swamp-rat-nest-dummy-b + activate + ) + ) + ) + (t9-4 + (the-as + swamp-rat-nest-dummy-b + gp-1 + ) + self + 'swamp-rat-nest-dummy-b + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + gp-1 + swamp-rat-nest-dummy-init-by-other + self + ) + (-> + gp-1 + ppointer + ) + ) + ) + ) + ) + ) + ((= v1-1 2) + (let + ((gp-2 (get-process *default-dead-pool* swamp-rat-nest-dummy-c #x4000))) + (set! (-> self dummy) (the-as (pointer swamp-rat-nest-dummy) (when gp-2 + (let + ((t9-7 + (method-of-type + swamp-rat-nest-dummy-c + activate + ) + ) + ) + (t9-7 + (the-as + swamp-rat-nest-dummy-c + gp-2 + ) + self + 'swamp-rat-nest-dummy-c + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + gp-2 + swamp-rat-nest-dummy-init-by-other + self + ) + (-> + gp-2 + ppointer + ) + ) + ) + ) + ) + ) + (else + (go swamp-rat-nest-die) + ) + ) + ) + (+! (-> self dummy-type) 1) + (set! (-> self spawn-period) (* 0.75 (-> self spawn-period))) + ) + (none) + ) + +(defstate swamp-rat-nest-idle (swamp-rat-nest) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'hit) + (go swamp-rat-nest-active) + ) + ) + ) + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (if + (and + *target* + (>= + (-> self fact-override idle-distance) + (vector-vector-distance (-> self root trans) (-> *target* control trans)) + ) + ) + (go swamp-rat-nest-active) + ) + (none) + ) + :code + (behavior () + (swamp-rat-nest-check-dummy) + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest) #f) + ) + +(defstate swamp-rat-nest-active (swamp-rat-nest) + :event + swamp-rat-nest-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (swamp-rat-nest-check-dummy) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> self test-interval)) + ) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self test-interval) (the-as uint 60)) + (let ((v1-6 0)) + (let ((a0-2 (the-as (pointer process-tree) (-> self child-process)))) + (while a0-2 + (if (= (-> (ppointer->process a0-2) type) swamp-rat) + (+! v1-6 1) + ) + (set! a0-2 (-> a0-2 0 brother)) + ) + ) + (if (< v1-6 (-> self rat-count)) + (go swamp-rat-nest-gestate) + ) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest) #f) + ) + +(defstate swamp-rat-nest-gestate (swamp-rat-nest) + :event + swamp-rat-nest-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (swamp-rat-nest-check-dummy) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the int (* (-> self spawn-period-scale) (-> self spawn-period))) + ) + (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) 'shake) + (send-event-function (ppointer->process (-> self dummy)) a1-0) + ) + (swamp-rat-nest-spawn-rat) + (go swamp-rat-nest-active) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest) #f) + ) + +(defstate swamp-rat-nest-victory (swamp-rat-nest) + :event + (the-as + (function process int symbol event-message-block object :behavior swamp-rat-nest) + #f + ) + :code + (behavior () + (let ((gp-0 (the-as (pointer process-tree) (-> self child-process)))) + (while gp-0 + (let* ((s5-0 (ppointer->process gp-0)) + (a0-1 + (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) swamp-rat)) + s5-0 + ) + ) + ) + (when a0-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) 'victory) + (send-event-function (the-as process a0-1) a1-1) + ) + ) + ) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (go swamp-rat-nest-active) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest) #f) + ) + +(defstate swamp-rat-nest-die (swamp-rat-nest) + :event + swamp-rat-nest-default-event-handler + :code + (behavior () + (process-entity-status! self (entity-perm-status complete) #t) + (process-entity-status! self (entity-perm-status dead) #t) + (TODO-RENAME-9 + (-> self fact-override) + #t + *entity-pool* + (-> self fact-override) + 0 + ) + (while (-> self child-process) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest) #f) + ) + +(defmethod copy-defaults! swamp-rat-nest ((obj swamp-rat-nest) (arg0 res-lump)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! + (-> obj fact-override) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (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) + ) + (let + ((s5-1 + (res-lump-value arg0 'num-lurkers uint128 :default (the-as uint128 3)) + ) + ) + (let* ((a0-8 *game-info*) + (t9-5 (method-of-object a0-8 get-health-percent-lost)) + ) + (if (>= (t9-5 a0-8) 0.5) + (+! s5-1 -1) + ) + ) + (set! (-> obj rat-count) (max 1 (min 4 (the-as int s5-1)))) + ) + (set! (-> obj defensive-rat-count) 2) + (let* ((a0-11 *game-info*) + (t9-6 (method-of-object a0-11 get-health-percent-lost)) + ) + (if (>= (t9-6 a0-11) 0.75) + (+! (-> obj defensive-rat-count) -1) + ) + ) + (set! (-> obj dummy) (the-as (pointer swamp-rat-nest-dummy) #f)) + (set! (-> obj dummy-type) 0) + (set! (-> obj hit-points) 0) + (set! (-> obj damaged) #f) + (set! (-> obj spawn-period) (* 1200.0 (rand-vu-float-range 0.9 1.1))) + (let* ((f30-1 1.0) + (f28-0 2.0) + (a0-13 *game-info*) + (t9-8 (method-of-object a0-13 get-health-percent-lost)) + ) + (set! (-> obj spawn-period-scale) (+ f30-1 (* f28-0 (t9-8 a0-13)))) + ) + (set! (-> obj test-interval) (the-as uint (rand-vu-int-range 30 60))) + (go swamp-rat-nest-idle) + (none) + ) + +(let + ((v1-51 + (new 'static 'skeleton-group + :art-group-name "swamp-rat-nest" + :bounds (new 'static 'vector :w 32768.0) + :max-lod 1 + :version #x6 + ) + ) + ) + (set! (-> v1-51 jgeo) 0) + (set! (-> v1-51 janim) 3) + (set! (-> v1-51 mgeo 0) (the-as uint 1)) + (set! (-> v1-51 lod-dist 0) 81920.0) + (set! (-> v1-51 mgeo 1) (the-as uint 2)) + (set! (-> v1-51 lod-dist 1) 4095996000.0) + (set! *swamp-rat-nest-dummy-a-sg* v1-51) + ) + +(let + ((v1-52 + (new 'static 'skeleton-group + :art-group-name "swamp-rat-nest" + :bounds (new 'static 'vector :w 32768.0) + :max-lod 1 + :version #x6 + ) + ) + ) + (set! (-> v1-52 jgeo) 4) + (set! (-> v1-52 janim) 7) + (set! (-> v1-52 mgeo 0) (the-as uint 5)) + (set! (-> v1-52 lod-dist 0) 81920.0) + (set! (-> v1-52 mgeo 1) (the-as uint 6)) + (set! (-> v1-52 lod-dist 1) 4095996000.0) + (set! *swamp-rat-nest-dummy-b-sg* v1-52) + ) + +(let + ((v1-53 + (new 'static 'skeleton-group + :art-group-name "swamp-rat-nest" + :bounds (new 'static 'vector :w 20480.0) + :version #x6 + ) + ) + ) + (set! (-> v1-53 jgeo) 8) + (set! (-> v1-53 janim) 11) + (set! (-> v1-53 mgeo 0) (the-as uint 9)) + (set! (-> v1-53 lod-dist 0) 4095996000.0) + (set! *swamp-rat-nest-dummy-c-sg* v1-53) + ) + +(defmethod dummy-20 swamp-rat-nest-dummy-a ((obj swamp-rat-nest-dummy-a)) + (let + ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let + ((s4-0 + (new + 'process + 'collide-shape-prim-mesh + s5-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 12288.0 0.0 20480.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-override) s5-0) + ) + (dummy-14 obj *swamp-rat-nest-dummy-a-sg* '()) + (none) + ) + +(defmethod dummy-20 swamp-rat-nest-dummy-b ((obj swamp-rat-nest-dummy-b)) + (let + ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let + ((s4-0 + (new + 'process + 'collide-shape-prim-mesh + s5-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 12288.0 0.0 16384.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-override) s5-0) + ) + (dummy-14 obj *swamp-rat-nest-dummy-b-sg* '()) + (none) + ) + +(defmethod dummy-20 swamp-rat-nest-dummy-c ((obj swamp-rat-nest-dummy-c)) + (let + ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let + ((s4-0 + (new + 'process + 'collide-shape-prim-mesh + s5-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 12288.0 0.0 12288.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-override) s5-0) + ) + (dummy-14 obj *swamp-rat-nest-dummy-c-sg* '()) + (none) + ) + +(defmethod dummy-21 swamp-rat-nest-dummy-a ((obj swamp-rat-nest-dummy-a)) + (let ((v1-0 0)) + (let* + ((a0-1 + '( + (the binteger 5) (the binteger 6) (the binteger 7) (the binteger 8) (the binteger 9) (the binteger 10) + ) + ) + (a1-0 (car a0-1)) + ) + (while (not (null? a0-1)) + (when (< v1-0 6) + (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) + (+! v1-0 1) + ) + (set! a0-1 (cdr a0-1)) + (set! a1-0 (car a0-1)) + ) + ) + (set! (-> obj spawn-joint-count) v1-0) + ) + (set! (-> obj death-part) (-> *part-group-id-table* 292)) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 295) obj) + ) + (let ((v0-1 6)) + (set! (-> obj particle-spawn-joint) v0-1) + v0-1 + ) + ) + +(defmethod dummy-21 swamp-rat-nest-dummy-b ((obj swamp-rat-nest-dummy-b)) + (let ((v1-0 0)) + (let* + ((a0-1 + '( + (the binteger 5) (the binteger 9) (the binteger 10) (the binteger 6) (the binteger 7) (the binteger 8) + ) + ) + (a1-0 (car a0-1)) + ) + (while (not (null? a0-1)) + (when (< v1-0 6) + (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) + (+! v1-0 1) + ) + (set! a0-1 (cdr a0-1)) + (set! a1-0 (car a0-1)) + ) + ) + (set! (-> obj spawn-joint-count) v1-0) + ) + (set! (-> obj death-part) (-> *part-group-id-table* 293)) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 296) obj) + ) + (let ((v0-1 9)) + (set! (-> obj particle-spawn-joint) v0-1) + v0-1 + ) + ) + +(defmethod dummy-21 swamp-rat-nest-dummy-c ((obj swamp-rat-nest-dummy-c)) + (let ((v1-0 0)) + (let* ((a0-1 '((the binteger 5) (the binteger 6))) + (a1-0 (car a0-1)) + ) + (while (not (null? a0-1)) + (when (< v1-0 6) + (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) + (+! v1-0 1) + ) + (set! a0-1 (cdr a0-1)) + (set! a1-0 (car a0-1)) + ) + ) + (set! (-> obj spawn-joint-count) v1-0) + ) + (set! (-> obj death-part) (-> *part-group-id-table* 294)) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 297) obj) + ) + (let ((v0-1 5)) + (set! (-> obj particle-spawn-joint) v0-1) + v0-1 + ) + ) + + + + diff --git a/goal_src/levels/swamp/swamp-rat.gc b/goal_src/levels/swamp/swamp-rat.gc index 3044540a2f..9b70171f82 100644 --- a/goal_src/levels/swamp/swamp-rat.gc +++ b/goal_src/levels/swamp/swamp-rat.gc @@ -5,3 +5,921 @@ ;; name in dgo: swamp-rat ;; dgos: L1, SWA +(define-extern *swamp-rat-sg* skeleton-group) +(declare-type swamp-rat-nest process-drawable) + +;; DECOMP BEGINS + +(deftype swamp-rat (nav-enemy) + ((up-vector vector :inline :offset-assert 400) + (state-float float :offset-assert 416) + (state-vector vector :inline :offset-assert 432) + (_hack uint64 :offset-assert 448) + (wiggle-time uint64 :offset-assert 456) + (wiggle-angle float :offset-assert 464) + (delta-wiggle-angle float :offset-assert 468) + (wiggle-factor float :offset-assert 472) + (min-height float :offset-assert 476) + (chase-rest-time uint64 :offset-assert 480) + (target-nav-time uint64 :offset-assert 488) + ) + :heap-base #x180 + :method-count-assert 76 + :size-assert #x1f0 + :flag-assert #x4c018001f0 + ) + + +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "swamp-rat" + :bounds + (new 'static 'vector :y 4096.0 :w 16384.0) + :max-lod 2 + :longest-edge (meters 1.0) + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 4) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 163840.0) + (set! (-> v1-1 mgeo 2) (the-as uint 3)) + (set! (-> v1-1 lod-dist 2) 4095996000.0) + (set! *swamp-rat-sg* v1-1) + ) + +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defmethod + dummy-44 + swamp-rat + ((obj swamp-rat) (arg0 process) (arg1 event-message-block)) + (with-pp + (the-as + object + (when + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (let* ((s5-1 (-> obj parent)) + (a0-4 + (if (and (nonzero? s5-1) (type-type? pointer process-drawable)) + s5-1 + ) + ) + ) + (cond + (a0-4 + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) pp) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'victory) + (send-event-function (the-as process a0-4) a1-4) + ) + ) + (else + (go (method-of-object obj nav-enemy-victory)) + ) + ) + ) + ) + ) + ) + ) + ) + +(defbehavior + swamp-rat-default-event-handler swamp-rat + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'victory) + (go-virtual nav-enemy-victory) + (nav-enemy-default-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + +swamp-rat-default-event-handler + +(defmethod common-post swamp-rat ((obj swamp-rat)) + (when (logtest? (-> obj collide-info status) 1) + (vector-deg-seek + (-> obj up-vector) + (-> obj up-vector) + (-> obj collide-info surface-normal) + 910.2222 + ) + (vector-normalize! (-> obj up-vector) 1.0) + ) + (forward-up-nopitch->quaternion + (-> obj collide-info quat) + (vector-z-quaternion! (new-stack-vector0) (-> obj collide-info quat)) + (-> obj up-vector) + ) + ((the-as (function nav-enemy none) (find-parent-method swamp-rat 39)) obj) + (none) + ) + +(defmethod TODO-RENAME-38 swamp-rat ((obj swamp-rat)) + (dummy-59 + (-> obj collide-info) + (-> obj collide-info transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (when (< (-> obj collide-info trans y) (-> obj min-height)) + (let ((a1-1 (new 'stack-no-clear 'vector))) + (set! (-> a1-1 quad) (-> obj collide-info trans quad)) + (set! (-> a1-1 y) (-> obj min-height)) + (TODO-RENAME-61 + (-> obj collide-info) + a1-1 + (-> obj collide-info transv) + *y-vector* + ) + ) + ) + 0 + (none) + ) + +(defstate nav-enemy-idle (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :post + (behavior () + (ja-post) + (none) + ) + ) + +(defstate nav-enemy-patrol (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (behavior () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) f30-0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) f30-0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-notice (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 51) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! (-> gp-0 param 0) (ja-aframe 30.0 0)) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 30.0 0)) + (set! (-> gp-1 param 1) 1.0) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-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! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +(defbehavior swamp-rat-update-wiggle-params swamp-rat () + (let* ((f0-0 (rand-vu-float-range 0.0 1.0)) + (f1-1 (+ 1.0 (* 2.0 f0-0))) + (f2-2 f1-1) + (f2-4 (/ 1.0 f2-2)) + (f0-2 (+ 1.0 (* 0.2 f0-0))) + ) + (set! (-> self delta-wiggle-angle) (* 910.2222 f1-1)) + (set! (-> self wiggle-factor) (* 1.5 f2-4)) + (let ((f0-3 (* 28672.0 f0-2))) + (set! (-> self target-speed) f0-3) + f0-3 + ) + ) + ) + +(defbehavior swamp-rat-update-wiggle-target swamp-rat ((arg0 vector)) + (+! (-> self wiggle-angle) (-> self delta-wiggle-angle)) + (if (< 65536.0 (-> self wiggle-angle)) + (set! (-> self wiggle-angle) (+ -65536.0 (-> self wiggle-angle))) + ) + (let* ((v1-3 (-> self collide-info trans)) + (a1-1 (vector-! (new 'stack-no-clear 'vector) v1-3 arg0)) + (s3-0 + (vector-rotate-around-y! (new 'stack-no-clear 'vector) a1-1 16384.0) + ) + (v1-4 + (vector+*! + (new 'stack-no-clear 'vector) + arg0 + s3-0 + (* (-> self wiggle-factor) (sin (-> self wiggle-angle))) + ) + ) + (v0-3 (-> self nav target-pos)) + ) + (set! (-> v0-3 quad) (-> v1-4 quad)) + v0-3 + ) + ) + +(defstate nav-enemy-chase (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :trans + (behavior () + (if + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> self chase-rest-time)) + ) + (go-virtual nav-enemy-victory) + ) + ((-> (method-of-type nav-enemy nav-enemy-chase) trans)) + (none) + ) + :code + (behavior () + (set! + (-> self target-nav-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (set! + (-> self wiggle-time) + (the-as uint (+ (-> *display* base-frame-counter) -3000)) + ) + (set! (-> self wiggle-angle) 0.0) + (set! (-> self chase-rest-time) (the-as uint (rand-vu-int-range 300 1200))) + (ja-channel-push! 1 51) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self wiggle-time))) + 300 + ) + (set! + (-> self wiggle-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (swamp-rat-update-wiggle-params) + ) + (suspend) + (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! + ) + ) + ) + (none) + ) + :post + (behavior () + (swamp-rat-update-wiggle-target (target-pos 0)) + (nav-enemy-travel-post) + (none) + ) + ) + +(defstate nav-enemy-stop-chase (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (-> (method-of-type nav-enemy nav-enemy-stop-chase) code) + ) + +(defstate nav-enemy-stare (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (behavior () + (set! (-> self rotate-speed) 1456355.5) + (set! (-> self turn-time) 22) + (let ((f30-0 (rand-vu-float-range 0.8 1.2))) + (while #t + (logior! (-> self nav-enemy-flags) 16) + (ja-channel-push! 1 30) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) f30-0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (let ((gp-0 (rand-vu-int-range 300 600)) + (s5-0 (-> *display* base-frame-counter)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-0) gp-0) + (let ((v1-33 (-> self skel root-channel 0))) + (set! (-> v1-33 num-func) num-func-identity) + (set! (-> v1-33 frame-num) 0.0) + ) + (ja-blend-eval) + (suspend) + (suspend) + ) + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-give-up (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (behavior () + (ja-channel-push! 1 22) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) + (nav-enemy-get-new-patrol-point) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as art-joint-anim (-> self draw art-group data 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) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +(defstate nav-enemy-attack (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (behavior () + (ja-channel-push! 1 22) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-victory) + (none) + ) + ) + +(defstate nav-enemy-victory (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (-> (method-of-type nav-enemy nav-enemy-victory) code) + ) + +(defstate swamp-rat-spawn (swamp-rat) + :event + swamp-rat-default-event-handler + :code + (behavior () + (let ((gp-0 (new-stack-vector0))) + (set! (-> gp-0 x) 0.0) + (set! (-> gp-0 y) (- (-> *standard-dynamics* gravity-length))) + (set! (-> gp-0 z) 0.0) + (set! (-> gp-0 w) 1.0) + (let ((f30-0 0.125)) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (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 5)) + num-func-identity + ) + (set! (-> s5-0 frame-num) 0.0) + ) + (while #t + (set! f30-0 (seek f30-0 1.5 0.1)) + (vector-v++! (-> self collide-info transv) gp-0) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (when + (or + (logtest? (-> self collide-info status) 4) + (or + (< (-> self collide-info trans y) (-> self min-height)) + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self state-time)) + ) + 300 + ) + ) + ) + 0 + (goto cfg-13) + ) + (vector-float*! (-> self collide-info scale) *identity-vector* f30-0) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) 1.0) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + ) + ) + ) + (label cfg-13) + (if (< (-> self collide-info trans y) (-> self min-height)) + (set! (-> self collide-info trans y) (-> self min-height)) + ) + (set! (-> self collide-info transv quad) (-> *null-vector* quad)) + (vector-float*! (-> self collide-info scale) *identity-vector* 1.5) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-10 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + 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 6)) + 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! + ) + ) + ) + (if (TODO-RENAME-46 self (-> self nav-info stop-chase-distance)) + (go-virtual nav-enemy-chase) + (go-virtual nav-enemy-idle) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat) nav-enemy-simple-post) + ) + +(define + *swamp-rat-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 4 + :walk-anim 7 + :turn-anim 7 + :notice-anim 8 + :run-anim 9 + :jump-anim 9 + :jump-land-anim 6 + :victory-anim 10 + :taunt-anim 10 + :die-anim 11 + :neck-joint 7 + :run-travel-speed (meters 7.0) + :run-rotate-speed (degrees 7999.9995) + :run-acceleration (meters 1.0) + :run-turn-time #x16 + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 7999.9995) + :walk-acceleration (meters 1.0) + :walk-turn-time #x16 + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 1.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 3.0) + :frustration-time #x1c2 + :die-anim-hold-frame 20.0 + :jump-anim-start-frame 19.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #f + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +(defmethod initialize-collision swamp-rat ((obj swamp-rat)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 2) + (set-vector! (-> s4-0 local-sphere) 0.0 3686.4001 0.0 3686.4001) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-48 swamp-rat ((obj swamp-rat)) + (dummy-14 obj *swamp-rat-sg* '()) + (TODO-RENAME-45 obj *swamp-rat-nav-enemy-info*) + (vector-float*! (-> obj collide-info scale) *identity-vector* 1.5) + (set! (-> obj neck up) (the-as uint 1)) + (set! (-> obj neck nose) (the-as uint 2)) + (set! (-> obj neck ear) (the-as uint 0)) + (set! (-> obj wiggle-angle) 0.0) + (set! (-> obj delta-wiggle-angle) 910.2222) + (set! (-> obj wiggle-factor) 1.5) + (set! (-> obj reaction-time) (rand-vu-int-range 30 240)) + (set! (-> obj chase-rest-time) (the-as uint 300)) + (set! (-> obj water) (new 'process 'water-control obj 7 0.0 8192.0 2048.0)) + (set! (-> obj water flags) (the-as uint 2)) + (set! (-> obj water height) (res-lump-float (-> obj entity) 'water-height)) + (set! (-> obj water ripple-size) 12288.0) + (set! (-> obj min-height) (+ -2048.0 (-> obj water height))) + (set! (-> obj up-vector quad) (-> *y-vector* quad)) + 0 + (none) + ) + +(defbehavior + swamp-rat-init-by-other swamp-rat + ((arg0 swamp-rat-nest) + (arg1 vector) + (arg2 vector) + (arg3 pickup-type) + (arg4 symbol) + ) + (initialize-collision self) + (if arg4 + (logclear! (-> self mask) (process-mask actor-pause)) + (logior! (-> self mask) (process-mask actor-pause)) + ) + (set! (-> self collide-info trans quad) (-> arg1 quad)) + (forward-up->quaternion (-> self collide-info quat) arg2 *up-vector*) + (vector-float*! (-> self collide-info scale) *identity-vector* 1.5) + (vector-float*! (-> self collide-info transv) arg2 49152.0) + (set! (-> self entity) (-> arg0 entity)) + (TODO-RENAME-48 self) + (set! (-> self enemy-info pickup-type) arg3) + (go swamp-rat-spawn) + (none) + ) + + + + diff --git a/goal_src/levels/village1/assistant.gc b/goal_src/levels/village1/assistant.gc index 1aa5a8c6a7..b539db8ab3 100644 --- a/goal_src/levels/village1/assistant.gc +++ b/goal_src/levels/village1/assistant.gc @@ -6,7 +6,9 @@ ;; dgos: L1, VI1 (define-extern *assistant-sg* skeleton-group) -;; definition of type assistant + +;; DECOMP BEGINS + (deftype assistant (process-taskable) ((sound-id sound-id :offset-assert 380) ) @@ -16,16 +18,7 @@ :flag-assert #x3501100180 ) -;; definition for method 3 of type assistant -(defmethod inspect assistant ((obj assistant)) - (let ((t9-0 (method-of-type process-taskable inspect))) - (t9-0 obj) - ) - (format #t "~T~Tsound-id: ~D~%" (-> obj sound-id)) - obj - ) -;; failed to figure out what this is: (let ((v1-1 (new 'static 'skeleton-group @@ -43,12 +36,10 @@ (set! *assistant-sg* v1-1) ) -;; definition for method 52 of type assistant -;; INFO: Return type mismatch int vs none. (defmethod dummy-52 assistant ((obj assistant)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -4096.0 f0-0))) ) @@ -64,8 +55,7 @@ (none) ) -;; definition for method 48 of type assistant -(defmethod draw-shadow assistant ((obj assistant)) +(defmethod draw-npc-shadow assistant ((obj assistant)) (-> obj draw shadow-ctrl) (cond ((and @@ -77,7 +67,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -89,7 +79,6 @@ (none) ) -;; definition for method 32 of type assistant (defmethod play-anim! assistant ((obj assistant) (arg0 symbol)) (with-pp (case (current-status (-> obj tasks)) @@ -343,12 +332,10 @@ ) ) -;; definition for method 31 of type assistant (defmethod get-art-elem assistant ((obj assistant)) (-> obj draw art-group data 3) ) -;; definition for method 43 of type assistant (defmethod TODO-RENAME-43 assistant ((obj assistant)) (let ((s5-0 @@ -368,30 +355,29 @@ ) (cond ((< 16384.0 (-> s5-0 y)) + #f ) ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "ASSTLP01" #f (-> obj root-override trans)) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "ASSTLP04" #f (-> obj root-override trans)) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "ASSTLP05" #f (-> obj root-override trans)) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "ASSTLP02" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "ASSTLP03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "ASSTLP03" #f (-> obj root-override trans)) ) ) ) ) ) - (none) ) -;; failed to figure out what this is: (defstate idle (assistant) :virtual #t :code @@ -875,7 +861,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-group-id-table* 122) (new 'static 'sparticle-launch-group @@ -892,7 +877,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 365) (new 'static 'sparticle-launcher @@ -915,7 +899,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 366) (new 'static 'sparticle-launcher @@ -947,7 +930,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 367) (new 'static 'sparticle-launcher @@ -972,7 +954,6 @@ ) ) -;; definition for function check-drop-level-assistant (defun check-drop-level-assistant ((arg0 assistant) (arg1 sparticle-cpuinfo) (arg2 vector)) @@ -1008,7 +989,6 @@ (none) ) -;; definition for method 11 of type assistant (defmethod copy-defaults! assistant ((obj assistant) (arg0 res-lump)) (dummy-40 obj arg0 *assistant-sg* 3 31 (new 'static 'vector :w 4096.0) 5) (set! (-> obj bounce-away) #f) diff --git a/goal_src/levels/village1/explorer.gc b/goal_src/levels/village1/explorer.gc index c81ba8b993..32946df604 100644 --- a/goal_src/levels/village1/explorer.gc +++ b/goal_src/levels/village1/explorer.gc @@ -7,7 +7,8 @@ (define-extern *explorer-sg* skeleton-group) -;; definition of type explorer +;; DECOMP BEGINS + (deftype explorer (process-taskable) () :heap-base #x110 @@ -16,7 +17,7 @@ :flag-assert #x350110017c ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -34,12 +35,10 @@ (set! *explorer-sg* v1-1) ) -;; definition for method 52 of type explorer -;; INFO: Return type mismatch int vs none. (defmethod dummy-52 explorer ((obj explorer)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -4096.0 f0-0))) ) @@ -55,8 +54,7 @@ (none) ) -;; definition for method 48 of type explorer -(defmethod draw-shadow explorer ((obj explorer)) +(defmethod draw-npc-shadow explorer ((obj explorer)) (-> obj draw shadow-ctrl) (cond ((and @@ -68,7 +66,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -80,7 +78,6 @@ (none) ) -;; definition for method 32 of type explorer (defmethod play-anim! explorer ((obj explorer) (arg0 symbol)) (with-pp (set! (-> obj talk-message) (the-as uint 260)) @@ -225,12 +222,10 @@ ) ) -;; definition for method 31 of type explorer (defmethod get-art-elem explorer ((obj explorer)) (-> obj draw art-group data 3) ) -;; definition for method 43 of type explorer (defmethod TODO-RENAME-43 explorer ((obj explorer)) (when (TODO-RENAME-10 @@ -246,7 +241,7 @@ ) (cond ((< 0.85714287 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-AM05" #f (-> obj root-override trans)) ) ((< 0.71428573 f0-2) (if @@ -257,17 +252,17 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "EXP-LO02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-LO02" #f (-> obj root-override trans)) ) ) ((< 0.5714286 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-AM04" #f (-> obj root-override trans)) ) ((< 0.42857143 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-AM03" #f (-> obj root-override trans)) ) ((< 0.2857143 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-AM02" #f (-> obj root-override trans)) ) ((< 0.14285715 f0-2) (if @@ -278,20 +273,17 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "EXP-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-AM01" #f (-> obj root-override trans)) ) ) (else - (dummy-11 (-> obj ambient) "EXP-LO1A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-LO1A" #f (-> obj root-override trans)) ) ) ) ) - (none) ) -;; definition for method 47 of type explorer -;; INFO: Return type mismatch basic vs symbol. (defmethod target-above-threshold? explorer ((obj explorer)) (the-as symbol @@ -303,7 +295,6 @@ ) ) -;; failed to figure out what this is: (defstate idle (explorer) :virtual #t :code @@ -983,7 +974,6 @@ ) ) -;; definition for method 11 of type explorer (defmethod copy-defaults! explorer ((obj explorer) (arg0 res-lump)) (dummy-40 obj arg0 *explorer-sg* 3 42 (new 'static 'vector :w 4096.0) 5) (set! (-> obj tasks) (get-task-control (game-task village1-uncle-money))) @@ -991,4 +981,8 @@ (set! (-> obj draw light-index) (the-as uint 5)) (dummy-42 obj) (none) - ) \ No newline at end of file + ) + + + + diff --git a/goal_src/levels/village1/farmer.gc b/goal_src/levels/village1/farmer.gc index 8dcb16372f..f919a229ba 100644 --- a/goal_src/levels/village1/farmer.gc +++ b/goal_src/levels/village1/farmer.gc @@ -7,7 +7,8 @@ (define-extern *farmer-sg* skeleton-group) -;; definition of type farmer +;; DECOMP BEGINS + (deftype farmer (process-taskable) () :heap-base #x110 @@ -16,7 +17,7 @@ :flag-assert #x350110017c ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -37,7 +38,6 @@ (set! *farmer-sg* v1-1) ) -;; definition for method 32 of type farmer (defmethod play-anim! farmer ((obj farmer) (arg0 symbol)) (case (current-status (-> obj tasks)) ((2 3) @@ -107,7 +107,6 @@ ) ) -;; definition for method 31 of type farmer (defmethod get-art-elem farmer ((obj farmer)) (let ((v1-1 (current-status (-> obj tasks)))) (if (or (= v1-1 2) (= v1-1 3) (= v1-1 7) (zero? v1-1)) @@ -117,7 +116,6 @@ ) ) -;; definition for method 43 of type farmer (defmethod TODO-RENAME-43 farmer ((obj farmer)) (when (TODO-RENAME-10 @@ -133,30 +131,29 @@ ) (cond ((< 0.8333333 f0-2) - (dummy-11 (-> obj ambient) "FAR-LO1A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "FAR-LO1A" #f (-> obj root-override trans)) ) ((< 0.6666667 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "FAR-AM01" #f (-> obj root-override trans)) ) ((< 0.5 f0-2) + #f ) ((< 0.33333334 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM2A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "FAR-AM2A" #f (-> obj root-override trans)) ) ((< 0.16666667 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "FAR-AM02" #f (-> obj root-override trans)) ) (else + #f ) ) ) ) - (none) ) -;; definition for method 41 of type farmer -;; INFO: Return type mismatch int vs none. -(defmethod initialize-collision farmer ((obj farmer) (arg0 int)) +(defmethod initialize-collision farmer ((obj farmer) (arg0 int) (arg1 vector)) (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) @@ -185,18 +182,21 @@ ) (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (dummy-50 s5-0) - (set! (-> obj root) s5-0) + (set! (-> obj root-override) s5-0) ) 0 (none) ) -;; definition for method 11 of type farmer (defmethod copy-defaults! farmer ((obj farmer) (arg0 res-lump)) (dummy-40 obj arg0 *farmer-sg* 3 25 (new 'static 'vector :w 4096.0) 5) - (set! (-> obj root nav-radius) 40960.0) - (nav-mesh-connect obj (-> obj root) (the-as nav-control #f)) + (set! (-> obj root-override nav-radius) 40960.0) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) (set! (-> obj tasks) (get-task-control (game-task village1-yakow))) (dummy-42 obj) (none) ) + + + + diff --git a/goal_src/levels/village1/fishermans-boat.gc b/goal_src/levels/village1/fishermans-boat.gc index 3dfbdcf75d..d33a2c671d 100644 --- a/goal_src/levels/village1/fishermans-boat.gc +++ b/goal_src/levels/village1/fishermans-boat.gc @@ -5,3 +5,2654 @@ ;; name in dgo: fishermans-boat ;; dgos: L1, VI1 +(define-extern *fb-evilbro-sg* skeleton-group) +(define-extern *fb-evilsis-sg* skeleton-group) +(define-extern *fishermans-boat-sg* skeleton-group) + +(declare-type fishermans-boat rigid-body-platform) +(define-extern fishermans-boat-player-control (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-entering-village (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-entering-misty (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-ride-to-village1 (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-ride-to-misty (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-leaving-village (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-leaving-misty (state fishermans-boat)) ;; unknown type +(define-extern fishermans-boat-measurements (state fishermans-boat)) ;; unknown type + +;; DECOMP BEGINS + +(define + *fishermans-boat-constants* + (new 'static 'rigid-body-platform-constants + :drag-factor 2.0 + :buoyancy-factor 1.5 + :max-buoyancy-depth (meters 1.0) + :gravity-factor 1.0 + :gravity (meters 80.0) + :player-weight (meters 40.0) + :player-bonk-factor 1.0 + :player-dive-factor 1.0 + :player-force-distance (meters 10.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 6 + :mass 2.0 + :inertial-tensor-x (meters 4.0) + :inertial-tensor-y (meters 10.0) + :inertial-tensor-z (meters 15.0) + :cm-joint-y (meters 3.0) + :cm-joint-z (meters 1.0) + :idle-distance (meters 50.0) + :platform #t + :sound-name #f + ) + ) + +(deftype boat-stabilizer (structure) + ((local-pos vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + + +(deftype vehicle-path (structure) + ((point-array vector 10 :inline :offset-assert 0) + (point-count int32 :offset-assert 160) + ) + :method-count-assert 14 + :size-assert #xa4 + :flag-assert #xe000000a4 + (:methods + (get-point-count (_type_) int 9) + (nth-point (_type_ int vector) vector 10) + (distance-to-next-point (_type_ int vector) vector 11) + (add-point! (_type_ float float float float) none 12) + (debug-draw (_type_) symbol 13) + ) + ) + + +(defmethod get-point-count vehicle-path ((obj vehicle-path)) + (-> obj point-count) + ) + +(defmethod nth-point vehicle-path ((obj vehicle-path) (arg0 int) (arg1 vector)) + (set! (-> arg1 quad) (-> obj point-array arg0 quad)) + arg1 + ) + +(defmethod + distance-to-next-point + vehicle-path + ((obj vehicle-path) (arg0 int) (arg1 vector)) + (let ((a2-1 (+ arg0 1))) + (if (>= a2-1 (-> obj point-count)) + (set! a2-1 0) + ) + (vector-! arg1 (-> obj point-array a2-1) (-> obj point-array arg0)) + ) + (set! (-> arg1 y) 0.0) + (vector-normalize! arg1 1.0) + arg1 + ) + +(defmethod + add-point! + vehicle-path + ((obj vehicle-path) (arg0 float) (arg1 float) (arg2 float) (arg3 float)) + (let ((v1-0 (-> obj point-count))) + (when (< v1-0 10) + (set-vector! (-> obj point-array v1-0) arg0 arg1 arg2 arg3) + (+! (-> obj point-count) 1) + ) + ) + 0 + (none) + ) + +(defmethod debug-draw vehicle-path ((obj vehicle-path)) + (local-vars (sv-64 int) (sv-80 (function _varargs_ object))) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 y) 0.0) + (set! (-> s5-0 w) 1.0) + (dotimes (s2-0 (-> obj point-count)) + (let ((v1-1 (mod (+ s2-0 1) (-> obj point-count)))) + (set! (-> s4-0 quad) (-> obj point-array s2-0 quad)) + (set! (-> s3-0 quad) (-> obj point-array v1-1 quad)) + ) + (let ((f30-0 (-> s4-0 y)) + (f28-0 (-> s4-0 w)) + ) + (set! (-> s5-0 x) (* f30-0 (cos f28-0))) + (set! (-> s5-0 z) (* f30-0 (sin f28-0))) + ) + (set! (-> s4-0 y) 0.0) + (set! (-> s4-0 w) 1.0) + (set! (-> s3-0 y) 0.0) + (set! (-> s3-0 w) 1.0) + (add-debug-line + #t + (bucket-id debug-draw1) + s4-0 + s3-0 + (new 'static 'rgba :r #xff :g #xff :a #x80) + #f + (the-as rgba -1) + ) + (add-debug-vector + #t + (bucket-id debug-draw1) + s4-0 + s5-0 + (meters 0.00024414062) + (new 'static 'rgba :r #xff :a #x80) + ) + (let ((s1-0 add-debug-text-3d) + (s0-0 #t) + ) + (set! sv-64 68) + (set! sv-80 format) + (let ((a0-9 (clear *temp-string*)) + (a1-6 "~D") + (a2-2 s2-0) + ) + (sv-80 a0-9 a1-6 a2-2) + ) + (let ((a2-3 *temp-string*) + (a3-2 s4-0) + (t0-2 4) + (t1-2 #f) + ) + (s1-0 + s0-0 + (the-as bucket-id sv-64) + a2-3 + a3-2 + (the-as font-color t0-2) + (the-as vector2h t1-2) + ) + ) + ) + ) + ) + #f + ) + +(define + *boat-turning-radius-table* + (new 'static 'array float 32 + 409600.0 + 90931.2 + 94699.52 + 95600.64 + 100802.56 + 97566.72 + 99246.08 + 98713.6 + 95846.4 + 100474.88 + 88842.24 + 105472.0 + 95436.8 + 97525.76 + 102481.92 + 96501.76 + 97198.08 + 93102.08 + 98631.68 + 100270.08 + 96788.48 + 100884.48 + 97402.88 + 98590.72 + 97280.0 + 100065.28 + 104079.36 + 92610.56 + 97034.24 + 88309.76 + 0.0 + 0.0 + ) + ) + +(define + *boat-throttle-control-table* + (new 'static 'array float 32 + 0.0 + 0.031 + 0.0646 + 0.0952 + 0.1237 + 0.1508 + 0.1753 + 0.2018 + 0.2231 + 0.2473 + 0.2695 + 0.2904 + 0.3119 + 0.3312 + 0.3514 + 0.3701 + 0.3906 + 0.4148 + 0.4272 + 0.4483 + 0.4686 + 0.4856 + 0.5096 + 0.5203 + 0.5507 + 0.5697 + 0.5856 + 0.6184 + 0.6366 + 0.6694 + 0.0 + 0.0 + ) + ) + +(deftype vehicle-controller (structure) + ((path vehicle-path :offset-assert 0) + (turning-radius-table (pointer float) :offset-assert 4) + (throttle-control-table (pointer float) :offset-assert 8) + (table-step float :offset-assert 12) + (table-length int32 :offset-assert 16) + (circle-radius float :offset-assert 20) + (throttle float :offset-assert 24) + (steering float :offset-assert 28) + (path-dest-index int8 :offset-assert 32) + (left-circle int8 :offset-assert 33) + (path-dest-point vector :inline :offset-assert 48) + (path-dest-velocity vector :inline :offset-assert 64) + (dest-circle vector :inline :offset-assert 80) + (target-point vector :inline :offset-assert 96) + (sample-dir vector :inline :offset-assert 112) + (sample-time uint64 :offset-assert 128) + (sample-index int32 :offset-assert 136) + ) + :method-count-assert 17 + :size-assert #x8c + :flag-assert #x110000008c + (:methods + (init! (_type_ vehicle-path (pointer float) (pointer float) int float) none 9) + (TODO-RENAME-10 (_type_ vector float int) none 10) + (dummy-11 (_type_) none 11) + (TODO-RENAME-12 (_type_ int vector) none 12) + (move-to-next-point (_type_ vector) none 13) + (TODO-RENAME-14 (_type_ vector vector) none 14) + (dummy-15 (_type_ collide-shape-moving) none 15) + (dummy-16 (_type_) none 16) + ) + ) + + +(defmethod relocate vehicle-controller ((obj vehicle-controller) (arg0 int)) + (if (nonzero? (-> obj path)) + (&+! (-> obj path) arg0) + ) + (the-as vehicle-controller 0) + ) + +(defmethod + TODO-RENAME-12 + vehicle-controller + ((obj vehicle-controller) (arg0 int) (arg1 vector)) + (when (< arg0 (get-point-count (-> obj path))) + (set! (-> obj path-dest-index) arg0) + (nth-point (-> obj path) arg0 (-> obj path-dest-point)) + (let ((f30-0 (-> obj path-dest-point y)) + (f28-0 (-> obj path-dest-point w)) + ) + (set! (-> obj path-dest-velocity x) (* f30-0 (cos f28-0))) + (set! (-> obj path-dest-velocity z) (* f30-0 (sin f28-0))) + ) + (set! (-> obj path-dest-velocity y) 0.0) + (set! (-> obj path-dest-velocity w) 1.0) + (set! (-> obj path-dest-point y) 0.0) + (set! (-> obj path-dest-point w) 1.0) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (vector-! s3-0 (-> obj path-dest-point) arg1) + (set! (-> s5-1 quad) (-> obj path-dest-velocity quad)) + (set! (-> s5-1 x) (-> obj path-dest-velocity z)) + (set! (-> s5-1 z) (- (-> obj path-dest-velocity x))) + (vector-xz-normalize! s5-1 1.0) + (set! (-> obj left-circle) 1) + (when (< 0.0 (vector-dot s3-0 s5-1)) + (set! (-> obj left-circle) 0) + (vector-float*! s5-1 s5-1 -1.0) + ) + ) + (vector+*! + (-> obj dest-circle) + (-> obj path-dest-point) + s5-1 + (-> obj circle-radius) + ) + ) + (set! (-> obj dest-circle w) (-> obj circle-radius)) + ) + 0 + (none) + ) + +(defmethod + move-to-next-point + vehicle-controller + ((obj vehicle-controller) (arg0 vector)) + (let ((s4-0 (+ (-> obj path-dest-index) 1))) + (if (>= s4-0 (get-point-count (-> obj path))) + (set! s4-0 0) + ) + (TODO-RENAME-12 obj s4-0 arg0) + ) + 0 + (none) + ) + +(defmethod + TODO-RENAME-14 + vehicle-controller + ((obj vehicle-controller) (arg0 vector) (arg1 vector)) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s5-0 (-> obj dest-circle) arg0) + (let ((f30-0 (vector-xz-length s5-0)) + (f28-0 (-> obj dest-circle w)) + ) + (if (< f30-0 f28-0) + (set! f28-0 (* 0.9 f30-0)) + ) + (vector-normalize! s5-0 1.0) + (set! (-> s3-0 x) (-> s5-0 z)) + (set! (-> s3-0 z) (- (-> s5-0 x))) + (if (= (-> obj left-circle) 1) + (vector-float*! s3-0 s3-0 -1.0) + ) + (let* ((f0-5 f30-0) + (f0-7 (* f0-5 f0-5)) + (f1-0 f28-0) + (f0-9 (sqrtf (- f0-7 (* f1-0 f1-0)))) + (f28-1 (/ (* f28-0 f0-9) f30-0)) + ) + (let ((f0-12 (/ (* f0-9 f0-9) f30-0))) + (set! (-> arg1 quad) (-> arg0 quad)) + (vector+*! arg1 (-> obj target-point) s5-0 f0-12) + ) + (vector+*! arg1 (-> obj target-point) s3-0 f28-1) + ) + ) + ) + 0 + (none) + ) + +(defmethod + dummy-15 + vehicle-controller + ((obj vehicle-controller) (arg0 collide-shape-moving)) + (TODO-RENAME-14 obj (-> arg0 trans) (-> obj target-point)) + (let ((s3-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s3-0 quad) (-> obj path-dest-velocity quad)) + (vector-xz-normalize! s3-0 1.0) + (vector-! s4-0 (-> obj path-dest-point) (-> arg0 trans)) + (let ((f30-0 (vector-dot s3-0 s4-0))) + (if (and (< (vector-xz-length s4-0) (-> obj circle-radius)) (< f30-0 0.0)) + (move-to-next-point obj (-> arg0 trans)) + ) + ) + ) + (let + ((s4-2 + (max + 0 + (min + (the + int + (/ (vector-xz-length (-> obj path-dest-velocity)) (-> obj table-step)) + ) + (+ (-> obj table-length) -1) + ) + ) + ) + ) + (set! (-> obj throttle) (-> obj throttle-control-table s4-2)) + ) + (let ((s3-1 (new 'stack-no-clear 'vector)) + (s4-3 (new 'stack-no-clear 'vector)) + ) + (vector-z-quaternion! s3-1 (-> arg0 quat)) + (vector-x-quaternion! s4-3 (-> arg0 quat)) + (let* ((v1-16 (-> arg0 trans)) + (f0-9 + (- (vector-dot s3-1 (-> obj target-point)) (vector-dot s3-1 v1-16)) + ) + (f3-0 + (- (vector-dot s4-3 (-> obj target-point)) (vector-dot s4-3 v1-16)) + ) + ) + (set! + (-> obj steering) + (fmax -1.0 (fmin 1.0 (/ (* 4.0 f3-0) (fmax 4096.0 f0-9)))) + ) + ) + ) + 0 + 0 + (none) + ) + +(defmethod dummy-11 vehicle-controller ((obj vehicle-controller)) + (format + #t + "(define *turning-radius-table* (new 'static 'inline-array 'float 0~%" + ) + (dotimes (s5-0 (-> obj table-length)) + (format #t " (meters ~4,,2M)~%" (-> obj turning-radius-table s5-0)) + ) + (format #t " )~%") + (format #t " )~%") + (format + #t + "(define *throttle-control-table* (new 'static 'inline-array 'float 0~%" + ) + (dotimes (s5-1 (-> obj table-length)) + (format #t " ~f~%" (-> obj throttle-control-table s5-1)) + ) + (format #t " )~%") + (format #t " )~%") + 0 + (none) + ) + +(defmethod + TODO-RENAME-10 + vehicle-controller + ((obj vehicle-controller) (arg0 vector) (arg1 float) (arg2 int)) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (set! (-> s3-0 quad) (-> arg0 quad)) + (set! (-> s3-0 y) 0.0) + (vector-xz-normalize! s3-0 1.0) + (cond + ((= arg2 (-> obj sample-index)) + (let* + ((f30-0 + (* + 0.0033333334 + (the + float + (- + (-> *display* base-frame-counter) + (the-as int (-> obj sample-time)) + ) + ) + ) + ) + (f28-0 (* (-> obj table-step) (the float arg2))) + (f0-4 (acos-rad (vector-dot s3-0 (-> obj sample-dir)))) + (f26-0 (/ (* f28-0 f30-0) f0-4)) + ) + (when (and (>= arg2 0) (< arg2 (-> obj table-length))) + (set! (-> obj turning-radius-table arg2) f26-0) + (set! (-> obj throttle-control-table arg2) arg1) + (format + #t + "sample ~d (~M m/s) angle ~f deg, time ~f sec~%" + arg2 + f28-0 + (* 57.29747 f0-4) + f30-0 + ) + (format + #t + "sample ~d (~M m/s) radius ~M throttle ~f~%" + arg2 + f28-0 + f26-0 + arg1 + ) + ) + ) + ) + (else + (set! (-> obj sample-index) arg2) + (set! (-> obj sample-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> obj sample-dir quad) (-> s3-0 quad)) + ) + ) + ) + 0 + (none) + ) + +(defmethod dummy-16 vehicle-controller ((obj vehicle-controller)) + (debug-draw (-> obj path)) + (add-debug-sphere + #t + (bucket-id debug-draw1) + (-> obj dest-circle) + (-> obj dest-circle w) + (new 'static 'rgba :g #xff :a #x80) + ) + (add-debug-x + #t + (bucket-id debug-draw1) + (-> obj target-point) + (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) + ) + 0 + (none) + ) + +(defmethod + init! + vehicle-controller + ((obj vehicle-controller) + (arg0 vehicle-path) + (arg1 (pointer float)) + (arg2 (pointer float)) + (arg3 int) + (arg4 float) + ) + (set! (-> obj path) arg0) + (set! (-> obj turning-radius-table) arg1) + (set! (-> obj throttle-control-table) arg2) + (set! (-> obj table-length) arg3) + (set! (-> obj table-step) arg4) + (set! (-> obj circle-radius) 102400.0) + 0 + (none) + ) + +(deftype fishermans-boat (rigid-body-platform) + ((stabilizer-array boat-stabilizer 2 :inline :offset-assert 736) + (engine-thrust-local-pos vector :inline :offset-assert 800) + (ignition symbol :offset-assert 816) + (engine-thrust float :offset-assert 820) + (propeller joint-mod-spinner :offset-assert 824) + (dock-point vector :inline :offset-assert 832) + (dest-dir vector :inline :offset-assert 848) + (dock-point-index int8 :offset-assert 864) + (auto-pilot symbol :offset-assert 868) + (anchored symbol :offset-assert 872) + (waiting-for-player symbol :offset-assert 876) + (player-riding symbol :offset-assert 880) + (boat-path vehicle-path :inline :offset-assert 896) + (cam-tracker handle :offset-assert 1064) + (kill-player symbol :offset 1076) + (engine-sound-id sound-id :offset 1080) + (engine-sound-envelope float :offset 1084) + (debug-draw basic :offset 1088) + (debug-path-record basic :offset 1092) + (debug-path-playback basic :offset 1096) + (measure-parameters basic :offset 1100) + (controller vehicle-controller :inline :offset 1104) + (anim spool-anim :offset 1244) + (old-target-pos transformq :inline :offset 1248) + (evilbro handle :offset 1296) + (evilsis handle :offset 1304) + ) + :heap-base #x4b0 + :method-count-assert 35 + :size-assert #x520 + :flag-assert #x2304b00520 + ) + + +(let + ((v1-7 + (new 'static 'skeleton-group + :art-group-name "fishermans-boat" + :bounds + (new 'static 'vector :y 12288.0 :w 61440.0) + :max-lod 1 + :longest-edge (meters 7.3) + :version #x6 + ) + ) + ) + (set! (-> v1-7 jgeo) 0) + (set! (-> v1-7 janim) 3) + (set! (-> v1-7 mgeo 0) (the-as uint 1)) + (set! (-> v1-7 lod-dist 0) 81920.0) + (set! (-> v1-7 mgeo 1) (the-as uint 2)) + (set! (-> v1-7 lod-dist 1) 4095996000.0) + (set! *fishermans-boat-sg* v1-7) + ) + +(let + ((v1-8 + (new 'static 'skeleton-group + :art-group-name "evilbro" + :bounds (new 'static 'vector :w 4096.0) + :version #x6 + ) + ) + ) + (set! (-> v1-8 jgeo) 0) + (set! (-> v1-8 janim) 3) + (set! (-> v1-8 mgeo 0) (the-as uint 1)) + (set! (-> v1-8 lod-dist 0) 4095996000.0) + (set! *fb-evilbro-sg* v1-8) + ) + +(let + ((v1-9 + (new 'static 'skeleton-group + :art-group-name "evilsis" + :bounds (new 'static 'vector :w 4096.0) + :version #x6 + ) + ) + ) + (set! (-> v1-9 jgeo) 0) + (set! (-> v1-9 janim) 3) + (set! (-> v1-9 mgeo 0) (the-as uint 1)) + (set! (-> v1-9 lod-dist 0) 4095996000.0) + (set! *fb-evilsis-sg* v1-9) + ) + +(defmethod TODO-RENAME-23 fishermans-boat ((obj fishermans-boat) (arg0 float)) + (local-vars + (sv-128 int) + (sv-144 rigid-body-control-point) + (sv-160 int) + (sv-176 vector) + ) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s1-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (s0-0 (new 'stack-no-clear 'vector)) + (s2-0 (new 'stack-no-clear 'vector)) + (s3-0 (-> obj rbody matrix)) + ) + (set! (-> s2-0 quad) (-> s3-0 vector 2 quad)) + (set! sv-128 0) + (while (< sv-128 6) + (set! sv-144 (-> obj control-point-array data sv-128)) + (vector-matrix*! s5-0 (-> sv-144 local-pos) s3-0) + (set! (-> sv-144 world-pos quad) (-> s5-0 quad)) + (TODO-RENAME-17 (-> obj rbody) s5-0 s1-0) + (set! (-> sv-144 velocity quad) (-> s1-0 quad)) + (set! (-> sv-144 world-pos w) (ocean-get-height s5-0)) + (let* ((f0-2 (- (-> sv-144 world-pos w) (-> s5-0 y))) + (f30-0 (fmin 1.0 (/ f0-2 (-> obj info max-buoyancy-depth)))) + ) + (when (< 0.0 f0-2) + (vector-float*! s4-0 *y-vector* (* 20.0 f0-2 (-> obj rbody mass))) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + (vector-float*! + s4-0 + *y-vector* + (* 1.6 f30-0 (fmax 0.0 (vector-dot s2-0 s1-0))) + ) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + (vector-float*! s4-0 s1-0 (* -1.0 (-> obj info drag-factor) f30-0)) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + (vector-float*! + s4-0 + (the-as vector (-> s3-0 vector)) + (* -0.5 (vector-dot (the-as vector (-> s3-0 vector)) s1-0)) + ) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + ) + ) + 0 + (set! sv-128 (+ sv-128 1)) + ) + (set! sv-160 0) + (while (< sv-160 2) + (set! sv-176 (-> obj stabilizer-array sv-160 local-pos)) + (vector-matrix*! s5-0 (the-as vector (&-> sv-176 x)) s3-0) + (vector-rotate*! s0-0 (&+ sv-176 16) s3-0) + (TODO-RENAME-17 (-> obj rbody) s5-0 s1-0) + (vector-float*! s4-0 s0-0 (* -1.0 (vector-dot s0-0 s1-0))) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + 0 + (set! sv-160 (+ sv-160 1)) + ) + (when (-> obj anchored) + (let ((s1-1 (new 'stack-no-clear 'vector))) + (vector+*! s5-0 (-> s3-0 vector 3) s2-0 24576.0) + (vector+*! s1-1 (-> obj dock-point) (-> obj dest-dir) 24576.0) + (vector-! s4-0 s1-1 s5-0) + (set! (-> s4-0 y) 0.0) + (vector-float*! s4-0 s4-0 10.0) + (if (< 81920.0 (vector-length s4-0)) + (vector-normalize! s4-0 81920.0) + ) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + (vector+*! s5-0 (-> s3-0 vector 3) s2-0 -24576.0) + (vector+*! s1-1 (-> obj dock-point) (-> obj dest-dir) -24576.0) + (vector-! s4-0 s1-1 s5-0) + ) + (set! (-> s4-0 y) 0.0) + (vector-float*! s4-0 s4-0 10.0) + (if (< 81920.0 (vector-length s4-0)) + (vector-normalize! s4-0 81920.0) + ) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + ) + (when (-> obj ignition) + (let ((s2-1 (new 'stack-no-clear 'vector))) + (vector-matrix*! s5-0 (-> obj engine-thrust-local-pos) s3-0) + (set-vector! s2-1 (- (-> obj controller steering)) 0.0 2.0 1.0) + (vector-rotate*! s2-1 s2-1 s3-0) + (vector-normalize! s2-1 1.0) + (vector-float*! s4-0 s2-1 (-> obj engine-thrust)) + ) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + ) + ) + (TODO-RENAME-26 obj) + (TODO-RENAME-25 obj) + 0 + (none) + ) + +(defbehavior fishermans-boat-set-dock-point fishermans-boat ((arg0 int)) + (set! (-> self dock-point-index) arg0) + (nth-point (-> self boat-path) arg0 (-> self dock-point)) + 0 + (none) + ) + +(defbehavior fishermans-boat-set-path-point fishermans-boat ((arg0 vector)) + (TODO-RENAME-12 + (-> self controller) + (the-as int arg0) + (-> self root-overlay trans) + ) + (vector-normalize-copy! + (-> self dest-dir) + (-> self controller path-dest-velocity) + 1.0 + ) + 0 + (none) + ) + +(defbehavior fishermans-boat-next-path-point fishermans-boat () + (move-to-next-point (-> self controller) (-> self root-overlay trans)) + (vector-normalize-copy! + (-> self dest-dir) + (-> self controller path-dest-velocity) + 1.0 + ) + 0 + (none) + ) + +(set! + (-> *part-id-table* 2896) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xa :page #x2)) + (sp-flt spt-num 0.06) + (sp-flt spt-x (meters 10.0)) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 3.0) 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-rnd-flt spt-scale-y (meters 1.5) (meters 3.0) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters 0.01) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.008666666) 1.0) + (sp-rnd-flt spt-scalevel-y (meters 0.006666667) (meters 0.008666666) 1.0) + (sp-flt spt-fade-a 0.7111111) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 119) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(defbehavior + fishermans-boat-wave fishermans-boat + ((arg0 vector) (arg1 float) (arg2 float)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> arg0 quad)) + (set! (-> gp-0 y) (ocean-get-height arg0)) + (set! (-> *part-id-table* 2896 init-specs 4 initial-valuef) (+ 24576.0 arg1)) + (set! + (-> *part-id-table* 2896 init-specs 19 initial-valuef) + (+ 49152.0 arg1) + ) + (set! + (-> *part-id-table* 2896 init-specs 1 initial-valuef) + (* 0.0000036621095 arg2) + ) + (set! (-> *part-id-table* 2896 init-specs 2 initial-valuef) (* 0.1 arg2)) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2896) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + 0 + (none) + ) + +(defbehavior fishermans-boat-spawn-particles fishermans-boat ((arg0 float)) + (let* ((s5-0 (-> self node-list data 3 bone transform)) + (s4-0 (new 'stack-no-clear 'vector)) + (f30-0 (vector-y-angle (-> s5-0 vector 2))) + ) + (vector-matrix*! s4-0 (new 'static 'vector :z 40960.0 :w 1.0) s5-0) + (fishermans-boat-wave s4-0 f30-0 arg0) + (vector-matrix*! + s4-0 + (new 'static 'vector :x 20480.0 :z -8192.0 :w 1.0) + s5-0 + ) + (fishermans-boat-wave s4-0 f30-0 arg0) + (vector-matrix*! + s4-0 + (new 'static 'vector :x -20480.0 :z -8192.0 :w 1.0) + s5-0 + ) + (fishermans-boat-wave s4-0 f30-0 arg0) + ) + 0 + (none) + ) + +(defbehavior fishermans-boat-play-sounds fishermans-boat () + (if (-> self ignition) + (set! + (-> self engine-sound-envelope) + (seek + (-> self engine-sound-envelope) + 1.0 + (* 2.0 (-> *display* seconds-per-frame)) + ) + ) + (set! + (-> self engine-sound-envelope) + (seek (-> self engine-sound-envelope) 0.0 (-> *display* seconds-per-frame)) + ) + ) + (cond + ((< 0.0 (-> self engine-sound-envelope)) + (if (zero? (-> self engine-sound-id)) + (set! (-> self engine-sound-id) (new-sound-id)) + ) + (* 0.0000008138021 (-> self engine-thrust)) + (let ((f30-0 (* 100.0 (-> self engine-sound-envelope))) + (f28-0 (+ -1.0 (* 2.0 (-> self engine-sound-envelope)))) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! gp-0 (-> self node-list data 4)) + (sound-play-by-name + (static-sound-name "boat-engine") + (-> self engine-sound-id) + (the int (* 10.24 f30-0)) + (the int (* 1524.0 f28-0)) + 0 + (the-as uint 1) + gp-0 + ) + ) + ) + (else + (when (nonzero? (-> self engine-sound-id)) + (sound-stop (-> self engine-sound-id)) + (set! (-> self engine-sound-id) (new 'static 'sound-id)) + 0 + ) + ) + ) + (none) + ) + +(defbehavior fishermans-boat-post fishermans-boat () + (when (and *target* (-> self kill-player)) + (set! (-> self kill-player) #f) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 2) + (set! (-> a1-0 message) 'attack) + (set! (-> a1-0 param 0) (the-as uint #f)) + (let ((a0-0 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-0 mode) 'endlessfall) + (set! (-> a1-0 param 1) (the-as uint a0-0)) + ) + (when (send-event-function *target* a1-0) + ) + ) + ) + (when (and *target* (-> self ignition)) + (cond + ((-> self auto-pilot) + (dummy-15 (-> self controller) (-> self root-overlay)) + (vector-normalize-copy! + (-> self dest-dir) + (-> self controller path-dest-velocity) + 1.0 + ) + ) + (else + (when (not (-> self measure-parameters)) + (let + ((f0-0 + (analog-input + (the-as int (-> *cpad-list* cpads 0 leftx)) + 128.0 + 48.0 + 110.0 + -1.0 + ) + ) + ) + (set! + (-> self controller steering) + (seek + (-> self controller steering) + (fmax -1.0 (fmin 1.0 f0-0)) + (-> *display* seconds-per-frame) + ) + ) + ) + (if (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x)) + (set! + (-> self controller throttle) + (seek + (-> self controller throttle) + 0.8 + (-> *display* seconds-per-frame) + ) + ) + (set! + (-> self controller throttle) + (seek + (-> self controller throttle) + 0.0 + (* 0.25 (-> *display* seconds-per-frame)) + ) + ) + ) + 0 + ) + ) + ) + (when + (and + (-> self player-riding) + (and + (zero? (-> self root-overlay riders num-riders)) + (or + (not *target*) + (< + 32768.0 + (vector-vector-distance + (-> self root-overlay trans) + (-> *target* control trans) + ) + ) + ) + ) + ) + (if (process-release? *target*) + (set! (-> self kill-player) #t) + ) + (set! (-> self controller throttle) 0.0) + (set! (-> self controller steering) 0.0) + ) + ) + (if (-> self ignition) + (set! + (-> self engine-thrust) + (seek + (-> self engine-thrust) + (* 1228800.0 (-> self controller throttle)) + 6144.0 + ) + ) + (set! (-> self engine-thrust) 0.0) + ) + (cond + ((-> self ignition) + (let ((f0-20 60.0) + (f1-4 1820.4445) + (f2-1 6735.6445) + (f3-0 1228800.0) + ) + (set! + (-> self propeller spin-rate) + (* f0-20 (+ f1-4 (* f2-1 (/ 1.0 f3-0) (-> self engine-thrust)))) + ) + ) + ) + (else + (set! + (-> self propeller spin-rate) + (seek (-> self propeller spin-rate) 0.0 218.45334) + ) + ) + ) + (TODO-RENAME-28 self) + (quaternion-copy! (-> self root-overlay quat) (-> self rbody rotation)) + (TODO-RENAME-18 (-> self rbody) (-> self root-overlay trans)) + (when (-> self debug-draw) + (dummy-16 (-> self controller)) + (add-debug-sphere + #t + (bucket-id debug-draw1) + (the-as vector (-> self boat-path)) + 614400.0 + (new 'static 'rgba :b #xff :a #x80) + ) + (add-debug-sphere + #t + (bucket-id debug-draw1) + (the-as vector (&-> self stack 848)) + 409600.0 + (new 'static 'rgba :b #xff :a #x80) + ) + ) + (fishermans-boat-spawn-particles 8192.0) + (fishermans-boat-play-sounds) + (rider-post) + (none) + ) + +(defbehavior fishermans-boat-leave-dock? fishermans-boat () + (let ((gp-0 #f)) + (when + (and + (< (vector-vector-distance (target-pos 0) (-> self rbody position)) 6144.0) + (or + (task-complete? *game-info* (game-task jungle-fishgame)) + (and + *cheat-mode* + (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) + ) + ) + (not (level-hint-displayed?)) + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 900 + ) + (file-status *art-control* (-> self anim name) 0) + ) + (hide-hud) + (level-hint-surpress!) + (kill-current-level-hint '() '(sidekick voicebox) 'exit) + (when + (and + (hud-hidden?) + (can-grab-display? (the-as process-taskable self)) + (= *kernel-boot-message* 'play) + ) + (let + ((s5-1 + (new + 'stack + 'font-context + *font-default-matrix* + 32 + 160 + 0.0 + (font-color default) + (font-flags shadow kerning) + ) + ) + ) + (let ((v1-17 s5-1)) + (set! (-> v1-17 width) (the float 440)) + ) + (let ((v1-18 s5-1)) + (set! (-> v1-18 height) (the float 80)) + ) + (set! (-> s5-1 flags) (font-flags shadow kerning large)) + (print-game-text + (lookup-text! *common-text* (game-text-id press-to-use) #f) + s5-1 + #f + 128 + 22 + ) + ) + (when + (and + (logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons circle)) + (process-grab? *target*) + ) + (set! (-> self waiting-for-player) #f) + (set! (-> self player-riding) #t) + (set! (-> self auto-pilot) #t) + (set! (-> self ignition) #t) + (set! (-> self anchored) #f) + (set! gp-0 #t) + ) + ) + ) + gp-0 + ) + ) + +(defbehavior fishermans-boat-enter-dock? fishermans-boat () + (when + (and + (-> self player-riding) + (= (-> self controller path-dest-index) (-> self dock-point-index)) + ) + (if (process-release? *target*) + (set! (-> self player-riding) #f) + ) + ) + (let + ((f0-0 + (vector-vector-xz-distance + (-> self root-overlay trans) + (-> self dock-point) + ) + ) + ) + (when + (and + (= (-> self controller path-dest-index) (-> self dock-point-index)) + (not (-> self anchored)) + (< f0-0 81920.0) + ) + (set! (-> self ignition) #f) + (set! (-> self anchored) #t) + ) + (< f0-0 28672.0) + ) + ) + +(defstate fishermans-boat-docked-village (fishermans-boat) + :event + (the-as + (function process int symbol event-message-block object :behavior fishermans-boat) + rigid-body-platform-event-handler + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (if (fishermans-boat-leave-dock?) + (go fishermans-boat-ride-to-misty) + ) + (rider-trans) + (if (nonzero? (-> self anim)) + (spool-push *art-control* (-> self anim name) 0 self -99.0) + ) + (none) + ) + :code + (behavior () + (set! + (-> self anim) + (new 'static 'spool-anim + :name "fishermans-boat-ride-to-misty" + :index 15 + :parts 3 + :command-list + '( + (0 + want-levels + village1 + misty + ) + (0 + shadow + target + #f + ) + (0 + shadow + sidekick + #f + ) + ((the binteger 250) + display-level + misty + display + ) + ((the binteger 250) + display-level + village1 + special + ) + ((the binteger 250) + want-vis + mis + ) + ((the binteger 250) + want-force-vis + misty + #t + ) + ((the binteger 459) + want-force-vis + misty + #f + ) + ((the binteger 459) + save + ) + ((the binteger 459) + blackout + (the binteger 20) + ) + ((the binteger 459) shadow target #t) + ) + ) + ) + (fishermans-boat-set-dock-point 0) + (fishermans-boat-set-path-point (the-as vector 0)) + (anim-loop) + (none) + ) + :post + fishermans-boat-post + ) + +(defstate fishermans-boat-leaving-village (fishermans-boat) + :trans + (behavior () + (when + (< + 614400.0 + (vector-vector-xz-distance + (-> self root-overlay trans) + (-> self dock-point) + ) + ) + (load-state-want-display-level 'village1 'special) + (load-state-want-display-level 'misty 'display) + (load-state-want-vis 'mis) + (load-state-want-force-vis 'misty #t) + (go fishermans-boat-player-control) + ) + (rider-trans) + (none) + ) + :code + (behavior () + (load-state-want-levels 'village1 'misty) + (let ((gp-0 (get-process *default-dead-pool* camera-tracker #x4000))) + (set! (-> self cam-tracker) (ppointer->handle (when gp-0 + (let + ((t9-2 + (method-of-type + camera-tracker + activate + ) + ) + ) + (t9-2 + (the-as + camera-tracker + gp-0 + ) + self + 'camera-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + camera-tracker-init + (lambda :behavior fishermans-boat + () + (camera-change-to + "camera-282" + 0 + #f + ) + (while + (!= + (-> + self + rbody + lin-momentum-damping-factor + ) + 'release + ) + (suspend) + ) + (set! + (-> + self + rbody + lin-momentum-damping-factor + ) + (the-as float #f) + ) + (camera-change-to + (the-as string 'base) + 0 + #f + ) + (none) + ) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 1) + (set! (-> a1-4 message) 'border) + (set! (-> a1-4 param 0) (the-as uint #t)) + (send-event-function (handle->process (-> self cam-tracker)) a1-4) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'mask) + (set! (-> a1-5 param 0) (the-as uint #x20800)) + (send-event-function (handle->process (-> self cam-tracker)) a1-5) + ) + (fishermans-boat-set-path-point (the-as vector 0)) + (fishermans-boat-next-path-point) + (while #t + (suspend) + ) + (none) + ) + :post + fishermans-boat-post + ) + +(defstate fishermans-boat-entering-village (fishermans-boat) + :trans + (behavior () + (when (fishermans-boat-enter-dock?) + (set! (-> self waiting-for-player) #f) + (when #t + (set! (-> *camera* cam-entity) (the-as entity #t)) + (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) 'clear-entity) + (send-event-function *camera* a1-0) + ) + (load-commands-set! *level* '()) + (load-state-want-display-level 'village1 'display) + (load-state-want-force-vis 'village1 #f) + (go fishermans-boat-docked-village) + ) + ) + (rider-trans) + (none) + ) + :code + (behavior () + (load-state-want-levels 'village1 'beach) + (load-state-want-vis 'vi1) + (fishermans-boat-set-dock-point 0) + (fishermans-boat-set-path-point (the-as vector 5)) + (anim-loop) + (none) + ) + :post + fishermans-boat-post + ) + +(defstate fishermans-boat-docked-misty (fishermans-boat) + :event + (the-as + (function process int symbol event-message-block object :behavior fishermans-boat) + rigid-body-platform-event-handler + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (if (fishermans-boat-leave-dock?) + (go fishermans-boat-ride-to-village1) + ) + (rider-trans) + (if (nonzero? (-> self anim)) + (spool-push *art-control* (-> self anim name) 0 self -99.0) + ) + (none) + ) + :code + (behavior () + (if #t + (set! + (-> self anim) + (new 'static 'spool-anim + :name "fishermans-boat-ride-to-village1" + :index 16 + :parts 3 + :command-list + '( + (0 + want-levels + village1 + misty + ) + (0 + shadow + target + #f + ) + (0 + shadow + sidekick + #f + ) + ((the binteger 250) + display-level + village1 + display + ) + ((the binteger 250) + display-level + misty + #f + ) + ((the binteger 250) + want-vis + vi1 + ) + ((the binteger 250) + want-force-vis + village1 + #t + ) + ((the binteger 459) + want-force-vis + village1 + #f + ) + ((the binteger 459) + save + ) + ((the binteger 459) + blackout + (the binteger 20) + ) + ((the binteger 459) shadow target #t) + ) + ) + ) + (set! + (-> self anim) + (new 'static 'spool-anim + :name "fishermans-boat-ride-to-village1-alt" + :index 17 + :parts 12 + :command-list + '( + (0 + want-levels + village1 + misty + ) + ((the binteger 105) + want-levels + village1 + intro + ) + ((the binteger 150) + display-level + intro + display + ) + ((the binteger 150) + want-vis + int + ) + ((the binteger 150) + kill + "med-res-level-3" + ) + ((the binteger 150) + want-force-vis + intro + #t + ) + ((the binteger 151) + send-event + self + evilbro + ) + ((the binteger 1199) + send-event + self + evilsis + ) + ((the binteger 1200) + want-force-vis + intro + #f + ) + ((the binteger 1200) + want-levels + village1 + beach + ) + ((the binteger 1200) + display-level + village1 + display + ) + ((the binteger 1200) + want-vis + vi1 + ) + ((the binteger 1200) + want-force-vis + village1 + #t + ) + ((the binteger 1349) + want-force-vis + village1 + #f + ) + ((the binteger 1349) + save + ) + ((the binteger 1349) blackout (the binteger 20)) + ) + ) + ) + ) + (load-state-want-force-vis 'misty #f) + (fishermans-boat-set-dock-point 4) + (fishermans-boat-set-path-point (the-as vector 4)) + (anim-loop) + (none) + ) + :post + fishermans-boat-post + ) + +(defstate fishermans-boat-leaving-misty (fishermans-boat) + :trans + (behavior () + (when + (< + 409600.0 + (vector-vector-xz-distance + (-> self root-overlay trans) + (-> self dock-point) + ) + ) + (load-state-want-force-vis 'village1 #t) + (load-state-want-display-level 'village1 'display) + (set-continue! *game-info* "village1-hut") + (load-commands-set! *level* (load-command-get-index *level* 'village1 2)) + (go fishermans-boat-player-control) + ) + (rider-trans) + (none) + ) + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* camera-tracker #x4000))) + (set! (-> self cam-tracker) (ppointer->handle (when gp-0 + (let + ((t9-1 + (method-of-type + camera-tracker + activate + ) + ) + ) + (t9-1 + (the-as + camera-tracker + gp-0 + ) + self + 'camera-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + camera-tracker-init + (lambda :behavior fishermans-boat + () + (camera-change-to + "camera-287" + 0 + #f + ) + (while + (!= + (-> + self + rbody + lin-momentum-damping-factor + ) + 'release + ) + (suspend) + ) + (set! + (-> + self + rbody + lin-momentum-damping-factor + ) + (the-as float #f) + ) + (camera-change-to + (the-as string 'base) + 0 + #f + ) + (none) + ) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (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) 'border) + (set! (-> a1-3 param 0) (the-as uint #t)) + (send-event-function (handle->process (-> self cam-tracker)) a1-3) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 1) + (set! (-> a1-4 message) 'mask) + (set! (-> a1-4 param 0) (the-as uint #x20800)) + (send-event-function (handle->process (-> self cam-tracker)) a1-4) + ) + (fishermans-boat-set-path-point (the-as vector 4)) + (fishermans-boat-next-path-point) + (while #t + (suspend) + ) + (none) + ) + :post + fishermans-boat-post + ) + +(defstate fishermans-boat-entering-misty (fishermans-boat) + :trans + (behavior () + (when (fishermans-boat-enter-dock?) + (set! (-> self waiting-for-player) #f) + (level-hint-spawn + (game-text-id misty-daxter-scared) + "sksp0060" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (when #t + (set! (-> *camera* cam-entity) (the-as entity #t)) + (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) 'clear-entity) + (send-event-function *camera* a1-1) + ) + (go fishermans-boat-docked-misty) + ) + ) + (rider-trans) + (none) + ) + :code + (behavior () + (set-continue! *game-info* "misty-start") + (fishermans-boat-set-dock-point 4) + (fishermans-boat-set-path-point (the-as vector 2)) + (while #t + (suspend) + ) + (none) + ) + :post + fishermans-boat-post + ) + +(defstate fishermans-boat-player-control (fishermans-boat) + :exit + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 2) + (set! (-> a1-0 message) 'change-state) + (set! (-> a1-0 param 0) (the-as uint *camera-base-mode*)) + (set! (-> a1-0 param 1) (the-as uint 0)) + (send-event-function *camera* a1-0) + ) + (set! (-> self auto-pilot) #t) + (none) + ) + :trans + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (nth-point (-> self boat-path) 0 gp-0) + (if + (< (vector-vector-xz-distance (-> self root-overlay trans) gp-0) 614400.0) + (go fishermans-boat-entering-village) + ) + (nth-point (-> self boat-path) 4 gp-0) + (if + (< (vector-vector-xz-distance (-> self root-overlay trans) gp-0) 409600.0) + (go fishermans-boat-entering-misty) + ) + ) + 0 + (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) 'message) + (set! (-> a1-0 param 0) (the-as uint 'release)) + (send-event-function (handle->process (-> self cam-tracker)) a1-0) + ) + (suspend) + (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) 'change-state) + (set! (-> a1-1 param 0) (the-as uint cam-stick)) + (set! (-> a1-1 param 1) (the-as uint 0)) + (send-event-function *camera* a1-1) + ) + (while #t + (if + (and + (= *cheat-mode* 'debug) + (logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle)) + ) + (set! (-> self auto-pilot) #f) + ) + (suspend) + ) + (none) + ) + :post + fishermans-boat-post + ) + +(defbehavior fishermans-boat-set-throttle-by-speed fishermans-boat ((arg0 float)) + (let* ((f0-0 (vector-xz-length (-> self rbody lin-velocity))) + (f1-2 (/ (- arg0 f0-0) arg0)) + (f30-0 (* 0.005 f1-2)) + ) + (format + *stdcon* + "current ~M target ~M throttle ~f~%" + f0-0 + arg0 + (-> self controller throttle) + ) + (set! + (-> self controller throttle) + (fmax 0.0 (fmin 1.0 (+ (-> self controller throttle) f30-0))) + ) + ) + 0 + (none) + ) + +(defstate fishermans-boat-measurements (fishermans-boat) + :exit + (behavior () + (set! (-> self measure-parameters) #f) + (none) + ) + :trans + (behavior () + (if (logtest? (-> *cpad-list* cpads 1 button0-rel 0) (pad-buttons square)) + (go fishermans-boat-player-control) + ) + (none) + ) + :code + (behavior () + (set! (-> self auto-pilot) #f) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 1) + (s4-0 (+ (-> self controller table-length) -1)) + ) + (while (>= s4-0 s5-0) + (let ((f30-0 (* (the float s5-0) (-> self controller table-step)))) + (set! (-> self measure-parameters) #t) + (set! (-> self controller steering) 1.0) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 300 + ) + (let + ((f0-6 + (/ + (fabs (- f30-0 (vector-xz-length (-> self rbody lin-velocity)))) + f30-0 + ) + ) + ) + (if (< 0.05 f0-6) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + ) + ) + (fishermans-boat-set-throttle-by-speed f30-0) + (suspend) + ) + (vector-z-quaternion! gp-0 (-> self root-overlay quat)) + (TODO-RENAME-10 + (-> self controller) + gp-0 + (-> self controller throttle) + s5-0 + ) + (let ((s3-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s3-0) 300) + (fishermans-boat-set-throttle-by-speed f30-0) + (suspend) + (suspend) + ) + ) + ) + (vector-z-quaternion! gp-0 (-> self root-overlay quat)) + (TODO-RENAME-10 + (-> self controller) + gp-0 + (-> self controller throttle) + s5-0 + ) + (+! s5-0 1) + ) + ) + (go fishermans-boat-player-control) + (none) + ) + :post + fishermans-boat-post + ) + +(defmethod relocate fishermans-boat ((obj fishermans-boat) (arg0 int)) + (relocate (-> obj controller) arg0) + (if (nonzero? (-> obj propeller)) + (&+! (-> obj propeller) arg0) + ) + (the-as + fishermans-boat + ((the-as + (function rigid-body-platform int rigid-body-platform) + (find-parent-method fishermans-boat 7) + ) + obj + arg0 + ) + ) + ) + +(defmethod TODO-RENAME-30 fishermans-boat ((obj fishermans-boat)) + (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) nothing) + (dummy-29 s5-0 1) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 1) 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-vector! (-> s4-0 local-sphere) 0.0 8192.0 0.0 61440.0) + (dummy-46 s5-0) + (let + ((s3-0 + (new + 'process + 'collide-shape-prim-mesh + s5-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 8192.0 0.0 61440.0) + ) + (dummy-28 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-overlay) s5-0) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-31 fishermans-boat ((obj fishermans-boat)) + (dummy-14 obj *fishermans-boat-sg* '()) + (logclear! (-> obj mask) (process-mask actor-pause movie)) + (logior! (-> obj skel status) 1) + (process-entity-status! obj (entity-perm-status bit-3) #t) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (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 boat-path point-count) 0) + (add-point! (-> obj boat-path) -88473.6 28672.0 425984.0 16384.0) + (add-point! (-> obj boat-path) 18432.0 69632.0 1014169.6 14563.556) + (add-point! (-> obj boat-path) 292864.0 122880.0 2875801.5 18204.445) + (add-point! (-> obj boat-path) 167936.0 40960.0 3069952.0 32768.0) + (add-point! (-> obj boat-path) 49971.2 28672.0 2924544.0 -16384.0) + (add-point! (-> obj boat-path) 175718.4 122880.0 626688.0 -18204.445) + (add-point! (-> obj boat-path) 50790.4 40960.0 197427.2 32768.0) + (init! + (-> obj controller) + (-> obj boat-path) + *boat-turning-radius-table* + *boat-throttle-control-table* + 30 + 4096.0 + ) + (set! + (-> obj propeller) + (new + 'process + 'joint-mod-spinner + obj + 4 + (new 'static 'vector :z -1.0 :w 1.0) + 0.0 + ) + ) + (set! (-> obj ignition) #f) + (set! (-> obj anchored) #t) + (set! (-> obj player-riding) #f) + (set! (-> obj kill-player) #f) + (set! (-> obj debug-draw) #f) + (set! (-> obj cam-tracker) (the-as handle #f)) + (set! (-> obj auto-pilot) #f) + (if (= (-> *game-info* current-continue level) 'misty) + (fishermans-boat-set-dock-point 4) + (fishermans-boat-set-dock-point 0) + ) + (fishermans-boat-set-path-point (the-as vector (-> obj dock-point-index))) + (fishermans-boat-next-path-point) + (set! (-> obj root-overlay trans quad) (-> obj dock-point quad)) + (set! (-> obj root-overlay trans y) 0.0) + (forward-up-nopitch->quaternion + (-> obj root-overlay quat) + (-> obj dest-dir) + *up-vector* + ) + (TODO-RENAME-29 obj *fishermans-boat-constants*) + (let ((v1-39 (-> obj control-point-array data))) + (set! (-> v1-39 0 local-pos x) 0.0) + (set! (-> v1-39 0 local-pos y) 0.0) + (set! (-> v1-39 0 local-pos z) 24576.0) + (set! (-> v1-39 0 local-pos w) 1.0) + ) + (let ((v1-41 (-> obj control-point-array data 1))) + (set! (-> v1-41 local-pos x) 22528.0) + (set! (-> v1-41 local-pos y) 0.0) + (set! (-> v1-41 local-pos z) -20480.0) + (set! (-> v1-41 local-pos w) 1.0) + ) + (let ((v1-43 (-> obj control-point-array data 2))) + (set! (-> v1-43 local-pos x) -22528.0) + (set! (-> v1-43 local-pos y) 0.0) + (set! (-> v1-43 local-pos z) -20480.0) + (set! (-> v1-43 local-pos w) 1.0) + ) + (let ((v1-45 (-> obj control-point-array data 3))) + (set! (-> v1-45 local-pos x) 0.0) + (set! (-> v1-45 local-pos y) 0.0) + (set! (-> v1-45 local-pos z) 49152.0) + (set! (-> v1-45 local-pos w) 1.0) + ) + (let ((v1-47 (-> obj control-point-array data 4))) + (set! (-> v1-47 local-pos x) 22528.0) + (set! (-> v1-47 local-pos y) 0.0) + (set! (-> v1-47 local-pos z) 12288.0) + (set! (-> v1-47 local-pos w) 1.0) + ) + (let ((v1-49 (-> obj control-point-array data 5))) + (set! (-> v1-49 local-pos x) -22528.0) + (set! (-> v1-49 local-pos y) 0.0) + (set! (-> v1-49 local-pos z) 12288.0) + (set! (-> v1-49 local-pos w) 1.0) + ) + (let ((v1-50 (-> obj stabilizer-array))) + (set! (-> v1-50 0 local-pos x) 16384.0) + (set! (-> v1-50 0 local-pos y) 20480.0) + (set! (-> v1-50 0 local-pos z) -32768.0) + (set! (-> v1-50 0 local-pos w) 1.0) + ) + (set-vector! + (-> obj stabilizer-array 1 local-pos) + -16384.0 + 20480.0 + -32768.0 + 1.0 + ) + (set-vector! (-> obj stabilizer-array 0 normal) 0.0 0.75 0.2 1.0) + (set-vector! (-> obj stabilizer-array 1 normal) 0.0 0.75 0.2 1.0) + (set-vector! (-> obj engine-thrust-local-pos) 0.0 12288.0 -20480.0 1.0) + (set! (-> obj root-overlay nav-radius) 53248.0) + (nav-mesh-connect obj (-> obj root-overlay) (the-as nav-control #f)) + (set! (-> obj engine-sound-id) (new 'static 'sound-id)) + (set! (-> obj debug-path-record) #f) + (set! (-> obj debug-path-playback) #f) + (set! (-> obj measure-parameters) #f) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (let ((a0-29 (-> obj entity))) + (if (when a0-29 + (let ((a0-30 (-> a0-29 extra perm task))) + (if a0-30 + (= a0-30 (game-task none)) + ) + ) + ) + (set! (-> obj entity extra perm task) (game-task complete)) + ) + ) + (none) + ) + +(defmethod copy-defaults! fishermans-boat ((obj fishermans-boat) (arg0 res-lump)) + (stack-size-set! (-> obj main-thread) 512) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (TODO-RENAME-30 obj) + (process-drawable-from-entity! obj arg0) + (TODO-RENAME-31 obj) + (if (= (-> *game-info* current-continue level) 'misty) + (go fishermans-boat-docked-misty) + (go fishermans-boat-docked-village) + ) + (none) + ) + +(defbehavior fishermans-boat-reset-physics fishermans-boat () + (TODO-RENAME-22 + (-> self rbody) + (-> self root-overlay trans) + (-> self root-overlay quat) + (-> self info linear-damping) + (-> self info angular-damping) + ) + (vector-reset! (-> self player-force)) + (set! (-> self player-impulse) #f) + (set! (-> self player-contact) #f) + 0 + (none) + ) + +(defstate fishermans-boat-ride-to-misty (fishermans-boat) + :code + (behavior () + (set! (-> self propeller enable) #f) + (quaternion-identity! (-> self root-overlay quat)) + (set! (-> self root-overlay trans quad) (-> self entity extra trans quad)) + (set! (-> self player-riding) #f) + (set! (-> self auto-pilot) #f) + (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) 'clone-anim) + (set! (-> a1-0 param 0) (the-as uint self)) + (when (send-event-function *target* 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) 'matrix) + (set! (-> a1-1 param 0) (the-as uint 'play-anim)) + (send-event-function (ppointer->process (-> *target* sidekick)) 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) 'blend-shape) + (set! (-> a1-2 param 0) (the-as uint #t)) + (send-event-function *target* a1-2) + ) + (let* ((gp-0 (get-process *default-dead-pool* othercam #x4000)) + (v1-20 (when gp-0 + (let ((t9-5 (method-of-type othercam activate))) + (t9-5 + (the-as othercam gp-0) + self + 'othercam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + othercam-init-by-other + self + 5 + #f + #t + ) + (-> gp-0 ppointer) + ) + ) + (a1-6 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'mask) + (set! (-> a1-6 param 0) (the-as uint 2048)) + (send-event-function (ppointer->process v1-20) a1-6) + ) + (set! (-> self draw force-lod) 0) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim (-> self draw art-group data 3)) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (set! (-> self draw force-lod) -1) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'blend-shape) + (set! (-> a1-8 param 0) (the-as uint #f)) + (send-event-function *target* a1-8) + ) + (ja-channel-set! 1) + (let ((v1-33 (-> self skel root-channel 0))) + (set! + (-> v1-33 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + (vector<-cspace! (-> self root-overlay trans) (-> self node-list data 3)) + (matrix->quaternion + (-> self root-overlay quat) + (-> self node-list data 3 bone transform) + ) + (fishermans-boat-reset-physics) + (transform-post) + (when *target* + (vector<-cspace! + (the-as vector (-> self old-target-pos)) + (-> *target* node-list data 3) + ) + (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) 'trans) + (set! (-> a1-12 param 0) (the-as uint 'restore)) + (set! (-> a1-12 param 1) (the-as uint (-> self old-target-pos))) + (send-event-function *target* a1-12) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 0) + (set! (-> a1-13 message) 'end-mode) + (send-event-function *target* a1-13) + ) + (dummy-47 (-> self root-overlay)) + (dummy-60 + (-> *target* control) + 4096.0 + 40960.0 + #t + (-> *target* control root-prim collide-with) + ) + (logior! (-> *target* control status) 7) + (suspend) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) self) + (set! (-> a1-15 num-params) 0) + (set! (-> a1-15 message) 'teleport-to-other-start-string) + (send-event-function *camera* a1-15) + ) + ) + (set-continue! *game-info* "misty-start") + ) + ) + (set! (-> self waiting-for-player) #t) + (set! (-> self ignition) #f) + (set! (-> self anchored) #t) + (set! (-> self propeller enable) #t) + (fishermans-boat-play-sounds) + (copy-settings-from-target! *setting-control*) + (let ((gp-1 (get-process *default-dead-pool* process #x4000))) + (when gp-1 + (let ((t9-25 (method-of-type process activate))) + (t9-25 gp-1 self 'process (the-as pointer #x70004000)) + ) + (run-next-time-in-process + gp-1 + (lambda :behavior fishermans-boat + () + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 300) + (suspend) + ) + ) + (while + (or + (-> *setting-control* current ambient) + (-> *setting-control* current hint) + (-> *setting-control* current movie) + ) + (suspend) + ) + (suspend) + (level-hint-spawn + (game-text-id misty-daxter-scared) + "sksp0060" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (none) + ) + ) + (-> gp-1 ppointer) + ) + ) + (go fishermans-boat-docked-misty) + (none) + ) + :post + (behavior () + (ja-post) + (fishermans-boat-spawn-particles 81920.0) + (fishermans-boat-play-sounds) + (none) + ) + ) + +(defstate fishermans-boat-ride-to-village1 (fishermans-boat) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'evilbro) + (when (= (level-status *level* 'intro) 'active) + (let ((gp-1 (entity-by-name "evilbro-2"))) + (when gp-1 + (let + ((s5-0 (get-process *default-dead-pool* manipy #x4000)) + ) + (set! (-> self evilbro) (ppointer->handle (when s5-0 + (let + ((t9-3 + (method-of-type + manipy + activate + ) + ) + ) + (t9-3 + (the-as + manipy + s5-0 + ) + self + 'manipy + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-0 + manipy-init + (-> + self + root-overlay + trans + ) + gp-1 + *fb-evilbro-sg* + #f + ) + (-> + s5-0 + ppointer + ) + ) + ) + ) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'anim-mode) + (set! (-> a1-5 param 0) (the-as uint 'clone-anim)) + (send-event-function + (handle->process (-> self evilbro)) + a1-5 + ) + ) + (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) 'blend-shape) + (set! (-> a1-6 param 0) (the-as uint #t)) + (send-event-function + (handle->process (-> self evilbro)) + a1-6 + ) + ) + (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) 'center-joint) + (set! (-> a1-7 param 0) (the-as uint 3)) + (send-event-function + (handle->process (-> self evilbro)) + a1-7 + ) + ) + ) + ) + (let ((gp-2 (entity-by-name "evilsis-2"))) + (when gp-2 + (let + ((s5-1 (get-process *default-dead-pool* manipy #x4000)) + ) + (set! (-> self evilsis) (ppointer->handle (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-overlay + trans + ) + gp-2 + *fb-evilsis-sg* + #f + ) + (-> + s5-1 + ppointer + ) + ) + ) + ) + ) + (let + ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'anim-mode) + (set! (-> a1-11 param 0) (the-as uint 'clone-anim)) + (send-event-function + (handle->process (-> self evilsis)) + a1-11 + ) + ) + (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) 'blend-shape) + (set! (-> a1-12 param 0) (the-as uint #t)) + (send-event-function + (handle->process (-> self evilsis)) + a1-12 + ) + ) + (let + ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 1) + (set! (-> a1-13 message) 'center-joint) + (set! (-> a1-13 param 0) (the-as uint 3)) + (send-event-function + (handle->process (-> self evilsis)) + a1-13 + ) + ) + ) + ) + ) + ) + ((= v1-0 'evilsis) + (let ((a0-44 (handle->process (-> self evilbro)))) + (if a0-44 + (deactivate a0-44) + ) + ) + (let ((a0-48 (handle->process (-> self evilsis)))) + (if a0-48 + (deactivate a0-48) + ) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (set! (-> self propeller enable) #f) + (set! (-> self evilbro) (the-as handle #f)) + (set! (-> self evilsis) (the-as handle #f)) + (quaternion-identity! (-> self root-overlay quat)) + (set! (-> self root-overlay trans quad) (-> self entity extra trans quad)) + (set! (-> self player-riding) #f) + (set! (-> self auto-pilot) #f) + (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) 'clone-anim) + (set! (-> a1-0 param 0) (the-as uint self)) + (when (send-event-function *target* 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) 'matrix) + (set! (-> a1-1 param 0) (the-as uint 'play-anim)) + (send-event-function (ppointer->process (-> *target* sidekick)) 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) 'blend-shape) + (set! (-> a1-2 param 0) (the-as uint #t)) + (send-event-function *target* a1-2) + ) + (let* ((gp-0 (get-process *default-dead-pool* othercam #x4000)) + (v1-20 (when gp-0 + (let ((t9-5 (method-of-type othercam activate))) + (t9-5 + (the-as othercam gp-0) + self + 'othercam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + othercam-init-by-other + self + 5 + #f + #t + ) + (-> gp-0 ppointer) + ) + ) + (a1-6 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'mask) + (set! (-> a1-6 param 0) (the-as uint 2048)) + (send-event-function (ppointer->process v1-20) a1-6) + ) + (set! (-> self draw force-lod) 0) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim (-> self draw art-group data 3)) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (set! (-> self draw force-lod) -1) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'blend-shape) + (set! (-> a1-8 param 0) (the-as uint #f)) + (send-event-function *target* a1-8) + ) + (ja-channel-set! 1) + (let ((v1-33 (-> self skel root-channel 0))) + (set! + (-> v1-33 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + (vector<-cspace! (-> self root-overlay trans) (-> self node-list data 3)) + (matrix->quaternion + (-> self root-overlay quat) + (-> self node-list data 3 bone transform) + ) + (fishermans-boat-reset-physics) + (transform-post) + (when *target* + (vector<-cspace! + (the-as vector (-> self old-target-pos)) + (-> *target* node-list data 3) + ) + (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) 'trans) + (set! (-> a1-12 param 0) (the-as uint 'restore)) + (set! (-> a1-12 param 1) (the-as uint (-> self old-target-pos))) + (send-event-function *target* a1-12) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 0) + (set! (-> a1-13 message) 'end-mode) + (send-event-function *target* a1-13) + ) + (dummy-47 (-> self root-overlay)) + (dummy-60 + (-> *target* control) + 4096.0 + 40960.0 + #t + (-> *target* control root-prim collide-with) + ) + (logior! (-> *target* control status) 7) + (suspend) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) self) + (set! (-> a1-15 num-params) 0) + (set! (-> a1-15 message) 'teleport-to-other-start-string) + (send-event-function *camera* a1-15) + ) + ) + (set-continue! *game-info* "village1-hut") + ) + ) + (set! (-> self waiting-for-player) #t) + (set! (-> self ignition) #f) + (set! (-> self anchored) #t) + (set! (-> self propeller enable) #t) + (fishermans-boat-play-sounds) + (process-entity-status! self (entity-perm-status complete) #t) + (go fishermans-boat-docked-village) + (none) + ) + :post + (behavior () + (ja-post) + (fishermans-boat-spawn-particles 81920.0) + (fishermans-boat-play-sounds) + (none) + ) + ) + + + + diff --git a/goal_src/levels/village1/sage.gc b/goal_src/levels/village1/sage.gc index 91a2c1b7d9..6b760f8144 100644 --- a/goal_src/levels/village1/sage.gc +++ b/goal_src/levels/village1/sage.gc @@ -7,7 +7,8 @@ (define-extern *sage-sg* skeleton-group) -;; definition of type sage +;; DECOMP BEGINS + (deftype sage (process-taskable) ((reminder-played basic :offset-assert 380) (assistant handle :offset-assert 384) @@ -18,7 +19,7 @@ :flag-assert #x3501200188 ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -36,7 +37,6 @@ (set! *sage-sg* v1-1) ) -;; definition for method 32 of type sage (defmethod play-anim! sage ((obj sage) (arg0 symbol)) (with-pp (when (!= *kernel-boot-message* 'play) @@ -646,7 +646,7 @@ (run-now-in-process s5-2 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *assistant-sg* #f @@ -992,8 +992,6 @@ ) ) -;; definition for method 45 of type sage -;; INFO: Return type mismatch symbol vs none. (defmethod dummy-45 sage ((obj sage)) (cond ((and @@ -1018,7 +1016,10 @@ ) ((and (-> obj reminder-played) - (< 81920.0 (vector-vector-distance (-> obj root trans) (camera-pos))) + (< + 81920.0 + (vector-vector-distance (-> obj root-override trans) (camera-pos)) + ) ) #t ) @@ -1028,7 +1029,6 @@ (none) ) -;; definition for method 31 of type sage (defmethod get-art-elem sage ((obj sage)) (cond ((and @@ -1110,7 +1110,6 @@ ) ) -;; definition for method 43 of type sage (defmethod TODO-RENAME-43 sage ((obj sage)) (let ((s5-0 @@ -1130,30 +1129,29 @@ ) (cond ((< (-> s5-0 y) -12288.0) + #f ) ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "SAGELP03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP03" #f (-> obj root-override trans)) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "SAGELP04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP04" #f (-> obj root-override trans)) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "SAGELP05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP05" #f (-> obj root-override trans)) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "SAGELP06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP06" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "SAGELP11" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP11" #f (-> obj root-override trans)) ) ) ) ) ) - (none) ) -;; failed to figure out what this is: (defstate idle (sage) :virtual #t :trans @@ -1224,7 +1222,10 @@ (if (and (-> self reminder-played) - (< 81920.0 (vector-vector-distance (-> self root trans) (camera-pos))) + (< + 81920.0 + (vector-vector-distance (-> self root-override trans) (camera-pos)) + ) ) (go-virtual idle) ) @@ -1298,7 +1299,6 @@ ) ) -;; failed to figure out what this is: (defstate play-anim (sage) :virtual #t :exit @@ -1335,14 +1335,11 @@ ) ) -;; definition for method 39 of type sage (defmethod should-display? sage ((obj sage)) (not (sages-kidnapped?)) ) -;; definition for method 41 of type sage -;; INFO: Return type mismatch int vs none. -(defmethod initialize-collision sage ((obj sage) (arg0 int)) +(defmethod initialize-collision sage ((obj sage) (arg0 int) (arg1 vector)) (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) @@ -1374,13 +1371,12 @@ ) (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (dummy-50 s5-0) - (set! (-> obj root) s5-0) + (set! (-> obj root-override) s5-0) ) 0 (none) ) -;; definition for method 11 of type sage (defmethod copy-defaults! sage ((obj sage) (arg0 res-lump)) (dummy-40 obj arg0 *sage-sg* 3 40 (new 'static 'vector :w 4096.0) 5) (set! (-> obj tasks) (get-task-control (game-task misty-cannon))) @@ -1390,4 +1386,8 @@ (set! (-> obj draw light-index) (the-as uint 1)) (dummy-42 obj) (none) - ) \ No newline at end of file + ) + + + + diff --git a/goal_src/levels/village1/yakow.gc b/goal_src/levels/village1/yakow.gc index 501c009bb6..1cabc87fee 100644 --- a/goal_src/levels/village1/yakow.gc +++ b/goal_src/levels/village1/yakow.gc @@ -5,3 +5,1525 @@ ;; name in dgo: yakow ;; dgos: L1, VI1 +(define-extern *yakow-sg* skeleton-group) +(define-extern *village1cam-sg* skeleton-group) + +(declare-type yakow process-drawable) +(define-extern yakow-graze (state yakow)) +(define-extern yakow-idle (state yakow)) +(define-extern yakow-run-away (state yakow)) +(define-extern yakow-graze-kicked (state yakow)) +(define-extern yakow-walk-to (state vector yakow)) +(define-extern yakow-notice (state yakow)) +(define-extern yakow-kicked (state yakow)) +(define-extern yakow-die (state yakow)) + +;; DECOMP BEGINS + +(let + ((v1-0 + (new 'static 'skeleton-group + :art-group-name "village1cam" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + ) + ) + ) + (set! (-> v1-0 jgeo) 0) + (set! (-> v1-0 janim) 2) + (set! (-> v1-0 mgeo 0) (the-as uint 1)) + (set! (-> v1-0 lod-dist 0) 4095996000.0) + (set! *village1cam-sg* v1-0) + ) + +(defun yakow-cam () + (with-pp + (let ((gp-0 (entity-actor-lookup (-> pp entity) 'alt-actor 0))) + (when gp-0 + (let ((s5-0 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-0 + (let ((t9-2 (method-of-type pov-camera activate))) + (t9-2 + (the-as pov-camera s5-0) + pp + 'pov-camera + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> gp-0 extra trans) + *village1cam-sg* + "anim" + 0 + #f + '() + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + (none) + ) + ) + +(deftype yakow-bank (basic) + ((walk-cycle-frame-count float :offset-assert 4) + (run-cycle-frame-count float :offset-assert 8) + (walk-speed meters :offset-assert 12) + (run-speed meters :offset-assert 16) + (walk-anim-speed float :offset-assert 20) + (run-anim-speed float :offset-assert 24) + (walk-away-dist meters :offset-assert 28) + (run-away-dist meters :offset-assert 32) + (walk-rotate-speed float :offset-assert 36) + (run-rotate-speed float :offset-assert 40) + (walk-turn-time uint64 :offset-assert 48) + (run-turn-time uint64 :offset-assert 56) + (max-walk-speed float :offset-assert 64) + (min-run-speed float :offset-assert 68) + (walk-run-blend-rate float :offset-assert 72) + (walk-turn-blend-rate float :offset-assert 76) + (max-run-speed float :offset-assert 80) + (acceleration meters :offset-assert 84) + (default-patrol-time uint64 :offset-assert 88) + (default-idle-distance meters :offset-assert 96) + (safe-distance meters :offset-assert 100) + (min-run-anim-speed float :offset-assert 104) + (max-run-anim-speed float :offset-assert 108) + (min-walk-anim-speed float :offset-assert 112) + (speed-boost-impulse meters :offset-assert 116) + ) + :method-count-assert 9 + :size-assert #x78 + :flag-assert #x900000078 + ) + + +(define + *YAKOW-bank* + (new 'static 'yakow-bank + :walk-cycle-frame-count 16.0 + :run-cycle-frame-count 16.0 + :walk-speed (meters 2.13) + :run-speed (meters 6.0) + :walk-anim-speed 1.0 + :run-anim-speed 2.0 + :walk-away-dist (meters 10.0) + :run-away-dist (meters 6.0) + :walk-rotate-speed 131072.0 + :run-rotate-speed 131072.0 + :walk-turn-time #x96 + :run-turn-time #x3c + :max-walk-speed 16384.0 + :min-run-speed 15155.2 + :walk-run-blend-rate 6.0 + :walk-turn-blend-rate 4.0 + :max-run-speed 61440.0 + :acceleration (meters 3.0) + :default-patrol-time #x12c + :default-idle-distance (meters 10.0) + :safe-distance (meters 20.0) + :min-run-anim-speed 0.5 + :max-run-anim-speed 1.5 + :min-walk-anim-speed 0.5 + :speed-boost-impulse (meters 4.0) + ) + ) + +(deftype yakow (process-drawable) + ((root-override collide-shape-moving :offset 112) + (fact-override fact-info-enemy :offset 144) + (player-attack-id int32 :offset-assert 176) + (walk-run-blend float :offset-assert 180) + (walk-turn-blend float :offset-assert 184) + (run-mode basic :offset-assert 188) + (travel-speed meters :offset-assert 192) + (final-speed meters :offset-assert 196) + (rotate-speed float :offset-assert 200) + (turn-time uint64 :offset-assert 208) + (vulnerable basic :offset-assert 216) + (grazing basic :offset-assert 220) + (push-velocity vector :inline :offset-assert 224) + (home-base vector :inline :offset-assert 240) + (dest-base vector :inline :offset-assert 256) + (dest-rot degrees :offset-assert 272) + (enable-turn-around basic :offset-assert 276) + (rotating basic :offset-assert 280) + (in-pen basic :offset-assert 284) + ) + :heap-base #xb0 + :method-count-assert 20 + :size-assert #x120 + :flag-assert #x1400b00120 + ) + + +(let + ((v1-5 + (new 'static 'skeleton-group + :art-group-name "yakow" + :bounds + (new 'static 'vector :y 10240.0 :w 18022.4) + :max-lod 1 + :longest-edge (meters 1.3) + :version #x6 + :shadow 3 + ) + ) + ) + (set! (-> v1-5 jgeo) 0) + (set! (-> v1-5 janim) 4) + (set! (-> v1-5 mgeo 0) (the-as uint 1)) + (set! (-> v1-5 lod-dist 0) 81920.0) + (set! (-> v1-5 mgeo 1) (the-as uint 2)) + (set! (-> v1-5 lod-dist 1) 4095996000.0) + (set! *yakow-sg* v1-5) + ) + +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defbehavior + yakow-default-event-handler yakow + ((arg0 process-drawable) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'touch) + (let* ((s4-0 arg0) + (v1-2 + (if + (and + (nonzero? s4-0) + (type-type? (-> s4-0 type) process-drawable) + ) + s4-0 + ) + ) + ) + (when + (and + v1-2 + (< + 8192.0 + (- + (-> v1-2 root trans y) + (-> self root-override trans y) + ) + ) + ) + (dummy-45 (-> self root-override)) + (dummy-55 + (-> self root-override) + arg0 + (-> arg3 param 0) + 0.7 + 6144.0 + 16384.0 + ) + ) + ) + ) + ((= v1-0 'attack) + (let ((v1-9 (-> arg3 param 2))) + (the-as none (cond + ((!= v1-9 (-> self player-attack-id)) + (set! + (-> self player-attack-id) + (the-as int v1-9) + ) + (if (-> self vulnerable) + (go yakow-kicked) + ) + ) + (else + 'push + ) + ) + ) + ) + ) + ) + ) + ) + ) + +yakow-default-event-handler + +(defbehavior yakow-task-complete? yakow ((arg0 symbol)) + (local-vars (sv-16 symbol) (sv-20 (pointer process-tree))) + (let + ((gp-0 + (not + (and + (-> self entity) + (logtest? + (-> self entity extra perm status) + (entity-perm-status complete) + ) + ) + ) + ) + ) + (if arg0 + (process-entity-status! self (entity-perm-status complete) #t) + (process-entity-status! self (entity-perm-status complete) #f) + ) + (when (or (-> self link prev) (-> self link next)) + (set! sv-16 (the-as symbol #f)) + (set! sv-20 (-> self child)) + (apply-all (-> self link) actor-link-subtask-complete-hook (& sv-16)) + (cond + (sv-16 + (close-specific-task! + (-> self entity extra perm task) + (task-status need-hint) + ) + (close-specific-task! + (-> self entity extra perm task) + (task-status need-introduction) + ) + (close-specific-task! + (-> self entity extra perm task) + (task-status need-reminder) + ) + (if gp-0 + (yakow-cam) + ) + (level-hint-spawn + (game-text-id yakow-owed-powercell) + "sksp018a" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (else + (open-specific-task! + (-> self entity extra perm task) + (task-status need-reminder) + ) + ) + ) + sv-16 + ) + ) + ) + +(defbehavior yakow-common-post yakow () + (dummy-14 (-> self draw shadow-ctrl)) + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> self root-override root-prim prim-core)) + #f + self + ) + ) + (ja-post) + (none) + ) + +(defbehavior yakow-simple-post yakow () + (yakow-common-post) + (dummy-47 (-> self root-override)) + (none) + ) + +(defbehavior yakow-post yakow () + (dummy-11 (-> self nav) (-> self nav target-pos)) + (set! (-> self rotating) #f) + (let ((f30-0 0.0)) + (when (< 40.96 (vector-length (-> self nav travel))) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector-z-quaternion! s5-0 (-> self root-override quat)) + (seek-toward-heading-vec! + (-> self root-override) + (-> self nav travel) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + (vector-z-quaternion! gp-0 (-> self root-override quat)) + (set! + (-> self rotating) + (< + (vector-dot gp-0 s5-0) + (cos (* 8192.0 (-> *display* seconds-per-frame))) + ) + ) + (when (-> self rotating) + (let ((v1-16 (new 'stack-no-clear 'vector))) + (vector-cross! v1-16 gp-0 s5-0) + (set! f30-0 (sign (-> v1-16 y))) + ) + ) + ) + ) + (set! + (-> self walk-turn-blend) + (seek + (-> self walk-turn-blend) + f30-0 + (* (-> *YAKOW-bank* walk-turn-blend-rate) (-> *display* seconds-per-frame)) + ) + ) + ) + (set! + (-> self final-speed) + (fmin + (-> self travel-speed) + (* (vector-length (-> self nav travel)) (-> *display* frames-per-second)) + ) + ) + (let + ((v1-24 + (vector-normalize-copy! + (new-stack-vector0) + (-> self nav travel) + (-> self final-speed) + ) + ) + ) + (set! (-> self root-override transv x) (-> v1-24 x)) + (set! (-> self root-override transv z) (-> v1-24 z)) + ) + (vector-v++! + (-> self root-override transv) + (dummy-62 (-> self root-override) (new-stack-vector0) 0.0) + ) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (set! (-> gp-2 quad) (-> self root-override trans quad)) + (dummy-59 + (-> self root-override) + (-> self root-override transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (set! + (-> self final-speed) + (* + (vector-vector-xz-distance gp-2 (-> self root-override trans)) + (-> *display* frames-per-second) + ) + ) + ) + (set! + (-> self travel-speed) + (fmin (-> self travel-speed) (-> self final-speed)) + ) + (dummy-10 (-> self water)) + (when + (and + (logtest? (-> self nav current-poly pat) 2) + (not + (and + (-> self entity) + (logtest? + (-> self entity extra perm status) + (entity-perm-status complete) + ) + ) + ) + ) + (set! (-> self in-pen) #t) + (set! (-> self nav destination-pos quad) (-> self dest-base quad)) + (yakow-task-complete? #t) + ) + (yakow-common-post) + (none) + ) + +(defbehavior yakow-generate-travel-vector yakow () + (let + ((gp-1 + (vector-! + (new 'stack-no-clear 'vector) + (-> self root-override trans) + (target-pos 0) + ) + ) + (s5-1 + (vector-z-quaternion! + (new 'stack-no-clear 'vector) + (-> self root-override quat) + ) + ) + ) + 0.0 + 0.0 + (set! (-> gp-1 y) 0.0) + (set! (-> self nav travel quad) (-> gp-1 quad)) + (vector-normalize! (-> self nav travel) 409600.0) + (dummy-24 (-> self nav) 204.8 #f) + (when (not (-> self enable-turn-around)) + (set! (-> gp-1 quad) (-> self nav travel quad)) + (let ((f30-0 (vector-length gp-1))) + (vector-normalize! gp-1 1.0) + (if (and (< 409.6 f30-0) (>= (vector-dot s5-1 gp-1) (cos 10922.667))) + (set! (-> s5-1 quad) (-> gp-1 quad)) + ) + ) + (set! (-> self nav travel quad) (-> s5-1 quad)) + (vector-normalize! (-> self nav travel) 409600.0) + (dummy-24 (-> self nav) 204.8 #f) + (vector-length (-> self nav travel)) + ) + ) + (vector+! + (-> self nav target-pos) + (-> self root-override trans) + (-> self nav travel) + ) + ) + +(defbehavior yakow-run-post yakow () + (yakow-generate-travel-vector) + (yakow-post) + (none) + ) + +(defbehavior yakow-blend-walk-run yakow () + (let ((gp-0 (-> *display* base-frame-counter))) + (while #t + (let ((f30-0 (-> self final-speed))) + (cond + ((and (>= 409.6 (-> self final-speed)) (not (-> self rotating))) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 4) + ) + ) + (ja-channel-push! 1 45) + ) + (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 4)) + num-func-identity + ) + (set! (-> s5-0 frame-num) 0.0) + ) + (while + (or + (< (- (-> *display* base-frame-counter) gp-0) 60) + (< (-> self final-speed) 409.6) + ) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) 1.0) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (else + (set! gp-0 (-> *display* base-frame-counter)) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 3 22) + (let ((s5-1 (-> self skel root-channel 0))) + (set! (-> s5-1 frame-interp) 0.0) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (let ((s5-2 (-> self skel root-channel 1))) + (set! (-> s5-2 frame-interp) 0.0) + (joint-control-channel-group-eval! + s5-2 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-identity + ) + (set! (-> s5-2 frame-num) 0.0) + ) + (let ((s5-3 (-> self skel root-channel 2))) + (set! (-> s5-3 frame-interp) 0.0) + (joint-control-channel-group-eval! + s5-3 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-identity + ) + (set! (-> s5-3 frame-num) 0.0) + ) + ) + (cond + ((< (-> self walk-turn-blend) 0.0) + (let ((v1-49 (-> self skel root-channel 1))) + (set! + (-> v1-49 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + ) + ) + (else + (let ((v1-52 (-> self skel root-channel 1))) + (set! + (-> v1-52 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + ) + ) + ) + (cond + ((< f30-0 (-> *YAKOW-bank* min-run-speed)) + (set! (-> self run-mode) #f) + ) + ((< (-> *YAKOW-bank* max-walk-speed) f30-0) + (set! (-> self run-mode) #t) + ) + ) + (if (-> self run-mode) + (set! + (-> self walk-run-blend) + (seek + (-> self walk-run-blend) + 1.0 + (* + (-> *YAKOW-bank* walk-run-blend-rate) + (-> *display* seconds-per-frame) + ) + ) + ) + (set! + (-> self walk-run-blend) + (seek + (-> self walk-run-blend) + 0.0 + (* + (-> *YAKOW-bank* walk-run-blend-rate) + (-> *display* seconds-per-frame) + ) + ) + ) + ) + (let ((v1-68 (-> self skel root-channel 1))) + (set! (-> v1-68 frame-interp) (fabs (-> self walk-turn-blend))) + ) + (let ((v1-72 (-> self skel root-channel 2))) + (set! (-> v1-72 frame-interp) (-> self walk-run-blend)) + ) + (let* ((f0-25 (* (-> *YAKOW-bank* walk-anim-speed) f30-0)) + (f1-5 (-> *YAKOW-bank* walk-speed)) + (f0-26 (* f0-25 (/ 1.0 f1-5))) + ) + (let* ((f1-9 (* (-> *YAKOW-bank* run-anim-speed) f30-0)) + (f2-1 (-> *YAKOW-bank* run-speed)) + (f1-12 + (fmax + (fmin (* f1-9 (/ 1.0 f2-1)) (-> *YAKOW-bank* max-run-anim-speed)) + (-> *YAKOW-bank* min-run-anim-speed) + ) + ) + ) + (if (-> self run-mode) + (set! f0-26 f1-12) + ) + ) + (if (-> self rotating) + (set! f0-26 (fmax (-> *YAKOW-bank* min-walk-anim-speed) f0-26)) + ) + (let ((a0-24 (-> self skel root-channel 0))) + (set! (-> a0-24 param 0) f0-26) + (joint-control-channel-group-eval! + a0-24 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (let ((s5-4 (-> self skel root-channel 1))) + (set! (-> s5-4 num-func) num-func-identity) + (set! (-> s5-4 frame-num) (ja-frame-num 0)) + ) + (let ((s5-5 (-> self skel root-channel 2))) + (set! (-> s5-5 num-func) num-func-identity) + (set! (-> s5-5 frame-num) (ja-frame-num 0)) + ) + (suspend) + 0 + ) + ) + (none) + ) + +(defbehavior yakow-facing-direction? yakow ((arg0 vector) (arg1 float)) + (let + ((s4-0 + (vector-z-quaternion! + (new 'stack-no-clear 'vector) + (-> self root-override quat) + ) + ) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> arg0 quad)) + (set! (-> s5-0 y) 0.0) + (vector-normalize! s5-0 1.0) + (>= (vector-dot s4-0 s5-0) (cos arg1)) + ) + ) + +(defbehavior yakow-facing-point? yakow ((arg0 vector) (arg1 float)) + (let + ((v1-1 + (vector-! (new 'stack-no-clear 'vector) arg0 (-> self root-override trans)) + ) + ) + (yakow-facing-direction? v1-1 arg1) + ) + ) + +(defbehavior yakow-facing-player? yakow ((arg0 float)) + (yakow-facing-point? (target-pos 0) arg0) + ) + +(defstate yakow-idle (yakow) + :event + yakow-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self travel-speed) 0.0) + (none) + ) + :trans + (behavior () + (if + (and + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> *YAKOW-bank* default-patrol-time)) + ) + (and + *target* + (>= + (-> self fact-override idle-distance) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (not (yakow-facing-player? 21845.334)) + ) + (go yakow-notice) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 45) + (while #t + (cond + ((rand-vu-percent? 0.2) + (dummy-10 (-> self skel effect) 'yakow-1 0.0 -1) + ) + ((rand-vu-percent? 0.2) + (dummy-10 (-> self skel effect) 'yakow-2 0.0 -1) + ) + ) + (let ((f30-0 (rand-vu-float-range 0.9 1.1))) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) f30-0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) f30-0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (when (rand-vu-percent? 0.25) + (ja-channel-push! 1 30) + (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! + ) + ) + ) + (ja-channel-push! 1 30) + ) + ) + (none) + ) + :post + (the-as (function none :behavior yakow) ja-post) + ) + +(defstate yakow-notice (yakow) + :event + yakow-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self travel-speed) 0.0) + (none) + ) + :code + (behavior () + (go yakow-run-away) + (none) + ) + :post + yakow-simple-post + ) + +(defstate yakow-walk-to (yakow) + :event + yakow-default-event-handler + :enter + (behavior ((arg0 vector)) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (logior! (-> self nav flags) (nav-control-flags bit10)) + (set! (-> self nav destination-pos quad) (-> arg0 quad)) + (set! (-> self rotate-speed) (-> *YAKOW-bank* walk-rotate-speed)) + (set! (-> self turn-time) (-> *YAKOW-bank* walk-turn-time)) + (none) + ) + :trans + (behavior () + (if + (and + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> *YAKOW-bank* default-patrol-time)) + ) + (not (-> self in-pen)) + (and + *target* + (>= + (-> self fact-override idle-distance) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (not (yakow-facing-player? 21845.334)) + ) + (go yakow-notice) + ) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 15 + ) + (when + (or + (logtest? (nav-control-flags bit19) (-> self nav flags)) + (< + (vector-vector-xz-distance + (-> self root-override trans) + (-> self nav destination-pos) + ) + 4096.0 + ) + ) + (if (-> self in-pen) + (go yakow-graze) + (go yakow-idle) + ) + ) + ) + (set! + (-> self travel-speed) + (seek + (-> self travel-speed) + (-> *YAKOW-bank* walk-speed) + (* (-> *YAKOW-bank* acceleration) (-> *display* seconds-per-frame)) + ) + ) + (none) + ) + :code + (the-as (function vector none :behavior yakow) yakow-blend-walk-run) + :post + (behavior () + (dummy-19 + (-> self nav) + (-> self nav target-pos) + (-> self root-override) + (-> self nav destination-pos) + 131072.0 + ) + (if (logtest? (nav-control-flags bit21) (-> self nav flags)) + (logclear! (-> self nav flags) (nav-control-flags bit10)) + ) + (yakow-post) + (none) + ) + ) + +(defstate yakow-graze (yakow) + :event + yakow-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self travel-speed) 0.0) + (set! (-> self grazing) #t) + (let ((v1-3 (entity-actor-lookup (-> self entity) 'alt-actor 0)) + (a1-1 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'update) + (send-event-function (if v1-3 + (-> v1-3 extra process) + ) + a1-1 + ) + ) + (none) + ) + :code + (behavior () + (while + (< + 546.13336 + (fabs (deg-diff (-> self dest-rot) (y-angle (-> self root-override)))) + ) + (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 22) + ) + (seek-toward-yaw-angle! + (-> self root-override) + (-> self dest-rot) + 16384.0 + 150 + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! (-> a0-6 param 0) 1.0) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-loop! + ) + ) + (suspend) + ) + (ja-channel-push! 1 45) + (while #t + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-10 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + 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 4)) + 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! + ) + ) + ) + (when (rand-vu-percent? 0.5) + (ja-channel-push! 1 30) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-15 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (the-as art-joint-anim (-> self draw art-group data 5)) + 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! + ) + ) + ) + (ja-channel-push! 1 30) + ) + ) + (none) + ) + :post + yakow-simple-post + ) + +(defstate yakow-graze-kicked (yakow) + :event + (the-as + (function process int symbol event-message-block object :behavior yakow) + #f + ) + :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 11)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 11)) + 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 11)) + 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 yakow-graze) + (none) + ) + :post + yakow-simple-post + ) + +(defstate yakow-run-away (yakow) + :event + yakow-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (logior! (-> self nav flags) (nav-control-flags bit10)) + (set! (-> self rotate-speed) (-> *YAKOW-bank* run-rotate-speed)) + (set! (-> self turn-time) (-> *YAKOW-bank* run-turn-time)) + (none) + ) + :trans + (behavior () + (when + (or + (not *target*) + (< + (-> *YAKOW-bank* safe-distance) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (if (-> self in-pen) + (go yakow-walk-to (-> self dest-base)) + (go yakow-walk-to (-> self home-base)) + ) + ) + (let* ((f0-2 (* (if (-> self run-mode) + 0.5 + 1.0 + ) + (vector-vector-distance + (-> self root-override trans) + (target-pos 0) + ) + ) + ) + (f30-2 + (lerp-scale + (-> *YAKOW-bank* run-speed) + (-> *YAKOW-bank* walk-speed) + f0-2 + (-> *YAKOW-bank* run-away-dist) + (-> *YAKOW-bank* walk-away-dist) + ) + ) + ) + (if (yakow-facing-player? 21845.334) + (set! f30-2 0.0) + ) + (set! (-> self enable-turn-around) (< (-> *YAKOW-bank* run-speed) f30-2)) + (set! + (-> self travel-speed) + (seek + (-> self travel-speed) + f30-2 + (* (-> *YAKOW-bank* acceleration) (-> *display* seconds-per-frame)) + ) + ) + ) + (none) + ) + :code + yakow-blend-walk-run + :post + yakow-run-post + ) + +(defstate yakow-kicked (yakow) + :event + (the-as + (function process int symbol event-message-block object :behavior yakow) + #f + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (if (-> self grazing) + (go yakow-graze-kicked) + ) + (set! + (-> self travel-speed) + (fmax + (fmin + (+ (-> self travel-speed) (-> *YAKOW-bank* speed-boost-impulse)) + (-> *YAKOW-bank* max-run-speed) + ) + (-> *YAKOW-bank* run-speed) + ) + ) + (none) + ) + :exit + (behavior () + '() + (none) + ) + :trans + (behavior () + (if + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 60 + ) + (set! + (-> self travel-speed) + (seek + (-> self travel-speed) + (-> *YAKOW-bank* run-speed) + (* (-> *YAKOW-bank* acceleration) (-> *display* seconds-per-frame)) + ) + ) + ) + 0 + (none) + ) + :code + (behavior () + (set! (-> self enable-turn-around) #t) + 1.0 + (suspend) + (ja-channel-push! 1 15) + (cond + ((< 40.96 (vector-length (-> self nav travel))) + (let ((v1-4 (-> self skel root-channel 0))) + (set! + (-> v1-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + ) + (let ((v1-7 (-> self skel root-channel 0))) + (set! (-> v1-7 num-func) num-func-identity) + (set! (-> v1-7 frame-num) 0.0) + ) + (until (ja-done? 0) + (suspend) + (let* ((f0-3 0.75) + (f1-0 0.25) + (f2-0 (-> *YAKOW-bank* run-speed)) + (f0-4 + (fmax + f0-3 + (fmin + (* + f1-0 + (/ 1.0 f2-0) + (-> self final-speed) + (-> *YAKOW-bank* run-anim-speed) + ) + (-> *YAKOW-bank* max-run-anim-speed) + ) + ) + ) + (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) f0-4) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! + (-> a0-8 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 11)) + 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 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (< 40.96 (-> self final-speed)) + (go yakow-run-away) + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (go yakow-run-away) + (none) + ) + :post + yakow-run-post + ) + +(defstate yakow-die (yakow) + :event + (the-as + (function process int symbol event-message-block object :behavior yakow) + #f + ) + :code + (behavior () + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 collide-with) (the-as uint 0)) + (set! (-> v1-1 prim-core collide-as) (the-as uint 0)) + ) + 0 + (TODO-RENAME-9 + (-> self fact-override) + #t + *entity-pool* + (-> self fact-override) + 0 + ) + (process-entity-status! self (entity-perm-status dead) #t) + (none) + ) + ) + +(defmethod copy-defaults! yakow ((obj yakow) (arg0 res-lump)) + (stack-size-set! (-> obj main-thread) 512) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (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 3073)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 4096.0 0.0 10240.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set! (-> obj align) (new 'process 'align-control obj)) + (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 nav nearest-y-threshold) 409600.0) + (set! + (-> obj fact-override) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! + (-> obj fact-override idle-distance) + (-> *YAKOW-bank* default-idle-distance) + ) + (dummy-14 obj *yakow-sg* '()) + (set! + (-> obj draw shadow-ctrl) + (new + 'process + 'shadow-control + -4096.0 + 4096.0 + 614400.0 + (the-as float 24) + 245760.0 + ) + ) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj water) (new 'process 'water-control obj 6 0.0 8192.0 2048.0)) + (set! (-> obj water flags) (the-as uint 2)) + (set! (-> obj water height) (res-lump-float (-> obj entity) 'water-height)) + (set! (-> obj water ripple-size) 12288.0) + (set! (-> obj home-base quad) (-> obj root-override trans quad)) + (let ((v1-40 (res-lump-struct (-> obj entity) 'alt-vector vector))) + (when v1-40 + (set! (-> obj dest-base quad) (-> v1-40 quad)) + (set! (-> obj dest-rot) (-> v1-40 w)) + (set! (-> obj dest-base w) 1.0) + ) + ) + (set! (-> obj vulnerable) #t) + (set! (-> obj grazing) #f) + (set! (-> obj enable-turn-around) #f) + (set! + (-> obj in-pen) + (and + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status complete)) + ) + ) + (cond + ((-> obj in-pen) + (set! (-> obj root-override trans quad) (-> obj dest-base quad)) + (set-yaw-angle-clear-roll-pitch! (-> obj root-override) (-> obj dest-rot)) + (go yakow-graze) + ) + (else + (yakow-task-complete? #f) + (go yakow-idle) + ) + ) + (none) + ) + + + + diff --git a/goal_src/levels/village2/assistant-village2.gc b/goal_src/levels/village2/assistant-village2.gc index d619946a03..2cc938b784 100644 --- a/goal_src/levels/village2/assistant-village2.gc +++ b/goal_src/levels/village2/assistant-village2.gc @@ -5,3 +5,3136 @@ ;; name in dgo: assistant-village2 ;; dgos: L1, VI2 +(define-extern *assistant-village2-sg* skeleton-group) +(define-extern *jaws-sg* skeleton-group) + +;; DECOMP BEGINS + +(deftype assistant-levitator (process-taskable) + ((boulder entity-actor :offset-assert 380) + (particle sparticle-launch-control 4 :offset-assert 384) + ) + :heap-base #x120 + :method-count-assert 53 + :size-assert #x190 + :flag-assert #x3501200190 + ) + + +(defmethod relocate assistant-levitator ((obj assistant-levitator) (arg0 int)) + (dotimes (v1-0 4) + (if (nonzero? (-> obj particle v1-0)) + (&+! (-> obj particle v1-0) 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) + ) + ) + ) + ((method-of-type process-taskable deactivate) obj) + (none) + ) + +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "assistant-village2" + :bounds (new 'static 'vector :w 8192.0) + :max-lod 2 + :version #x6 + :shadow 4 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 5) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 163840.0) + (set! (-> v1-1 mgeo 2) (the-as uint 3)) + (set! (-> v1-1 lod-dist 2) 4095996000.0) + (set! *assistant-village2-sg* v1-1) + ) + +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "jaws" + :bounds (new 'static 'vector :w 1024.0) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) 2) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *jaws-sg* v1-2) + ) + +(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))) + ) + 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) + ) + (let ((v1-9 (-> obj draw shadow-ctrl))) + (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) + ) + 0 + (dummy-14 (-> obj draw shadow-ctrl)) + ) + (else + (let ((v1-14 (-> obj draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +(defmethod play-anim! assistant-bluehut ((obj assistant-bluehut) (arg0 symbol)) + (with-pp + (set! (-> obj talk-message) (the-as uint 292)) + (case (current-status (-> obj tasks)) + ((1 2 3) + (if (not arg0) + (set! (-> obj will-talk) #t) + ) + (case (current-task (-> obj tasks)) + ((103) + (when arg0 + (close-status! (-> obj tasks) (task-status need-introduction)) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'clone) + (set! (-> a1-5 param 0) (the-as uint (process->handle obj))) + (send-event-function (-> obj sage extra process) a1-5) + ) + (let ((s5-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> s5-1 from) pp) + (set! (-> s5-1 num-params) 1) + (set! (-> s5-1 message) 'clone) + (set! (-> s5-1 param 0) (the-as uint (process->handle obj))) + (send-event-function + (-> (entity-by-type flutflut-bluehut) extra process) + s5-1 + ) + ) + ) + (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") + ) + ) + ) + ((47) + (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)) + ) + ) + (let ((a1-14 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-14 from) pp) + (set! (-> a1-14 num-params) 1) + (set! (-> a1-14 message) 'anim-mode) + (set! (-> a1-14 param 0) (the-as uint 'clone-anim)) + (send-event-function (handle->process (-> obj jaws)) a1-14) + ) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) pp) + (set! (-> a1-15 num-params) 1) + (set! (-> a1-15 message) 'center-joint) + (set! (-> a1-15 param 0) (the-as uint 3)) + (send-event-function (handle->process (-> obj jaws)) a1-15) + ) + (let ((s5-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> s5-4 from) pp) + (set! (-> s5-4 num-params) 1) + (set! (-> s5-4 message) 'clone) + (set! (-> s5-4 param 0) (the-as uint (process->handle obj))) + (send-event-function + (-> (entity-by-type flutflut-bluehut) extra process) + s5-4 + ) + ) + ) + (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") + ) + ) + ) + ((53) + (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)) + (let ((s5-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> s5-6 from) pp) + (set! (-> s5-6 num-params) 1) + (set! (-> s5-6 message) 'clone) + (set! (-> s5-6 param 0) (the-as uint (process->handle obj))) + (send-event-function + (-> (entity-by-type flutflut-bluehut) extra process) + s5-6 + ) + ) + ) + (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") + ) + ) + ) + ) + ) + ((5) + (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 '() + ) + ) + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string + (the-as task-status (current-status (-> obj tasks))) + ) + ) + ) + (-> obj draw art-group data 5) + ) + ) + ) + ) + +(defmethod get-art-elem assistant-bluehut ((obj assistant-bluehut)) + (-> obj draw art-group data 10) + ) + +(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) + ) + ) + (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) + ) + ) + ) + (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))) + ) + (cond + ((= (get-task-status (game-task village2-levitator)) (task-status invalid)) + #f + ) + ((< 0.5 f30-0) + (dummy-11 (-> obj ambient) "ASSTLP23" #f (-> obj root-override trans)) + ) + (else + (dummy-11 (-> 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)) + (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) 'play-anim) + (send-event-function self a1-1) + ) + ) + ) + ((-> (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 + (the-as uint 1) + (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! + ) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +(defstate play-anim (assistant-bluehut) + :virtual #t + :exit + (behavior () + (let ((a0-1 (handle->process (-> self jaws)))) + (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) 0) + (set! (-> a1-1 message) 'end-mode) + (send-event-function (-> self sage extra process) a1-1) + ) + (let ((gp-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> gp-0 from) self) + (set! (-> gp-0 num-params) 0) + (set! (-> gp-0 message) 'end-mode) + (send-event-function + (-> (entity-by-type flutflut-bluehut) extra process) + gp-0 + ) + ) + ((-> (method-of-type process-taskable play-anim) exit)) + (close-specific-task! + (game-task village2-levitator) + (task-status need-reminder-a) + ) + (none) + ) + :trans + (behavior () + '() + (none) + ) + ) + +(defmethod should-display? assistant-bluehut ((obj assistant-bluehut)) + (cond + ((not + (closed? + (-> obj tasks) + (game-task village2-levitator) + (task-status unknown) + ) + ) + (dummy-33 obj) + #f + ) + ((or + (= + (get-task-status (game-task village2-levitator)) + (task-status need-reward-speech) + ) + (sages-kidnapped?) + ) + #f + ) + (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-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* 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)) + (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 + (the-as uint 1) + (the-as vector #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 + ) + ) + ) + (none) + ) + +(defmethod + copy-defaults! + assistant-bluehut + ((obj assistant-bluehut) (arg0 res-lump)) + (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)) + (set! (-> obj im-talking) #t) + (set! (-> obj draw light-index) (the-as uint 1)) + (set! (-> obj sound-id) (new-sound-id)) + (dummy-42 obj) + (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-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* 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* 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* 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* 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-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* 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-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* 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* 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-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) + ) + (none) + ) + +(defbehavior assistant-levitator-blue-beam assistant-levitator () + (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)) + ) + (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! (-> *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) + ) + (none) + ) + +(defmethod + play-anim! + assistant-levitator + ((obj assistant-levitator) (arg0 symbol)) + (with-pp + (case (current-status (-> obj tasks)) + ((6) + (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") + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string + (the-as task-status (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) + ) + ) + +(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) + ) + a1-0 + ) + ) + ) + ((-> (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) + ) + ((-> (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 + (set! + (-> self state-time) + (the-as seconds (-> *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)) + ) + ) + (< + (- + (-> *display* base-frame-counter) + (the-as int (-> 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 + ) + ) + ) + (level-hint-spawn + (game-text-id village2-not-enough-cells-levitator) + "asstvb71" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (none) + ) + ) + +(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) + ) + :trans + (behavior () + (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) + ) + (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 + ) + ) + ) + (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! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +(defmethod should-display? assistant-levitator ((obj assistant-levitator)) + (or + (= + (get-task-status (game-task village2-levitator)) + (task-status need-reward-speech) + ) + (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) + ) + (none) + ) + ) + +(defmethod + copy-defaults! + assistant-levitator + ((obj assistant-levitator) (arg0 res-lump)) + (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-char + (new 'static 'array uint8 16 + #x6c + #x65 + #x76 + #x2d + #x6d + #x61 + #x63 + #x68 + #x2d + #x69 + #x64 + #x6c + #x65 + #x0 + #x0 + #x0 + ) + :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) + ) + (none) + ) + + + + diff --git a/goal_src/levels/village2/gambler.gc b/goal_src/levels/village2/gambler.gc index cd45880224..0aaec4d2df 100644 --- a/goal_src/levels/village2/gambler.gc +++ b/goal_src/levels/village2/gambler.gc @@ -7,7 +7,8 @@ (define-extern *gambler-sg* skeleton-group) -;; definition of type gambler +;; DECOMP BEGINS + (deftype gambler (process-taskable) () :heap-base #x110 @@ -16,7 +17,7 @@ :flag-assert #x350110017c ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -39,7 +40,6 @@ (set! *gambler-sg* v1-1) ) -;; definition for method 32 of type gambler (defmethod play-anim! gambler ((obj gambler) (arg0 symbol)) (with-pp (set! (-> obj talk-message) (the-as uint 260)) @@ -252,12 +252,10 @@ ) ) -;; definition for method 31 of type gambler (defmethod get-art-elem gambler ((obj gambler)) (-> obj draw art-group data 7) ) -;; definition for method 43 of type gambler (defmethod TODO-RENAME-43 gambler ((obj gambler)) (when (TODO-RENAME-10 @@ -273,53 +271,51 @@ ) (cond ((< 0.9230769 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM01" #f (-> obj root-override trans)) ) ((< 0.84615386 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM02" #f (-> obj root-override trans)) ) ((< 0.7692308 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM03" #f (-> obj root-override trans)) ) ((< 0.6923077 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM04" #f (-> obj root-override trans)) ) ((< 0.61538464 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM05" #f (-> obj root-override trans)) ) ((< 0.53846157 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM06" #f (-> obj root-override trans)) ) ((< 0.46153846 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM07" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM07" #f (-> obj root-override trans)) ) ((< 0.3846154 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM08" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM08" #f (-> obj root-override trans)) ) ((< 0.30769232 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM09" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM09" #f (-> obj root-override trans)) ) ((< 0.23076923 f0-2) (if (not (task-closed? (game-task ogre-boss) (task-status need-reminder))) - (dummy-11 (-> obj ambient) "GAM-AM10" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM10" #f (-> obj root-override trans)) ) ) ((< 0.15384616 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM11" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM11" #f (-> obj root-override trans)) ) ((< 0.07692308 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM12" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM12" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "GAM-AM13" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM13" #f (-> obj root-override trans)) ) ) ) ) - (none) ) -;; failed to figure out what this is: (defstate idle (gambler) :virtual #t :code @@ -446,7 +442,6 @@ ) ) -;; definition for method 11 of type gambler (defmethod copy-defaults! gambler ((obj gambler) (arg0 res-lump)) (dummy-40 obj arg0 *gambler-sg* 3 32 (new 'static 'vector :w 4096.0) 5) (set! (-> obj tasks) (get-task-control (game-task rolling-race))) @@ -455,3 +450,7 @@ (dummy-42 obj) (none) ) + + + + diff --git a/goal_src/levels/village2/geologist.gc b/goal_src/levels/village2/geologist.gc index 7ef5cc0747..1c876a6055 100644 --- a/goal_src/levels/village2/geologist.gc +++ b/goal_src/levels/village2/geologist.gc @@ -7,7 +7,8 @@ (define-extern *geologist-sg* skeleton-group) -;; definition of type geologist +;; DECOMP BEGINS + (deftype geologist (process-taskable) () :heap-base #x110 @@ -16,7 +17,7 @@ :flag-assert #x350110017c ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -39,7 +40,6 @@ (set! *geologist-sg* v1-1) ) -;; definition for method 32 of type geologist (defmethod play-anim! geologist ((obj geologist) (arg0 symbol)) (with-pp (set! (-> obj talk-message) (the-as uint 260)) @@ -216,12 +216,10 @@ ) ) -;; definition for method 31 of type geologist (defmethod get-art-elem geologist ((obj geologist)) (-> obj draw art-group data 5) ) -;; definition for method 43 of type geologist (defmethod TODO-RENAME-43 geologist ((obj geologist)) (when (TODO-RENAME-10 @@ -237,7 +235,7 @@ ) (cond ((< 0.8888889 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM01" #f (-> obj root-override trans)) ) ((< 0.7777778 f0-2) (if @@ -248,11 +246,11 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "GEO-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM02" #f (-> obj root-override trans)) ) ) ((< 0.6666667 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM03" #f (-> obj root-override trans)) ) ((< 0.5555556 f0-2) (if @@ -261,14 +259,14 @@ (game-task village2-geologist-money) (task-status need-introduction) ) - (dummy-11 (-> obj ambient) "GEO-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM04" #f (-> obj root-override trans)) ) ) ((< 0.44444445 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM05" #f (-> obj root-override trans)) ) ((< 0.33333334 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM06" #f (-> obj root-override trans)) ) ((< 0.22222222 f0-2) (if @@ -279,29 +277,27 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "GEO-AM07" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM07" #f (-> obj root-override trans)) ) ) ((< 0.11111111 f0-2) - (dummy-11 (-> obj ambient) "GEO-LO02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-LO02" #f (-> obj root-override trans)) ) ((closed? (-> obj tasks) (game-task village2-geologist-money) (task-status need-resolution) ) - (dummy-11 (-> obj ambient) "GEO-AM08" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM08" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "GEO-LO01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-LO01" #f (-> obj root-override trans)) ) ) ) ) - (none) ) -;; definition for method 11 of type geologist (defmethod copy-defaults! geologist ((obj geologist) (arg0 res-lump)) (dummy-40 obj arg0 *geologist-sg* 3 45 (new 'static 'vector :w 4096.0) 5) (set! (-> obj tasks) (get-task-control (game-task rolling-moles))) @@ -310,3 +306,7 @@ (dummy-42 obj) (none) ) + + + + diff --git a/goal_src/levels/village2/sage-bluehut.gc b/goal_src/levels/village2/sage-bluehut.gc index da9a71201f..02a4ec040c 100644 --- a/goal_src/levels/village2/sage-bluehut.gc +++ b/goal_src/levels/village2/sage-bluehut.gc @@ -7,10 +7,11 @@ (define-extern *sage-bluehut-sg* skeleton-group) -;; definition of type assistant-bluehut +;; DECOMP BEGINS + (deftype assistant-bluehut (process-taskable) ((sound-id sound-id :offset-assert 380) - (jaws uint64 :offset-assert 384) + (jaws handle :offset-assert 384) (sage entity-actor :offset-assert 392) (im-talking symbol :offset-assert 396) ) @@ -20,7 +21,7 @@ :flag-assert #x3501200190 ) -;; definition of type sage-bluehut + (deftype sage-bluehut (process-taskable) ((reminder-played symbol :offset-assert 380) (assistant entity-actor :offset-assert 384) @@ -31,7 +32,7 @@ :flag-assert #x3501200184 ) -;; failed to figure out what this is: + (let ((v1-2 (new 'static 'skeleton-group @@ -49,7 +50,6 @@ (set! *sage-bluehut-sg* v1-2) ) -;; definition for method 32 of type sage-bluehut (defmethod play-anim! sage-bluehut ((obj sage-bluehut) (arg0 symbol)) (with-pp (set! (-> obj talk-message) (the-as uint 291)) @@ -216,8 +216,6 @@ ) ) -;; definition for method 45 of type sage-bluehut -;; INFO: Return type mismatch symbol vs none. (defmethod dummy-45 sage-bluehut ((obj sage-bluehut)) (cond ((= (current-status (-> obj tasks)) 1) @@ -242,7 +240,10 @@ ) ((and (-> obj reminder-played) - (< 81920.0 (vector-vector-distance (-> obj root trans) (camera-pos))) + (< + 81920.0 + (vector-vector-distance (-> obj root-override trans) (camera-pos)) + ) ) #t ) @@ -252,7 +253,6 @@ (none) ) -;; definition for method 31 of type sage-bluehut (defmethod get-art-elem sage-bluehut ((obj sage-bluehut)) (cond ((and @@ -314,7 +314,6 @@ ) ) -;; failed to figure out what this is: (defstate play-anim (sage-bluehut) :virtual #t :exit @@ -331,7 +330,6 @@ ) ) -;; definition for method 39 of type sage-bluehut (defmethod should-display? sage-bluehut ((obj sage-bluehut)) (and (task-closed? (game-task village2-levitator) (task-status need-introduction)) @@ -339,8 +337,6 @@ ) ) -;; definition for method 44 of type sage-bluehut -;; INFO: Return type mismatch basic vs symbol. (defmethod play-reminder sage-bluehut ((obj sage-bluehut)) (the-as symbol @@ -353,7 +349,6 @@ ) ) -;; definition for method 47 of type sage-bluehut (defmethod target-above-threshold? sage-bluehut ((obj sage-bluehut)) (local-vars (v0-1 symbol)) (if (not (play-reminder obj)) @@ -369,7 +364,6 @@ v0-1 ) -;; definition for method 43 of type sage-bluehut (defmethod TODO-RENAME-43 sage-bluehut ((obj sage-bluehut)) (when (TODO-RENAME-10 @@ -385,27 +379,25 @@ ) (cond ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "SAGELP20" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP20" #f (-> obj root-override trans)) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "SAGELP21" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP21" #f (-> obj root-override trans)) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "SAGELP22" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP22" #f (-> obj root-override trans)) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "SAGELP23" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP23" #f (-> obj root-override trans)) ) ((nonzero? (get-task-status (game-task citadel-sage-blue))) - (dummy-11 (-> obj ambient) "SAGELP24" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP24" #f (-> obj root-override trans)) ) ) ) ) - (none) ) -;; failed to figure out what this is: (defstate idle (sage-bluehut) :virtual #t :code @@ -595,7 +587,6 @@ ) ) -;; definition for method 11 of type sage-bluehut (defmethod copy-defaults! sage-bluehut ((obj sage-bluehut) (arg0 res-lump)) (dummy-40 obj arg0 *sage-bluehut-sg* 3 40 (new 'static 'vector :w 4505.6) 5) (set! (-> obj tasks) (get-task-control (game-task rolling-plants))) @@ -606,3 +597,7 @@ (dummy-42 obj) (none) ) + + + + diff --git a/goal_src/levels/village2/village2-obs.gc b/goal_src/levels/village2/village2-obs.gc index 77fc7c21e6..aa0b784e75 100644 --- a/goal_src/levels/village2/village2-obs.gc +++ b/goal_src/levels/village2/village2-obs.gc @@ -25,3 +25,16 @@ :heap-base #x50 :flag-assert #x14005000b1 ) + +;; TODO - for assistant-village2 +(deftype fireboulder (process-drawable) + ((tracker uint64 :offset-assert 176) + (task uint8 :offset-assert 184) + ) + :method-count-assert 20 + :size-assert #xb9 + :heap-base #x50 + :flag-assert #x14005000b9 + ) + +;; decomp begins diff --git a/goal_src/levels/village2/warrior.gc b/goal_src/levels/village2/warrior.gc index 44d7b5eed9..e184fd30b9 100644 --- a/goal_src/levels/village2/warrior.gc +++ b/goal_src/levels/village2/warrior.gc @@ -7,7 +7,8 @@ (define-extern *warrior-sg* skeleton-group) -;; definition of type warrior +;; DECOMP BEGINS + (deftype warrior (process-taskable) () :heap-base #x110 @@ -16,7 +17,7 @@ :flag-assert #x350110017c ) -;; failed to figure out what this is: + (let ((v1-1 (new 'static 'skeleton-group @@ -39,12 +40,10 @@ (set! *warrior-sg* v1-1) ) -;; definition for method 52 of type warrior -;; INFO: Return type mismatch int vs none. (defmethod dummy-52 warrior ((obj warrior)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -4096.0 f0-0))) ) @@ -57,20 +56,19 @@ (none) ) -;; definition for method 48 of type warrior -(defmethod draw-shadow warrior ((obj warrior)) +(defmethod draw-npc-shadow warrior ((obj warrior)) (-> obj draw shadow-ctrl) (cond ((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) - (nonzero? (logand (-> obj draw status) 8)) + (logtest? (-> obj draw status) 8) ) (let ((v1-9 (-> obj draw shadow-ctrl))) (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -82,7 +80,6 @@ (none) ) -;; definition for method 32 of type warrior (defmethod play-anim! warrior ((obj warrior) (arg0 symbol)) (with-pp (set! (-> obj talk-message) (the-as uint 260)) @@ -175,23 +172,7 @@ (set! (-> s5-1 from) pp) (set! (-> s5-1 num-params) 1) (set! (-> s5-1 message) 'clone) - (let* ((a0-10 obj) - (v1-19 (if a0-10 - (-> a0-10 ppointer) - ) - ) - ) - (set! - (-> s5-1 param 0) - (the-as - uint - (logior - (shl (-> v1-19 0 pid) 32) - (new 'static 'handle :process v1-19) - ) - ) - ) - ) + (set! (-> s5-1 param 0) (the-as uint (process->handle obj))) (send-event-function (-> (entity-by-type allpontoons) extra process) s5-1 @@ -253,12 +234,10 @@ ) ) -;; definition for method 31 of type warrior (defmethod get-art-elem warrior ((obj warrior)) (-> obj draw art-group data 5) ) -;; failed to figure out what this is: (defstate play-anim (warrior) :virtual #t :exit @@ -274,7 +253,6 @@ ) ) -;; definition for method 43 of type warrior (defmethod TODO-RENAME-43 warrior ((obj warrior)) (when (TODO-RENAME-10 @@ -290,23 +268,20 @@ ) (cond ((< 0.66 f0-2) - (dummy-11 (-> obj ambient) "WAR-LO1A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "WAR-LO1A" #f (-> obj root-override trans)) ) ((< 0.33 f0-2) - (dummy-11 (-> obj ambient) "WAR-LO1B" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "WAR-LO1B" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "WAR-LO1C" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "WAR-LO1C" #f (-> obj root-override trans)) ) ) ) ) - (none) ) -;; definition for method 41 of type warrior -;; INFO: Return type mismatch int vs none. -(defmethod initialize-collision warrior ((obj warrior) (arg0 int)) +(defmethod initialize-collision warrior ((obj warrior) (arg0 int) (arg1 vector)) (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) @@ -335,13 +310,12 @@ ) (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (dummy-50 s5-0) - (set! (-> obj root) s5-0) + (set! (-> obj root-override) s5-0) ) 0 (none) ) -;; definition for method 11 of type warrior (defmethod copy-defaults! warrior ((obj warrior) (arg0 res-lump)) (dummy-40 obj @@ -358,3 +332,7 @@ (dummy-42 obj) (none) ) + + + + diff --git a/goal_src/levels/village3/assistant-village3.gc b/goal_src/levels/village3/assistant-village3.gc index 0f1d0ecf29..f8ce6590e4 100644 --- a/goal_src/levels/village3/assistant-village3.gc +++ b/goal_src/levels/village3/assistant-village3.gc @@ -5,3 +5,348 @@ ;; name in dgo: assistant-village3 ;; dgos: L1, VI3 +(define-extern *assistant-village3-sg* skeleton-group) + +;; DECOMP BEGINS + +(deftype assistant-villagec (process-taskable) + () + :heap-base #x110 + :method-count-assert 53 + :size-assert #x17c + :flag-assert #x350110017c + ) + + +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "assistant-village3" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 3) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *assistant-village3-sg* v1-1) + ) + +(defmethod dummy-52 assistant-villagec ((obj assistant-villagec)) + (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) (- (+ -2048.0 f0-0))) + ) + 0 + (set! (-> v1-1 settings top-plane w) (- (+ 1024.0 f0-0))) + ) + 0 + ) + ) + (none) + ) + +(defmethod draw-npc-shadow assistant-villagec ((obj assistant-villagec)) + (-> obj draw shadow-ctrl) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (let ((v1-9 (-> obj draw shadow-ctrl))) + (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) + ) + 0 + (dummy-14 (-> obj draw shadow-ctrl)) + ) + (else + (let ((v1-14 (-> obj draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +(defmethod play-anim! assistant-villagec ((obj assistant-villagec) (arg0 symbol)) + (set! (-> obj talk-message) (the-as uint 292)) + (cond + ((= + (get-task-status (game-task finalboss-movies)) + (task-status need-introduction) + ) + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string (the-as task-status (current-status (-> obj tasks)))) + ) + ) + (get-art-elem obj) + ) + (else + (new 'static 'spool-anim + :name "assistant-village3-reminder" + :index 4 + :parts 3 + :command-list '() + ) + ) + ) + ) + +(defmethod get-art-elem assistant-villagec ((obj assistant-villagec)) + (-> obj draw art-group data 3) + ) + +(defmethod should-display? assistant-villagec ((obj assistant-villagec)) + (and + (task-closed? (game-task village3-button) (task-status need-introduction)) + (not (sages-kidnapped?)) + ) + ) + +(defmethod target-above-threshold? assistant-villagec ((obj assistant-villagec)) + (the-as symbol (and *target* (< (-> (target-pos 0) z) -14245888.0))) + ) + +(defmethod TODO-RENAME-43 assistant-villagec ((obj assistant-villagec)) + (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))) + (f0-2 (+ -1.0 (the-as float v1-4))) + ) + (cond + ((< 0.85714287 f0-2) + (dummy-11 (-> obj ambient) "ASSTLP31" #f (-> obj root-override trans)) + ) + ((< 0.71428573 f0-2) + (dummy-11 (-> obj ambient) "ASSTLP32" #f (-> obj root-override trans)) + ) + ((< 0.5714286 f0-2) + (dummy-11 (-> obj ambient) "ASSTLP33" #f (-> obj root-override trans)) + ) + ((< 0.42857143 f0-2) + (let ((v1-16 (get-task-status (game-task lavatube-end)))) + (if + (not + (or + (= v1-16 (task-status need-reward-speech)) + (= v1-16 (task-status invalid)) + ) + ) + (dummy-11 (-> obj ambient) "ASSTLP34" #f (-> obj root-override trans)) + ) + ) + ) + ((< 0.2857143 f0-2) + (let ((v1-21 (get-task-status (game-task lavatube-end)))) + (if + (not + (or + (= v1-21 (task-status need-reward-speech)) + (= v1-21 (task-status invalid)) + ) + ) + (dummy-11 (-> obj ambient) "ASSTLP35" #f (-> obj root-override trans)) + ) + ) + ) + ((< 0.14285715 f0-2) + (let ((v1-26 (get-task-status (game-task lavatube-end)))) + (if + (not + (or + (= v1-26 (task-status need-reward-speech)) + (= v1-26 (task-status invalid)) + ) + ) + (dummy-11 (-> obj ambient) "ASSTLP36" #f (-> obj root-override trans)) + ) + ) + ) + ((nonzero? (get-task-status (game-task citadel-sage-green))) + (dummy-11 (-> obj ambient) "ASSTLP37" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +(defstate idle (assistant-villagec) + :virtual #t + :code + (behavior () + (if (!= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (get-art-elem self) + ) + (ja-channel-push! 1 15) + ) + (while #t + (TODO-RENAME-43 self) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-8 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + 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 3)) + 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! + ) + ) + ) + (let ((gp-0 (-> *display* base-frame-counter))) + (while (let* ((s5-0 (-> *display* base-frame-counter)) + (f30-0 300.0) + (f28-0 0.16) + (f26-0 0.17000002) + (v1-31 + (/ (the-as int (rand-uint31-gen *random-generator*)) 256) + ) + (v1-32 (the-as number (logior #x3f800000 v1-31))) + ) + (< + (- + s5-0 + (the + int + (* f30-0 (+ f28-0 (* f26-0 (+ -1.0 (the-as float v1-32))))) + ) + ) + gp-0 + ) + ) + (suspend) + ) + ) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> gp-1 param 0) (ja-aframe 0.0 0)) + (set! (-> gp-1 param 1) 1.0) + (set! (-> gp-1 frame-num) (ja-aframe 16.0 0)) + (joint-control-channel-group! gp-1 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (ja-aframe 0.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 ((gp-3 (-> *display* base-frame-counter))) + (while (let* ((s5-1 (-> *display* base-frame-counter)) + (f30-1 300.0) + (f28-1 0.16) + (f26-1 0.17000002) + (v1-56 + (/ (the-as int (rand-uint31-gen *random-generator*)) 256) + ) + (v1-57 (the-as number (logior #x3f800000 v1-56))) + ) + (< + (- + s5-1 + (the + int + (* f30-1 (+ f28-1 (* f26-1 (+ -1.0 (the-as float v1-57))))) + ) + ) + gp-3 + ) + ) + (suspend) + ) + ) + ) + (none) + ) + ) + +(defmethod + copy-defaults! + assistant-villagec + ((obj assistant-villagec) (arg0 res-lump)) + (dummy-40 + obj + arg0 + *assistant-village3-sg* + 3 + 31 + (new 'static 'vector :w 4096.0) + 5 + ) + (set! (-> obj tasks) (get-task-control (game-task assistant-village3))) + (dummy-42 obj) + (none) + ) + + + + diff --git a/goal_src/levels/village3/miners.gc b/goal_src/levels/village3/miners.gc index b4e0cdcbb8..056ad50130 100644 --- a/goal_src/levels/village3/miners.gc +++ b/goal_src/levels/village3/miners.gc @@ -10,6 +10,8 @@ (define-extern *minershort-sg* skeleton-group) (define-extern *minertall-sg* skeleton-group) +;; DECOMP BEGINS + (defbehavior miners-anim-loop minershort () (when (!= (if (> (-> self skel active-channels) 0) (-> self skel root-channel 0 frame-group) @@ -39,7 +41,6 @@ (none) ) -;; definition of type minertall (deftype minertall (process-taskable) () :heap-base #x110 @@ -48,15 +49,7 @@ :flag-assert #x350110017c ) -;; definition for method 3 of type minertall -(defmethod inspect minertall ((obj minertall)) - (let ((t9-0 (method-of-type process-taskable inspect))) - (t9-0 obj) - ) - obj - ) -;; failed to figure out what this is: (let ((v1-2 (new 'static 'skeleton-group @@ -74,12 +67,10 @@ (set! *minertall-sg* v1-2) ) -;; definition for method 52 of type minertall -;; INFO: Return type mismatch int vs none. (defmethod dummy-52 minertall ((obj minertall)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -4096.0 f0-0))) ) @@ -95,8 +86,7 @@ (none) ) -;; definition for method 48 of type minertall -(defmethod draw-shadow minertall ((obj minertall)) +(defmethod draw-npc-shadow minertall ((obj minertall)) (-> obj draw shadow-ctrl) (cond ((and @@ -108,7 +98,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -120,8 +110,6 @@ (none) ) -;; definition for method 32 of type minertall -;; INFO: Return type mismatch art-element vs basic. (defmethod play-anim! minertall ((obj minertall) (arg0 symbol)) (set! (-> obj talk-message) (the-as uint 260)) (current-status (-> obj tasks)) @@ -136,12 +124,10 @@ (the-as basic (-> obj draw art-group data 3)) ) -;; definition for method 31 of type minertall (defmethod get-art-elem minertall ((obj minertall)) (-> obj draw art-group data 3) ) -;; failed to figure out what this is: (defstate idle (minertall) :virtual #t :trans @@ -154,7 +140,6 @@ (the-as (function none :behavior minertall) miners-anim-loop) ) -;; definition for method 11 of type minertall (defmethod copy-defaults! minertall ((obj minertall) (arg0 res-lump)) (dummy-40 obj arg0 *minertall-sg* 32 47 (new 'static 'vector :w 4096.0) 5) (set! (-> obj tasks) (get-task-control (game-task village3-miner-money1))) @@ -163,7 +148,6 @@ (none) ) -;; definition of type minershort (deftype minershort (process-taskable) ((other-miner minertall :offset-assert 380) ) @@ -173,16 +157,7 @@ :flag-assert #x3501100180 ) -;; definition for method 3 of type minershort -(defmethod inspect minershort ((obj minershort)) - (let ((t9-0 (method-of-type process-taskable inspect))) - (t9-0 obj) - ) - (format #t "~T~Tother-miner: ~A~%" (-> obj other-miner)) - obj - ) -;; failed to figure out what this is: (let ((v1-7 (new 'static 'skeleton-group @@ -200,7 +175,6 @@ (set! *minershort-sg* v1-7) ) -;; failed to figure out what this is: (set! (-> *part-group-id-table* 566) (new 'static 'sparticle-launch-group @@ -218,7 +192,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2366) (new 'static 'sparticle-launcher @@ -253,7 +226,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2364) (new 'static 'sparticle-launcher @@ -281,7 +253,6 @@ ) ) -;; failed to figure out what this is: (set! (-> *part-id-table* 2365) (new 'static 'sparticle-launcher @@ -311,12 +282,10 @@ ) ) -;; definition for method 52 of type minershort -;; INFO: Return type mismatch int vs none. (defmethod dummy-52 minershort ((obj minershort)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -4096.0 f0-0))) ) @@ -332,8 +301,7 @@ (none) ) -;; definition for method 48 of type minershort -(defmethod draw-shadow minershort ((obj minershort)) +(defmethod draw-npc-shadow minershort ((obj minershort)) (-> obj draw shadow-ctrl) (cond ((and @@ -345,7 +313,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -357,8 +325,6 @@ (none) ) -;; definition for function minershort-trans-hook -;; INFO: Return type mismatch object vs none. (defbehavior minershort-trans-hook minershort () (spawn (-> self part) @@ -367,7 +333,6 @@ (none) ) -;; definition for method 32 of type minershort (defmethod play-anim! minershort ((obj minershort) (arg0 symbol)) (with-pp (set! (-> obj talk-message) (the-as uint 260)) @@ -789,7 +754,6 @@ ) ) -;; failed to figure out what this is: (defstate play-anim (minershort) :virtual #t :exit @@ -805,12 +769,10 @@ ) ) -;; definition for method 31 of type minershort (defmethod get-art-elem minershort ((obj minershort)) (-> obj draw art-group data 3) ) -;; definition for method 43 of type minershort (defmethod TODO-RENAME-43 minershort ((obj minershort)) (when (TODO-RENAME-10 @@ -826,106 +788,103 @@ ) (cond ((< 0.9655172 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MIN-LO01" #f (-> obj root-override trans)) ) ((< 0.9310345 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MIN-LO03" #f (-> obj root-override trans)) ) ((< 0.8965517 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MIN-LO04" #f (-> obj root-override trans)) ) ((< 0.86206895 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MIN-LO05" #f (-> obj root-override trans)) ) ((< 0.82758623 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MIN-LO06" #f (-> obj root-override trans)) ) ((< 0.79310346 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM01" #f (-> obj root-override trans)) ) ((< 0.7586207 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM02" #f (-> obj root-override trans)) ) ((< 0.7241379 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM03" #f (-> obj root-override trans)) ) ((< 0.6896552 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM04" #f (-> obj root-override trans)) ) ((< 0.6551724 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM05" #f (-> obj root-override trans)) ) ((< 0.62068963 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM06" #f (-> obj root-override trans)) ) ((< 0.5862069 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM07" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM07" #f (-> obj root-override trans)) ) ((< 0.55172414 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM08" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM08" #f (-> obj root-override trans)) ) ((< 0.51724136 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM09" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM09" #f (-> obj root-override trans)) ) ((< 0.4827586 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM10" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM10" #f (-> obj root-override trans)) ) ((< 0.44827586 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM11" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM11" #f (-> obj root-override trans)) ) ((< 0.41379312 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM12" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM12" #f (-> obj root-override trans)) ) ((< 0.37931034 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM1A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM1A" #f (-> obj root-override trans)) ) ((< 0.3448276 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM2A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM2A" #f (-> obj root-override trans)) ) ((< 0.31034482 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM3A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM3A" #f (-> obj root-override trans)) ) ((< 0.27586207 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM01" #f (-> obj root-override trans)) ) ((< 0.2413793 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM02" #f (-> obj root-override trans)) ) ((< 0.20689656 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM03" #f (-> obj root-override trans)) ) ((< 0.1724138 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM04" #f (-> obj root-override trans)) ) ((< 0.13793103 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM05" #f (-> obj root-override trans)) ) ((< 0.10344828 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM06" #f (-> obj root-override trans)) ) ((< 0.06896552 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM07" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM07" #f (-> obj root-override trans)) ) ((< 0.03448276 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM08" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM08" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "MTA-AM09" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM09" #f (-> obj root-override trans)) ) ) ) ) - (none) ) -;; failed to figure out what this is: (defstate idle (minershort) :virtual #t :code miners-anim-loop ) -;; definition for method 11 of type minershort (defmethod copy-defaults! minershort ((obj minershort) (arg0 res-lump)) (dummy-40 obj arg0 *minershort-sg* 34 46 (new 'static 'vector :w 4096.0) 5) (set! @@ -944,7 +903,6 @@ (none) ) -;; definition of type cavegem (deftype cavegem (process-drawable) () :heap-base #x40 @@ -956,15 +914,7 @@ ) ) -;; definition for method 3 of type cavegem -(defmethod inspect cavegem ((obj cavegem)) - (let ((t9-0 (method-of-type process-drawable inspect))) - (t9-0 obj) - ) - obj - ) -;; failed to figure out what this is: (let ((v1-18 (new 'static 'skeleton-group @@ -981,7 +931,6 @@ (set! *cavegem-sg* v1-18) ) -;; failed to figure out what this is: (defstate idle (cavegem) :virtual #t :code @@ -1041,7 +990,6 @@ (the-as (function none :behavior cavegem) ja-post) ) -;; definition for method 11 of type cavegem (defmethod copy-defaults! cavegem ((obj cavegem) (arg0 res-lump)) (set! (-> obj root) (new 'process 'trsqv)) (process-drawable-from-entity! obj arg0) diff --git a/goal_src/levels/village3/sage-village3.gc b/goal_src/levels/village3/sage-village3.gc index 024ca8d91e..2d3f20d698 100644 --- a/goal_src/levels/village3/sage-village3.gc +++ b/goal_src/levels/village3/sage-village3.gc @@ -5,3 +5,656 @@ ;; name in dgo: sage-village3 ;; dgos: L1, VI3 +(define-extern *sage-village3-sg* skeleton-group) +(define-extern *evilbro-village3-sg* skeleton-group) +(define-extern *evilsis-village3-sg* skeleton-group) + +;; DECOMP BEGINS + +(deftype sage-villagec (process-taskable) + ((evilbro handle :offset-assert 384) + (evilsis handle :offset-assert 392) + (assistant entity-actor :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 53 + :size-assert #x194 + :flag-assert #x3501300194 + ) + + +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "sage-village3" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 3) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *sage-village3-sg* v1-1) + ) + +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "evilbro-village3" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) 3) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *evilbro-village3-sg* v1-2) + ) + +(let + ((v1-3 + (new 'static 'skeleton-group + :art-group-name "evilsis-village3" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-3 jgeo) 0) + (set! (-> v1-3 janim) 3) + (set! (-> v1-3 mgeo 0) (the-as uint 1)) + (set! (-> v1-3 lod-dist 0) 4095996000.0) + (set! *evilsis-village3-sg* v1-3) + ) + +(defmethod play-anim! sage-villagec ((obj sage-villagec) (arg0 symbol)) + (with-pp + (set! (-> obj talk-message) (the-as uint 291)) + (case (current-status (-> obj tasks)) + ((1 2 3) + (if (not arg0) + (set! (-> obj will-talk) #t) + ) + (case (current-task (-> obj tasks)) + ((105) + (when arg0 + (close-status! (-> obj tasks) (task-status need-introduction)) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'clone) + (set! (-> a1-5 param 0) (the-as uint (process->handle obj))) + (send-event-function (-> obj assistant extra process) a1-5) + ) + (let ((s5-1 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj evilbro) (ppointer->handle (when s5-1 + (let + ((t9-5 + (method-of-type + manipy + activate + ) + ) + ) + (t9-5 + (the-as manipy s5-1) + obj + 'manipy + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-1 + manipy-init + (-> + obj + root-override + trans + ) + (-> obj entity) + *evilbro-village3-sg* + #f + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) pp) + (set! (-> a1-9 num-params) 1) + (set! (-> a1-9 message) 'anim-mode) + (set! (-> a1-9 param 0) (the-as uint 'clone-anim)) + (send-event-function (handle->process (-> obj evilbro)) a1-9) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) pp) + (set! (-> a1-10 num-params) 1) + (set! (-> a1-10 message) 'blend-shape) + (set! (-> a1-10 param 0) (the-as uint #t)) + (send-event-function (handle->process (-> obj evilbro)) a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) pp) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'center-joint) + (set! (-> a1-11 param 0) (the-as uint 3)) + (send-event-function (handle->process (-> obj evilbro)) a1-11) + ) + (let ((s5-2 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj evilsis) (ppointer->handle (when s5-2 + (let + ((t9-11 + (method-of-type + manipy + activate + ) + ) + ) + (t9-11 + (the-as manipy s5-2) + obj + 'manipy + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-2 + manipy-init + (-> + obj + root-override + trans + ) + (-> obj entity) + *evilsis-village3-sg* + #f + ) + (-> s5-2 ppointer) + ) + ) + ) + ) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) pp) + (set! (-> a1-15 num-params) 1) + (set! (-> a1-15 message) 'anim-mode) + (set! (-> a1-15 param 0) (the-as uint 'clone-anim)) + (send-event-function (handle->process (-> obj evilsis)) a1-15) + ) + (let ((a1-16 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-16 from) pp) + (set! (-> a1-16 num-params) 1) + (set! (-> a1-16 message) 'blend-shape) + (set! (-> a1-16 param 0) (the-as uint #t)) + (send-event-function (handle->process (-> obj evilsis)) a1-16) + ) + (let ((a1-17 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-17 from) pp) + (set! (-> a1-17 num-params) 1) + (set! (-> a1-17 message) 'center-joint) + (set! (-> a1-17 param 0) (the-as uint 3)) + (send-event-function (handle->process (-> obj evilsis)) a1-17) + ) + (set! (-> obj draw bounds w) 40960.0) + ) + (new 'static 'spool-anim + :name "sage-village3-introduction" + :index 8 + :parts 58 + :command-list + '( + ((the binteger 206) + joint + "cameraB" + ) + ((the binteger 268) + joint + "camera" + ) + ((the binteger 321) + joint + "cameraB" + ) + ((the binteger 415) + joint + "camera" + ) + ((the binteger 502) + joint + "cameraB" + ) + ((the binteger 655) + joint + "camera" + ) + ((the binteger 864) + joint + "cameraB" + ) + ((the binteger 958) + joint + "camera" + ) + ((the binteger 1178) + joint + "cameraB" + ) + ((the binteger 1295) + joint + "camera" + ) + ((the binteger 1377) + joint + "cameraB" + ) + ((the binteger 1683) + joint + "camera" + ) + ((the binteger 2066) + joint + "cameraB" + ) + ((the binteger 2209) + joint + "camera" + ) + ((the binteger 2389) + joint + "cameraB" + ) + ((the binteger 2707) + joint + "camera" + ) + ((the binteger 2769) + joint + "cameraB" + ) + ((the binteger 2901) + joint + "camera" + ) + ((the binteger 3021) + joint + "cameraB" + ) + ((the binteger 3158) + joint + "camera" + ) + ((the binteger 3301) + joint + "cameraB" + ) + ((the binteger 3533) + joint + "camera" + ) + ((the binteger 3632) + joint + "cameraB" + ) + ((the binteger 3692) + joint + "camera" + ) + ((the binteger 3780) + joint + "cameraB" + ) + ((the binteger 3818) + joint + "camera" + ) + ((the binteger 4188) + joint + "cameraB" + ) + ((the binteger 4324) + joint + "camera" + ) + ((the binteger 4462) + joint + "cameraB" + ) + ((the binteger 4542) joint "camera") + ) + ) + ) + ((79) + (when arg0 + (let* ((s5-3 (-> obj tasks)) + (s4-0 (method-of-object s5-3 save-reminder)) + (a1-18 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-18 from) pp) + (set! (-> a1-18 num-params) 2) + (set! (-> a1-18 message) 'query) + (set! (-> a1-18 param 0) (the-as uint 'pickup)) + (set! (-> a1-18 param 1) (the-as uint 6)) + (s4-0 + s5-3 + (the int (the-as float (send-event-function *target* a1-18))) + 1 + ) + ) + (close-status! (-> obj tasks) (task-status need-introduction)) + ) + (new 'static 'spool-anim + :name "sage-village3-introduction-dark-eco" + :index 4 + :parts 9 + :command-list + '( + ((the binteger 111) + joint + "cameraB" + ) + ((the binteger 189) + joint + "camera" + ) + ((the binteger 455) + joint + "cameraB" + ) + ((the binteger 638) + joint + "camera" + ) + ((the binteger 753) joint "cameraB") + ) + ) + ) + (else + (if arg0 + (close-specific-task! + (game-task snow-ram) + (task-status need-introduction) + ) + ) + (new 'static 'spool-anim + :name "sage-village3-introduction-rams" + :index 6 + :parts 6 + :command-list + '( + ((the binteger 155) + joint + "cameraB" + ) + ((the binteger 370) joint "camera") + ) + ) + ) + ) + ) + ((4 5) + (set! (-> obj skippable) #t) + (let ((s4-1 (+ (get-reminder (-> obj tasks) 0) 1))) + (if (< (the-as uint 1) (the-as uint s4-1)) + (set! s4-1 0) + ) + (countdown (s3-0 2) + (cond + ((zero? s4-1) + (if + (!= + (get-task-status (game-task cave-dark-crystals)) + (task-status need-reminder) + ) + (set! s4-1 1) + ) + ) + (else + (if + (not + (or + (= + (get-task-status (game-task snow-ram)) + (task-status need-reminder) + ) + (= + (get-task-status (game-task snow-ram)) + (task-status need-reminder-a) + ) + ) + ) + (set! s4-1 0) + ) + ) + ) + ) + (if arg0 + (save-reminder (-> obj tasks) s4-1 0) + ) + (if (zero? s4-1) + (new 'static 'spool-anim + :name "sage-village3-reminder-1-dark-eco" + :index 5 + :parts 2 + :command-list '() + ) + (new 'static 'spool-anim + :name "sage-village3-reminder-1-rams" + :index 7 + :parts 3 + :command-list '() + ) + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string + (the-as task-status (current-status (-> obj tasks))) + ) + ) + ) + (get-art-elem obj) + ) + ) + ) + ) + +(defmethod get-art-elem sage-villagec ((obj sage-villagec)) + (-> obj draw art-group data 3) + ) + +(defmethod target-above-threshold? sage-villagec ((obj sage-villagec)) + (the-as + symbol + (and + *target* + (< (-> (target-pos 0) x) 4575232.0) + (< -14323302.0 (-> (target-pos 0) z)) + ) + ) + ) + +(defmethod TODO-RENAME-43 sage-villagec ((obj sage-villagec)) + (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))) + (f0-2 (+ -1.0 (the-as float v1-4))) + ) + (cond + ((< 0.875 f0-2) + (dummy-11 (-> obj ambient) "SAGELP31" #f (-> obj root-override trans)) + ) + ((< 0.75 f0-2) + (if + (not + (closed? + (-> obj tasks) + (game-task cave-dark-crystals) + (task-status need-reminder) + ) + ) + (dummy-11 (-> obj ambient) "SAGELP32" #f (-> obj root-override trans)) + ) + ) + ((< 0.625 f0-2) + (if (nonzero? (get-task-status (game-task citadel-sage-green))) + (dummy-11 (-> obj ambient) "SAGELP33" #f (-> obj root-override trans)) + ) + ) + ((< 0.5 f0-2) + (dummy-11 (-> obj ambient) "SAGELP34" #f (-> obj root-override trans)) + ) + ((< 0.375 f0-2) + (dummy-11 (-> obj ambient) "SAGELP35" #f (-> obj root-override trans)) + ) + ((< 0.25 f0-2) + (dummy-11 (-> obj ambient) "SAGELP36" #f (-> obj root-override trans)) + ) + ((< 0.125 f0-2) + (if (nonzero? (get-task-status (game-task citadel-sage-green))) + (dummy-11 (-> obj ambient) "SAGELP37" #f (-> obj root-override trans)) + ) + ) + ((!= + (get-task-status (game-task citadel-sage-green)) + (task-status need-resolution) + ) + (dummy-11 (-> obj ambient) "SAGELP38" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +(defstate idle (sage-villagec) + :virtual #t + :trans + (behavior () + (case (get-task-status (game-task village3-button)) + (((task-status need-introduction)) + (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) + (send-event-function self a1-0) + ) + ) + ) + ((-> (method-of-type process-taskable idle) trans)) + (none) + ) + ) + +(defstate play-anim (sage-villagec) + :virtual #t + :exit + (behavior () + (set! (-> self draw bounds w) 10240.0) + (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) 'end-mode) + (send-event-function (-> self assistant extra process) a1-0) + ) + (let ((a0-2 (handle->process (-> self evilbro)))) + (if a0-2 + (deactivate a0-2) + ) + ) + (let ((a0-6 (handle->process (-> self evilsis)))) + (if a0-6 + (deactivate a0-6) + ) + ) + ((-> (method-of-type process-taskable play-anim) exit)) + (none) + ) + ) + +(defmethod should-display? sage-villagec ((obj sage-villagec)) + (cond + ((not + (closed? + (-> obj tasks) + (game-task village3-button) + (task-status need-hint) + ) + ) + (dummy-33 obj) + #f + ) + ((sages-kidnapped?) + (dummy-33 obj) + #f + ) + (else + #t + ) + ) + ) + +(defmethod draw-npc-shadow sage-villagec ((obj sage-villagec)) + (let ((v1-1 (-> obj draw shadow-ctrl))) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (set! (-> v1-1 settings flags) (logand -9 (-> v1-1 settings flags))) + (set! (-> v1-1 settings flags) (logand -5 (-> v1-1 settings flags))) + (set! (-> v1-1 settings bot-plane w) 20480.0) + (let ((a0-8 v1-1)) + (set! (-> a0-8 settings flags) (logand -33 (-> a0-8 settings flags))) + ) + 0 + (dummy-14 v1-1) + ) + (else + (logior! (-> v1-1 settings flags) 32) + 0 + ) + ) + ) + (none) + ) + +(defmethod copy-defaults! sage-villagec ((obj sage-villagec) (arg0 res-lump)) + (dummy-40 obj arg0 *sage-village3-sg* 3 40 (new 'static 'vector :w 8192.0) 5) + (set! (-> obj tasks) (get-task-control (game-task cave-dark-crystals))) + (set! (-> obj assistant) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj evilbro) (the-as handle #f)) + (set! (-> obj evilsis) (the-as handle #f)) + (set! (-> obj sound-flava) (the-as uint 5)) + (dummy-42 obj) + (none) + ) + + + + diff --git a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc index 9c41e4e88d..195cb114cb 100644 --- a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc @@ -427,7 +427,7 @@ (dummy-46 (_type_) none 46) (dummy-47 (_type_) none 47) (dummy-48 (_type_) none 48) - (dummy-49 () none 49) + (dummy-49 (_type_) none 49) (dummy-50 (_type_) none 50) (dummy-51 () none 51) (dummy-52 () none 52) @@ -507,7 +507,7 @@ (dummy-58 (_type_ vector) none 58) (dummy-59 (_type_ vector uint float symbol symbol symbol) none 59) (dummy-60 (_type_ float float symbol uint) none 60) - (dummy-61 () none 61) + (TODO-RENAME-61 (_type_ vector vector vector) none 61) (dummy-62 (_type_ vector float) vector 62) (dummy-63 () none 63) (dummy-64 () none 64) diff --git a/test/decompiler/reference/engine/collide/collide-target-h_REF.gc b/test/decompiler/reference/engine/collide/collide-target-h_REF.gc index afe3b2e70e..d648ef281c 100644 --- a/test/decompiler/reference/engine/collide/collide-target-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-target-h_REF.gc @@ -97,6 +97,7 @@ (unknown-vector61 vector :inline :offset 1504) (unknown-float70 float :offset 1520) (unknown-vector70 vector :inline :offset 1536) + (unknown-vector71 vector :inline :offset 1552) (unknown-handle00 handle :offset 1600) (unknown-sphere-array00 collide-shape-prim-sphere 3 :offset 1608) (unknown-sphere00 collide-shape-prim-sphere :offset 1632) diff --git a/test/decompiler/reference/engine/data/art-h_REF.gc b/test/decompiler/reference/engine/data/art-h_REF.gc index 6b3ebf6979..b89888ce01 100644 --- a/test/decompiler/reference/engine/data/art-h_REF.gc +++ b/test/decompiler/reference/engine/data/art-h_REF.gc @@ -229,7 +229,7 @@ :flag-assert #xd00000014 (:methods (login (_type_) _type_ 9) - (dummy-10 (_type_ string type) art-element 10) + (dummy-10 (_type_ string type) joint 10) (dummy-11 (_type_ string type) int 11) (dummy-12 (_type_) symbol 12) ) diff --git a/test/decompiler/reference/engine/game/effect-control-h_REF.gc b/test/decompiler/reference/engine/game/effect-control-h_REF.gc index 7b8e1d88ec..74bab4e068 100644 --- a/test/decompiler/reference/engine/game/effect-control-h_REF.gc +++ b/test/decompiler/reference/engine/game/effect-control-h_REF.gc @@ -18,7 +18,7 @@ (:methods (new (symbol type process-drawable) _type_ 0) (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-10 (_type_ symbol float int) none 10) (dummy-11 () none 11) (dummy-12 () none 12) (set-channel-offset! (_type_ int) none 13) diff --git a/test/decompiler/reference/engine/game/generic-obs-h_REF.gc b/test/decompiler/reference/engine/game/generic-obs-h_REF.gc index 51dc5c46d0..256fa425ee 100644 --- a/test/decompiler/reference/engine/game/generic-obs-h_REF.gc +++ b/test/decompiler/reference/engine/game/generic-obs-h_REF.gc @@ -234,21 +234,21 @@ ;; definition of type gui-query (deftype gui-query (structure) - ((x-position int32 :offset-assert 0) - (y-position int32 :offset-assert 4) - (message basic :offset-assert 8) - (decision basic :offset-assert 12) - (only-allow-cancel basic :offset-assert 16) - (no-msg basic :offset-assert 20) - (message-space int32 :offset-assert 24) + ((x-position int32 :offset-assert 0) + (y-position int32 :offset-assert 4) + (message symbol :offset-assert 8) + (decision symbol :offset-assert 12) + (only-allow-cancel symbol :offset-assert 16) + (no-msg symbol :offset-assert 20) + (message-space int32 :offset-assert 24) ) :pack-me :method-count-assert 11 :size-assert #x1c :flag-assert #xb0000001c (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) + (init! (_type_ symbol int int int symbol symbol) none 9) + (dummy-10 (_type_) symbol 10) ) ) @@ -267,7 +267,7 @@ ;; definition of type othercam (deftype othercam (process) - ((hand uint64 :offset-assert 112) + ((hand handle :offset-assert 112) (old-global-mask uint32 :offset-assert 120) (mask-to-clear uint32 :offset-assert 124) (cam-joint-index int32 :offset-assert 128) @@ -275,9 +275,9 @@ (old-mat-z vector :inline :offset-assert 160) (had-valid-frame basic :offset-assert 176) (border-value basic :offset-assert 180) - (die? basic :offset-assert 184) - (survive-anim-end? basic :offset-assert 188) - (spooling? basic :offset-assert 192) + (die? symbol :offset-assert 184) + (survive-anim-end? symbol :offset-assert 188) + (spooling? symbol :offset-assert 192) ) :heap-base #x60 :method-count-assert 14 diff --git a/test/decompiler/reference/engine/game/task/process-taskable_REF.gc b/test/decompiler/reference/engine/game/task/process-taskable_REF.gc new file mode 100644 index 0000000000..af498f0690 --- /dev/null +++ b/test/decompiler/reference/engine/game/task/process-taskable_REF.gc @@ -0,0 +1,2027 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for method 52 of type process-taskable +;; INFO: Return type mismatch int vs none. +(defmethod dummy-52 process-taskable ((obj process-taskable)) + (let ((v1-1 (-> obj draw shadow-ctrl))) + (when v1-1 + (let ((a0-1 v1-1)) + (set! (-> a0-1 settings bot-plane w) (- -12288.0)) + ) + 0 + (set! (-> v1-1 settings top-plane w) (- 4096.0)) + 0 + ) + ) + (none) + ) + +;; definition for method 9 of type gui-query +;; INFO: Return type mismatch int vs none. +(defmethod + init! + gui-query + ((obj gui-query) + (arg0 symbol) + (arg1 int) + (arg2 int) + (arg3 int) + (arg4 symbol) + (arg5 symbol) + ) + (set! (-> obj x-position) arg1) + (set! (-> obj y-position) arg2) + (set! (-> obj message-space) arg3) + (set! (-> obj only-allow-cancel) arg4) + (set! (-> obj message) arg0) + (set! (-> obj decision) 'undecided) + (set! (-> obj no-msg) arg5) + 0 + (none) + ) + +;; definition for method 10 of type gui-query +(defmethod dummy-10 gui-query ((obj gui-query)) + (kill-current-level-hint '() '(sidekick voicebox stinger) 'exit) + (level-hint-surpress!) + (hide-hud) + (when (hud-hidden?) + (when (-> obj message) + (let + ((a1-2 + (new + 'stack + 'font-context + *font-default-matrix* + (-> obj x-position) + (-> obj y-position) + 0.0 + (font-color default) + (font-flags shadow kerning) + ) + ) + ) + (let ((v1-4 a1-2)) + (set! (-> v1-4 width) (the float (- 512 (-> obj x-position)))) + ) + (let ((v1-5 a1-2)) + (set! (-> v1-5 height) (the float 40)) + ) + (let ((v1-6 a1-2)) + (set! (-> v1-6 scale) 0.9) + ) + (set! (-> a1-2 flags) (font-flags shadow kerning left large)) + (print-game-text (the-as string (-> obj message)) a1-2 #f 128 22) + ) + ) + (cond + ((-> obj only-allow-cancel) + (when (-> obj no-msg) + (clear *temp-string*) + (format *temp-string* "; = ~S" (-> obj no-msg)) + (let* + ((s4-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s5-0 (-> s4-0 base)) + ) + (draw-string-xy + *temp-string* + s4-0 + (-> obj x-position) + (+ (-> obj y-position) 5 (-> obj message-space)) + (font-color default) + (font-flags shadow kerning large) + ) + (let ((a3-4 (-> s4-0 base))) + (let ((v1-17 (the-as object (-> s4-0 base)))) + (set! + (-> (the-as dma-packet v1-17) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-17) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-17) vif1) (new 'static 'vif-tag)) + (set! (-> s4-0 base) (&+ (the-as pointer v1-17) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-0 + (the-as (pointer dma-tag) a3-4) + ) + ) + ) + ) + ) + (else + (let* + ((s4-1 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s5-1 (-> s4-1 base)) + ) + (draw-string-xy + (lookup-text! *common-text* (game-text-id confirm) #f) + s4-1 + (-> obj x-position) + (+ (-> obj y-position) 5 (-> obj message-space)) + (font-color default) + (font-flags shadow kerning large) + ) + (let ((a3-7 (-> s4-1 base))) + (let ((v1-29 (the-as object (-> s4-1 base)))) + (set! + (-> (the-as dma-packet v1-29) dma) + (new 'static 'dma-tag :id (dma-tag-id next)) + ) + (set! (-> (the-as dma-packet v1-29) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-29) vif1) (new 'static 'vif-tag)) + (set! (-> s4-1 base) (&+ (the-as pointer v1-29) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s5-1 + (the-as (pointer dma-tag) a3-7) + ) + ) + ) + ) + ) + (cond + ((!= (-> obj decision) 'undecided) + ) + ((and + (logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (not (-> obj only-allow-cancel)) + ) + (logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x)) + (logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons x)) + (set! (-> obj decision) 'yes) + ) + ((logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle)) + (logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle)) + (logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle)) + (set! (-> obj decision) 'no) + ) + ) + ) + (-> obj decision) + ) + +;; definition for method 7 of type process-taskable +;; INFO: Return type mismatch process-drawable vs process-taskable. +(defmethod relocate process-taskable ((obj process-taskable) (arg0 int)) + (the-as + process-taskable + ((method-of-type process-drawable relocate) obj arg0) + ) + ) + +;; definition for method 46 of type process-taskable +;; INFO: Return type mismatch int vs none. +(defmethod dummy-46 process-taskable ((obj process-taskable)) + (with-pp + (when (nonzero? (-> obj sound-flava)) + (let + ((s5-1 + (vector-! + (new 'stack-no-clear 'vector) + (target-pos 0) + (the-as vector (-> obj root-override root-prim prim-core)) + ) + ) + ) + (set! (-> s5-1 y) (* 4.0 (-> s5-1 y))) + (cond + ((< (vector-length s5-1) 102400.0) + (when (not (-> obj have-flava)) + (set! (-> obj have-flava) #t) + (set-setting! + *setting-control* + pp + 'sound-flava + #f + 20.0 + (the-as int (-> obj sound-flava)) + ) + ) + ) + ((-> obj have-flava) + (clear-pending-settings-from-process *setting-control* pp 'sound-flava) + (set! (-> obj have-flava) #f) + ) + ) + ) + ) + (when (-> obj music) + (let + ((s5-3 + (vector-! + (new 'stack-no-clear 'vector) + (target-pos 0) + (the-as vector (-> obj root-override root-prim prim-core)) + ) + ) + ) + (set! (-> s5-3 y) (* 4.0 (-> s5-3 y))) + (cond + ((< (vector-length s5-3) 102400.0) + (when (not (-> obj have-music)) + (set! (-> obj have-music) #t) + (set-setting! + *setting-control* + pp + 'music + (the-as symbol (-> obj music)) + 0.0 + 0 + ) + ) + ) + ((-> obj have-music) + (clear-pending-settings-from-process *setting-control* pp 'music) + (set! (-> obj have-music) #f) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for method 31 of type process-taskable +;; INFO: Return type mismatch art-joint-anim vs art-element. +(defmethod get-art-elem process-taskable ((obj process-taskable)) + (the-as art-element (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + ) + ) + +;; definition for method 32 of type process-taskable +;; INFO: Return type mismatch symbol vs basic. +(defmethod play-anim! process-taskable ((obj process-taskable) (arg0 symbol)) + (the-as basic #f) + ) + +;; definition for method 33 of type process-taskable +;; INFO: Return type mismatch int vs none. +(defmethod dummy-33 process-taskable ((obj process-taskable)) + (let ((s5-0 (play-anim! obj #f))) + (if (type-type? (-> s5-0 type) spool-anim) + (spool-push *art-control* (-> (the-as spool-anim s5-0) name) 0 obj -99.0) + ) + ) + 0 + (none) + ) + +;; definition for method 51 of type process-taskable +(defmethod close-anim-file! process-taskable ((obj process-taskable)) + (let* ((gp-0 (play-anim! obj #f)) + (v1-2 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) spool-anim)) + gp-0 + ) + ) + ) + (if v1-2 + (file-status *art-control* (-> (the-as spool-anim v1-2) name) 0) + ) + ) + ) + +;; definition for method 34 of type process-taskable +(defmethod TODO-RENAME-34 process-taskable ((obj process-taskable) (arg0 symbol)) + #f + ) + +;; definition for method 35 of type process-taskable +;; INFO: Return type mismatch int vs none. +(defmethod dummy-35 process-taskable ((obj process-taskable)) + (let ((s5-0 (the-as basic (TODO-RENAME-34 obj #f)))) + (if (type-type? (-> (the-as symbol s5-0) type) spool-anim) + (spool-push *art-control* (-> (the-as spool-anim s5-0) name) 0 obj -99.0) + ) + ) + 0 + (none) + ) + +;; definition for method 36 of type process-taskable +;; INFO: Return type mismatch symbol vs basic. +(defmethod + get-spool-anim-or-?? + process-taskable + ((obj process-taskable) (arg0 symbol)) + (the-as basic #f) + ) + +;; definition for method 37 of type process-taskable +;; INFO: Return type mismatch int vs none. +(defmethod spool-push-anim process-taskable ((obj process-taskable)) + (let ((s5-0 (get-spool-anim-or-?? obj #f))) + (if (type-type? (-> s5-0 type) spool-anim) + (spool-push *art-control* (-> (the-as spool-anim s5-0) name) 0 obj -99.0) + ) + ) + 0 + (none) + ) + +;; definition for method 38 of type process-taskable +(defmethod dummy-38 process-taskable ((obj process-taskable)) + (if (nonzero? (-> obj cell-for-task)) + (go (method-of-object obj give-cell)) + ) + (go (method-of-object obj release)) + (none) + ) + +;; definition for function process-taskable-anim-loop +(defbehavior process-taskable-anim-loop process-taskable () + (when (!= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (get-art-elem self) + ) + (ja-channel-push! 1 60) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (get-art-elem self))) + ) + ) + (while #t + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) 1.0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (if (= (-> self next-state name) 'idle) + (TODO-RENAME-43 self) + ) + ) + (the-as none 0) + (none) + ) + +;; failed to figure out what this is: +(defstate release (process-taskable) + :virtual #t + :trans + (behavior () + (when (process-release? *target*) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 2) + (set! (-> a1-0 message) 'trans) + (set! (-> a1-0 param 0) (the-as uint 'restore)) + (set! (-> a1-0 param 1) (the-as uint (-> self old-target-pos))) + (send-event-function *target* a1-0) + ) + (if (should-display? self) + (go-virtual idle) + (go-virtual hidden) + ) + ) + (dummy-33 self) + ((-> self cur-trans-hook)) + (none) + ) + :code + process-taskable-anim-loop + :post + (the-as (function none :behavior process-taskable) ja-post) + ) + +;; failed to figure out what this is: +(defstate give-cell (process-taskable) + :virtual #t + :trans + (behavior () + (cond + ((nonzero? (-> self cell-for-task)) + (let ((gp-0 (handle->process (-> self cell-x)))) + (when gp-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) 'trans) + (set! (-> a1-1 param 0) (the-as uint 'reset)) + (send-event-function *target* a1-1) + ) + (let ((s5-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> s5-0 from) self) + (set! (-> s5-0 num-params) 1) + (set! (-> s5-0 message) 'pickup) + (set! (-> s5-0 param 0) (the-as uint (target-pos 0))) + (send-event-function gp-0 s5-0) + ) + (go-virtual idle) + ) + ) + (format #t "ERROR: ~S no cell spawned~%" (-> self name)) + (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) 'get-pickup) + (set! (-> a1-4 param 0) (the-as uint 6)) + (set! (-> a1-4 param 1) (the-as uint (the float (-> self cell-for-task)))) + (send-event-function *target* a1-4) + ) + ) + (else + (format + #t + "ERROR: ~S got into give-cell with give-cell == #f task = ~S~%" + (-> self name) + (game-task->string (the-as game-task (current-task (-> self tasks)))) + ) + ) + ) + (go-virtual release) + (dummy-33 self) + ((-> self cur-trans-hook)) + (none) + ) + :code + process-taskable-anim-loop + :post + (the-as (function none :behavior process-taskable) ja-post) + ) + +;; failed to figure out what this is: +(defstate lose (process-taskable) + :virtual #t + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (if + (and + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 1500 + ) + (or + (not *target*) + (< + 20480.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + ) + (go-virtual idle) + ) + ((-> self cur-trans-hook)) + (none) + ) + :code + process-taskable-anim-loop + :post + (the-as (function none :behavior process-taskable) ja-post) + ) + +;; failed to figure out what this is: +(defstate enter-playing (process-taskable) + :virtual #t + :code + process-taskable-anim-loop + :post + (the-as (function none :behavior process-taskable) ja-post) + ) + +;; definition for function process-taskable-play-anim-enter +(defbehavior process-taskable-play-anim-enter process-taskable () + (init! (-> self query) #f 40 150 25 #t #f) + (logior! (-> self skel status) 8) + (let ((gp-0 (get-process *default-dead-pool* othercam #x4000))) + (set! (-> self camera) (ppointer->handle (when gp-0 + (let + ((t9-2 + (method-of-type + othercam + activate + ) + ) + ) + (t9-2 + (the-as othercam gp-0) + self + 'othercam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + othercam-init-by-other + self + (-> self cam-joint-index) + #f + #t + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (set! (-> self cell-for-task) (game-task none)) + (set! (-> self skippable) #f) + (set! (-> self blend-on-exit) #f) + (set! (-> self will-talk) #f) + #f + ) + +;; definition for function process-taskable-play-anim-exit +(defbehavior process-taskable-play-anim-exit process-taskable () + (set! (-> self skel status) (logand -9 (-> self skel status))) + (let ((a0-4 (handle->process (-> self camera)))) + (if a0-4 + (deactivate a0-4) + ) + ) + (set! (-> self last-talk) (the-as uint (-> *display* game-frame-counter))) + (dummy-52 self) + (none) + ) + +;; definition for function process-taskable-play-anim-trans +(defbehavior process-taskable-play-anim-trans process-taskable () + (if (nonzero? *camera-look-through-other*) + (set! *camera-look-through-other* 2) + ) + (set-letterbox-frames 5) + (draw-npc-shadow self) + (none) + ) + +;; definition for function process-taskable-play-anim-code +(defbehavior + process-taskable-play-anim-code process-taskable + ((arg0 art-joint-anim) (arg1 basic)) + (when (nonzero? (-> self cell-for-task)) + (cond + ((name= (-> self state name) "play-anim") + (let ((s4-0 (get-process *default-dead-pool* fuel-cell #x4000))) + (set! (-> self cell-x) (ppointer->handle (when s4-0 + (let + ((t9-2 + (method-of-type + fuel-cell + activate + ) + ) + ) + (t9-2 + (the-as fuel-cell s4-0) + self + 'fuel-cell + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s4-0 + fuel-cell-init-as-clone + (process->handle self) + (-> self cell-for-task) + ) + (-> s4-0 ppointer) + ) + ) + ) + ) + ) + (else + (format + #t + "ERROR: ~S ~S trying to give cell on release~%" + (-> self name) + (-> self state name) + ) + ) + ) + ) + (cond + ((and arg1 (type-type? (-> arg1 type) spool-anim)) + (when *target* + (while (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-anim) + (set! (-> a1-9 param 0) (the-as uint self)) + (not (send-event-function *target* a1-9)) + ) + (spool-push *art-control* (-> (the-as spool-anim arg1) name) 0 self -99.0) + (format #t "WARNING: ~A stall on not cloning.~%" (-> self name)) + (suspend) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 1) + (set! (-> a1-10 message) 'matrix) + (set! (-> a1-10 param 0) (the-as uint 'play-anim)) + (send-event-function (ppointer->process (-> *target* sidekick)) a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'blend-shape) + (set! (-> a1-11 param 0) (the-as uint #t)) + (send-event-function *target* a1-11) + ) + ) + (push-setting! + *setting-control* + self + (the-as (function object object object object object) 'music-volume) + 'rel + (-> *setting-control* current music-volume-movie) + 0 + ) + (push-setting! + *setting-control* + self + (the-as (function object object object object object) 'sfx-volume) + 'rel + (-> *setting-control* current sfx-volume-movie) + 0 + ) + (push-setting! + *setting-control* + self + (the-as (function object object object object object) 'ambient-volume) + 'rel + (-> *setting-control* current ambient-volume-movie) + 0 + ) + (if (-> self blend-on-exit) + (set! (-> self blend-on-exit) arg0) + ) + (if (and *debug-segment* *cheat-mode*) + (ja-play-spooled-anim + (the-as spool-anim arg1) + arg0 + (the-as art-joint-anim (-> self blend-on-exit)) + (lambda ((arg0 process-taskable)) + (= (dummy-10 (-> arg0 query)) 'no) + ) + ) + (ja-play-spooled-anim + (the-as spool-anim arg1) + arg0 + (the-as art-joint-anim (-> self blend-on-exit)) + (the-as (function process-drawable symbol) false-func) + ) + ) + (clear-pending-settings-from-process *setting-control* self 'music-volume) + (clear-pending-settings-from-process *setting-control* self 'sfx-volume) + (clear-pending-settings-from-process *setting-control* self 'ambient-volume) + (let ((a1-20 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-20 from) self) + (set! (-> a1-20 num-params) 1) + (set! (-> a1-20 message) 'blend-shape) + (set! (-> a1-20 param 0) (the-as uint #f)) + (send-event-function *target* a1-20) + ) + ) + (else + (when (not arg1) + (format + #t + "ERROR: ~S ~S got #f from anim picker~%" + (-> self name) + (-> self state name) + ) + (set! arg1 (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + ) + (when (not (type-type? (-> arg1 type) art-joint-anim)) + (format + 0 + "ERROR: ~S ~S anim picker didn't return spool-anim or joint-art-anim (probably need to override it)~%" + (-> self name) + (-> self state name) + ) + (set! arg1 (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + ) + (format + #t + "~S ~S anim ~S~%" + (-> self name) + (-> self state name) + (-> (the-as art-joint-anim arg1) name) + ) + (ja-channel-push! 1 60) + (set! + (-> self skel root-channel 0 frame-group) + (the-as art-joint-anim arg1) + ) + (when (< (ja-num-frames 0) 3) + (suspend) + (suspend) + 0 + ) + (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) + (when (and *debug-segment* (= (dummy-10 (-> self query)) 'no)) + (let ((v1-106 (-> self skel root-channel 0))) + (set! (-> v1-106 num-func) num-func-identity) + (set! + (-> v1-106 frame-num) + (the float (+ (-> v1-106 frame-group data 0 length) -1)) + ) + ) + ) + (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! + ) + ) + ) + #f + ) + ) + ) + +;; failed to figure out what this is: +(defstate play-accept (process-taskable) + :virtual #t + :enter + (the-as + (function none :behavior process-taskable) + process-taskable-play-anim-enter + ) + :exit + process-taskable-play-anim-exit + :trans + (behavior () + (process-taskable-play-anim-trans) + ((-> self cur-trans-hook)) + (none) + ) + :code + (behavior () + (process-taskable-play-anim-code + (the-as art-joint-anim (get-art-elem self)) + (TODO-RENAME-34 self #t) + ) + (while (not (process-release? *target*)) + (suspend) + ) + (go-virtual enter-playing) + (none) + ) + :post + (the-as (function none :behavior process-taskable) ja-post) + ) + +;; failed to figure out what this is: +(defstate play-reject (process-taskable) + :virtual #t + :enter + (the-as + (function none :behavior process-taskable) + process-taskable-play-anim-enter + ) + :exit + process-taskable-play-anim-exit + :trans + (behavior () + (process-taskable-play-anim-trans) + ((-> self cur-trans-hook)) + (none) + ) + :code + (behavior () + (process-taskable-play-anim-code + (the-as art-joint-anim (get-art-elem self)) + (get-spool-anim-or-?? self #t) + ) + (go-virtual release) + (none) + ) + :post + (the-as (function none :behavior process-taskable) ja-post) + ) + +;; failed to figure out what this is: +(defstate query (process-taskable) + :virtual #t + :enter + (behavior () + (init! + (-> self query) + (the-as symbol (lookup-text! *common-text* (game-text-id confirm-play) #f)) + 40 + 150 + 25 + #f + (the-as symbol (lookup-text! *common-text* (game-text-id quit) #f)) + ) + (none) + ) + :exit + process-taskable-play-anim-exit + :trans + (behavior () + (case (current-status (-> self tasks)) + ((4) + (case (dummy-10 (-> self query)) + (('yes) + (go-virtual play-accept) + ) + (('no) + (go-virtual play-reject) + ) + ) + (dummy-35 self) + ) + (else + (let ((gp-0 (dummy-10 (-> self query)))) + (cond + ((and (= gp-0 'yes) (process-release? *target*)) + (go-virtual enter-playing) + ) + ((= gp-0 'no) + (go-virtual play-reject) + ) + ) + ) + ) + ) + (spool-push-anim self) + (set! *camera-look-through-other* 2) + ((-> self cur-trans-hook)) + (none) + ) + :code + process-taskable-anim-loop + :post + (the-as (function none :behavior process-taskable) ja-post) + ) + +;; failed to figure out what this is: +(defstate play-anim (process-taskable) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('shadow) + (cond + ((-> arg3 param 0) + (let ((v0-0 (the-as object (-> self shadow-backup)))) + (set! (-> self draw shadow) (the-as shadow-geo v0-0)) + v0-0 + ) + ) + (else + (set! (-> self draw shadow) #f) + #f + ) + ) + ) + (('shadow-min-max) + (let ((v1-5 (-> self draw shadow-ctrl))) + (let ((a0-4 v1-5)) + (set! + (-> a0-4 settings bot-plane w) + (- (the-as float (-> arg3 param 0))) + ) + ) + 0 + (set! (-> v1-5 settings top-plane w) (- (the-as float (-> arg3 param 1)))) + ) + 0 + ) + ) + ) + :enter + (the-as + (function none :behavior process-taskable) + process-taskable-play-anim-enter + ) + :exit + process-taskable-play-anim-exit + :trans + (behavior () + (process-taskable-play-anim-trans) + (let ((a3-0 (handle->process (-> self cell-x)))) + (if a3-0 + (spool-push *art-control* (-> self fuel-cell-anim name) 0 a3-0 -99.0) + ) + ) + ((-> self cur-trans-hook)) + (none) + ) + :code + (behavior () + (process-taskable-play-anim-code + (the-as art-joint-anim (get-art-elem self)) + (play-anim! self #t) + ) + (dummy-38 self) + (none) + ) + :post + (the-as (function none :behavior process-taskable) ja-post) + ) + +;; definition for function process-taskable-clean-up-after-talking +(defbehavior process-taskable-clean-up-after-talking process-taskable () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (set! (-> self skel status) (logand -2 (-> self skel status))) + (clear-pending-settings-from-process *setting-control* self 'border-mode) + (clear-pending-settings-from-process *setting-control* self 'talking) + (none) + ) + +;; definition for method 39 of type process-taskable +(defmethod should-display? process-taskable ((obj process-taskable)) + #t + ) + +;; definition for function process-taskable-hide-handler +(defbehavior + process-taskable-hide-handler process-taskable + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('clone) + (go-virtual be-clone (the-as handle (-> arg3 param 0))) + ) + (('play-anim) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self been-kicked) #t) + (go-virtual idle) + ) + (('hidden-other) + (go-virtual hidden-other) + ) + ) + (none) + ) + +;; definition for function process-taskable-hide-enter +;; INFO: Return type mismatch none vs int. +(defbehavior process-taskable-hide-enter process-taskable () + (set! (-> self state-time) (the-as seconds (-> *display* base-frame-counter))) + (let ((v1-3 (-> self draw shadow-ctrl))) + (logior! (-> v1-3 settings flags) 32) + ) + 0 + (process-taskable-clean-up-after-talking) + (dummy-48 (-> self root-override)) + (ja-channel-set! 0) + (the-as int (ja-post)) + ) + +;; definition for function process-taskable-hide-exit +;; INFO: Return type mismatch int vs none. +(defbehavior process-taskable-hide-exit process-taskable ((arg0 symbol)) + (cond + (arg0 + (process-entity-status! self (entity-perm-status bit-3) #f) + ) + (else + (ja-channel-set! 1) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (get-art-elem self))) + ) + (dummy-49 (-> self root-override)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (let ((v1-7 (-> self draw shadow-ctrl))) + (set! (-> v1-7 settings flags) (logand -33 (-> v1-7 settings flags))) + ) + 0 + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate hidden (process-taskable) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior process-taskable) + process-taskable-hide-handler + ) + :enter + (the-as + (function none :behavior process-taskable) + process-taskable-hide-enter + ) + :exit + (behavior () + (process-taskable-hide-exit (= (-> self next-state name) 'hidden)) + (none) + ) + :trans + (behavior () + (if + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 300 + ) + (process-entity-status! self (entity-perm-status bit-3) #f) + ) + (if (or (-> self been-kicked) (should-display? self)) + (go-virtual idle) + ) + (none) + ) + :code + (the-as (function none :behavior process-taskable) anim-loop) + ) + +;; definition for method 50 of type process-taskable +;; WARN: disable def twice: 4. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +(defmethod TODO-RENAME-50 process-taskable ((obj process-taskable)) + (if *target* + (or + (not *target*) + (< + 245760.0 + (vector-vector-distance + (-> obj root-override trans) + (-> *target* control trans) + ) + ) + ) + (< + 60397978000.0 + (vector-vector-distance-squared + (the-as vector (-> obj root-override root-prim prim-core)) + (camera-pos) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate hidden-other (process-taskable) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior process-taskable) + process-taskable-hide-handler + ) + :enter + (the-as + (function none :behavior process-taskable) + process-taskable-hide-enter + ) + :exit + (behavior () + (process-taskable-hide-exit (= (-> self next-state name) 'hidden-other)) + (none) + ) + :trans + (behavior () + (if + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 300 + ) + (process-entity-status! self (entity-perm-status bit-3) #f) + ) + (cond + ((-> self been-kicked) + (go-virtual idle) + ) + ((TODO-RENAME-50 self) + (if (should-display? self) + (go-virtual idle) + (go-virtual hidden) + ) + ) + ) + (none) + ) + :code + (the-as (function none :behavior process-taskable) anim-loop) + ) + +;; failed to figure out what this is: +(defstate be-clone (process-taskable) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'shadow) + (the-as shadow-geo (cond + ((-> arg3 param 0) + (let ((v0-0 (-> self shadow-backup))) + (set! (-> self draw shadow) v0-0) + v0-0 + ) + ) + (else + (set! (-> self draw shadow) #f) + (the-as shadow-geo #f) + ) + ) + ) + ) + ((= v1-0 'shadow-min-max) + (let ((v1-5 (-> self draw shadow-ctrl))) + (let ((a0-5 v1-5)) + (set! + (-> a0-5 settings bot-plane w) + (- (the-as float (-> arg3 param 0))) + ) + ) + 0 + (set! + (-> v1-5 settings top-plane w) + (- (the-as float (-> arg3 param 1))) + ) + ) + (the-as shadow-geo 0) + ) + ((= v1-0 'end-mode) + (the-as shadow-geo (if (should-display? self) + (the-as shadow-geo (go-virtual idle)) + (the-as shadow-geo (go-virtual hidden)) + ) + ) + ) + ) + ) + ) + ) + :enter + (behavior ((arg0 handle)) + (logior! (-> self skel status) 8) + (logclear! (-> self mask) (process-mask actor-pause)) + (set-vector! + (-> self draw bounds) + 0.0 + (-> self draw-bounds-y-offset) + 0.0 + (-> self draw bounds w) + ) + (none) + ) + :exit + (behavior () + (set! (-> self skel status) (logand -41 (-> self skel status))) + (logior! (-> self mask) (process-mask actor-pause)) + (let ((v1-6 (-> self entity extra trans))) + (if v1-6 + (set! (-> self root-override trans quad) (-> v1-6 quad)) + ) + ) + (ja-channel-set! 0) + (none) + ) + :trans + (behavior () + (draw-npc-shadow self) + ((-> self cur-trans-hook)) + (none) + ) + :code + (behavior ((arg0 handle)) + (clone-anim arg0 (-> self center-joint-index) #t "") + (format #t "ERROR: handle invalid while ~S is cloning~%" (-> self name)) + (go-virtual hidden) + (none) + ) + ) + +;; definition for method 47 of type process-taskable +(defmethod target-above-threshold? process-taskable ((obj process-taskable)) + #t + ) + +;; failed to figure out what this is: +(defstate idle (process-taskable) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'attack) + (the-as symbol (when (-> self bounce-away) + (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) 'shove) + (set! (-> a1-3 param 0) (the-as uint #f)) + (let + ((v1-4 + (new 'static 'attack-info :mask #xc0) + ) + ) + (set! (-> v1-4 shove-back) 12288.0) + (set! (-> v1-4 shove-up) 4096.0) + (set! + (-> a1-3 param 1) + (the-as uint v1-4) + ) + ) + (the-as + symbol + (send-event-function arg0 a1-3) + ) + ) + ) + ) + ) + ((= v1-0 'touch) + (the-as + symbol + (dummy-55 + (-> self root-override) + arg0 + (-> arg3 param 0) + 0.7 + 6144.0 + 16384.0 + ) + ) + ) + ((= v1-0 'clone) + (the-as + symbol + (go-virtual be-clone (the-as handle (-> arg3 param 0))) + ) + ) + ((= v1-0 'play-anim) + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((v0-0 #t)) + (set! (-> self been-kicked) v0-0) + v0-0 + ) + ) + ((= v1-0 'hidden-other) + (the-as symbol (go-virtual hidden-other)) + ) + ) + ) + ) + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (process-taskable-clean-up-after-talking) + (none) + ) + :exit + (behavior () + (cond + ((or + (= (-> self next-state name) 'dead-state) + (= (-> self next-state name) 'idle) + ) + (process-entity-status! self (entity-perm-status bit-3) #f) + ) + (else + (kill-current-level-hint '() '() 'exit) + (logior! (-> self skel status) 1) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (set-setting! *setting-control* self 'border-mode #f 0.0 0) + (set-setting! + *setting-control* + self + 'talking + (the-as symbol (process->ppointer self)) + 0.0 + 0 + ) + (copy-settings-from-target! *setting-control*) + ) + ) + (none) + ) + :trans + (behavior () + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 60 + ) + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + ) + (cond + ((not *target*) + ) + ((not (-> self will-talk)) + (if + (>= + (- (-> *display* game-frame-counter) (the-as int (-> self last-talk))) + 3000 + ) + (set! (-> self will-talk) #t) + ) + ) + ((begin + (dummy-46 self) + (and + (not + (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + ) + (< + (-> (target-pos 0) y) + (+ 8192.0 (-> self root-override root-prim prim-core world-sphere y)) + ) + (< + (vector-vector-distance + (target-pos 0) + (the-as vector (-> self root-override root-prim prim-core)) + ) + 32768.0 + ) + (= (-> *level* loading-level) (-> *level* level-default)) + (not (movie?)) + (not (level-hint-displayed?)) + (none-reserved? *art-control*) + (not *progress-process*) + (and + (not (handle->process (-> *game-info* other-camera-handle))) + (close-anim-file! self) + ) + ) + ) + (first-any (-> self tasks) #t) + (when (target-above-threshold? self) + (case (current-status (-> self tasks)) + ((2 3 5 4 6) + (kill-current-level-hint '() '(sidekick voicebox ambient) 'exit) + (level-hint-surpress!) + (hide-hud) + (when (and (hud-hidden?) (can-grab-display? self)) + (let + ((gp-1 + (new + 'stack + 'font-context + *font-default-matrix* + 32 + 140 + 0.0 + (font-color default) + (font-flags shadow kerning) + ) + ) + ) + (let ((v1-57 gp-1)) + (set! (-> v1-57 width) (the float 440)) + ) + (let ((v1-58 gp-1)) + (set! (-> v1-58 height) (the float 60)) + ) + (let ((v1-59 gp-1)) + (set! (-> v1-59 scale) 0.9) + ) + (set! (-> gp-1 flags) (font-flags shadow kerning left large)) + (print-game-text + (lookup-text! + *common-text* + (the-as game-text-id (-> self talk-message)) + #f + ) + gp-1 + #f + 128 + 22 + ) + ) + (when + (and + (logtest? + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons circle) + ) + (process-grab? *target*) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons circle) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons circle) + ) + (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) 'trans) + (set! (-> a1-12 param 0) (the-as uint 'save)) + (set! (-> a1-12 param 1) (the-as uint (-> self old-target-pos))) + (send-event-function *target* a1-12) + ) + (go-virtual play-anim) + ) + ) + ) + ) + ) + ) + ) + (if (= (-> *level* loading-level) (-> *level* level-default)) + (dummy-33 self) + ) + (draw-npc-shadow self) + (when + (and + (-> self been-kicked) + (and + (not *progress-process*) + (process-grab? *target*) + (not (handle->process (-> *game-info* other-camera-handle))) + ) + ) + (set! (-> self been-kicked) #f) + (let ((a1-14 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-14 from) self) + (set! (-> a1-14 num-params) 2) + (set! (-> a1-14 message) 'trans) + (set! (-> a1-14 param 0) (the-as uint 'save)) + (set! (-> a1-14 param 1) (the-as uint (-> self old-target-pos))) + (send-event-function *target* a1-14) + ) + (go-virtual play-anim) + ) + ((-> self cur-trans-hook)) + (none) + ) + :code + process-taskable-anim-loop + :post + (behavior () + (when *target* + (when (!= (-> self neck-joint-index) -1) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data (-> self neck-joint-index))) + (if *target* + (look-at-enemy! (-> *target* neck) gp-0 'nothing self) + ) + ) + ) + ) + (transform-post) + (none) + ) + ) + +;; definition for method 41 of type process-taskable +;; INFO: Return type mismatch int vs none. +(defmethod + initialize-collision + process-taskable + ((obj process-taskable) (arg0 int) (arg1 vector)) + (let + ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (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 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) arg0) + (set-vector! + (-> s4-0 local-sphere) + (-> arg1 x) + (-> arg1 y) + (-> arg1 z) + (-> arg1 w) + ) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 40 of type process-taskable +;; INFO: Return type mismatch int vs none. +(defmethod + dummy-40 + process-taskable + ((obj process-taskable) + (arg0 object) + (arg1 skeleton-group) + (arg2 int) + (arg3 int) + (arg4 vector) + (arg5 int) + ) + (let ((s3-0 arg2) + (s4-0 arg3) + (s0-0 arg4) + (s5-0 arg5) + ) + (stack-size-set! (-> obj main-thread) 512) + (initialize-collision obj s3-0 s0-0) + (process-drawable-from-entity! obj (the-as res-lump arg0)) + (let* ((a0-4 obj) + (t9-3 (method-of-object a0-4 dummy-14)) + (a2-2 '()) + (a1-4 arg1) + ) + (t9-3 a0-4 a1-4 a2-2) + (set! (-> obj shadow-backup) (-> obj draw shadow)) + (logior! (-> obj skel status) 256) + (set! (-> obj root-override pause-adjust-distance) -122880.0) + (set! (-> obj fuel-cell-anim) (the-as spool-anim (fuel-cell-pick-anim obj))) + (set! (-> obj draw origin-joint-index) (the-as uint s3-0)) + (set! (-> obj draw shadow-joint-index) (the-as uint s3-0)) + (set! (-> obj center-joint-index) s3-0) + (set! (-> obj draw-bounds-y-offset) (-> obj draw bounds y)) + (set! (-> obj have-flava) #f) + (set! (-> obj music) #f) + (set! (-> obj have-music) #f) + (set! (-> obj cam-joint-index) s4-0) + (set! (-> obj cell-x) (the-as handle #f)) + (set! (-> obj cell-for-task) (game-task none)) + (set! (-> obj camera) (the-as handle #f)) + (set! (-> obj will-talk) #t) + (set! (-> obj talk-message) (the-as uint 260)) + (set! (-> obj last-talk) (the-as uint 0)) + (set! (-> obj bounce-away) #t) + (set! (-> obj been-kicked) #f) + (set! (-> obj neck-joint-index) s5-0) + (set! (-> obj cur-trans-hook) nothing) + (dummy-9 + (-> obj ambient) + (the-as vector a1-4) + (the-as int a2-2) + (the-as float arg2) + (the-as process-drawable arg3) + ) + ) + ) + (set! (-> obj event-hook) (-> (method-of-object obj idle) event)) + (set! + (-> obj draw shadow-ctrl) + (new 'process 'shadow-control 0.0 0.0 614400.0 (the-as float 60) 245760.0) + ) + (dummy-52 obj) + 0 + (none) + ) + +;; definition for method 42 of type process-taskable +(defmethod dummy-42 process-taskable ((obj process-taskable)) + (cond + ((not (should-display? obj)) + (go (method-of-object obj hidden)) + ) + ((= (current-status (-> obj tasks)) 7) + (go (method-of-object obj give-cell)) + ) + (else + (go (method-of-object obj idle)) + ) + ) + (none) + ) + +;; definition for method 43 of type process-taskable +;; INFO: Return type mismatch int vs symbol. +(defmethod TODO-RENAME-43 process-taskable ((obj process-taskable)) + (the-as symbol 0) + ) + +;; definition for method 9 of type ambient-control +;; INFO: Return type mismatch int vs none. +(defmethod + dummy-9 + ambient-control + ((obj ambient-control) + (arg0 vector) + (arg1 int) + (arg2 float) + (arg3 process-drawable) + ) + (set! + (-> obj last-ambient-time) + (the-as uint (-> *display* game-frame-counter)) + ) + 0 + (none) + ) + +;; definition for method 10 of type ambient-control +(defmethod + TODO-RENAME-10 + ambient-control + ((obj ambient-control) + (arg0 vector) + (arg1 int) + (arg2 float) + (arg3 process-drawable) + ) + (when + (< + (- + (-> *display* game-frame-counter) + (the-as int (-> obj last-ambient-time)) + ) + arg1 + ) + (set! arg0 (the-as vector #f)) + (goto cfg-6) + ) + (vector-for-ambient arg3 arg0) + (when (< arg2 (vector-length arg0)) + (set! arg0 (the-as vector #f)) + (goto cfg-6) + ) + (label cfg-6) + arg0 + ) + +;; definition for method 11 of type ambient-control +(defmethod + dummy-11 + ambient-control + ((obj ambient-control) (arg0 string) (arg1 symbol) (arg2 vector)) + (when + (and + (not (string= arg0 (the-as string (-> obj last-ambient)))) + (or arg1 (can-hint-be-played? 1 (the-as entity #f) (the-as string #f))) + (= (-> *level* loading-level) (-> *level* level-default)) + (ambient-hint-spawn arg0 arg2 *entity-pool* 'ambient) + ) + (set! + (-> obj last-ambient-time) + (the-as uint (-> *display* game-frame-counter)) + ) + (set! (-> obj last-ambient) arg0) + (return #t) + ) + #f + ) + +;; definition for function vector-for-ambient +(defun vector-for-ambient ((arg0 process-drawable) (arg1 vector)) + (if *target* + (vector-! arg1 (target-pos 0) (-> arg0 root trans)) + (vector-! arg1 (camera-pos) (-> arg0 root trans)) + ) + arg1 + ) + +;; definition for function othercam-calc +(defun othercam-calc ((arg0 float)) + (let ((f0-3 (* 2.0 (atan (/ 14.941477 (* 20.3 arg0)) 1.0)))) + (set! (-> *camera-other-fov* data) f0-3) + f0-3 + ) + ) + +;; failed to figure out what this is: +(defstate othercam-running (othercam) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('die) + (set! v0-0 #t) + (set! (-> self die?) (the-as symbol v0-0)) + v0-0 + ) + (('joint) + (let ((t9-0 type-type?) + (v1-1 (-> arg3 param 0)) + ) + (cond + ((t9-0 (rtype-of v1-1) string) + (let + ((v1-8 + (dummy-10 + (-> (the-as process-taskable (-> self hand process 0)) draw jgeo) + (the-as string (-> arg3 param 0)) + (the-as type #f) + ) + ) + ) + (when v1-8 + (set! v0-0 (+ (-> v1-8 number) 1)) + (set! (-> self cam-joint-index) (the-as int v0-0)) + v0-0 + ) + ) + ) + ((zero? (logand (-> arg3 param 0) 7)) + (set! v0-0 (-> arg3 param 0)) + (set! (-> self cam-joint-index) (the-as int v0-0)) + v0-0 + ) + ) + ) + ) + (('mask) + (set! v0-0 (-> arg3 param 0)) + (set! (-> self mask-to-clear) (the-as uint v0-0)) + v0-0 + ) + ) + ) + :enter + (behavior () + (hide-hud-quick) + (case (-> self spooling?) + (('logo) + ) + (else + (push-setting! + *setting-control* + self + (the-as (function object object object object object) 'process-mask) + 'set + 0.0 + (-> self mask-to-clear) + ) + (push-setting! + *setting-control* + self + (the-as (function object object object object object) 'movie) + (process->ppointer self) + 0.0 + 0 + ) + (if (not (-> self border-value)) + (push-setting! + *setting-control* + self + (the-as (function object object object object object) 'border-mode) + (-> self border-value) + 0.0 + 0 + ) + ) + ) + ) + (set! (-> self had-valid-frame) #f) + (let ((gp-0 (-> self hand process 0))) + (vector<-cspace! + (-> self old-pos) + (-> + (the-as process-taskable gp-0) + node-list + data + (-> self cam-joint-index) + ) + ) + (let + ((v1-19 + (-> + (the-as process-taskable gp-0) + node-list + data + (-> self cam-joint-index) + bone + transform + ) + ) + ) + (vector-normalize-copy! (-> self old-mat-z) (-> v1-19 vector 2) -1.0) + ) + ) + (copy-settings-from-target! *setting-control*) + (none) + ) + :exit + (behavior () + (clear-pending-settings-from-process *setting-control* self 'process-mask) + (copy-settings-from-target! *setting-control*) + (none) + ) + :code + (behavior () + (while #t + (let ((s2-0 (-> self hand process 0))) + (when (not s2-0) + (format #t "ERROR: othercam parent invalid~%") + (deactivate self) + ) + (set! + (-> *camera-other-root* quad) + (-> (the-as process-taskable s2-0) root-override trans quad) + ) + (let + ((s4-0 + (-> + (the-as process-taskable s2-0) + node-list + data + (-> self cam-joint-index) + bone + transform + ) + ) + (s3-0 + (-> + (the-as process-taskable s2-0) + node-list + data + (-> self cam-joint-index) + bone + scale + ) + ) + (gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (s1-0 + (or + (!= (-> self spooling?) #t) + (logtest? (-> (the-as process-taskable s2-0) skel status) 32) + ) + ) + ) + (vector<-cspace! + s5-0 + (-> + (the-as process-taskable s2-0) + node-list + data + (-> self cam-joint-index) + ) + ) + (vector-normalize-copy! gp-0 (-> s4-0 vector 2) -1.0) + (when s1-0 + (when (not (-> self had-valid-frame)) + (set! (-> self had-valid-frame) #t) + (set! (-> self old-pos quad) (-> s5-0 quad)) + (set! (-> self old-mat-z quad) (-> gp-0 quad)) + ) + (when #t + (set! (-> *camera-other-trans* quad) (-> s5-0 quad)) + (vector-normalize-copy! + (the-as vector (-> *camera-other-matrix* vector)) + (the-as vector (-> s4-0 vector)) + -1.0 + ) + (set! (-> *camera-other-matrix* vector 0 w) 0.0) + (vector-normalize-copy! + (-> *camera-other-matrix* vector 1) + (-> s4-0 vector 1) + 1.0 + ) + (set! (-> *camera-other-matrix* vector 1 w) 0.0) + (vector-normalize-copy! + (-> *camera-other-matrix* vector 2) + (-> s4-0 vector 2) + -1.0 + ) + (set! (-> *camera-other-matrix* vector 2 w) 0.0) + (vector-reset! (-> *camera-other-matrix* vector 3)) + (othercam-calc (-> s3-0 x)) + ) + (set! *camera-look-through-other* 2) + (set! (-> self old-pos quad) (-> s5-0 quad)) + (set! (-> self old-mat-z quad) (-> gp-0 quad)) + ) + ) + ) + (suspend) + (-> self hand process 0) + (when + (or (-> self die?) (and (not (-> self survive-anim-end?)) (ja-anim-done?))) + (let ((gp-1 (-> *display* base-frame-counter))) + (while + (and + (< (- (-> *display* base-frame-counter) gp-1) #x4650) + (or + (and + (-> self entity) + (not + (is-object-visible? + (-> self entity extra level) + (-> self entity extra vis-id) + ) + ) + ) + (< + 81920.0 + (vector-vector-distance (camera-pos) (-> *math-camera* trans)) + ) + ) + ) + (suspend) + ) + ) + (deactivate self) + ) + ) + (none) + ) + ) + +;; definition for function othercam-init-by-other +;; INFO: Return type mismatch int vs none. +(defbehavior + othercam-init-by-other othercam + ((arg0 process-taskable) (arg1 symbol) (arg2 symbol) (arg3 symbol)) + (set! (-> self spooling?) arg3) + (case (-> self spooling?) + (('logo) + ) + (else + (set! (-> *game-info* other-camera-handle) (process->handle self)) + ) + ) + (set! (-> self hand) (process->handle arg0)) + (set! (-> self cam-joint-index) (the-as int arg1)) + (logclear! (-> self mask) (process-mask pause menu actor-pause)) + (set! (-> self border-value) #f) + (set! (-> self die?) #f) + (set! (-> self survive-anim-end?) arg2) + (set! (-> self mask-to-clear) (the-as uint #x4a0800)) + (set! (-> self event-hook) (-> othercam-running event)) + (go othercam-running) + 0 + (none) + ) + +;; definition for method 48 of type process-taskable +(defmethod draw-npc-shadow process-taskable ((obj process-taskable)) + (let ((gp-0 (-> obj draw shadow-ctrl))) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (dummy-15 gp-0 (-> obj draw origin) -4096.0 4096.0 32768.0) + (dummy-14 gp-0) + ) + (else + (let ((v1-10 gp-0)) + (logior! (-> v1-10 settings flags) 32) + ) + 0 + ) + ) + ) + (none) + ) diff --git a/test/decompiler/reference/engine/game/task/task-control-h_REF.gc b/test/decompiler/reference/engine/game/task/task-control-h_REF.gc index 7c21473b19..75531007bf 100644 --- a/test/decompiler/reference/engine/game/task/task-control-h_REF.gc +++ b/test/decompiler/reference/engine/game/task/task-control-h_REF.gc @@ -74,7 +74,7 @@ (:methods (dummy-9 (_type_ vector int float process-drawable) none 9) (TODO-RENAME-10 (_type_ vector int float process-drawable) vector 10) - (dummy-11 (_type_ string symbol vector) none 11) + (dummy-11 (_type_ string symbol vector) symbol 11) ) ) @@ -89,15 +89,16 @@ ;; definition of type process-taskable (deftype process-taskable (process-drawable) - ((tasks task-control :offset-assert 176) + ((root-override collide-shape :offset 112) + (tasks task-control :offset-assert 176) (query gui-query :inline :offset-assert 180) (old-target-pos transformq :inline :offset-assert 208) (cell-for-task game-task :offset-assert 256) - (cell-x uint64 :offset-assert 264) + (cell-x handle :offset-assert 264) (cam-joint-index int32 :offset-assert 272) (skippable basic :offset-assert 276) (blend-on-exit basic :offset-assert 280) - (camera uint64 :offset-assert 288) + (camera handle :offset-assert 288) (will-talk symbol :offset-assert 296) (talk-message uint32 :offset-assert 300) (last-talk uint64 :offset-assert 304) @@ -112,7 +113,7 @@ (music basic :offset-assert 360) (have-music symbol :offset-assert 364) (been-kicked symbol :offset-assert 368) - (cur-trans-hook function :offset-assert 372) + (cur-trans-hook (function none) :offset-assert 372) (shadow-backup shadow-geo :offset-assert 376) ) :heap-base #x110 @@ -120,38 +121,38 @@ :size-assert #x17c :flag-assert #x350110017c (:methods - (dummy-20 () none 20) + (release () _type_ :state 20) (give-cell () _type_ :state 21) - (dummy-22 () none 22) - (enter-playing () none 23) - (play-accept () none 24) - (dummy-25 () none 25) - (query () none 26) + (lose () _type_ :state 22) + (enter-playing () _type_ :state 23) + (play-accept () _type_ :state 24) + (play-reject () _type_ :state 25) + (query () _type_ :state 26) (play-anim () _type_ :state 27) (hidden () _type_ :state 28) - (dummy-29 () none 29) + (be-clone (handle) _type_ :state 29) (idle () _type_ :state 30) (get-art-elem (_type_) art-element 31) (play-anim! (_type_ symbol) basic 32) (dummy-33 (_type_) none 33) - (dummy-34 (_type_) none 34) + (TODO-RENAME-34 (_type_ symbol) symbol 34) (dummy-35 (_type_) none 35) - (dummy-36 (_type_) none 36) - (dummy-37 (_type_) none 37) + (get-spool-anim-or-?? (_type_ symbol) basic 36) + (spool-push-anim (_type_) none 37) (dummy-38 (_type_) none 38) (should-display? (_type_) symbol 39) (dummy-40 (_type_ object skeleton-group int int vector int) none 40) - (initialize-collision (_type_ int) none 41) + (initialize-collision (_type_ int vector) none 41) (dummy-42 (_type_) none 42) - (TODO-RENAME-43 (_type_) none 43) + (TODO-RENAME-43 (_type_) symbol 43) (play-reminder (_type_) symbol 44) (dummy-45 (_type_) none 45) (dummy-46 (_type_) none 46) (target-above-threshold? (_type_) symbol 47) - (draw-shadow (_type_) none 48) - (dummy-49 (_type_) none 49) - (dummy-50 (_type_) none 50) - (dummy-51 (_type_) none 51) + (draw-npc-shadow (_type_) none 48) + (hidden-other () _type_ :state 49) + (TODO-RENAME-50 (_type_) symbol 50) + (close-anim-file! (_type_) symbol 51) (dummy-52 (_type_) none 52) ) ) diff --git a/test/decompiler/reference/engine/gfx/sparticle/sparticle-launcher-h_REF.gc b/test/decompiler/reference/engine/gfx/sparticle/sparticle-launcher-h_REF.gc index 1d9ab65d3c..cda67d733e 100644 --- a/test/decompiler/reference/engine/gfx/sparticle/sparticle-launcher-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/sparticle/sparticle-launcher-h_REF.gc @@ -15,7 +15,7 @@ (func function :offset 4) (tex uint32 :offset 4) (pntr pointer :offset 4) - (sound basic :offset 4) + (sound sound-spec :offset 4) ) :method-count-assert 9 :size-assert #x10 diff --git a/test/decompiler/reference/engine/nav/navigate-h_REF.gc b/test/decompiler/reference/engine/nav/navigate-h_REF.gc index e4fc45f710..61b07c1adb 100644 --- a/test/decompiler/reference/engine/nav/navigate-h_REF.gc +++ b/test/decompiler/reference/engine/nav/navigate-h_REF.gc @@ -384,11 +384,11 @@ (dummy-11 (_type_ vector) none 11) (dummy-12 () none 12) (dummy-13 () none 13) - (dummy-14 (_type_) none 14) + (set-current-poly! (_type_ nav-poly) none 14) (set-target-pos! (_type_ vector) none 15) (dummy-16 (_type_ vector) nav-poly 16) (dummy-17 () none 17) - (dummy-18 () none 18) + (TODO-RENAME-18 (_type_ vector) nav-poly 18) (dummy-19 (_type_ vector collide-shape-moving vector float) none 19) (dummy-20 () none 20) (dummy-21 () none 21) diff --git a/test/decompiler/reference/engine/target/logic-target_REF.gc b/test/decompiler/reference/engine/target/logic-target_REF.gc index ef5bfc88c7..1dd1357561 100644 --- a/test/decompiler/reference/engine/target/logic-target_REF.gc +++ b/test/decompiler/reference/engine/target/logic-target_REF.gc @@ -2781,7 +2781,7 @@ (set-continue! *game-info* arg0) (stack-size-set! (-> self main-thread) 1024) (logior! (-> self mask) (process-mask target)) - (set! (-> self state-hook) nothing) + (set! (-> self state-hook) (the-as (function none :behavior target) nothing)) (let ((s5-0 (new 'process 'control-info self (collide-list-enum player)))) (set! (-> self control) s5-0) (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) diff --git a/test/decompiler/reference/engine/target/target-h_REF.gc b/test/decompiler/reference/engine/target/target-h_REF.gc index 995f2bca40..c0e46dff47 100644 --- a/test/decompiler/reference/engine/target/target-h_REF.gc +++ b/test/decompiler/reference/engine/target/target-h_REF.gc @@ -3,31 +3,31 @@ ;; definition of type target (deftype target (process-drawable) - ((control control-info :offset 112) - (fact-info-target fact-info-target :offset 144) - (skel2 basic :offset-assert 176) - (racer basic :offset-assert 180) - (game game-info :offset-assert 184) - (neck joint-mod :offset-assert 188) - (state-hook-time uint64 :offset-assert 192) - (state-hook function :offset-assert 200) - (cam-user-mode symbol :offset-assert 204) - (sidekick (pointer sidekick) :offset-assert 208) - (manipy (pointer manipy) :offset-assert 212) - (attack-info attack-info :inline :offset-assert 224) - (attack-info-rec attack-info :inline :offset-assert 336) - (anim-seed uint64 :offset-assert 440) - (alt-cam-pos vector :inline :offset-assert 448) - (snowball basic :offset-assert 464) - (tube basic :offset-assert 468) - (flut basic :offset-assert 472) - (current-level level :offset-assert 476) - (saved-pos transformq :inline :offset-assert 480) - (saved-owner uint64 :offset-assert 528) - (alt-neck-pos vector :inline :offset-assert 544) - (fp-hud uint64 :offset-assert 560) - (no-load-wait uint64 :offset-assert 568) - (no-look-around-wait uint64 :offset-assert 576) + ((control control-info :offset 112) + (fact-info-target fact-info-target :offset 144) + (skel2 basic :offset-assert 176) + (racer basic :offset-assert 180) + (game game-info :offset-assert 184) + (neck joint-mod :offset-assert 188) + (state-hook-time uint64 :offset-assert 192) + (state-hook (function none :behavior target) :offset-assert 200) + (cam-user-mode symbol :offset-assert 204) + (sidekick (pointer sidekick) :offset-assert 208) + (manipy (pointer manipy) :offset-assert 212) + (attack-info attack-info :inline :offset-assert 224) + (attack-info-rec attack-info :inline :offset-assert 336) + (anim-seed uint64 :offset-assert 440) + (alt-cam-pos vector :inline :offset-assert 448) + (snowball snowball-info :offset-assert 464) + (tube tube-info :offset-assert 468) + (flut basic :offset-assert 472) + (current-level level :offset-assert 476) + (saved-pos transformq :inline :offset-assert 480) + (saved-owner uint64 :offset-assert 528) + (alt-neck-pos vector :inline :offset-assert 544) + (fp-hud uint64 :offset-assert 560) + (no-load-wait uint64 :offset-assert 568) + (no-look-around-wait uint64 :offset-assert 576) ) :heap-base #x1e0 :method-count-assert 21 diff --git a/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc b/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc index 4f805aa62a..c76f07e978 100644 --- a/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc +++ b/test/decompiler/reference/levels/beach/bird-lady-beach_REF.gc @@ -94,7 +94,7 @@ (run-now-in-process s5-1 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *flutflut-naked-sg* #f @@ -138,7 +138,7 @@ (run-now-in-process s5-2 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *flutflutegg-sg* #f diff --git a/test/decompiler/reference/levels/beach/bird-lady_REF.gc b/test/decompiler/reference/levels/beach/bird-lady_REF.gc index c3e8695c29..360eef5181 100644 --- a/test/decompiler/reference/levels/beach/bird-lady_REF.gc +++ b/test/decompiler/reference/levels/beach/bird-lady_REF.gc @@ -42,7 +42,7 @@ (defmethod dummy-52 bird-lady ((obj bird-lady)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -1024.0 f0-0))) ) @@ -59,7 +59,7 @@ ) ;; definition for method 48 of type bird-lady -(defmethod draw-shadow bird-lady ((obj bird-lady)) +(defmethod draw-npc-shadow bird-lady ((obj bird-lady)) (-> obj draw shadow-ctrl) (cond ((and @@ -71,7 +71,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -243,18 +243,17 @@ ) (cond ((< 0.66 f0-2) - (dummy-11 (-> obj ambient) "BIR-LO02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "BIR-LO02" #f (-> obj root-override trans)) ) ((< 0.33 f0-2) - (dummy-11 (-> obj ambient) "BIR-LO03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "BIR-LO03" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "BIR-am08" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "BIR-am08" #f (-> obj root-override trans)) ) ) ) ) - (none) ) ;; definition for method 47 of type bird-lady diff --git a/test/decompiler/reference/levels/beach/mayor_REF.gc b/test/decompiler/reference/levels/beach/mayor_REF.gc index da00f410c5..106d7a29ee 100644 --- a/test/decompiler/reference/levels/beach/mayor_REF.gc +++ b/test/decompiler/reference/levels/beach/mayor_REF.gc @@ -3,8 +3,7 @@ ;; definition of type mayor (deftype mayor (process-taskable) - ((root-override collide-shape :offset 112) - ) + () :heap-base #x110 :method-count-assert 53 :size-assert #x17c @@ -56,7 +55,7 @@ ) ;; definition for method 48 of type mayor -(defmethod draw-shadow mayor ((obj mayor)) +(defmethod draw-npc-shadow mayor ((obj mayor)) (-> obj draw shadow-ctrl) (cond ((and @@ -68,7 +67,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -2149,7 +2148,6 @@ ) ) ) - (none) ) ;; failed to figure out what this is: diff --git a/test/decompiler/reference/levels/beach/sculptor_REF.gc b/test/decompiler/reference/levels/beach/sculptor_REF.gc index a633619015..176fd8cad4 100644 --- a/test/decompiler/reference/levels/beach/sculptor_REF.gc +++ b/test/decompiler/reference/levels/beach/sculptor_REF.gc @@ -60,7 +60,7 @@ (defmethod dummy-52 sculptor ((obj sculptor)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -2048.0 f0-0))) ) @@ -74,7 +74,7 @@ ) ;; definition for method 48 of type sculptor -(defmethod draw-shadow sculptor ((obj sculptor)) +(defmethod draw-npc-shadow sculptor ((obj sculptor)) (-> obj draw shadow-ctrl) (cond ((and @@ -86,7 +86,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -307,7 +307,7 @@ (run-now-in-process s5-1 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *sculptor-muse-sg* #f @@ -390,30 +390,29 @@ ) (cond ((< 0.85714287 f0-2) - (dummy-11 (-> obj ambient) "SCU-LO01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-LO01" #f (-> obj root-override trans)) ) ((< 0.71428573 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM05" #f (-> obj root-override trans)) ) ((< 0.5714286 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM06" #f (-> obj root-override trans)) ) ((< 0.42857143 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM03" #f (-> obj root-override trans)) ) ((< 0.2857143 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM04" #f (-> obj root-override trans)) ) ((< 0.14285715 f0-2) - (dummy-11 (-> obj ambient) "SCU-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM01" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "SCU-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SCU-AM02" #f (-> obj root-override trans)) ) ) ) ) - (none) ) ;; failed to figure out what this is: diff --git a/test/decompiler/reference/levels/citadel/assistant-citadel_REF.gc b/test/decompiler/reference/levels/citadel/assistant-citadel_REF.gc index c3431086bf..12484cb981 100644 --- a/test/decompiler/reference/levels/citadel/assistant-citadel_REF.gc +++ b/test/decompiler/reference/levels/citadel/assistant-citadel_REF.gc @@ -146,7 +146,10 @@ *target* (>= 61440.0 - (vector-vector-distance (-> self root trans) (-> *target* control trans)) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) ) ) (not @@ -274,7 +277,3 @@ (dummy-42 obj) (none) ) - - - - diff --git a/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc b/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc new file mode 100644 index 0000000000..2275f43b0a --- /dev/null +++ b/test/decompiler/reference/levels/common/babak-with-cannon_REF.gc @@ -0,0 +1,732 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type babak-with-cannon +(deftype babak-with-cannon (babak) + ((cannon-ent entity :offset-assert 400) + (distance float :offset-assert 404) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x198 + :flag-assert #x4c01300198 + ) + +;; definition for method 3 of type babak-with-cannon +(defmethod inspect babak-with-cannon ((obj babak-with-cannon)) + (let ((t9-0 (method-of-type babak inspect))) + (t9-0 obj) + ) + (format #t "~T~Tcannon-ent: ~A~%" (-> obj cannon-ent)) + (format #t "~T~Tdistance: ~f~%" (-> obj distance)) + obj + ) + +;; failed to figure out what this is: +nav-enemy-default-event-handler + +;; failed to figure out what this is: +(defstate nav-enemy-idle (babak-with-cannon) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-default-event-handler + ) + :trans + (behavior () + (if + (and + (and + *target* + (>= + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (-> self state-timeout) + ) + ) + (go-virtual nav-enemy-patrol) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + 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 (-> self nav-info idle-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-post) + (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! + ) + ) + ) + (anim-loop) + (none) + ) + :post + (the-as (function none :behavior babak-with-cannon) #f) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (babak-with-cannon) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-default-event-handler + ) + :trans + (behavior () + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 30 + ) + (let ((f30-0 (- (-> (target-pos 0) y) (-> self collide-info trans y)))) + (if + (and + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 900 + ) + (or + (or + (not *target*) + (< + (-> self distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (< f30-0 -40960.0) + ) + ) + (go babak-run-to-cannon) + ) + ) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (-> self state-timeout) + ) + (if + (or + (not *target*) + (< + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (go-virtual nav-enemy-idle) + ) + ) + (if (nav-enemy-notice-player?) + (go-virtual nav-enemy-notice) + ) + ) + (none) + ) + :code + (-> (method-of-type babak nav-enemy-patrol) code) + ) + +;; failed to figure out what this is: +(defstate babak-run-to-cannon (babak) + :event + (the-as + (function process int symbol event-message-block object :behavior babak) + nav-enemy-default-event-handler + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self nav destination-pos quad) (-> self entity extra trans quad)) + (set! (-> self nav target-pos quad) (-> self entity extra trans quad)) + (none) + ) + :trans + (behavior () + (if (nav-enemy-notice-player?) + (go-virtual nav-enemy-chase) + ) + (if (logtest? (nav-control-flags bit19) (-> self nav flags)) + (go babak-with-cannon-jump-onto-cannon) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (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 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! + ) + ) + ) + ) + (none) + ) + :post + (behavior () + (nav-enemy-travel-post) + (none) + ) + ) + +;; definition for function handle->process-safe +(defun handle->process-safe ((arg0 handle)) + (let ((v0-0 (the-as process #f))) + (if (handle->process arg0) + (set! v0-0 (-> arg0 process 0)) + ) + v0-0 + ) + ) + +;; definition for function babak-with-cannon-compute-cannon-dir +;; Used lq/sq +(defun babak-with-cannon-compute-cannon-dir ((arg0 mistycannon) (arg1 vector)) + (set! (-> arg1 quad) (-> arg0 node-list data 3 bone transform vector 2 quad)) + arg1 + ) + +;; 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)) + (let ((a1-4 (new 'static 'vector :y 18149.377 :z -17289.217 :w 1.0)) + (a2-0 (-> arg0 node-list data 3 bone transform)) + ) + (vector-matrix*! arg1 a1-4 a2-0) + ) + arg1 + ) + +;; definition for function babak-with-cannon-ride-cannon-post +(defbehavior babak-with-cannon-ride-cannon-post babak-with-cannon () + (let* ((v1-0 (-> self cannon-ent)) + (s5-0 (if v1-0 + (-> v1-0 extra process) + ) + ) + (gp-0 + (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) + s5-0 + ) + ) + ) + (when gp-0 + (let ((s5-1 (new 'stack-no-clear 'vector))) + (babak-with-cannon-compute-cannon-dir (the-as mistycannon gp-0) s5-1) + (forward-up->quaternion (-> self collide-info quat) s5-1 *y-vector*) + ) + (babak-with-cannon-compute-ride-point + (the-as mistycannon gp-0) + (-> self collide-info trans) + ) + ) + ) + (nav-enemy-simple-post) + (none) + ) + +;; failed to figure out what this is: +(defstate babak-with-cannon-jump-onto-cannon (babak-with-cannon) + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-jump-event-handler + ) + :exit + (behavior () + (logior! (-> self nav-enemy-flags) 24) + (none) + ) + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) + (set! (-> self turn-time) (the-as int (-> self nav-info run-turn-time))) + (set! (-> self nav-enemy-flags) (logand -25 (-> self nav-enemy-flags))) + (nav-enemy-neck-control-inactive) + (let* ((v1-7 (-> self cannon-ent)) + (gp-0 (if v1-7 + (-> v1-7 extra process) + ) + ) + (a0-2 + (if + (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) + gp-0 + ) + ) + ) + (cond + (a0-2 + (babak-with-cannon-compute-ride-point + (the-as mistycannon a0-2) + (-> self event-param-point) + ) + (nav-enemy-initialize-jump (-> self event-param-point)) + ) + (else + (go-virtual nav-enemy-idle) + ) + ) + ) + (when (not (nav-enemy-facing-point? (-> self jump-dest) 5461.3335)) + (ja-channel-push! 1 60) + (nav-enemy-turn-to-face-point (-> self jump-dest) 1820.4445) + ) + (logior! (-> self nav-enemy-flags) 16) + (nav-enemy-execute-jump) + (set! (-> self nav-enemy-flags) (logand -25 (-> self nav-enemy-flags))) + (let* ((v1-20 (-> self cannon-ent)) + (gp-1 (if v1-20 + (-> v1-20 extra process) + ) + ) + (a0-9 + (if + (and (nonzero? gp-1) (type-type? (-> gp-1 type) process-drawable)) + gp-1 + ) + ) + ) + (when a0-9 + (let + ((gp-2 + (babak-with-cannon-compute-cannon-dir + (the-as mistycannon a0-9) + (new 'stack-no-clear 'vector) + ) + ) + ) + (when (not (nav-enemy-facing-direction? gp-2 1820.4445)) + (ja-channel-push! 1 60) + (nav-enemy-turn-to-face-dir gp-2 182.04445) + (forward-up->quaternion (-> self collide-info quat) gp-2 *y-vector*) + ) + ) + ) + ) + (ja-channel-push! 1 30) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 frame-group) + (the-as art-joint-anim (-> self draw art-group data 17)) + ) + (set! + (-> a0-15 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 17)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (the-as art-joint-anim (-> self draw art-group data 17)) + 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! + ) + ) + ) + (go babak-with-cannon-shooting) + (none) + ) + :post + (the-as (function none :behavior babak-with-cannon) nav-enemy-jump-post) + ) + +;; failed to figure out what this is: +(defstate babak-with-cannon-jump-off-cannon (babak-with-cannon) + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-jump-event-handler + ) + :exit + (behavior () + (logior! (-> self nav-enemy-flags) 24) + (none) + ) + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (nav-enemy-initialize-jump (-> self entity extra trans)) + (nav-enemy-neck-control-look-at) + (set! (-> self nav-enemy-flags) (logand -25 (-> self nav-enemy-flags))) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 17)) + ) + (set! (-> a0-2 param 0) 0.0) + (set! (-> a0-2 param 1) 2.0) + (set! + (-> a0-2 frame-num) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 17)) + data + 0 + length + ) + -1 + ) + ) + ) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 17)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) 0.0) + (set! (-> a0-3 param 1) 2.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (not (nav-enemy-facing-point? (-> self jump-dest) 5461.3335)) + (ja-channel-push! 1 60) + (nav-enemy-turn-to-face-point (-> self jump-dest) 1820.4445) + ) + (logior! (-> self nav-enemy-flags) 16) + (nav-enemy-execute-jump) + (let ((a1-6 (dummy-16 (-> self nav) (-> self jump-dest)))) + (set-current-poly! (-> self nav) a1-6) + ) + (go-virtual nav-enemy-jump-land) + (none) + ) + :post + (the-as (function none :behavior babak-with-cannon) nav-enemy-jump-post) + ) + +;; failed to figure out what this is: +(defstate babak-with-cannon-shooting (babak-with-cannon) + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-default-event-handler + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (let ((v1-2 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (if v1-2 + (logior! (-> v1-2 extra perm status) (entity-perm-status complete)) + ) + ) + (none) + ) + :exit + (behavior () + (let ((v1-0 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (if v1-0 + (logclear! (-> v1-0 extra perm status) (entity-perm-status complete)) + ) + ) + (none) + ) + :trans + (behavior () + (let ((f0-1 (- (-> (target-pos 0) y) (-> self collide-info trans y)))) + (if + (and + (< -40960.0 f0-1) + (and + (and + *target* + (>= + (-> self distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 900 + ) + ) + ) + (go babak-with-cannon-jump-off-cannon) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + babak-with-cannon-ride-cannon-post + ) + +;; failed to figure out what this is: +(defstate nav-enemy-die (babak-with-cannon) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + nav-enemy-default-event-handler + ) + :trans + (behavior () + (if (and *target* (= (-> *target* current-level name) 'beach)) + (spool-push *art-control* "beachcam-cannon" 0 self -1.0) + ) + (if (and *target* (= (-> *target* current-level name) 'misty)) + (spool-push *art-control* "mistycam-cannon" 0 self -1.0) + ) + (let + ((t9-3 + (-> + (the-as (state nav-enemy) (find-parent-method babak-with-cannon 23)) + trans + ) + ) + ) + (if t9-3 + (t9-3) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-fuel-cell (babak-with-cannon) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior babak-with-cannon) + process-drawable-fuel-cell-handler + ) + :code + (behavior () + (ja-channel-set! 0) + (dummy-48 (-> self collide-info)) + (ja-post) + (when (not (task-complete? *game-info* (-> self entity extra perm task))) + (when + (not + (and + (-> self entity) + (logtest? + (-> self entity extra perm status) + (entity-perm-status complete) + ) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (if (and *target* (= (-> *target* current-level name) 'beach)) + (beachcam-spawn) + ) + (if (and *target* (= (-> *target* current-level name) 'misty)) + (mistycam-spawn) + ) + ) + (if (not (-> self child)) + (birth-pickup-at-point + (-> self collide-info trans) + 6 + (the float (-> self entity extra perm task)) + #f + self + #f + ) + ) + (while (-> self child) + (suspend) + ) + ) + (dummy-18 self) + (none) + ) + ) + +;; definition for method 39 of type babak-with-cannon +(defmethod common-post babak-with-cannon ((obj babak-with-cannon)) + (cond + ((= (level-status *level* 'beach) 'active) + (spool-push *art-control* "beachcam-cannon" 0 obj -99.0) + ) + ((= (level-status *level* 'misty) 'active) + (spool-push *art-control* "mistycam-cannon" 0 obj -99.0) + ) + ) + ((method-of-type nav-enemy common-post) obj) + (none) + ) + +;; definition for method 11 of type babak-with-cannon +(defmethod + copy-defaults! + babak-with-cannon + ((obj babak-with-cannon) (arg0 res-lump)) + (initialize-collision obj) + (process-drawable-from-entity! obj arg0) + (TODO-RENAME-48 obj) + (set! (-> obj distance) (res-lump-float arg0 'distance :default 163840.0)) + (set! (-> obj cannon-ent) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (if + (or + (not + (and + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status complete)) + ) + ) + (zero? (logand (-> obj enemy-info options) 2)) + ) + (go (method-of-object obj nav-enemy-idle)) + ) + (go (method-of-object obj nav-enemy-fuel-cell)) + (none) + ) diff --git a/test/decompiler/reference/levels/common/babak_REF.gc b/test/decompiler/reference/levels/common/babak_REF.gc new file mode 100644 index 0000000000..e1af1d0b25 --- /dev/null +++ b/test/decompiler/reference/levels/common/babak_REF.gc @@ -0,0 +1,717 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type babak +(deftype babak (nav-enemy) + () + :heap-base #x120 + :method-count-assert 76 + :size-assert #x190 + :flag-assert #x4c01200190 + ) + +;; definition for method 3 of type babak +(defmethod inspect babak ((obj babak)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "babak" + :bounds + (new 'static 'vector :y 8192.0 :w 12288.0) + :max-lod 2 + :longest-edge (meters 1.0) + :version #x6 + :shadow 4 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) -1) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 163840.0) + (set! (-> v1-1 mgeo 2) (the-as uint 3)) + (set! (-> v1-1 lod-dist 2) 4095996000.0) + (set! *babak-sg* v1-1) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (babak) + :virtual #t + :code + (behavior () + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 10) + ) + (ja-channel-push! 1 45) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> gp-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 12.0 0)) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (ja-channel-push! 1 60) + ) + ) + ((the-as + (function none) + (-> (method-of-type nav-enemy nav-enemy-patrol) code) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (babak) + :virtual #t + :code + (behavior () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 14) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 51) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) f30-0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (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-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (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 (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-45 (-> self skel root-channel 0))) + (set! (-> v1-45 num-func) num-func-identity) + (set! (-> v1-45 frame-num) 0.0) + ) + ) + ) + (while #t + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) f30-0) + (joint-control-channel-group-eval! + a0-17 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (babak) + :virtual #t + :code + (behavior () + (set! (-> self turn-time) 60) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (when + (or + (logtest? (-> self nav-enemy-flags) 256) + (and (nav-enemy-player-vulnerable?) (nav-enemy-rnd-percent? 0.5)) + ) + (ja-channel-push! 1 30) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! (-> gp-0 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-0 param 1) f30-0) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-1 param 1) f30-0) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (while #t + (when (not (nav-enemy-facing-player? 2730.6667)) + (logior! (-> self nav-enemy-flags) 16) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) 1.0) + (joint-control-channel-group! + a0-9 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (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 16)) + ) + ) + (let ((v1-28 (-> self skel root-channel 0))) + (set! (-> v1-28 num-func) num-func-identity) + (set! (-> v1-28 frame-num) 0.0) + ) + (until (nav-enemy-facing-player? 1820.4445) + (ja-blend-eval) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) 0.75) + (joint-control-channel-group-eval! + a0-15 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + ) + (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 ((a0-23 (-> self skel root-channel 0))) + (set! + (-> a0-23 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-23 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-23 param 1) f30-0) + (set! (-> a0-23 frame-num) 0.0) + (joint-control-channel-group! + a0-23 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-24 (-> self skel root-channel 0))) + (set! + (-> a0-24 param 0) + (the float (+ (-> a0-24 frame-group data 0 length) -1)) + ) + (set! (-> a0-24 param 1) f30-0) + (joint-control-channel-group-eval! + a0-24 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (nav-enemy-rnd-percent? 0.3) + (ja-channel-push! 1 30) + (let ((gp-2 (-> self skel root-channel 0))) + (set! + (-> gp-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! (-> gp-2 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-2 param 1) f30-0) + (set! (-> gp-2 frame-num) 0.0) + (joint-control-channel-group! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-3 param 1) f30-0) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-give-up (babak) + :virtual #t + :code + (behavior () + (set! (-> self rotate-speed) 218453.33) + (set! (-> self turn-time) 150) + (ja-channel-push! 1 45) + (let ((s4-0 (-> self collide-info)) + (s5-0 (target-pos 0)) + ) + (when + (< + (fabs + (deg-diff + (y-angle s4-0) + (vector-y-angle + (vector-! (new 'stack-no-clear 'vector) s5-0 (-> s4-0 trans)) + ) + ) + ) + 12743.111 + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 9)) + 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 9)) + 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! + ) + ) + ) + ) + ) + (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) + (nav-enemy-get-new-patrol-point) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-12 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + 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 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-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! + ) + ) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-jump-land (babak) + :virtual #t + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 22) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + ) + (set! (-> gp-0 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-0 param 1) 0.5) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-1 param 1) 0.5) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; definition for symbol *babak-nav-enemy-info*, type nav-enemy-info +(define + *babak-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 5 + :walk-anim 6 + :turn-anim 16 + :notice-anim 7 + :run-anim 8 + :jump-anim 13 + :jump-land-anim 14 + :victory-anim 11 + :taunt-anim 11 + :die-anim 12 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 2880.0) + :run-acceleration (meters 1.0) + :run-turn-time #x1e + :walk-travel-speed (meters 3.0) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time #x96 + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 2.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :proximity-notice-distance (meters 20.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #t + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #t + :use-proximity-notice #t + :use-jump-blocked #t + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +;; definition for method 47 of type babak +;; INFO: Return type mismatch int vs none. +(defmethod initialize-collision babak ((obj babak)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) 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! (-> s4-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s4-0 local-sphere) 0.0 8192.0 0.0 12288.0) + (dummy-46 s5-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 action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 4096.0 0.0 3072.0) + ) + (dummy-28 s4-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 action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 1) + (set-vector! (-> s3-1 local-sphere) 0.0 9830.4 0.0 3072.0) + ) + (dummy-28 s4-0) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (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) 2) + (set! (-> s3-2 transform-index) 6) + (set-vector! (-> s3-2 local-sphere) 0.0 0.0 0.0 2048.0) + ) + (dummy-28 s4-0) + ) + (set! (-> s5-0 nav-radius) 6144.0) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +;; definition for method 48 of type babak +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-48 babak ((obj babak)) + (dummy-14 obj *babak-sg* '()) + (TODO-RENAME-45 obj *babak-nav-enemy-info*) + (set! (-> obj neck up) (the-as uint 0)) + (set! (-> obj neck nose) (the-as uint 1)) + (set! (-> obj neck ear) (the-as uint 2)) + 0 + (none) + ) + +;; definition for method 59 of type babak +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-59 babak ((obj babak)) + (cond + ((and + (and + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status complete)) + ) + (logtest? (-> obj enemy-info options) 2) + ) + (go (method-of-object obj nav-enemy-fuel-cell)) + ) + ((logtest? (-> obj enemy-info options) 32) + (go (method-of-object obj nav-enemy-wait-for-cue)) + ) + (else + (go (method-of-object obj nav-enemy-idle)) + ) + ) + 0 + (none) + ) diff --git a/test/decompiler/reference/levels/common/baseplat_REF.gc b/test/decompiler/reference/levels/common/baseplat_REF.gc index 3b1a64d348..1cd5387f69 100644 --- a/test/decompiler/reference/levels/common/baseplat_REF.gc +++ b/test/decompiler/reference/levels/common/baseplat_REF.gc @@ -431,7 +431,7 @@ eco-door-event-handler eco-door-event-handler :code (behavior () - ((method-of-object (-> self root-override) dummy-49)) + (dummy-49 (-> self root-override)) (set! (-> self draw status) (logand -3 (-> self draw status))) (let ((gp-0 (new 'stack 'overlaps-others-params))) (set! (-> gp-0 options) (the-as uint 1)) diff --git a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc index 795db75ad8..62ddfdbd54 100644 --- a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc @@ -202,9 +202,9 @@ (TODO-RENAME-48 (_type_) none 48) (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) (TODO-RENAME-50 (_type_ vector) symbol 50) - (dummy-51 (_type_) none 51) - (dummy-52 (_type_) none 52) - (dummy-53 (_type_) none 53) + (dummy-51 (_type_) float 51) + (dummy-52 (_type_ vector) vector 52) + (dummy-53 (_type_) symbol 53) (dummy-54 (_type_) none 54) (dummy-55 (_type_) none 55) (dummy-56 (_type_) none 56) diff --git a/test/decompiler/reference/levels/common/nav-enemy_REF.gc b/test/decompiler/reference/levels/common/nav-enemy_REF.gc index 12da9848e5..388653855b 100644 --- a/test/decompiler/reference/levels/common/nav-enemy_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy_REF.gc @@ -116,7 +116,7 @@ (dummy-54 (-> obj collide-info) 2 1) (set! (-> obj nav-enemy-flags) (logand -257 (-> obj nav-enemy-flags))) ) - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) (when *target* (if *target* (look-at-enemy! @@ -2781,7 +2781,7 @@ nav-enemy-default-event-handler (set! a1-0 (dummy-16 (-> self nav) (-> self jump-dest))) ) (if a1-0 - (dummy-14 (-> self nav)) + (set-current-poly! (-> self nav) a1-0) ) ) (go-virtual nav-enemy-jump-land) diff --git a/test/decompiler/reference/levels/common/rigid-body_REF.gc b/test/decompiler/reference/levels/common/rigid-body_REF.gc index f42b626f05..d49f1ee3a2 100644 --- a/test/decompiler/reference/levels/common/rigid-body_REF.gc +++ b/test/decompiler/reference/levels/common/rigid-body_REF.gc @@ -367,8 +367,8 @@ (cm-joint-y meters :offset-assert 84) (cm-joint-z meters :offset-assert 88) (idle-distance meters :offset-assert 92) - (platform basic :offset-assert 96) - (sound-name basic :offset-assert 100) + (platform symbol :offset-assert 96) + (sound-name symbol :offset-assert 100) ) :method-count-assert 9 :size-assert #x68 @@ -462,9 +462,9 @@ (:methods (rigid-body-platform-idle () _type_ :state 20) (rigid-body-platform-float () _type_ :state 21) - (TODO-RENAME-22 (_type_ vector basic) float 22) - (TODO-RENAME-23 (_type_ basic) none 23) - (TODO-RENAME-24 (_type_ rigid-body-control-point basic) none 24) + (TODO-RENAME-22 (_type_ vector float) float 22) + (TODO-RENAME-23 (_type_ float) none 23) + (TODO-RENAME-24 (_type_ rigid-body-control-point float) none 24) (TODO-RENAME-25 (_type_) none 25) (TODO-RENAME-26 (_type_) none 26) (TODO-RENAME-27 (_type_ vector) none 27) @@ -472,8 +472,8 @@ (TODO-RENAME-29 (_type_ rigid-body-platform-constants) none 29) (TODO-RENAME-30 (_type_) none 30) (TODO-RENAME-31 (_type_) none 31) - (dummy-32 (_type_) none 32) - (dummy-33 (_type_) none 33) + (dummy-32 (_type_) sound-id 32) + (dummy-33 (_type_) object 33) (TODO-RENAME-34 (_type_) none 34) ) ) @@ -540,7 +540,7 @@ (defmethod TODO-RENAME-22 rigid-body-platform - ((obj rigid-body-platform) (arg0 vector) (arg1 basic)) + ((obj rigid-body-platform) (arg0 vector) (arg1 float)) (let ((v1-0 (-> obj water-anim))) 0.0 (+ (the-as float (cond @@ -572,7 +572,7 @@ (defmethod TODO-RENAME-24 rigid-body-platform - ((obj rigid-body-platform) (arg0 rigid-body-control-point) (arg1 basic)) + ((obj rigid-body-platform) (arg0 rigid-body-control-point) (arg1 float)) (set! (-> arg0 world-pos w) (TODO-RENAME-22 obj (-> arg0 world-pos) arg1)) (let* ((s4-0 (new 'stack-no-clear 'vector)) (f0-2 (- (-> arg0 world-pos w) (-> arg0 world-pos y))) @@ -667,7 +667,7 @@ (defmethod TODO-RENAME-23 rigid-body-platform - ((obj rigid-body-platform) (arg0 basic)) + ((obj rigid-body-platform) (arg0 float)) (let ((s4-0 (-> obj rbody matrix))) (dotimes (s3-0 (-> obj info control-point-count)) (let ((s2-0 (-> obj control-point-array data s3-0))) @@ -715,7 +715,7 @@ ) (while (>= (-> obj sim-time-remaining) (* 0.5 f30-0)) (clear-force-torque! (-> obj rbody)) - (TODO-RENAME-23 obj (the-as basic f28-0)) + (TODO-RENAME-23 obj f28-0) (dummy-10 (-> obj rbody) f30-0) (set! (-> obj sim-time-remaining) (- (-> obj sim-time-remaining) f30-0)) ) diff --git a/test/decompiler/reference/levels/firecanyon/assistant-firecanyon_REF.gc b/test/decompiler/reference/levels/firecanyon/assistant-firecanyon_REF.gc index 5f9174788c..08cf49eb1f 100644 --- a/test/decompiler/reference/levels/firecanyon/assistant-firecanyon_REF.gc +++ b/test/decompiler/reference/levels/firecanyon/assistant-firecanyon_REF.gc @@ -136,7 +136,7 @@ (>= 61440.0 (vector-vector-distance - (-> self root trans) + (-> self root-override trans) (-> *target* control trans) ) ) @@ -151,30 +151,28 @@ #f ) ) - (let ((a0-1 (-> self tasks))) - (and - (not - (closed? - a0-1 - (game-task firecanyon-assistant) - (task-status need-reward-speech) - ) + (and + (not + (closed? + (-> self tasks) + (game-task firecanyon-assistant) + (task-status need-reward-speech) ) - (not (movie?)) - (not (level-hint-displayed? (the-as symbol a0-1))) - (not - (and - *cheat-mode* - (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) - ) + ) + (not (movie?)) + (not (level-hint-displayed?)) + (not + (and + *cheat-mode* + (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) ) - (< - (- - (-> *display* base-frame-counter) - (the-as int (-> self state-time)) - ) - 3000 + ) + (< + (- + (-> *display* base-frame-counter) + (the-as int (-> self state-time)) ) + 3000 ) ) ) diff --git a/test/decompiler/reference/levels/flut_common/flutflut_REF.gc b/test/decompiler/reference/levels/flut_common/flutflut_REF.gc new file mode 100644 index 0000000000..14dace4e3a --- /dev/null +++ b/test/decompiler/reference/levels/flut_common/flutflut_REF.gc @@ -0,0 +1,646 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(if (not (nmember "flutp" *kernel-packages*)) + (set! *kernel-packages* (cons "flutp" *kernel-packages*)) + ) + +;; definition of type flutflut +(deftype flutflut (process-drawable) + ((root-override collide-shape-moving :offset 112) + (extra-trans vector :inline :offset-assert 176) + (condition int32 :offset-assert 192) + (auto-get-off symbol :offset-assert 196) + (cell handle :offset-assert 200) + (path-data path-control 2 :offset-assert 208) + (path-target path-control :offset 208) + (path-flut path-control :offset 212) + (touch-time uint64 :offset-assert 216) + ) + :pack-me + :heap-base #x70 + :method-count-assert 24 + :size-assert #xe0 + :flag-assert #x18007000e0 + (:methods + (wait-for-start () _type_ :state 20) + (idle () _type_ :state 21) + (pickup ((state flutflut)) _type_ :state 22) + (wait-for-return () _type_ :state 23) + ) + ) + +;; definition for method 3 of type flutflut +(defmethod inspect flutflut ((obj flutflut)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Textra-trans: ~`vector`P~%" (-> obj extra-trans)) + (format #t "~T~Tcondition: ~D~%" (-> obj condition)) + (format #t "~T~Tauto-get-off: ~A~%" (-> obj auto-get-off)) + (format #t "~T~Tcell: ~D~%" (-> obj cell)) + (format #t "~T~Tpath-data[2] @ #x~X~%" (-> obj path-data)) + (format #t "~T~Tpath-target: ~A~%" (-> obj path-target)) + (format #t "~T~Tpath-flut: ~A~%" (-> obj path-flut)) + (format #t "~T~Ttouch-time: ~D~%" (-> obj touch-time)) + obj + ) + +;; definition for method 7 of type flutflut +;; INFO: Return type mismatch process-drawable vs flutflut. +(defmethod relocate flutflut ((obj flutflut) (arg0 int)) + (countdown (v1-0 2) + (if (-> obj path-data v1-0) + (&+! (-> obj path-data v1-0) arg0) + ) + ) + (the-as flutflut ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; definition for symbol *flutflut-shadow-control*, type shadow-control +(define + *flutflut-shadow-control* + (new 'static 'shadow-control + :settings + (new 'static 'shadow-settings + :center + (new 'static 'vector :w (the-as float #xa)) + :shadow-dir + (new 'static 'vector :y -1.0 :w 614400.0) + :bot-plane (new 'static 'plane :y 1.0 :w 81920.0) + :top-plane (new 'static 'plane :y 1.0 :w -2867.2) + ) + ) + ) + +;; failed to figure out what this is: +(let + ((v1-5 + (new 'static 'skeleton-group + :art-group-name "flut-saddle" + :bounds (new 'static 'vector :w 14336.0) + :version #x6 + :shadow 2 + :sort 1 + ) + ) + ) + (set! (-> v1-5 jgeo) 0) + (set! (-> v1-5 janim) -1) + (set! (-> v1-5 mgeo 0) (the-as uint 1)) + (set! (-> v1-5 lod-dist 0) 4095996000.0) + (set! *flutflut-sg* v1-5) + ) + +;; definition for function flutflut-effect +;; INFO: Return type mismatch int vs none. +(defbehavior flutflut-effect flutflut () + (spawn (-> self part) (-> self root-override trans)) + (update! (-> self sound)) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate wait-for-start (flutflut) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'trans) + (vector+! + (the-as vector (-> arg3 param 0)) + (-> self root-override trans) + (-> self extra-trans) + ) + ) + ((= v1-0 'notify) + (let ((v0-1 (the-as structure #t))) + (set! (-> self auto-get-off) (the-as symbol v0-1)) + v0-1 + ) + ) + ((or (= v1-0 'touch) (= v1-0 'attack)) + (set! + (-> self touch-time) + (the-as uint (-> *display* base-frame-counter)) + ) + #f + ) + ) + ) + ) + ) + :exit + (behavior () + (set! (-> self root-override root-prim prim-core action) (the-as uint 0)) + (set! (-> self root-override root-prim prim-core offense) 0) + 0 + (none) + ) + :code + (behavior () + (while #t + (let ((v1-0 (-> self condition))) + (cond + ((or (zero? v1-0) (= v1-0 1)) + (if + (or + (and + (task-complete? *game-info* (game-task beach-flutflut)) + (or + (and + (zero? (-> self condition)) + (task-closed? + (game-task village2-levitator) + (task-status need-hint) + ) + ) + (and + (= (-> self condition) 1) + (task-closed? (game-task village3-button) (task-status need-hint)) + ) + ) + ) + (and + *cheat-mode* + (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) + ) + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + ) + (goto cfg-75) + ) + ) + ((= v1-0 4) + (if + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + (goto cfg-75) + ) + ) + ((= v1-0 3) + (cond + ((and + (task-complete? *game-info* (-> self entity extra perm task)) + (not (handle->process (-> self cell))) + ) + (when + (and + (-> self auto-get-off) + (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) + (send-event-function *target* a1-6) + ) + ) + (set! (-> self auto-get-off) #f) + (go-virtual pickup (method-of-object self idle)) + ) + (set! (-> self auto-get-off) #f) + (if (= (-> self condition) 3) + (goto cfg-75) + ) + (if + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + (< + (- + (-> *display* base-frame-counter) + (the-as int (-> self touch-time)) + ) + 15 + ) + ) + (go-virtual pickup (method-of-object self idle)) + ) + ) + ((not (handle->process (-> self cell))) + (set! + (-> self cell) + (ppointer->handle + (birth-pickup-at-point + (vector+! + (new 'stack-no-clear 'vector) + (-> self root-override trans) + (new 'static 'vector :y 8192.0 :w 1.0) + ) + 6 + (the float (-> self entity extra perm task)) + #f + self + (the-as symbol (-> self fact)) + ) + ) + ) + ) + ) + ) + (else + (goto cfg-75) + ) + ) + ) + (flutflut-effect) + (suspend) + ) + (label cfg-75) + (if + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + (go-virtual wait-for-return) + (go-virtual idle) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (flutflut) + :virtual #t + :event + (-> (method-of-type flutflut wait-for-start) event) + :enter + (behavior () + (blocking-plane-destroy) + (blocking-plane-spawn (the-as curve-control (-> self path-target))) + (none) + ) + :exit + (-> (method-of-type flutflut wait-for-start) exit) + :code + (behavior () + (ja-channel-set! 1) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + (set! (-> self root-override root-prim prim-core action) (the-as uint 2049)) + (set! (-> self root-override root-prim prim-core offense) 4) + (while #t + (if + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + (go-virtual wait-for-return) + ) + (when (logtest? (-> self draw status) 8) + (if + (and + *target* + (>= + 40960.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (level-hint-spawn + (game-text-id flutflut-reminder) + "sksp0160" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (when + (and + (and + *target* + (>= + 20480.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (not (movie?)) + (not (level-hint-displayed?)) + (!= (-> self condition) 4) + ) + (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 + ((gp-0 + (new + 'stack + 'font-context + *font-default-matrix* + 32 + 160 + 0.0 + (font-color default) + (font-flags shadow kerning) + ) + ) + ) + (let ((v1-34 gp-0)) + (set! (-> v1-34 width) (the float 440)) + ) + (let ((v1-35 gp-0)) + (set! (-> v1-35 height) (the float 80)) + ) + (set! (-> gp-0 flags) (font-flags shadow kerning large)) + (print-game-text + (lookup-text! *common-text* (game-text-id press-to-use) #f) + gp-0 + #f + 128 + 22 + ) + ) + (if + (and + (logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons circle)) + (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) 'change-mode) + (set! (-> a1-7 param 0) (the-as uint 'flut)) + (set! (-> a1-7 param 1) (the-as uint self)) + (send-event-function *target* a1-7) + ) + ) + (go-virtual pickup (method-of-object self wait-for-return)) + ) + ) + ) + (flutflut-effect) + (suspend) + (let ((a0-26 (-> self skel root-channel 0))) + (set! (-> a0-26 param 0) 1.0) + (joint-control-channel-group-eval! + a0-26 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior flutflut) ja-post) + ) + +;; failed to figure out what this is: +(defstate pickup (flutflut) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('draw) + (ja-channel-set! 1) + (let ((v1-3 (-> self skel root-channel 0))) + (set! + (-> v1-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + (set! + (-> self root-override root-prim prim-core action) + (the-as uint 2049) + ) + (set! (-> self root-override root-prim prim-core offense) 4) + (transform-post) + ) + (('trans) + (vector+! + (the-as vector (-> arg3 param 0)) + (-> self root-override trans) + (-> self extra-trans) + ) + ) + (('touch 'attack) + #f + ) + ) + ) + :enter + (behavior ((arg0 (state flutflut))) + ((-> arg0 enter)) + (none) + ) + :code + (behavior ((arg0 (state flutflut))) + (ja-channel-set! 0) + (ja-post) + (while (zero? (ja-group-size)) + (if + (or + (not *target*) + (< + 24576.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go arg0) + ) + (flutflut-effect) + (suspend) + ) + (while + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + (flutflut-effect) + (suspend) + ) + (let ((s5-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s5-0) 300) + (flutflut-effect) + (suspend) + ) + ) + (go arg0) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate wait-for-return (flutflut) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (if + (and + (or (= arg2 'touch) (= arg2 'attack)) + (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) 'end-mode) + (send-event-function *target* a1-1) + ) + ) + (go-virtual pickup (method-of-object self idle)) + ) + (the-as object (if (= arg2 'trans) + (vector+! + (the-as vector (-> arg3 param 0)) + (-> self root-override trans) + (-> self extra-trans) + ) + ) + ) + ) + :enter + (behavior () + (blocking-plane-destroy) + (blocking-plane-spawn (the-as curve-control (-> self path-flut))) + (none) + ) + :code + (behavior () + (ja-channel-set! 0) + (ja-post) + (while #t + (if + (not + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + ) + (go-virtual idle) + ) + (flutflut-effect) + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type flutflut +(defmethod copy-defaults! flutflut ((obj flutflut) (arg0 res-lump)) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (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-vector! (-> s3-0 local-sphere) 0.0 6144.0 0.0 6144.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set-yaw-angle-clear-roll-pitch! + (-> obj root-override) + (res-lump-float arg0 'rotoffset) + ) + (dummy-14 obj *flutflut-sg* '()) + (logior! (-> obj skel status) 256) + (set! (-> obj draw shadow-ctrl) *flutflut-shadow-control*) + (let ((v1-24 (-> obj node-list data))) + (set! (-> v1-24 0 param0) cspace<-transformq+trans!) + (set! (-> v1-24 0 param1) (the-as basic (-> obj root-override trans))) + (set! (-> v1-24 0 param2) (the-as basic (-> obj extra-trans))) + ) + (dotimes (s4-2 2) + (let ((v1-27 (new 'process 'curve-control obj 'path (the float (+ s4-2 1))))) + (set! (-> obj path-data s4-2) v1-27) + (if v1-27 + (logior! + (-> v1-27 flags) + (path-control-flag display draw-line draw-point draw-text) + ) + ) + ) + ) + (set! (-> obj condition) (res-lump-value arg0 'index int)) + (set! + (-> obj fact) + (new + 'process + 'fact-info + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 120) obj) + ) + (set! (-> obj auto-get-off) #f) + (dummy-60 (-> obj root-override) 40960.0 40960.0 #t (the-as uint 1)) + (set! (-> obj cell) (the-as handle #f)) + (blocking-plane-spawn + (the-as + curve-control + (if + (and + *target* + (logtest? (-> *target* control root-prim prim-core action) #x4000) + ) + (-> obj path-flut) + (-> obj path-target) + ) + ) + ) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name-char + (new 'static 'array uint8 16 + #x7a + #x6f + #x6f + #x6d + #x2d + #x74 + #x65 + #x6c + #x65 + #x70 + #x6f + #x72 + #x74 + #x0 + #x0 + #x0 + ) + :volume #x400 + :fo-max 30 + ) + (-> obj root-override trans) + ) + ) + (go (method-of-object obj wait-for-start)) + (none) + ) diff --git a/test/decompiler/reference/levels/lavatube/assistant-lavatube_REF.gc b/test/decompiler/reference/levels/lavatube/assistant-lavatube_REF.gc new file mode 100644 index 0000000000..7d286109f8 --- /dev/null +++ b/test/decompiler/reference/levels/lavatube/assistant-lavatube_REF.gc @@ -0,0 +1,345 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type assistant-lavatube-start +(deftype assistant-lavatube-start (process-taskable) + () + :heap-base #x110 + :method-count-assert 53 + :size-assert #x17c + :flag-assert #x350110017c + ) + +;; definition for method 3 of type assistant-lavatube-start +(defmethod inspect assistant-lavatube-start ((obj assistant-lavatube-start)) + (let ((t9-0 (method-of-type process-taskable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "assistant-lavatube-start" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 3) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *assistant-lavatube-start-sg* v1-1) + ) + +;; definition for method 32 of type assistant-lavatube-start +(defmethod + play-anim! + assistant-lavatube-start + ((obj assistant-lavatube-start) (arg0 symbol)) + (case (current-status (-> obj tasks)) + ((6) + (if arg0 + (close-current! (-> obj tasks)) + ) + (new 'static 'spool-anim + :name "assistant-lavatube-start-resolution" + :index 5 + :parts 11 + :command-list + '( + ((the binteger 232) + joint + "cameraB" + ) + ((the binteger 491) + joint + "camera" + ) + ((the binteger 866) + joint + "cameraB" + ) + ((the binteger 1061) joint "camera") + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string (the-as task-status (current-status (-> obj tasks)))) + ) + ) + (get-art-elem obj) + ) + ) + ) + +;; definition for method 31 of type assistant-lavatube-start +(defmethod get-art-elem assistant-lavatube-start ((obj assistant-lavatube-start)) + (-> obj draw art-group data 3) + ) + +;; failed to figure out what this is: +(defstate hidden (assistant-lavatube-start) + :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 + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + #f + ) + ) + (and + (not + (closed? + (-> self tasks) + (game-task lavatube-start) + (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)) + ) + ) + (< + (- + (-> *display* base-frame-counter) + (the-as int (-> self state-time)) + ) + 3000 + ) + ) + ) + (hide-hud) + (kill-current-level-hint '() '(sidekick voicebox) 'exit) + (when + (and + (seen-text? *game-info* (game-text-id assistant-lavatube-powercell-hint)) + (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-26 gp-0)) + (set! (-> v1-26 width) (the float 448)) + ) + (let ((v1-27 gp-0)) + (set! (-> v1-27 height) (the float 80)) + ) + (let ((v1-28 gp-0)) + (set! (-> v1-28 scale) 0.8) + ) + (set! (-> gp-0 flags) (font-flags shadow kerning middle large)) + (print-game-text + (lookup-text! + *common-text* + (game-text-id lavatube-powercell-req-text) + #f + ) + gp-0 + #f + 128 + 22 + ) + ) + ) + (level-hint-spawn + (game-text-id assistant-lavatube-powercell-hint) + "asstva74" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (assistant-lavatube-start) + :virtual #t + :code + (behavior () + (while #t + (when (!= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (get-art-elem self) + ) + (ja-channel-push! 1 15) + (let ((v1-5 (-> self skel root-channel 0))) + (set! + (-> v1-5 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + ) + (let* ((f30-0 2.0) + (v1-7 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-8 (the-as number (logior #x3f800000 v1-7))) + ) + (countdown (gp-0 (+ (the int (* f30-0 (+ -1.0 (the-as float v1-8)))) 2)) + (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! + ) + ) + ) + ) + ) + (ja-channel-push! 1 15) + (let ((a0-16 (-> self skel root-channel 0))) + (set! + (-> a0-16 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-16 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + 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 4)) + 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) + ) + ) + +;; definition for method 39 of type assistant-lavatube-start +(defmethod + should-display? + assistant-lavatube-start + ((obj assistant-lavatube-start)) + (first-any (-> obj tasks) #t) + (= (current-status (-> obj tasks)) 6) + ) + +;; definition for method 11 of type assistant-lavatube-start +(defmethod + copy-defaults! + assistant-lavatube-start + ((obj assistant-lavatube-start) (arg0 res-lump)) + (dummy-40 + obj + arg0 + *assistant-lavatube-start-sg* + 3 + 29 + (new 'static 'vector :w 4096.0) + 5 + ) + (set! (-> obj tasks) (get-task-control (game-task lavatube-start))) + (first-any (-> obj tasks) #t) + (dummy-42 obj) + (none) + ) diff --git a/test/decompiler/reference/levels/maincave/baby-spider_REF.gc b/test/decompiler/reference/levels/maincave/baby-spider_REF.gc new file mode 100644 index 0000000000..0e2acf6ed3 --- /dev/null +++ b/test/decompiler/reference/levels/maincave/baby-spider_REF.gc @@ -0,0 +1,1329 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type baby-spider-spawn-params +(deftype baby-spider-spawn-params (structure) + ((hatched? symbol :offset-assert 0) + (fast-start? symbol :offset-assert 4) + (hack-move-above-ground? symbol :offset-assert 8) + (die-if-not-visible? symbol :offset-assert 12) + (pickup int32 :offset-assert 16) + (pickup-amount int32 :offset-assert 20) + (event-death symbol :offset-assert 24) + (delay-before-dying-if-not-visible uint64 :offset-assert 32) + ) + :method-count-assert 11 + :size-assert #x28 + :flag-assert #xb00000028 + (:methods + (init! (_type_ symbol symbol symbol symbol int int symbol) int 9) + (set-delay! (_type_ uint) uint 10) + ) + ) + +;; definition for method 3 of type baby-spider-spawn-params +(defmethod inspect baby-spider-spawn-params ((obj baby-spider-spawn-params)) + (format #t "[~8x] ~A~%" obj 'baby-spider-spawn-params) + (format #t "~Thatched?: ~A~%" (-> obj hatched?)) + (format #t "~Tfast-start?: ~A~%" (-> obj fast-start?)) + (format #t "~Thack-move-above-ground?: ~A~%" (-> obj hack-move-above-ground?)) + (format #t "~Tdie-if-not-visible?: ~A~%" (-> obj die-if-not-visible?)) + (format #t "~Tpickup: ~D~%" (-> obj pickup)) + (format #t "~Tpickup-amount: ~D~%" (-> obj pickup-amount)) + (format #t "~Tevent-death: ~A~%" (-> obj event-death)) + (format + #t + "~Tdelay-before-dying-if-not-visible: ~D~%" + (-> obj delay-before-dying-if-not-visible) + ) + obj + ) + +;; definition of type baby-spider +(deftype baby-spider (nav-enemy) + ((die-if-not-visible? symbol :offset-assert 400) + (hack-move-above-ground? symbol :offset-assert 404) + (state-float float :offset-assert 408) + (wiggle-angle float :offset-assert 412) + (delta-wiggle-angle float :offset-assert 416) + (wiggle-factor float :offset-assert 420) + (event-death symbol :offset-assert 424) + (delay-before-dying-if-not-visible uint64 :offset-assert 432) + (chase-rest-time uint64 :offset-assert 440) + (target-nav-time uint64 :offset-assert 448) + (unknown00 basic :offset-assert 456) + (unknown01 basic :offset-assert 460) + (wiggle-time uint64 :offset-assert 464) + (last-visible-time uint64 :offset-assert 472) + (up-vector vector :inline :offset-assert 480) + (state-vector vector :inline :offset-assert 496) + ) + :heap-base #x190 + :method-count-assert 76 + :size-assert #x200 + :flag-assert #x4c01900200 + ) + +;; definition for method 3 of type baby-spider +(defmethod inspect baby-spider ((obj baby-spider)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~T~Tdie-if-not-visible?: ~A~%" (-> obj die-if-not-visible?)) + (format + #t + "~T~Thack-move-above-ground?: ~A~%" + (-> obj hack-move-above-ground?) + ) + (format #t "~T~Tstate-float: ~f~%" (-> obj state-float)) + (format #t "~T~Twiggle-angle: ~f~%" (-> obj wiggle-angle)) + (format #t "~T~Tdelta-wiggle-angle: ~f~%" (-> obj delta-wiggle-angle)) + (format #t "~T~Twiggle-factor: ~f~%" (-> obj wiggle-factor)) + (format #t "~T~Tevent-death: ~A~%" (-> obj event-death)) + (format + #t + "~T~Tdelay-before-dying-if-not-visible: ~D~%" + (-> obj delay-before-dying-if-not-visible) + ) + (format #t "~T~Tchase-rest-time: ~D~%" (-> obj chase-rest-time)) + (format #t "~T~Ttarget-nav-time: ~D~%" (-> obj target-nav-time)) + (format #t "~T~Tfree-time: ~D~%" (-> obj free-time)) + (format #t "~T~Twiggle-time: ~D~%" (-> obj wiggle-time)) + (format #t "~T~Tlast-visible-time: ~D~%" (-> obj last-visible-time)) + (format #t "~T~Tup-vector: #~%" (-> obj up-vector)) + (format #t "~T~Tstate-vector: ~`vector`P~%" (-> obj state-vector)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "baby-spider" + :bounds + (new 'static 'vector :y 4096.0 :w 9216.0) + :max-lod 2 + :version #x6 + :shadow 4 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 81920.0) + (set! (-> v1-2 mgeo 1) (the-as uint 2)) + (set! (-> v1-2 lod-dist 1) 163840.0) + (set! (-> v1-2 mgeo 2) (the-as uint 3)) + (set! (-> v1-2 lod-dist 2) 4095996000.0) + (set! *baby-spider-sg* v1-2) + ) + +;; definition for symbol *baby-spider-nav-enemy-info*, type nav-enemy-info +(define + *baby-spider-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 6 + :walk-anim 8 + :turn-anim 8 + :notice-anim 11 + :run-anim 7 + :jump-anim 9 + :jump-land-anim 10 + :victory-anim 12 + :taunt-anim 12 + :die-anim 13 + :neck-joint 18 + :run-travel-speed (meters 7.0) + :run-rotate-speed (degrees 7999.9995) + :run-acceleration (meters 1.0) + :run-turn-time #x16 + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 7999.9995) + :walk-acceleration (meters 1.0) + :walk-turn-time #x16 + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 1.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 3.0) + :frustration-time #x1c2 + :die-anim-hold-frame 10000000000.0 + :jump-anim-start-frame 2.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #f + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +;; definition for symbol *baby-spider-nav-enemy-info-for-cave-trap*, type nav-enemy-info +(define + *baby-spider-nav-enemy-info-for-cave-trap* + (new 'static 'nav-enemy-info + :idle-anim 6 + :walk-anim 8 + :turn-anim 8 + :notice-anim 11 + :run-anim 7 + :jump-anim 9 + :jump-land-anim 10 + :victory-anim 12 + :taunt-anim 12 + :die-anim 13 + :neck-joint 18 + :run-travel-speed (meters 7.0) + :run-rotate-speed (degrees 7999.9995) + :run-acceleration (meters 1.0) + :run-turn-time #x16 + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 7999.9995) + :walk-acceleration (meters 1.0) + :walk-turn-time #x16 + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 1.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 80.0) + :stop-chase-distance (meters 90.0) + :frustration-distance (meters 3.0) + :frustration-time #x1c2 + :die-anim-hold-frame 10000000000.0 + :jump-anim-start-frame 2.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #f + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +;; definition for method 9 of type baby-spider-spawn-params +(defmethod + init! + baby-spider-spawn-params + ((obj baby-spider-spawn-params) + (arg0 symbol) + (arg1 symbol) + (arg2 symbol) + (arg3 symbol) + (arg4 int) + (arg5 int) + (arg6 symbol) + ) + (set! (-> obj hatched?) arg0) + (set! (-> obj fast-start?) arg1) + (set! (-> obj die-if-not-visible?) arg2) + (set! (-> obj hack-move-above-ground?) arg3) + (set! (-> obj pickup) arg4) + (set! (-> obj pickup-amount) arg5) + (set! (-> obj event-death) arg6) + (let ((v0-0 600)) + (set! (-> obj delay-before-dying-if-not-visible) (the-as uint v0-0)) + v0-0 + ) + ) + +;; definition for method 10 of type baby-spider-spawn-params +(defmethod + set-delay! + baby-spider-spawn-params + ((obj baby-spider-spawn-params) (arg0 uint)) + (set! (-> obj delay-before-dying-if-not-visible) arg0) + arg0 + ) + +;; definition for method 44 of type baby-spider +;; INFO: Return type mismatch none vs object. +(defmethod + dummy-44 + baby-spider + ((obj baby-spider) (arg0 process) (arg1 event-message-block)) + (the-as + object + (when + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + (if + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (go (method-of-object obj nav-enemy-victory)) + ) + ) + ) + ) + +;; definition for function baby-spider-default-event-handler +;; INFO: Return type mismatch none vs object. +(defbehavior + baby-spider-default-event-handler baby-spider + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'victory) + (go-virtual nav-enemy-victory) + (nav-enemy-default-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + +;; failed to figure out what this is: +baby-spider-default-event-handler + +;; definition for method 39 of type baby-spider +;; Used lq/sq +(defmethod common-post baby-spider ((obj baby-spider)) + (when (logtest? (-> obj collide-info status) 1) + (vector-deg-seek + (-> obj up-vector) + (-> obj up-vector) + (-> obj collide-info surface-normal) + 910.2222 + ) + (vector-normalize! (-> obj up-vector) 1.0) + ) + (forward-up-nopitch->quaternion + (-> obj collide-info quat) + (vector-z-quaternion! (new-stack-vector0) (-> obj collide-info quat)) + (-> obj up-vector) + ) + ((the-as (function nav-enemy none) (find-parent-method baby-spider 39)) obj) + (none) + ) + +;; definition for method 38 of type baby-spider +(defmethod TODO-RENAME-38 baby-spider ((obj baby-spider)) + (dummy-59 + (-> obj collide-info) + (-> obj collide-info transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (none) + ) + +;; definition for method 51 of type baby-spider +(defmethod dummy-51 baby-spider ((obj baby-spider)) + (let* ((f0-0 (rand-vu-float-range 0.0 1.0)) + (f1-1 (+ 1.0 (* 2.0 f0-0))) + (f2-2 f1-1) + (f2-4 (/ 1.0 f2-2)) + (f0-2 (+ 1.0 (* 0.2 f0-0))) + ) + (set! (-> obj delta-wiggle-angle) (* 910.2222 f1-1)) + (set! (-> obj wiggle-factor) (* 1.5 f2-4)) + (let ((f0-3 (* 28672.0 f0-2))) + (set! (-> obj target-speed) f0-3) + f0-3 + ) + ) + ) + +;; definition for method 52 of type baby-spider +;; Used lq/sq +(defmethod dummy-52 baby-spider ((obj baby-spider) (arg0 vector)) + (+! (-> obj wiggle-angle) (-> obj delta-wiggle-angle)) + (if (< 65536.0 (-> obj wiggle-angle)) + (set! (-> obj wiggle-angle) (+ -65536.0 (-> obj wiggle-angle))) + ) + (let* ((v1-3 (-> obj collide-info trans)) + (a1-2 (vector-! (new 'stack-no-clear 'vector) v1-3 arg0)) + (s2-0 + (vector-rotate-around-y! (new 'stack-no-clear 'vector) a1-2 16384.0) + ) + (v1-4 + (vector+*! + (new 'stack-no-clear 'vector) + arg0 + s2-0 + (* (-> obj wiggle-factor) (sin (-> obj wiggle-angle))) + ) + ) + (v0-3 (-> obj nav target-pos)) + ) + (set! (-> v0-3 quad) (-> v1-4 quad)) + v0-3 + ) + ) + +;; definition for method 53 of type baby-spider +(defmethod dummy-53 baby-spider ((obj baby-spider)) + (cond + ((logtest? (-> obj draw status) 8) + (set! + (-> obj last-visible-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (return #f) + ) + (else + (if (-> obj die-if-not-visible?) + (return + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> obj last-visible-time)) + ) + (the-as int (-> obj delay-before-dying-if-not-visible)) + ) + ) + ) + ) + ) + #f + ) + +;; failed to figure out what this is: +(defstate baby-spider-hatching (baby-spider) + :event + baby-spider-default-event-handler + :code + (behavior () + (ja-channel-push! 1 0) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go baby-spider-resume) + (none) + ) + :post + (the-as (function none :behavior baby-spider) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(defstate baby-spider-resume (baby-spider) + :event + baby-spider-default-event-handler + :code + (behavior () + (cond + ((not *target*) + (go-virtual nav-enemy-idle) + ) + ((TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + ) + ((and + (and + *target* + (>= + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (-> self state-timeout) + ) + (nonzero? (-> self draw)) + (logtest? (-> self draw status) 8) + ) + (go-virtual nav-enemy-patrol) + ) + ) + (go-virtual nav-enemy-idle) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-idle (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :enter + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self collide-info trans quad)) + (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-idle) enter))) + (if t9-0 + (t9-0) + ) + ) + (if (-> self hack-move-above-ground?) + (set! (-> self collide-info trans quad) (-> gp-0 quad)) + ) + ) + (none) + ) + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-idle) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :post + (behavior () + (ja-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-patrol) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (behavior () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) f30-0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) f30-0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-notice (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-notice) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 51) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 11)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (if + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> self chase-rest-time)) + ) + (go-virtual nav-enemy-victory) + ) + (let ((t9-3 (-> (method-of-type nav-enemy nav-enemy-chase) trans))) + (if t9-3 + (t9-3) + ) + ) + (none) + ) + :code + (behavior () + (set! + (-> self target-nav-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (set! + (-> self wiggle-time) + (the-as uint (+ (-> *display* base-frame-counter) -3000)) + ) + (set! (-> self wiggle-angle) 0.0) + (set! (-> self chase-rest-time) (the-as uint (rand-vu-int-range 300 1200))) + (ja-channel-push! 1 51) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self wiggle-time))) + 300 + ) + (set! + (-> self wiggle-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (dummy-51 self) + ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (behavior () + (dummy-52 self (target-pos 0)) + (nav-enemy-travel-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stop-chase (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-stop-chase) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (-> (method-of-type nav-enemy nav-enemy-stop-chase) code) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-stare) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (behavior () + (set! (-> self rotate-speed) 1456355.5) + (set! (-> self turn-time) 22) + (let ((f30-0 (rand-vu-float-range 0.8 1.2))) + (while #t + (logior! (-> self nav-enemy-flags) 16) + (ja-channel-push! 1 30) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 12)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 12)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 12)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) f30-0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (let ((gp-0 (rand-vu-int-range 300 600)) + (s5-0 (-> *display* base-frame-counter)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-0) gp-0) + (let ((v1-33 (-> self skel root-channel 0))) + (set! (-> v1-33 num-func) num-func-identity) + (set! (-> v1-33 frame-num) 0.0) + ) + (ja-blend-eval) + (suspend) + (suspend) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-give-up (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-give-up) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) + (nav-enemy-get-new-patrol-point) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-attack (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-attack) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-victory) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-victory (baby-spider) + :virtual #t + :event + baby-spider-default-event-handler + :trans + (behavior () + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-victory) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) + ) + :code + (-> (method-of-type nav-enemy nav-enemy-victory) code) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-die (baby-spider) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior baby-spider) + process-drawable-death-event-handler + ) + :enter + (behavior () + (let ((v1-0 (-> self event-death))) + (when v1-0 + (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) v1-0) + (send-event-function (ppointer->process (-> self parent)) a1-0) + ) + ) + ) + (set! (-> self draw bounds y) 8192.0) + (set! (-> self draw bounds w) 22528.0) + (let ((t9-1 (-> (method-of-type nav-enemy nav-enemy-die) enter))) + (if t9-1 + (t9-1) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate baby-spider-die-fast (baby-spider) + :event + baby-spider-default-event-handler + :code + (behavior () + (dummy-18 self) + (let ((v1-2 (-> self event-death))) + (when v1-2 + (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) v1-2) + (send-event-function (ppointer->process (-> self parent)) a1-0) + ) + ) + ) + (none) + ) + ) + +;; definition for method 47 of type baby-spider +;; INFO: Return type mismatch int vs none. +(defmethod initialize-collision baby-spider ((obj baby-spider)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 2) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) 4096.0) + (dummy-50 s5-0) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +;; definition for method 48 of type baby-spider +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod TODO-RENAME-48 baby-spider ((obj baby-spider)) + (set! + (-> obj last-visible-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (dummy-14 obj *baby-spider-sg* '()) + (if (= (-> obj parent 0 type) cave-trap) + (TODO-RENAME-45 obj *baby-spider-nav-enemy-info-for-cave-trap*) + (TODO-RENAME-45 obj *baby-spider-nav-enemy-info*) + ) + (let ((v1-11 (-> obj draw shadow-ctrl settings))) + (set! (-> v1-11 flags) (logand -9 (-> v1-11 flags))) + (set! (-> v1-11 fade-dist) 98304.0) + ) + (vector-float*! (-> obj collide-info scale) *identity-vector* 0.63) + (set! (-> obj neck up) (the-as uint 1)) + (set! (-> obj neck nose) (the-as uint 2)) + (set! (-> obj neck ear) (the-as uint 0)) + (set! (-> obj wiggle-angle) 0.0) + (set! (-> obj delta-wiggle-angle) 910.2222) + (set! (-> obj wiggle-factor) 1.5) + (set! (-> obj reaction-time) (rand-vu-int-range 30 240)) + (set! (-> obj chase-rest-time) (the-as uint 300)) + (set! (-> obj up-vector quad) (-> *y-vector* quad)) + 0 + (none) + ) + +;; definition for function baby-spider-init-by-other +;; Used lq/sq +(defbehavior + baby-spider-init-by-other baby-spider + ((arg0 baby-spider) + (arg1 vector) + (arg2 vector) + (arg3 baby-spider-spawn-params) + ) + (set! (-> self event-death) (-> arg3 event-death)) + (set! (-> self die-if-not-visible?) (-> arg3 die-if-not-visible?)) + (set! + (-> self delay-before-dying-if-not-visible) + (-> arg3 delay-before-dying-if-not-visible) + ) + (initialize-collision self) + (logior! (-> self mask) (process-mask actor-pause)) + (set! (-> self collide-info trans quad) (-> arg1 quad)) + (forward-up->quaternion (-> self collide-info quat) arg2 *up-vector*) + (vector-float*! (-> self collide-info scale) *identity-vector* 0.63) + (vector-float*! (-> self collide-info transv) arg2 8192.0) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (set! (-> self entity) (-> arg0 entity)) + (TODO-RENAME-48 self) + (set! (-> self enemy-info pickup-type) (the-as pickup-type (-> arg3 pickup))) + (set! (-> self enemy-info pickup-amount) (the float (-> arg3 pickup-amount))) + (create-connection! + *cavecrystal-light-control* + (the-as cavecrystal self) + (-> self entity) + (the-as + (function object object object object object) + cavecrystal-light-control-default-callback + ) + -1 + 4096.0 + ) + (cond + ((-> arg3 hatched?) + (go baby-spider-hatching) + ) + ((-> arg3 fast-start?) + (go baby-spider-resume) + ) + (else + (go-virtual nav-enemy-idle) + ) + ) + (none) + ) + +;; definition for method 11 of type baby-spider +(defmethod copy-defaults! baby-spider ((obj baby-spider) (arg0 res-lump)) + (set! (-> obj die-if-not-visible?) #f) + (set! (-> obj delay-before-dying-if-not-visible) (the-as uint 600)) + (set! (-> obj hack-move-above-ground?) #f) + (set! (-> obj event-death) #f) + (initialize-collision obj) + (process-drawable-from-entity! obj arg0) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (logior! (-> obj mask) (process-mask actor-pause)) + (set! + (-> obj nav) + (new 'process 'nav-control (-> obj collide-info) 24 40960.0) + ) + (logior! + (-> obj nav flags) + (nav-control-flags display-marks bit3 bit5 bit6 bit7) + ) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! + (-> obj path flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (create-connection! + *cavecrystal-light-control* + (the-as cavecrystal obj) + (-> obj entity) + (the-as + (function object object object object object) + cavecrystal-light-control-default-callback + ) + -1 + 4096.0 + ) + (TODO-RENAME-48 obj) + (go (method-of-object obj nav-enemy-idle)) + (none) + ) diff --git a/test/decompiler/reference/levels/maincave/cavecrystal-light_REF.gc b/test/decompiler/reference/levels/maincave/cavecrystal-light_REF.gc new file mode 100644 index 0000000000..4f05ed1d89 --- /dev/null +++ b/test/decompiler/reference/levels/maincave/cavecrystal-light_REF.gc @@ -0,0 +1,287 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol *cavecrystal-engine*, type engine +(define *cavecrystal-engine* (new 'loading-level 'engine 'cavecrystal 64)) + +;; definition of type cavecrystal-light +(deftype cavecrystal-light (structure) + ((next cavecrystal-light :offset-assert 0) + (crystal-id int32 :offset-assert 4) + (intensity float :offset-assert 8) + (fade-start float :offset-assert 12) + (fade-end float :offset-assert 16) + (crystal-handle handle :offset-assert 24) + (trans vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +;; definition for method 3 of type cavecrystal-light +(defmethod inspect cavecrystal-light ((obj cavecrystal-light)) + (format #t "[~8x] ~A~%" obj 'cavecrystal-light) + (format #t "~Tnext: #~%" (-> obj next)) + (format #t "~Tcrystal-id: ~D~%" (-> obj crystal-id)) + (format #t "~Tintensity: ~f~%" (-> obj intensity)) + (format #t "~Tfade-start: ~f~%" (-> obj fade-start)) + (format #t "~Tfade-end: ~f~%" (-> obj fade-end)) + (format #t "~Tcrystal-handle: ~D~%" (-> obj crystal-handle)) + (format #t "~Ttrans: #~%" (-> obj trans)) + obj + ) + +;; definition of type cavecrystal-light-control +(deftype cavecrystal-light-control (basic) + ((active-count int32 :offset-assert 4) + (head cavecrystal-light :offset-assert 8) + (last-known-valid-time uint64 :offset-assert 16) + (crystal cavecrystal-light 7 :inline :offset-assert 32) + ) + :method-count-assert 15 + :size-assert #x170 + :flag-assert #xf00000170 + (:methods + (TODO-RENAME-9 (_type_ int float cavecrystal) object 9) + (TODO-RENAME-10 (_type_ vector) float 10) + (inc-intensites! (_type_) int 11) + (TODO-RENAME-12 (_type_) symbol 12) + (create-connection! (_type_ cavecrystal res-lump (function object object object object object) object object) connection 13) + (execute-connections (_type_) int 14) + ) + ) + +;; definition for method 3 of type cavecrystal-light-control +(defmethod inspect cavecrystal-light-control ((obj cavecrystal-light-control)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tactive-count: ~D~%" (-> obj active-count)) + (format #t "~Thead: #~%" (-> obj head)) + (format #t "~Tlast-known-valid-time: ~D~%" (-> obj last-known-valid-time)) + (format #t "~Tcrystal[7] @ #x~X~%" (-> obj crystal)) + obj + ) + +;; definition for symbol *cavecrystal-light-control*, type cavecrystal-light-control +(define + *cavecrystal-light-control* + (new 'static 'cavecrystal-light-control :head #f) + ) + +;; definition for function cavecrystal-light-control-default-callback +;; INFO: Return type mismatch vector vs none. +;; Used lq/sq +(defun + cavecrystal-light-control-default-callback + ((arg0 (pointer process-drawable)) (arg1 int) (arg2 float)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let ((v1-1 (-> arg0 0 node-list))) + (if (and (>= arg1 0) (nonzero? v1-1)) + (vector<-cspace! s5-0 (-> v1-1 data arg1)) + (set! (-> s5-0 quad) (-> arg0 0 root trans quad)) + ) + ) + (set! (-> s5-0 w) arg2) + (let ((f0-1 (TODO-RENAME-10 *cavecrystal-light-control* s5-0)) + (a2-2 (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0)) + (a1-5 (new 'static 'vector :x 0.05 :y 0.05 :z 0.05 :w 1.0)) + ) + (vector-lerp! (-> arg0 0 draw color-mult) a1-5 a2-2 f0-1) + ) + ) + (none) + ) + +;; definition for method 13 of type cavecrystal-light-control +(defmethod + create-connection! + cavecrystal-light-control + ((obj cavecrystal-light-control) + (arg0 cavecrystal) + (arg1 res-lump) + (arg2 (function object object object object object)) + (arg3 object) + (arg4 object) + ) + (if (nonzero? (res-lump-value arg1 'crystal-light uint128)) + (add-connection + *cavecrystal-engine* + arg0 + arg2 + (process->ppointer arg0) + arg3 + arg4 + ) + ) + ) + +;; definition for method 14 of type cavecrystal-light-control +(defmethod + execute-connections + cavecrystal-light-control + ((obj cavecrystal-light-control)) + (execute-connections *cavecrystal-engine* #f) + ) + +;; definition for method 12 of type cavecrystal-light-control +(defmethod + TODO-RENAME-12 + cavecrystal-light-control + ((obj cavecrystal-light-control)) + (let ((v1-0 (-> obj last-known-valid-time)) + (a1-1 (-> *display* base-frame-counter)) + ) + (when (!= v1-0 a1-1) + (set! (-> obj last-known-valid-time) (the-as uint a1-1)) + (cond + ((zero? v1-0) + (set! (-> obj active-count) 0) + (set! (-> obj head) #f) + (dotimes (v1-1 7) + (let ((a1-5 (-> obj crystal v1-1))) + (set! (-> a1-5 next) #f) + (set! (-> a1-5 crystal-id) v1-1) + (set! (-> a1-5 intensity) 0.0) + (set! (-> a1-5 fade-start) 20480.0) + (set! (-> a1-5 fade-end) 286720.0) + (set! (-> a1-5 crystal-handle) (the-as handle #f)) + ) + ) + #f + ) + (else + (when (> (-> obj active-count) 0) + (let ((v1-4 (the-as cavecrystal-light #f)) + (a1-7 (-> obj head)) + ) + (while a1-7 + (cond + ((handle->process (-> a1-7 crystal-handle)) + (set! v1-4 a1-7) + (set! a1-7 (-> a1-7 next)) + ) + (else + (let ((a2-4 (-> a1-7 next))) + (+! (-> obj active-count) -1) + (set! (-> a1-7 next) #f) + (set! (-> a1-7 intensity) 0.0) + (if v1-4 + (set! (-> obj head) a2-4) + (set! (-> v1-4 next) a2-4) + ) + (set! a1-7 a2-4) + ) + ) + ) + ) + ) + #f + ) + ) + ) + ) + ) + ) + +;; definition for method 11 of type cavecrystal-light-control +(defmethod + inc-intensites! + cavecrystal-light-control + ((obj cavecrystal-light-control)) + (set! (-> obj head) #f) + (let ((a1-0 (the-as cavecrystal-light #f)) + (v0-0 0) + ) + (dotimes (v1-0 7) + (let ((a2-3 (-> obj crystal v1-0))) + (set! (-> a2-3 next) #f) + (when (< 0.0 (-> a2-3 intensity)) + (+! v0-0 1) + (if a1-0 + (set! (-> a1-0 next) a2-3) + (set! (-> obj head) a2-3) + ) + (set! a1-0 a2-3) + ) + ) + ) + (set! (-> obj active-count) v0-0) + v0-0 + ) + ) + +;; definition for method 9 of type cavecrystal-light-control +;; Used lq/sq +(defmethod + TODO-RENAME-9 + cavecrystal-light-control + ((obj cavecrystal-light-control) (arg0 int) (arg1 float) (arg2 cavecrystal)) + (TODO-RENAME-12 obj) + (when (or (< arg0 0) (>= arg0 7)) + (format 0 "ERROR: Bogus cavecrystal id!~%") + (return #f) + ) + (let ((s3-0 (-> obj crystal arg0))) + (cond + ((and (< 0.0 arg1) (>= 0.0 (-> s3-0 intensity))) + (+! (-> obj active-count) 1) + (set! (-> s3-0 intensity) arg1) + (set! (-> s3-0 crystal-handle) (process->handle arg2)) + (set! (-> s3-0 trans quad) (-> arg2 root-override trans quad)) + (inc-intensites! obj) + ) + ((and (>= 0.0 arg1) (< 0.0 (-> s3-0 intensity))) + (+! (-> obj active-count) -1) + (set! (-> s3-0 intensity) 0.0) + (inc-intensites! obj) + ) + ((< 0.0 arg1) + (set! (-> s3-0 intensity) arg1) + ) + ) + (TODO-RENAME-10 *palette-fade-controls* (+ arg0 1) arg1 0.0 (-> s3-0 trans)) + ) + ) + +;; definition for method 10 of type cavecrystal-light-control +(defmethod + TODO-RENAME-10 + cavecrystal-light-control + ((obj cavecrystal-light-control) (arg0 vector)) + (TODO-RENAME-12 obj) + (let ((s5-1 (-> obj head)) + (f30-0 0.0) + ) + (when s5-1 + (until (not s5-1) + (let* ((f26-0 (-> s5-1 fade-start)) + (f28-0 (- (-> s5-1 fade-end) f26-0)) + (f1-1 + (fmin + (fmax + 0.0 + (- + (- (vector-vector-distance (-> s5-1 trans) arg0) (-> arg0 w)) + f26-0 + ) + ) + f28-0 + ) + ) + (f0-7 (* (- 1.0 (/ f1-1 f28-0)) (-> s5-1 intensity))) + ) + (if (< f30-0 f0-7) + (set! f30-0 f0-7) + ) + ) + (set! s5-1 (-> s5-1 next)) + ) + (set! f30-0 (fmin 2.0 f30-0)) + ) + f30-0 + ) + ) + + + + diff --git a/test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc b/test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc new file mode 100644 index 0000000000..4e35b9de65 --- /dev/null +++ b/test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc @@ -0,0 +1,241 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type mother-spider-leg +(deftype mother-spider-leg (process-drawable) + ((gravity float :offset-assert 176) + (transv vector :inline :offset-assert 192) + (facing-rot vector :inline :offset-assert 208) + (facing-rotv vector :inline :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 20 + :size-assert #xf0 + :flag-assert #x14008000f0 + ) + +;; definition for method 3 of type mother-spider-leg +(defmethod inspect mother-spider-leg ((obj mother-spider-leg)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tgravity: ~f~%" (-> obj gravity)) + (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 mother-spider-thread +(deftype mother-spider-thread (structure) + ((joint-index int32 :offset-assert 0) + (trans-u float :offset-assert 4) + (swing-arc-u float :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +;; definition for method 3 of type mother-spider-thread +(defmethod inspect mother-spider-thread ((obj mother-spider-thread)) + (format #t "[~8x] ~A~%" obj 'mother-spider-thread) + (format #t "~Tjoint-index: ~D~%" (-> obj joint-index)) + (format #t "~Ttrans-u: ~f~%" (-> obj trans-u)) + (format #t "~Tswing-arc-u: ~f~%" (-> obj swing-arc-u)) + obj + ) + +;; definition of type mother-spider-leg-info +(deftype mother-spider-leg-info (structure) + ((joint-index0 int32 :offset-assert 0) + (joint-index1 int32 :offset-assert 4) + (cprim-index int32 :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #xc + :flag-assert #x90000000c + ) + +;; definition for method 3 of type mother-spider-leg-info +(defmethod inspect mother-spider-leg-info ((obj mother-spider-leg-info)) + (format #t "[~8x] ~A~%" obj 'mother-spider-leg-info) + (format #t "~Tjoint-index0: ~D~%" (-> obj joint-index0)) + (format #t "~Tjoint-index1: ~D~%" (-> obj joint-index1)) + (format #t "~Tcprim-index: ~D~%" (-> obj cprim-index)) + obj + ) + +;; definition of type mother-spider-history +(deftype mother-spider-history (structure) + ((trans vector :inline :offset-assert 0) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type mother-spider-history +(defmethod inspect mother-spider-history ((obj mother-spider-history)) + (format #t "[~8x] ~A~%" obj 'mother-spider-history) + (format #t "~Ttrans: #~%" (-> obj trans)) + obj + ) + +;; definition of type mother-spider-history-array +(deftype mother-spider-history-array (inline-array-class) + ((data mother-spider-history :dynamic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type mother-spider-history-array +(defmethod + inspect + mother-spider-history-array + ((obj mother-spider-history-array)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tlength: ~D~%" (-> obj length)) + (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~Tdata[0] @ #x~X~%" (-> obj data)) + obj + ) + +;; failed to figure out what this is: +(set! (-> mother-spider-history-array heap-base) (the-as uint 16)) + +;; definition of type mother-spider +(deftype mother-spider (process-drawable) + ((mode uint64 :offset-assert 176) + (damage int32 :offset-assert 184) + (baby-count int32 :offset-assert 188) + (max-baby-count int32 :offset-assert 192) + (birthing-counter int32 :offset-assert 196) + (spit-counter int32 :offset-assert 200) + (leg-socket-part-mask int32 :offset-assert 204) + (dist-from-anchor float :offset-assert 208) + (targ-dist-from-anchor float :offset-assert 212) + (idle-dist-from-anchor float :offset-assert 216) + (player-sticky-dist-from-anchor float :offset-assert 220) + (max-dist-from-anchor float :offset-assert 224) + (activate-xz-dist float :offset-assert 228) + (deactivate-xz-dist float :offset-assert 232) + (max-spit-xz-dist float :offset-assert 236) + (max-swing-radius float :offset-assert 240) + (spin-vel float :offset-assert 244) + (thread-speed float :offset-assert 248) + (thread-vel float :offset-assert 252) + (history mother-spider-history-array :offset-assert 256) + (history-len int32 :offset-assert 260) + (history-next-index int32 :offset-assert 264) + (hit? symbol :offset-assert 268) + (going-up? symbol :offset-assert 272) + (check-z-thresh? symbol :offset-assert 276) + (activate-z-thresh float :offset-assert 280) + (deactivate-z-thresh float :offset-assert 284) + (spawned-time uint64 :offset-assert 288) + (last-update-time uint64 :offset-assert 296) + (spin-time uint64 :offset-assert 304) + (last-spit-time uint64 :offset-assert 312) + (last-player-in-air-time uint64 :offset-assert 320) + (started-birthing-time uint64 :offset-assert 328) + (neck joint-mod :offset-assert 336) + (player-attack-id uint64 :offset-assert 344) + (leg-socket-part-time uint64 6 :offset-assert 352) + (orient-rot vector :inline :offset-assert 400) + (anchor-trans vector :inline :offset-assert 416) + (thread-min-trans vector :inline :offset-assert 432) + (swing-pos vector :inline :offset-assert 448) + (swing-base-pos vector :inline :offset-assert 464) + (swing-vel vector :inline :offset-assert 480) + ) + :heap-base #x180 + :method-count-assert 32 + :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) + ) + ) + +;; definition for method 3 of type mother-spider +(defmethod inspect mother-spider ((obj mother-spider)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tmode: ~D~%" (-> obj mode)) + (format #t "~T~Tdamage: ~D~%" (-> obj damage)) + (format #t "~T~Tbaby-count: ~D~%" (-> obj baby-count)) + (format #t "~T~Tmax-baby-count: ~D~%" (-> obj max-baby-count)) + (format #t "~T~Tbirthing-counter: ~D~%" (-> obj birthing-counter)) + (format #t "~T~Tspit-counter: ~D~%" (-> obj spit-counter)) + (format #t "~T~Tleg-socket-part-mask: ~D~%" (-> obj leg-socket-part-mask)) + (format #t "~T~Tdist-from-anchor: ~f~%" (-> obj dist-from-anchor)) + (format #t "~T~Ttarg-dist-from-anchor: ~f~%" (-> obj targ-dist-from-anchor)) + (format #t "~T~Tidle-dist-from-anchor: ~f~%" (-> obj idle-dist-from-anchor)) + (format + #t + "~T~Tplayer-sticky-dist-from-anchor: ~f~%" + (-> obj player-sticky-dist-from-anchor) + ) + (format #t "~T~Tmax-dist-from-anchor: ~f~%" (-> obj max-dist-from-anchor)) + (format #t "~T~Tactivate-xz-dist: ~f~%" (-> obj activate-xz-dist)) + (format #t "~T~Tdeactivate-xz-dist: ~f~%" (-> obj deactivate-xz-dist)) + (format #t "~T~Tmax-spit-xz-dist: ~f~%" (-> obj max-spit-xz-dist)) + (format #t "~T~Tmax-swing-radius: ~f~%" (-> obj max-swing-radius)) + (format #t "~T~Tspin-vel: ~f~%" (-> obj spin-vel)) + (format #t "~T~Tthread-speed: ~f~%" (-> obj thread-speed)) + (format #t "~T~Tthread-vel: ~f~%" (-> obj thread-vel)) + (format #t "~T~Thistory: ~A~%" (-> obj history)) + (format #t "~T~Thistory-len: ~D~%" (-> obj history-len)) + (format #t "~T~Thistory-next-index: ~D~%" (-> obj history-next-index)) + (format #t "~T~Thit?: ~A~%" (-> obj hit?)) + (format #t "~T~Tgoing-up?: ~A~%" (-> obj going-up?)) + (format #t "~T~Tcheck-z-thresh?: ~A~%" (-> obj check-z-thresh?)) + (format #t "~T~Tactivate-z-thresh: ~f~%" (-> obj activate-z-thresh)) + (format #t "~T~Tdeactivate-z-thresh: ~f~%" (-> obj deactivate-z-thresh)) + (format #t "~T~Tspawned-time: ~D~%" (-> obj spawned-time)) + (format #t "~T~Tlast-update-time: ~D~%" (-> obj last-update-time)) + (format #t "~T~Tspin-time: ~D~%" (-> obj spin-time)) + (format #t "~T~Tlast-spit-time: ~D~%" (-> obj last-spit-time)) + (format + #t + "~T~Tlast-player-in-air-time: ~D~%" + (-> obj last-player-in-air-time) + ) + (format #t "~T~Tstarted-birthing-time: ~D~%" (-> obj started-birthing-time)) + (format #t "~T~Tneck: ~A~%" (-> obj neck)) + (format #t "~T~Tplayer-attack-id: ~D~%" (-> obj player-attack-id)) + (format + #t + "~T~Tleg-socket-part-time[6] @ #x~X~%" + (-> obj leg-socket-part-time) + ) + (format #t "~T~Torient-rot: #~%" (-> obj orient-rot)) + (format #t "~T~Tanchor-trans: #~%" (-> obj anchor-trans)) + (format + #t + "~T~Tthread-min-trans: #~%" + (-> obj thread-min-trans) + ) + (format #t "~T~Tswing-pos: #~%" (-> obj swing-pos)) + (format #t "~T~Tswing-base-pos: #~%" (-> obj swing-base-pos)) + (format #t "~T~Tswing-vel: #~%" (-> obj swing-vel)) + obj + ) + +;; failed to figure out what this is: +0 diff --git a/test/decompiler/reference/levels/maincave/mother-spider-proj_REF.gc b/test/decompiler/reference/levels/maincave/mother-spider-proj_REF.gc new file mode 100644 index 0000000000..51ca70ca4c --- /dev/null +++ b/test/decompiler/reference/levels/maincave/mother-spider-proj_REF.gc @@ -0,0 +1,601 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type mother-spider-proj +(deftype mother-spider-proj (projectile) + ((parent-process (pointer projectile) :offset 12) + (facing-dir vector :inline :offset-assert 416) + ) + :heap-base #x140 + :method-count-assert 29 + :size-assert #x1b0 + :flag-assert #x1d014001b0 + ) + +;; definition for method 3 of type mother-spider-proj +(defmethod inspect mother-spider-proj ((obj mother-spider-proj)) + (let ((t9-0 (method-of-type projectile inspect))) + (t9-0 obj) + ) + (format #t "~T~Tfacing-dir: #~%" (-> obj facing-dir)) + obj + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 326) + (new 'static 'sparticle-launch-group + :length 48 + :duration #x12c + :linger-duration #x5dc + :name "group-mother-spider-proj-fly" + :launcher + (new 'static 'inline-array sparticle-group-item 48 + (sp-item 718 :flags (launch-asap) :binding 716) + (sp-item 716 :flags (start-dead) :binding 717) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + (sp-item 717 :flags (start-dead launch-asap)) + ) + :bounds (new 'static 'sphere :w 12288.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 718) + (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* 716) + (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 1.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 720) + (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* 720) + (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* 717) + (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 720) + (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* 327) + (new 'static 'sparticle-launch-group + :length 3 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-mother-spider-proj-hit" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 722) + (sp-item 723) + (sp-item 724) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 722) + (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 720) + (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* 724) + (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 720) + (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* 723) + (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* 328) + (new 'static 'sparticle-launch-group + :length 1 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-mother-spider-proj-die" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 722)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; definition for method 24 of type mother-spider-proj +(defmethod dummy-24 mother-spider-proj ((obj mother-spider-proj)) + (with-pp + (spawn + (-> obj part) + (the-as vector (-> obj root-override root-prim prim-core)) + ) + (let ((s5-0 (the-as sound-rpc-set-param (get-sound-buffer-entry)))) + (set! (-> s5-0 command) (sound-command set-param)) + (set! (-> s5-0 id) (-> obj sound-id)) + (let ((a1-1 (-> obj root-override trans))) + (let ((s4-0 pp)) + (when (= a1-1 #t) + (if + (and + s4-0 + (type-type? (-> s4-0 type) process-drawable) + (nonzero? (-> (the-as process-drawable s4-0) root)) + ) + (set! a1-1 (-> (the-as process-drawable s4-0) root trans)) + (set! a1-1 (the-as vector #f)) + ) + ) + ) + (sound-trans-convert (-> s5-0 parms trans) a1-1) + ) + (set! (-> s5-0 parms mask) (the-as uint 32)) + (-> s5-0 id) + ) + (let + ((f0-5 + (* + 5120.0 + (+ + 0.9 + (* + 0.1 + (cos + (* 873.81335 (the float (mod (-> *display* base-frame-counter) 75))) + ) + ) + ) + ) + ) + ) + (find-ground-and-draw-shadow + (-> obj root-override trans) + (the-as vector #f) + f0-5 + (the-as uint 1) + (the-as process #f) + 0.0 + 81920.0 + ) + ) + (none) + ) + ) + +;; definition for function mother-spider-proj-update-velocity +;; INFO: Return type mismatch int vs none. +(defun mother-spider-proj-update-velocity ((arg0 mother-spider-proj)) + (when + (>= + (vector-vector-xz-distance + (-> arg0 parent-process 0 root-override trans) + (-> arg0 target) + ) + (vector-vector-xz-distance + (-> arg0 parent-process 0 root-override trans) + (-> arg0 root-override trans) + ) + ) + (let + ((s3-1 + (vector-! + (new 'stack-no-clear 'vector) + (-> arg0 target) + (-> arg0 root-override trans) + ) + ) + (s4-0 (new 'stack-no-clear 'vector)) + (s5-0 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> arg0 root-override transv) + 1.0 + ) + ) + ) + (if (logtest? (-> arg0 root-override status) 4) + (vector-flatten! s3-1 s3-1 (-> arg0 root-override local-normal)) + ) + (vector-normalize-copy! s4-0 s3-1 1.0) + (let ((s3-2 (new 'stack-no-clear 'vector))) + (matrix-from-two-vectors-max-angle-partial! + (the-as matrix s3-2) + s5-0 + s4-0 + (* (-> arg0 max-turn) (-> *display* seconds-per-frame)) + (-> arg0 tween) + ) + (vector-matrix*! s5-0 s5-0 (the-as matrix s3-2)) + ) + (vector-normalize! s5-0 1.0) + (vector-float*! (-> arg0 root-override transv) s5-0 (-> arg0 max-speed)) + ) + ) + 0 + (none) + ) + +;; definition for method 26 of type mother-spider-proj +;; INFO: Return type mismatch int vs none. +(defmethod dummy-26 mother-spider-proj ((obj mother-spider-proj)) + (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) projectile-collision-reaction) + (set! (-> s5-0 no-reaction) 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 1024)) + (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) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 1228.8) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> s5-0 event-self) 'touched) + (set! (-> obj root-override) s5-0) + ) + (logclear! (-> obj mask) (process-mask enemy)) + (logclear! (-> obj mask) (process-mask crate)) + (logclear! (-> obj mask) (process-mask attackable)) + (set! (-> obj mask) (logior (process-mask projectile) (-> obj mask))) + 0 + (none) + ) + +;; definition for method 27 of type mother-spider-proj +;; INFO: Return type mismatch sound-id vs none. +;; Used lq/sq +(defmethod dummy-27 mother-spider-proj ((obj mother-spider-proj)) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 326) obj) + ) + (set! (-> obj max-speed) 32768.0) + (set! (-> obj update-velocity) mother-spider-proj-update-velocity) + (set! (-> obj max-turn) 5916.4443) + (set! (-> obj tween) 0.02) + (set! (-> obj attack-mode) 'mother-spider-proj) + (set! (-> obj timeout) (the-as uint 1200)) + (set! (-> obj target quad) (-> (target-pos 0) quad)) + (set! (-> obj target y) (+ 4915.2 (-> obj target y))) + (set! (-> obj target-base quad) (-> obj target quad)) + (set! + (-> obj sound-id) + (sound-play-by-name + (static-sound-name "mother-track") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (sound-play-by-name + (static-sound-name "mother-fire") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (none) + ) + +;; definition for method 28 of type mother-spider-proj +;; INFO: Return type mismatch vector vs none. +;; Used lq/sq +(defmethod dummy-28 mother-spider-proj ((obj mother-spider-proj)) + (when (and *target* (zero? (logand (-> *target* state-flags) #x80f8))) + (let ((gp-0 (-> obj target))) + (set! (-> gp-0 quad) (-> (target-pos 0) quad)) + (set! (-> gp-0 y) (+ 4915.2 (-> gp-0 y))) + (let ((f0-2 (vector-vector-distance gp-0 (-> obj root-override trans))) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (if (>= 0.0 f0-2) + (set! f0-2 409.6) + ) + (set! (-> a2-0 quad) (-> *target* control transv quad)) + (set! (-> a2-0 y) 0.0) + (let ((f0-3 (/ f0-2 (* 32768.0 (-> *display* seconds-per-frame))))) + (vector+float*! gp-0 gp-0 a2-0 (* f0-3 (-> *display* seconds-per-frame))) + ) + ) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate projectile-impact (mother-spider-proj) + :virtual #t + :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* 327) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (if (nonzero? (-> self sound-id)) + (sound-stop (-> self sound-id)) + ) + (sound-play-by-name + (static-sound-name "mother-hit") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (suspend) + (go-virtual projectile-die) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate projectile-dissipate (mother-spider-proj) + :virtual #t + :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* 328) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (if (nonzero? (-> self sound-id)) + (sound-stop (-> self sound-id)) + ) + (suspend) + (go-virtual projectile-die) + (none) + ) + ) diff --git a/test/decompiler/reference/levels/maincave/spiderwebs_REF.gc b/test/decompiler/reference/levels/maincave/spiderwebs_REF.gc new file mode 100644 index 0000000000..858ecedc85 --- /dev/null +++ b/test/decompiler/reference/levels/maincave/spiderwebs_REF.gc @@ -0,0 +1,351 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol *spider-jump-mods*, type surface +(define + *spider-jump-mods* + (new 'static 'surface + :name 'jump + :turnv 131072.0 + :turnvv 18204.445 + :tiltv 32768.0 + :tiltvv 131072.0 + :transv-max 49152.0 + :target-speed 49152.0 + :seek0 0.6 + :seek90 0.6 + :seek180 0.6 + :fric 0.2 + :nonlin-fric-dist 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :mode 'air + :flags #xc00 + ) + ) + +;; definition of type spiderwebs +(deftype spiderwebs (process-drawable) + ((spring-height meters :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + ) + +;; definition for method 3 of type spiderwebs +(defmethod inspect spiderwebs ((obj spiderwebs)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tspring-height: (meters ~m)~%" (-> obj spring-height)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "spiderwebs" + :bounds (new 'static 'vector :w 14336.0) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *spiderwebs-sg* v1-2) + ) + +;; definition for function spiderwebs-default-event-handler +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defbehavior + spiderwebs-default-event-handler spiderwebs + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'bonk) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 3) + (set! (-> a1-1 message) 'jump) + (set! + (-> a1-1 param 0) + (the-as uint (-> self spring-height)) + ) + (set! + (-> a1-1 param 1) + (the-as uint (-> self spring-height)) + ) + (set! (-> a1-1 param 2) (the-as uint *spider-jump-mods*)) + (if (send-event-function arg0 a1-1) + (go spiderwebs-bounce) + ) + ) + ) + ((= v1-0 'touch) + (when (= (-> arg0 type) target) + (let* ((a0-8 (target-pos 0)) + (f1-1 (- (-> a0-8 y) (-> self root trans y))) + ) + (if + (and + (>= 2048.0 (fabs f1-1)) + (and + (>= + 13516.8 + (vector-vector-distance a0-8 (-> self root trans)) + ) + (let + ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 3) + (set! (-> a1-3 message) 'jump) + (set! + (-> a1-3 param 0) + (the-as uint (-> self spring-height)) + ) + (set! + (-> a1-3 param 1) + (the-as uint (-> self spring-height)) + ) + (set! + (-> a1-3 param 2) + (the-as uint *spider-jump-mods*) + ) + (send-event-function arg0 a1-3) + ) + ) + ) + (go spiderwebs-bounce) + ) + ) + ) + ) + ((= v1-0 'attack) + (if + (and + (= (-> arg3 param 1) 'flop) + (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) 'jump) + (set! + (-> a1-4 param 0) + (the-as uint (-> self spring-height)) + ) + (set! + (-> a1-4 param 1) + (the-as uint (-> self spring-height)) + ) + (set! (-> a1-4 param 2) (the-as uint *spider-jump-mods*)) + (send-event-function arg0 a1-4) + ) + ) + (go spiderwebs-bounce) + ) + #f + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate spiderwebs-idle (spiderwebs) + :event + spiderwebs-default-event-handler + :code + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate spiderwebs-bounce (spiderwebs) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (sound-play-by-name + (static-sound-name "web-tramp") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((gp-1 (-> self skel root-channel 0))) + (set! + (-> gp-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! (-> gp-1 param 0) (ja-aframe 10.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 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (ja-aframe 10.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! + ) + ) + ) + (set! (-> self event-hook) (-> spiderwebs-idle event)) + (let ((gp-3 (-> self skel root-channel 0))) + (set! + (-> gp-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> gp-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-3 param 1) 1.0) + (set! (-> gp-3 frame-num) (ja-aframe 10.0 0)) + (joint-control-channel-group! + gp-3 + (the-as art-joint-anim (-> self draw art-group data 2)) + 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 spiderwebs-idle) + (none) + ) + :post + (the-as (function none :behavior spiderwebs) transform-post) + ) + +;; definition for method 11 of type spiderwebs +(defmethod copy-defaults! spiderwebs ((obj spiderwebs) (arg0 res-lump)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let + ((s3-0 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 14336.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) 13926.4) + (dummy-50 s4-0) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *spiderwebs-sg* '()) + (set! + (-> obj spring-height) + (res-lump-float arg0 'spring-height :default 45056.0) + ) + (ja-channel-set! 1) + (let ((a0-11 (-> obj 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! + a0-11 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (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) + ) + (nav-mesh-connect obj (-> obj root) (the-as nav-control #f)) + (transform-post) + (go spiderwebs-idle) + (none) + ) + + + + diff --git a/test/decompiler/reference/levels/misty/bonelurker_REF.gc b/test/decompiler/reference/levels/misty/bonelurker_REF.gc new file mode 100644 index 0000000000..9f793af8a1 --- /dev/null +++ b/test/decompiler/reference/levels/misty/bonelurker_REF.gc @@ -0,0 +1,1235 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type bonelurker +(deftype bonelurker (nav-enemy) + ((bump-player-time uint64 :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x198 + :flag-assert #x4c01300198 + ) + +;; definition for method 3 of type bonelurker +(defmethod inspect bonelurker ((obj bonelurker)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~T~Tbump-player-time: ~D~%" (-> obj bump-player-time)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "bonelurker" + :bounds + (new 'static 'vector :y 8192.0 :w 24576.0) + :max-lod 2 + :version #x6 + :shadow 4 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 5) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 163840.0) + (set! (-> v1-1 mgeo 2) (the-as uint 3)) + (set! (-> v1-1 lod-dist 2) 4095996000.0) + (set! *bonelurker-sg* v1-1) + ) + +;; definition for function bonelurker-set-small-bounds-sphere +;; INFO: Return type mismatch int vs none. +(defbehavior bonelurker-set-small-bounds-sphere bonelurker () + (set! (-> self draw bounds w) 12288.0) + 0 + (none) + ) + +;; definition for function bonelurker-set-large-bounds-sphere +;; INFO: Return type mismatch int vs none. +(defbehavior bonelurker-set-large-bounds-sphere bonelurker () + (set! (-> self draw bounds w) 24576.0) + 0 + (none) + ) + +;; definition for method 44 of type bonelurker +;; INFO: Return type mismatch symbol vs object. +(defmethod + dummy-44 + bonelurker + ((obj bonelurker) (arg0 process) (arg1 event-message-block)) + (the-as + object + (when + (and + (logtest? (-> obj nav-enemy-flags) 64) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + ) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (set! (-> obj speed-scale) 0.5) + #t + ) + ) + ) + ) + +;; definition for method 43 of type bonelurker +;; INFO: Return type mismatch symbol vs object. +(defmethod + dummy-43 + bonelurker + ((obj bonelurker) (arg0 process) (arg1 event-message-block)) + (with-pp + (set! (-> obj state-time) (the-as seconds (-> *display* base-frame-counter))) + (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) 'query) + (set! (-> a1-1 param 0) (the-as uint 'powerup)) + (set! (-> a1-1 param 1) (the-as uint 2)) + (the-as object (cond + ((or + (send-event-function *target* a1-1) + (= (-> arg1 param 1) 'explode) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go (method-of-object obj nav-enemy-die)) + 'die + ) + (else + (cond + (((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 2) + ) + (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) 'shove) + (set! (-> a1-3 param 0) (-> arg1 param 0)) + (let ((v1-19 (new 'static 'attack-info :mask #x40))) + (set! (-> v1-19 shove-back) 16384.0) + (set! (-> a1-3 param 1) (the-as uint v1-19)) + ) + (send-event-function arg0 a1-3) + ) + (go bonelurker-stun) + #t + ) + ((and + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + (= (-> obj skel root-channel 0) (-> obj skel channel)) + (let ((v1-30 (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + ) + ) + (or + (= v1-30 (-> obj draw art-group data 9)) + (= v1-30 (-> obj draw art-group data 10)) + ) + ) + ) + (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) 'shove) + (set! (-> a1-6 param 0) (-> arg1 param 0)) + (let ((v1-36 (new 'static 'attack-info :mask #x40))) + (set! (-> v1-36 shove-back) 16384.0) + (set! (-> a1-6 param 1) (the-as uint v1-36)) + ) + (send-event-function arg0 a1-6) + ) + (set! + (-> obj bump-player-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (set! + (-> obj nav-enemy-flags) + (logand -65 (-> obj nav-enemy-flags)) + ) + 'push + ) + ) + ) + ) + ) + ) + ) + ) + +;; definition for function bonelurker-stunned-event-handler +;; INFO: Return type mismatch symbol vs object. +(defbehavior + bonelurker-stunned-event-handler bonelurker + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'attack) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self state-time)) + ) + 150 + ) + (nav-enemy-set-hit-from-direction arg0) + (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) 'get-attack-count) + (set! (-> a1-1 param 0) (the-as uint 1)) + (send-event-function arg0 a1-1) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (go-virtual nav-enemy-die) + 'die + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +nav-enemy-default-event-handler + +;; definition for function bonelurker-push-post +;; Used lq/sq +(defbehavior bonelurker-push-post bonelurker () + (TODO-RENAME-9 (-> self align)) + (dummy-11 (-> self nav) (-> self nav target-pos)) + (TODO-RENAME-11 + (-> self align) + 4 + (-> self nav travel) + (the-as int 1.0) + 1.0 + (* (-> self enemy-info speed) (-> self speed-scale)) + ) + (vector-v++! + (-> self collide-info transv) + (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0) + ) + (TODO-RENAME-10 (-> self align) 16 1.0 1.0 1.0) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (nav-enemy-common-post) + (none) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-idle (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (bonelurker-set-large-bounds-sphere) + (none) + ) + :code + (behavior () + (bonelurker-set-small-bounds-sphere) + ((the-as + (function none :behavior bonelurker) + (-> (method-of-type nav-enemy nav-enemy-idle) code) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (behavior () + (ja-channel-push! 1 60) + ((the-as + (function none :behavior bonelurker) + (-> (method-of-type nav-enemy nav-enemy-patrol) code) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-notice (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (-> (method-of-type nav-enemy nav-enemy-notice) code) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :trans + (behavior () + ((-> (method-of-type nav-enemy nav-enemy-chase) trans)) + (if + (and + (zero? (logand (-> self nav-enemy-flags) 64)) + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self bump-player-time)) + ) + 150 + ) + ) + (logior! (-> self nav-enemy-flags) 64) + ) + (none) + ) + :code + (behavior () + (set! (-> self rotate-speed) 524288.0) + (set! (-> self turn-time) 30) + (set! (-> self speed-scale) 1.0) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 13) + ) + (ja-channel-push! 1 90) + ) + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 15) + ) + (ja-channel-push! 1 60) + ) + (else + (ja-channel-push! 1 45) + ) + ) + (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) f30-0) + (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) f30-0) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-15 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) f30-0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (the-as art-joint-anim (-> self draw art-group data 10)) + 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) f30-0) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (while #t + (cond + ((or + (not *target*) + (< + 36864.0 + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (let ((a0-19 (-> self skel root-channel 0))) + (set! + (-> a0-19 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! + (-> a0-19 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-19 param 1) f30-0) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! + a0-19 + (the-as art-joint-anim (-> self draw art-group data 8)) + 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) f30-0) + (joint-control-channel-group-eval! + a0-20 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (let ((a0-22 (-> self skel root-channel 0))) + (set! + (-> a0-22 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + (set! + (-> a0-22 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 9)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-22 param 1) f30-0) + (set! (-> a0-22 frame-num) 0.0) + (joint-control-channel-group! + a0-22 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-23 (-> self skel root-channel 0))) + (set! + (-> a0-23 param 0) + (the float (+ (-> a0-23 frame-group data 0 length) -1)) + ) + (set! (-> a0-23 param 1) f30-0) + (joint-control-channel-group-eval! + a0-23 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (if (logtest? (-> self nav-enemy-flags) 256) + (go-virtual nav-enemy-victory) + ) + (let ((a0-25 (-> self skel root-channel 0))) + (set! + (-> a0-25 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-25 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-25 param 1) f30-0) + (set! (-> a0-25 frame-num) 0.0) + (joint-control-channel-group! + a0-25 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-26 (-> self skel root-channel 0))) + (set! + (-> a0-26 param 0) + (the float (+ (-> a0-26 frame-group data 0 length) -1)) + ) + (set! (-> a0-26 param 1) f30-0) + (joint-control-channel-group-eval! + a0-26 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (if (logtest? (-> self nav-enemy-flags) 256) + (go-virtual nav-enemy-victory) + ) + (let ((a0-28 (-> self skel root-channel 0))) + (set! + (-> a0-28 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! + (-> a0-28 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-28 param 1) f30-0) + (set! (-> a0-28 frame-num) 0.0) + (joint-control-channel-group! + a0-28 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 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) f30-0) + (joint-control-channel-group-eval! + a0-29 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stop-chase (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (-> (method-of-type nav-enemy nav-enemy-stop-chase) code) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (behavior () + (set! (-> self rotate-speed) 524288.0) + (set! (-> self turn-time) 60) + (let ((f30-0 (rand-vu-float-range 0.8 1.2))) + (when (and (nav-enemy-player-vulnerable?) (nav-enemy-rnd-percent? 0.5)) + (ja-channel-push! 1 30) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 13)) + ) + (set! (-> gp-0 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-0 param 1) f30-0) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 13)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-1 param 1) f30-0) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (while #t + (when (not (nav-enemy-facing-player? 2730.6667)) + (logior! (-> self nav-enemy-flags) 16) + (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 16)) + ) + ) + (let ((v1-23 (-> self skel root-channel 0))) + (set! (-> v1-23 num-func) num-func-identity) + (set! (-> v1-23 frame-num) 0.0) + ) + (until (nav-enemy-facing-player? 1820.4445) + (ja-blend-eval) + (suspend) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 param 0) 1.0) + (joint-control-channel-group-eval! + a0-14 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + ) + (ja-channel-push! 1 75) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-18 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-18 param 1) f30-0) + (set! (-> a0-18 frame-num) 0.0) + (joint-control-channel-group! + a0-18 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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) f30-0) + (joint-control-channel-group-eval! + a0-19 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-21 (-> self skel root-channel 0))) + (set! (-> a0-21 param 0) 1.0) + (joint-control-channel-group! + a0-21 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (when (rand-vu-percent? 0.15) + (ja-channel-push! 1 30) + (let ((gp-2 (-> self skel root-channel 0))) + (set! + (-> gp-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 13)) + ) + (set! (-> gp-2 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-2 param 1) f30-0) + (set! (-> gp-2 frame-num) 0.0) + (joint-control-channel-group! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 13)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-3 param 1) f30-0) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-give-up (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (behavior () + (set! (-> self rotate-speed) 524288.0) + (set! (-> self turn-time) 30) + (ja-channel-push! 1 45) + (let ((s4-0 (-> self collide-info)) + (s5-0 (target-pos 0)) + ) + (when + (< + (fabs + (deg-diff + (y-angle s4-0) + (vector-y-angle + (vector-! (new 'stack-no-clear 'vector) s5-0 (-> s4-0 trans)) + ) + ) + ) + 12743.111 + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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! + ) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-9 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! + a0-9 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-12 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + 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 5)) + 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! + ) + ) + ) + ) + ) + (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) + (nav-enemy-get-new-patrol-point) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-18 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-18 param 1) 1.0) + (set! (-> a0-18 frame-num) 0.0) + (joint-control-channel-group! + a0-18 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-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! + ) + ) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-victory (bonelurker) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior bonelurker) + nav-enemy-default-event-handler + ) + :code + (-> (method-of-type nav-enemy nav-enemy-victory) code) + ) + +;; failed to figure out what this is: +(defstate bonelurker-stun (bonelurker) + :event + bonelurker-stunned-event-handler + :enter + (behavior () + (nav-enemy-neck-control-inactive) + (none) + ) + :exit + (behavior () + (nav-enemy-neck-control-look-at) + (none) + ) + :code + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector-normalize-copy! gp-0 (-> self hit-from-dir) 16384.0) + (vector+! gp-0 (-> self collide-info trans) gp-0) + (set! (-> self nav target-pos quad) (-> gp-0 quad)) + ) + (ja-channel-push! 1 30) + (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! + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + :post + bonelurker-push-post + ) + +;; definition for symbol *bonelurker-nav-enemy-info*, type nav-enemy-info +(define + *bonelurker-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 5 + :walk-anim 6 + :turn-anim 16 + :notice-anim 7 + :run-anim 8 + :jump-anim 17 + :jump-land-anim 18 + :victory-anim 13 + :taunt-anim 13 + :die-anim 14 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 2880.0) + :run-acceleration (meters 1.0) + :run-turn-time #x1e + :walk-travel-speed (meters 3.0) + :walk-rotate-speed (degrees 2880.0) + :walk-acceleration (meters 1.0) + :walk-turn-time #x1e + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 5.0) + :nav-nearest-y-threshold (meters 5.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 32.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #t + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #t + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +;; definition for method 47 of type bonelurker +;; INFO: Return type mismatch int vs none. +(defmethod initialize-collision bonelurker ((obj bonelurker)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) 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! (-> s4-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s4-0 local-sphere) 0.0 10240.0 0.0 24576.0) + (dummy-46 s5-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 action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 8192.0 0.0 4096.0) + ) + (dummy-28 s4-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 action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 1) + (set-vector! (-> s3-1 local-sphere) 0.0 11468.8 0.0 4096.0) + ) + (dummy-28 s4-0) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (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) 2) + (set! (-> s3-2 transform-index) 29) + (set-vector! (-> s3-2 local-sphere) 0.0 4915.2 0.0 4915.2) + ) + (dummy-28 s4-0) + ) + (set! (-> s5-0 nav-radius) 8192.0) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 1)) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +;; definition for method 48 of type bonelurker +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-48 bonelurker ((obj bonelurker)) + (dummy-14 obj *bonelurker-sg* '()) + (TODO-RENAME-45 obj *bonelurker-nav-enemy-info*) + (set! (-> obj neck up) (the-as uint 0)) + (set! (-> obj neck nose) (the-as uint 1)) + (set! (-> obj neck ear) (the-as uint 2)) + 0 + (none) + ) diff --git a/test/decompiler/reference/levels/misty/muse_REF.gc b/test/decompiler/reference/levels/misty/muse_REF.gc new file mode 100644 index 0000000000..7a4060fb11 --- /dev/null +++ b/test/decompiler/reference/levels/misty/muse_REF.gc @@ -0,0 +1,1027 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type muse +(deftype muse (nav-enemy) + ((root-override collide-shape-moving :offset 112) + (current-path-index float :offset-assert 400) + (prev-path-index float :offset-assert 404) + (dest-path-index float :offset-assert 408) + (player-path-index float :offset-assert 412) + (max-path-index float :offset-assert 416) + (sprint-distance float :offset-assert 420) + (dest-point vector :inline :offset-assert 432) + (anim spool-anim :offset-assert 448) + (victory-anim spool-anim :offset-assert 452) + (old-target-pos transformq :inline :offset-assert 464) + ) + :heap-base #x190 + :method-count-assert 76 + :size-assert #x200 + :flag-assert #x4c01900200 + ) + +;; definition for method 3 of type muse +(defmethod inspect muse ((obj muse)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~T~Tcurrent-path-index: ~f~%" (-> obj current-path-index)) + (format #t "~T~Tprev-path-index: ~f~%" (-> obj prev-path-index)) + (format #t "~T~Tdest-path-index: ~f~%" (-> obj dest-path-index)) + (format #t "~T~Tplayer-path-index: ~f~%" (-> obj player-path-index)) + (format #t "~T~Tmax-path-index: ~f~%" (-> obj max-path-index)) + (format #t "~T~Tsprint-distance: ~f~%" (-> obj sprint-distance)) + (format #t "~T~Tdest-point: #~%" (-> obj dest-point)) + (format #t "~T~Tanim: ~A~%" (-> obj anim)) + (format #t "~T~Tvictory-anim: ~A~%" (-> obj victory-anim)) + (format + #t + "~T~Told-target-pos: #~%" + (-> obj old-target-pos) + ) + obj + ) + +;; definition of type point-on-path-segment-info +(deftype point-on-path-segment-info (structure) + ((point vector :inline :offset-assert 0) + (segment vector 2 :inline :offset-assert 16) + (dir vector :inline :offset-assert 48) + (nearest-point vector :inline :offset-assert 64) + (segment-length float :offset-assert 80) + (distance-to-segment float :offset-assert 84) + (parametric-index float :offset-assert 88) + ) + :method-count-assert 9 + :size-assert #x5c + :flag-assert #x90000005c + ) + +;; definition for method 3 of type point-on-path-segment-info +(defmethod inspect point-on-path-segment-info ((obj point-on-path-segment-info)) + (format #t "[~8x] ~A~%" obj 'point-on-path-segment-info) + (format #t "~Tpoint: #~%" (-> obj point)) + (format #t "~Tsegment[2] @ #x~X~%" (-> obj segment)) + (format #t "~Tdir: #~%" (-> obj dir)) + (format #t "~Tnearest-point: #~%" (-> obj nearest-point)) + (format #t "~Tsegment-length: ~f~%" (-> obj segment-length)) + (format #t "~Tdistance-to-segment: ~f~%" (-> obj distance-to-segment)) + (format #t "~Tparametric-index: ~f~%" (-> obj parametric-index)) + obj + ) + +;; definition for function analyze-point-on-path-segment +;; Used lq/sq +(defun analyze-point-on-path-segment ((arg0 point-on-path-segment-info)) + (vector-! (-> arg0 dir) (-> arg0 segment 1) (the-as vector (-> arg0 segment))) + (vector-normalize! (-> arg0 dir) 1.0) + (set! + (-> arg0 segment-length) + (vector-vector-distance + (the-as vector (-> arg0 segment)) + (-> arg0 segment 1) + ) + ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-! s5-0 (the-as vector (-> arg0 segment)) (-> arg0 point)) + (vector+*! s5-0 s5-0 (-> arg0 dir) (- (vector-dot s5-0 (-> arg0 dir)))) + (vector+! (-> arg0 nearest-point) (-> arg0 point) s5-0) + (set! (-> arg0 distance-to-segment) (vector-length s5-0)) + (vector-! s5-0 (-> arg0 point) (the-as vector (-> arg0 segment))) + (set! + (-> arg0 parametric-index) + (/ (vector-dot (-> arg0 dir) s5-0) (-> arg0 segment-length)) + ) + ) + (cond + ((< (-> arg0 parametric-index) 0.0) + (set! (-> arg0 parametric-index) 0.0) + (set! (-> arg0 nearest-point quad) (-> arg0 segment 0 quad)) + (let + ((f0-10 (vector-vector-distance (-> arg0 nearest-point) (-> arg0 point)))) + (set! (-> arg0 distance-to-segment) f0-10) + f0-10 + ) + ) + ((< 1.0 (-> arg0 parametric-index)) + (set! (-> arg0 parametric-index) 1.0) + (set! (-> arg0 nearest-point quad) (-> arg0 segment 1 quad)) + (let + ((f0-13 (vector-vector-distance (-> arg0 nearest-point) (-> arg0 point)))) + (set! (-> arg0 distance-to-segment) f0-13) + f0-13 + ) + ) + ) + ) + +;; definition for function muse-get-path-point +;; INFO: Return type mismatch int vs none. +(defbehavior muse-get-path-point muse ((arg0 vector) (arg1 int)) + (eval-path-curve-div! (-> self path) arg0 (the float arg1) 'interp) + 0 + (none) + ) + +;; definition for function muse-check-dest-point +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior muse-check-dest-point muse () + (let ((gp-0 (new 'stack-no-clear 'point-on-path-segment-info)) + (f26-0 4096000.0) + (f30-0 0.0) + (f24-0 4096000.0) + (f28-0 0.0) + ) + (let ((s5-0 (+ (-> self path curve num-cverts) -1)) + (s4-0 (target-pos 0)) + ) + (dotimes (s3-0 s5-0) + (let ((f22-0 (the float s3-0))) + (let ((f20-0 (the float (+ s3-0 1)))) + (eval-path-curve-div! + (-> self path) + (the-as vector (-> gp-0 segment)) + f22-0 + 'interp + ) + (eval-path-curve-div! (-> self path) (-> gp-0 segment 1) f20-0 'interp) + ) + (set! (-> gp-0 point quad) (-> s4-0 quad)) + (analyze-point-on-path-segment gp-0) + (when (< (-> gp-0 distance-to-segment) f24-0) + (set! f24-0 (-> gp-0 distance-to-segment)) + (set! f28-0 (+ f22-0 (-> gp-0 parametric-index))) + ) + (set! (-> gp-0 point quad) (-> self collide-info trans quad)) + (analyze-point-on-path-segment gp-0) + (when (< (-> gp-0 distance-to-segment) f26-0) + (set! f26-0 (-> gp-0 distance-to-segment)) + (set! f30-0 (+ f22-0 (-> gp-0 parametric-index))) + ) + ) + 0 + ) + ) + (let ((f0-6 (- f30-0 f28-0))) + (if (< f0-6 (* -0.5 (-> self max-path-index))) + (+! f0-6 (-> self max-path-index)) + ) + (if (< (* 0.5 (-> self max-path-index)) f0-6) + (set! f0-6 (- f0-6 (-> self max-path-index))) + ) + (cond + ((>= f0-6 0.0) + (set! (-> self dest-path-index) (the float (the int (+ 2.5 f30-0)))) + (if (>= (-> self dest-path-index) (-> self max-path-index)) + (set! + (-> self dest-path-index) + (- (-> self dest-path-index) (-> self max-path-index)) + ) + ) + ) + (else + (set! (-> self dest-path-index) (+ -1.5 f30-0)) + (if (< (-> self dest-path-index) 0.0) + (+! (-> self dest-path-index) (-> self max-path-index)) + ) + (set! + (-> self dest-path-index) + (the float (the int (-> self dest-path-index))) + ) + ) + ) + ) + ) + (eval-path-curve-div! + (-> self path) + (-> self dest-point) + (-> self dest-path-index) + 'interp + ) + 0 + (none) + ) + +;; definition for method 51 of type muse +;; INFO: Return type mismatch int vs float. +(defmethod dummy-51 muse ((obj muse)) + (dotimes (s5-0 2) + (let ((v1-2 (rand-vu-int-range 3 (+ (-> obj node-list length) -1)))) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 271) + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> obj node-list data v1-2) + ) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (the-as float 0) + ) + +;; definition for method 39 of type muse +(defmethod common-post muse ((obj muse)) + (spool-push *art-control* (-> obj anim name) 0 obj -99.0) + (dummy-51 obj) + ((method-of-type nav-enemy common-post) obj) + (none) + ) + +;; failed to figure out what this is: +(let + ((v1-5 + (new 'static 'skeleton-group + :art-group-name "muse" + :bounds + (new 'static 'vector :y 8192.0 :w 12288.0) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-5 jgeo) 0) + (set! (-> v1-5 janim) 3) + (set! (-> v1-5 mgeo 0) (the-as uint 1)) + (set! (-> v1-5 lod-dist 0) 4095996000.0) + (set! *muse-sg* v1-5) + ) + +;; definition for method 44 of type muse +;; INFO: Return type mismatch none vs object. +(defmethod dummy-44 muse ((obj muse) (arg0 process) (arg1 event-message-block)) + (the-as object (go muse-caught)) + ) + +;; definition for method 43 of type muse +;; INFO: Return type mismatch none vs object. +(defmethod dummy-43 muse ((obj muse) (arg0 process) (arg1 event-message-block)) + (the-as object (go muse-caught)) + ) + +;; failed to figure out what this is: +nav-enemy-default-event-handler + +;; failed to figure out what this is: +(defstate muse-idle (muse) + :event + (the-as + (function process int symbol event-message-block object :behavior muse) + nav-enemy-default-event-handler + ) + :trans + (behavior () + (set! + (-> self sprint-distance) + (seek + (-> self sprint-distance) + 61440.0 + (* 8192.0 (-> *display* seconds-per-frame)) + ) + ) + (if + (and + *target* + (>= + 102400.0 + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (level-hint-spawn + (game-text-id zero) + (the-as string #f) + (-> self entity) + *entity-pool* + (game-task none) + ) + ) + (if + (and + *target* + (>= + 81920.0 + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (go-virtual nav-enemy-chase) + ) + (none) + ) + :code + (behavior () + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 4) + ) + (ja-channel-push! 1 30) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (while #t + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-9 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! + a0-9 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (spool-push *art-control* (-> self anim name) 0 self -99.0) + (dummy-51 self) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 param 0) + (the float (+ (-> a0-12 frame-group data 0 length) -1)) + ) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior muse) ja-post) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (muse) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior muse) + nav-enemy-default-event-handler + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (cond + ((or + (not *target*) + (< + 102400.0 + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (set! (-> self target-speed) 0.0) + (if (= (-> self momentum-speed) 0.0) + (go muse-idle) + ) + ) + ((or + (not *target*) + (< + (-> self sprint-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (set! (-> self target-speed) 40960.0) + ) + (else + (set! (-> self target-speed) 61440.0) + ) + ) + (set! + (-> self sprint-distance) + (seek + (-> self sprint-distance) + 0.0 + (* 4096.0 (-> *display* seconds-per-frame)) + ) + ) + (muse-check-dest-point) + (none) + ) + :code + (behavior () + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 3) + ) + (ja-channel-push! 1 30) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (ja-channel-push! 1 30) + ) + ) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (suspend) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) (* 0.000016276043 (-> self momentum-speed))) + (joint-control-channel-group-eval! + a0-11 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (behavior () + (set! (-> self nav destination-pos quad) (-> self dest-point quad)) + (dummy-19 + (-> self nav) + (-> self nav target-pos) + (-> self collide-info) + (-> self nav destination-pos) + 546133.3 + ) + (if (logtest? (nav-control-flags bit21) (-> self nav flags)) + (logclear! (-> self nav flags) (nav-control-flags bit10)) + ) + (nav-enemy-travel-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-jump (muse) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior muse) + nav-enemy-default-event-handler + ) + :enter + (behavior () + ((-> (method-of-type nav-enemy nav-enemy-jump) enter)) + (set! (-> self nav-enemy-flags) (logand -513 (-> self nav-enemy-flags))) + (none) + ) + :code + (-> (method-of-type nav-enemy nav-enemy-jump) code) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-jump-land (muse) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior muse) + nav-enemy-default-event-handler + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 22) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> gp-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-0 param 1) 0.8) + (set! (-> gp-0 frame-num) (ja-aframe 6.0 0)) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 0.8) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate muse-caught (muse) + :event + (the-as + (function process int symbol event-message-block object :behavior muse) + #f + ) + :trans + (behavior () + (spool-push *art-control* (-> self anim name) 0 self -1.0) + (none) + ) + :code + (behavior () + (sound-play-by-name + (static-sound-name "money-pickup") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (close-specific-task! (game-task misty-muse) (task-status need-reminder)) + (process-entity-status! self (entity-perm-status dead) #t) + (suspend) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'clone-anim) + (set! (-> a1-3 param 0) (the-as uint self)) + (when (send-event-function *target* a1-3) + (set-blackout-frames 3000) + (let ((gp-1 (res-lump-struct (-> self entity) 'movie-pos vector))) + (cond + (gp-1 + (TODO-RENAME-30 (-> self collide-info) gp-1) + (set-yaw-angle-clear-roll-pitch! (-> self collide-info) (-> gp-1 w)) + ) + (else + (TODO-RENAME-30 (-> self collide-info) (-> *target* control trans)) + (quaternion-copy! + (-> self collide-info quat) + (-> *target* control quat) + ) + (dummy-60 (-> self collide-info) 40960.0 40960.0 #f (the-as uint 1)) + ) + ) + ) + (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) 'trans) + (set! (-> a1-10 param 0) (the-as uint 'save)) + (set! (-> a1-10 param 1) (the-as uint (-> self old-target-pos))) + (send-event-function *target* a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'matrix) + (set! (-> a1-11 param 0) (the-as uint 'play-anim)) + (send-event-function (ppointer->process (-> *target* sidekick)) a1-11) + ) + (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) 'blend-shape) + (set! (-> a1-12 param 0) (the-as uint #t)) + (send-event-function *target* a1-12) + ) + (if (!= *kernel-boot-message* 'play) + (set! + (-> self trans-hook) + (lambda :behavior muse + () + (spool-push *art-control* (-> self victory-anim name) 0 self -1.0) + (none) + ) + ) + ) + (push-setting! + *setting-control* + self + (the-as (function object object object object object) 'music-volume) + 'rel + (-> *setting-control* current music-volume-movie) + 0 + ) + (push-setting! + *setting-control* + self + (the-as (function object object object object object) 'sfx-volume) + 'rel + (-> *setting-control* current sfx-volume-movie) + 0 + ) + (push-setting! + *setting-control* + self + (the-as (function object object object object object) 'ambient-volume) + 'rel + (-> *setting-control* current ambient-volume-movie) + 0 + ) + (logclear! (-> self mask) (process-mask enemy)) + (let ((gp-2 (get-process *default-dead-pool* othercam #x4000))) + (when gp-2 + (let ((t9-19 (method-of-type othercam activate))) + (t9-19 + (the-as othercam gp-2) + self + 'othercam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process gp-2 othercam-init-by-other self 3 #f #t) + (-> gp-2 ppointer) + ) + ) + (auto-save-command 'auto-save 0 0 *default-pool*) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim (-> self draw art-group data 3)) + (the-as art-joint-anim (-> self draw art-group data 3)) + (the-as (function process-drawable symbol) false-func) + ) + (clear-pending-settings-from-process *setting-control* self 'music-volume) + (clear-pending-settings-from-process *setting-control* self 'sfx-volume) + (clear-pending-settings-from-process + *setting-control* + self + 'ambient-volume + ) + (let ((a1-24 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-24 from) self) + (set! (-> a1-24 num-params) 1) + (set! (-> a1-24 message) 'blend-shape) + (set! (-> a1-24 param 0) (the-as uint #f)) + (send-event-function *target* a1-24) + ) + (cond + ((!= *kernel-boot-message* 'play) + (set-blackout-frames 0) + (ja-channel-set! 0) + (ja-post) + (dummy-48 (-> self collide-info)) + (let ((a1-25 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-25 from) self) + (set! (-> a1-25 num-params) 1) + (set! (-> a1-25 message) 'trans) + (set! (-> a1-25 param 0) (the-as uint 'reset)) + (send-event-function *target* a1-25) + ) + (let + ((gp-4 + (ppointer->handle + (birth-pickup-at-point + (target-pos 0) + 6 + (the float (-> self entity extra perm task)) + #f + self + #f + ) + ) + ) + ) + (let ((a1-27 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-27 from) self) + (set! (-> a1-27 num-params) 0) + (set! (-> a1-27 message) 'pickup) + (send-event-function (handle->process (the-as handle gp-4)) a1-27) + ) + (while (handle->process (the-as handle gp-4)) + (suspend) + ) + ) + ) + (else + (let ((a1-29 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-29 from) self) + (set! (-> a1-29 num-params) 2) + (set! (-> a1-29 message) 'trans) + (set! (-> a1-29 param 0) (the-as uint 'restore)) + (set! (-> a1-29 param 1) (the-as uint (-> self old-target-pos))) + (send-event-function *target* a1-29) + ) + (set-blackout-frames 0) + (set-blackout-frames 30) + ) + ) + ) + ) + (none) + ) + :post + (behavior () + (dummy-51 self) + (level-hint-surpress!) + (kill-current-level-hint '() '() 'exit) + (ja-post) + (none) + ) + ) + +;; definition for symbol *muse-nav-enemy-info*, type nav-enemy-info +(define + *muse-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 3 + :walk-anim 4 + :turn-anim -1 + :notice-anim 3 + :run-anim 4 + :jump-anim 7 + :jump-land-anim 8 + :victory-anim 3 + :taunt-anim 3 + :die-anim 3 + :neck-joint 6 + :player-look-at-joint 5 + :run-travel-speed (meters 10.0) + :run-rotate-speed (degrees 999.99994) + :run-acceleration (meters 5.0) + :run-turn-time #x2d + :walk-travel-speed (meters 10.0) + :walk-rotate-speed (degrees 999.99994) + :walk-acceleration (meters 1.0) + :walk-turn-time #x2d + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 10000000000.0 + :jump-anim-start-frame 6.5 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +;; definition for method 11 of type muse +;; Used lq/sq +(defmethod copy-defaults! muse ((obj muse) (arg0 res-lump)) + (stack-size-set! (-> obj main-thread) 512) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 2457.6 0.0 2457.6) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj collide-info) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *muse-sg* '()) + (logclear! (-> obj mask) (process-mask actor-pause)) + (TODO-RENAME-45 obj *muse-nav-enemy-info*) + (set! + (-> obj max-path-index) + (the float (+ (-> obj path curve num-cverts) -1)) + ) + (set! (-> obj current-path-index) 7.0) + (set! (-> obj prev-path-index) 7.0) + (set! (-> obj dest-path-index) 7.0) + (set! (-> obj player-path-index) 0.0) + (eval-path-curve-div! + (-> obj path) + (-> obj dest-point) + (-> obj current-path-index) + 'interp + ) + (set! (-> obj collide-info trans quad) (-> obj dest-point quad)) + (set! (-> obj nav nearest-y-threshold) 20480.0) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> obj neck up) (the-as uint 0)) + (set! (-> obj neck nose) (the-as uint 1)) + (set! (-> obj neck ear) (the-as uint 2)) + (set! (-> obj neck max-dist) 102400.0) + (set! (-> obj neck ignore-angle) 16384.0) + (set! + (-> obj anim) + (new 'static 'spool-anim + :name "muse-victory" + :index 9 + :parts 2 + :command-list + '( + ((the binteger 1) + blackout + 0 + ) + ((the binteger 219) blackout (the binteger 60)) + ) + ) + ) + (set! + (-> obj victory-anim) + (the-as spool-anim (fuel-cell-pick-anim (the-as process-taskable obj))) + ) + (go muse-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/misty/sidekick-human_REF.gc b/test/decompiler/reference/levels/misty/sidekick-human_REF.gc index 263f1121ba..9f99d04f99 100644 --- a/test/decompiler/reference/levels/misty/sidekick-human_REF.gc +++ b/test/decompiler/reference/levels/misty/sidekick-human_REF.gc @@ -1717,7 +1717,7 @@ (run-now-in-process s5-0 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *bonelurker-sg* #f @@ -2343,7 +2343,11 @@ (run-now-in-process s5-0 manipy-init - (-> self root trans) + (-> + self + root-override + trans + ) gp-2 *evilbro-sg* #f @@ -2445,7 +2449,11 @@ (run-now-in-process s5-1 manipy-init - (-> self root trans) + (-> + self + root-override + trans + ) gp-4 *evilsis-sg* #f @@ -2734,7 +2742,7 @@ (run-now-in-process s5-0 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *bonelurker-sg* #f @@ -2778,7 +2786,7 @@ (run-now-in-process s5-1 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *darkecocan-sg* #f diff --git a/test/decompiler/reference/levels/snow/snow-ram-h_REF.gc b/test/decompiler/reference/levels/snow/snow-ram-h_REF.gc new file mode 100644 index 0000000000..36fe707925 --- /dev/null +++ b/test/decompiler/reference/levels/snow/snow-ram-h_REF.gc @@ -0,0 +1,47 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type ram +(deftype ram (process-drawable) + ((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) + (orient-ry float :offset-assert 192) + (fuel-cell-dest-pos vector :inline :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 23 + :size-assert #xe0 + :flag-assert #x17007000e0 + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + (dummy-22 () none 22) + ) + ) + +;; definition for method 3 of type ram +(defmethod inspect ram ((obj ram)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tram-id: ~D~%" (-> obj ram-id)) + (format #t "~T~Tgive-fuel-cell?: ~A~%" (-> obj give-fuel-cell?)) + (format #t "~T~Tgive-fuel-cell-anim: ~A~%" (-> obj give-fuel-cell-anim)) + (format #t "~T~Tpart2: ~A~%" (-> obj part2)) + (format #t "~T~Torient-ry: ~f~%" (-> obj orient-ry)) + (format + #t + "~T~Tfuel-cell-dest-pos: #~%" + (-> obj fuel-cell-dest-pos) + ) + obj + ) + +;; failed to figure out what this is: +0 + + + + diff --git a/test/decompiler/reference/levels/snow/target-snowball_REF.gc b/test/decompiler/reference/levels/snow/target-snowball_REF.gc new file mode 100644 index 0000000000..89e2820b7e --- /dev/null +++ b/test/decompiler/reference/levels/snow/target-snowball_REF.gc @@ -0,0 +1,169 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type snowball-info +(deftype snowball-info (basic) + ((entity basic :offset-assert 4) + ) + :method-count-assert 9 + :size-assert #x8 + :flag-assert #x900000008 + ) + +;; definition for method 3 of type snowball-info +(defmethod inspect snowball-info ((obj snowball-info)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tentity: ~A~%" (-> obj entity)) + obj + ) + +;; definition of type snowball-bank +(deftype snowball-bank (basic) + () + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +;; definition for method 3 of type snowball-bank +(defmethod inspect snowball-bank ((obj snowball-bank)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + obj + ) + +;; definition for symbol *SNOWBALL-bank*, type snowball-bank +(define *SNOWBALL-bank* (the-as snowball-bank L24)) + +;; definition for function target-snowball-post +;; INFO: Return type mismatch int vs none. +(defbehavior target-snowball-post target () + (let ((gp-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s5-0 gp-0) + (set! (-> self control unknown-int40) s5-0) + (flag-setup) + (build-conversions (-> self control transv)) + (reverse-conversions (-> self control transv)) + (post-flag-setup) + ) + (set-time-ratios *display* (the float gp-0)) + ) + (rot->dir-targ! (-> self control)) + (ja-post) + (joint-points) + (do-target-shadow) + (target-powerup-process) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate target-snowball-start (target) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (the-as object (cond + ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + 'snowball + ) + ((let ((v1-3 arg2)) + (= v1-3 'end-mode) + ) + enter-state + (-> *TARGET-bank* duck-jump-height-min) + (-> *TARGET-bank* duck-jump-height-max) + (go target-jump) + ) + (else + (target-generic-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + :exit + (behavior () + (when (!= (-> self next-state name) 'target-snowball) + (let ((v1-1 (-> self manipy))) + (when v1-1 + (deactivate (-> v1-1 0)) + (set! (-> self manipy) (the-as (pointer manipy) #f)) + ) + ) + (set! + (-> self control root-prim prim-core action) + (logand -4097 (-> self control root-prim prim-core action)) + ) + (set! (-> self control unknown-surface00) *walk-mods*) + (set! + (-> self control dynam gravity-max) + (-> self control unknown-dynamics00 gravity-max) + ) + (set! + (-> self control dynam gravity-length) + (-> self control unknown-dynamics00 gravity-length) + ) + (target-collide-set! 'normal 0.0) + (set! (-> self control reaction) target-collision-reaction) + (target-exit) + ) + (none) + ) + :code + (behavior ((arg0 handle)) + (target-exit) + (set! *display-profile* #f) + (set! *display-entity-errors* #f) + (if (zero? (-> self snowball)) + (set! (-> self snowball) (new 'process 'snowball-info)) + ) + (set! (-> self snowball entity) #f) + (let ((a0-2 (handle->process arg0))) + (if a0-2 + (set! (-> self snowball entity) (-> a0-2 entity)) + ) + ) + (reset-target-state #t) + (set! (-> self control transv quad) (the-as uint128 0)) + (set! (-> self control unknown-float01) 0.0) + (let* ((a0-6 (-> self control)) + (t9-3 (method-of-object a0-6 TODO-RENAME-28)) + ) + (new 'static 'vector :y 4096.0 :w 1.0) + (t9-3 a0-6) + ) + (logior! (-> self control root-prim prim-core action) 4096) + (ja-channel-set! 1) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (remove-exit) + (go target-snowball) + (none) + ) + :post + (the-as (function none :behavior target) target-post) + ) + +;; failed to figure out what this is: +(defstate target-snowball (target) + :event + (-> target-snowball-start event) + :exit + (-> target-snowball-start exit) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (behavior () + (target-snowball-post) + (none) + ) + ) diff --git a/test/decompiler/reference/levels/snow/yeti_REF.gc b/test/decompiler/reference/levels/snow/yeti_REF.gc new file mode 100644 index 0000000000..0b9cc0119e --- /dev/null +++ b/test/decompiler/reference/levels/snow/yeti_REF.gc @@ -0,0 +1,1500 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type yeti-slave +(deftype yeti-slave (nav-enemy) + ((ground-y float :offset-assert 400) + (part2 sparticle-launch-control :offset-assert 404) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x198 + :flag-assert #x4c01300198 + ) + +;; definition for method 3 of type yeti-slave +(defmethod inspect yeti-slave ((obj yeti-slave)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~T~Tground-y: ~f~%" (-> obj ground-y)) + (format #t "~T~Tpart2: ~A~%" (-> obj part2)) + obj + ) + +;; definition of type yeti +(deftype yeti (process-drawable) + ((child-process (pointer yeti-slave) :offset 20) + (desired-num-children int32 :offset-assert 176) + (spawn-delay int32 :offset-assert 180) + (first-time-spawn-dist float :offset-assert 184) + (unknown basic :offset-assert 188) + (unknown1 basic :offset-assert 192) + (unknown2 basic :offset-assert 196) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xc8 + :flag-assert #x16006000c8 + (:methods + (TODO-RENAME-20 (_type_ vector vector) symbol 20) + (aggro? (_type_ vector) symbol 21) + ) + ) + +;; definition for method 3 of type yeti +(defmethod inspect yeti ((obj yeti)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tdesired-num-children: ~D~%" (-> obj desired-num-children)) + (format #t "~T~Tspawn-delay: ~D~%" (-> obj spawn-delay)) + (format #t "~T~Tfirst-time-spawn-dist: ~f~%" (-> obj first-time-spawn-dist)) + (format #t "~T~Tstate-time: ~D~%" (-> obj state-time)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "yeti" + :bounds + (new 'static 'vector :y 3072.0 :w 15974.4) + :longest-edge (meters 1.3) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *yeti-sg* v1-2) + ) + +;; definition for symbol *yeti-nav-enemy-info*, type nav-enemy-info +(define + *yeti-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 2 + :walk-anim 3 + :turn-anim -1 + :notice-anim 4 + :run-anim 5 + :jump-anim 10 + :jump-land-anim 11 + :victory-anim 8 + :taunt-anim 8 + :die-anim 9 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 2880.0) + :run-acceleration (meters 1.0) + :run-turn-time #x1e + :walk-travel-speed (meters 3.0) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time #x96 + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 2.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #t + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 538) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-yeti-slave-appear1" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1928 :fade-after (meters 70.0) :falloff-to (meters 70.0)) + (sp-item 1929 :fade-after (meters 70.0) :falloff-to (meters 70.0)) + ) + :bounds (new 'static 'sphere :w 65536.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1929) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.24) (meters 0.24) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.05) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -2.4) (degrees 3.4666667) 1.0) + (sp-flt spt-accel-y -5.4613333) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 40.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* 1928) + (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 32.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 16.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.05) (meters 0.016666668) 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.07111111) + (sp-flt spt-accel-y -5.4613333) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 40.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 539) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-yeti-slave-appear2" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 1930 :fade-after (meters 70.0) :falloff-to (meters 70.0)) + ) + :bounds (new 'static 'sphere :w 65536.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1930) + (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-rnd-flt spt-num 1.0 2.0 1.0) + (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-z -1024.0 2048.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-flt spt-r 128.0) + (sp-flt spt-g 128.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.0) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -2.4) (degrees 3.4666667) 1.0) + (sp-flt spt-accel-y -5.4613333) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; definition for function yeti-slave-default-event-handler +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defbehavior + yeti-slave-default-event-handler yeti-slave + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'attack) + (nav-enemy-set-hit-from-direction arg0) + (go-virtual nav-enemy-die) + ) + ((= v1-0 'touch) + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg3 param 0)) + 'generic + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate yeti-slave-appear-jump-up (yeti-slave) + :event + yeti-slave-default-event-handler + :enter + (behavior () + (nav-enemy-neck-control-inactive) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (if (-> self nav-info move-to-ground) + (dummy-60 (-> self collide-info) 40960.0 40960.0 #t (the-as uint 1)) + ) + (set! (-> self nav-enemy-flags) (logand -7 (-> self nav-enemy-flags))) + (set! (-> self state-timeout) 300) + (set! (-> self ground-y) (-> self collide-info trans y)) + (spawn (-> self part) (-> self collide-info trans)) + (set! + (-> self collide-info trans y) + (+ -12288.0 (-> self collide-info trans y)) + ) + (set! (-> self collide-info transv quad) (-> *null-vector* quad)) + (set! + (-> self collide-info transv y) + (rand-vu-float-range 102400.0 114688.0) + ) + (none) + ) + :trans + (behavior () + (when + (and + (< (-> self collide-info trans y) (-> self ground-y)) + (< (-> self collide-info transv y) 0.0) + ) + (set! (-> self collide-info trans y) (-> self ground-y)) + (set! (-> self collide-info transv quad) (-> *null-vector* quad)) + (go yeti-slave-appear-land) + ) + (let* ((s5-0 (-> self node-list)) + (a0-2 (-> s5-0 length)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! gp-0 (-> s5-0 data (nav-enemy-rnd-int-count a0-2))) + (spawn (-> self part2) gp-0) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> gp-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 10.0 0)) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 10)) + 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! + ) + ) + ) + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior yeti-slave) nav-enemy-falling-post) + ) + +;; failed to figure out what this is: +(defstate yeti-slave-appear-land (yeti-slave) + :event + yeti-slave-default-event-handler + :code + (behavior () + (ja-channel-push! 1 15) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 11)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 0.5) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 0.5) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (if (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + (go-virtual nav-enemy-idle) + ) + (none) + ) + :post + (the-as (function none :behavior yeti-slave) ja-post) + ) + +;; failed to figure out what this is: +(defstate yeti-slave-show-anims (yeti-slave) + :trans + (behavior () + 0 + (none) + ) + :code + (behavior () + 0 + (none) + ) + :post + (the-as (function none :behavior yeti-slave) transform-post) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (yeti-slave) + :virtual #t + :code + (behavior () + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + (ja-channel-push! 1 45) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> gp-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 12.0 0)) + (joint-control-channel-group! + gp-0 + (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! + ) + ) + ) + ) + (else + (ja-channel-push! 1 60) + ) + ) + (while #t + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-10 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + 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 3)) + 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! + ) + ) + ) + (when (nav-enemy-rnd-percent? 0.2) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 param 0) 1.0) + (joint-control-channel-group! + a0-14 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 180) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (let ((gp-1 (nav-enemy-rnd-int-range 2 6))) + (dotimes (s5-0 gp-1) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-18 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-18 param 1) 1.0) + (set! (-> a0-18 frame-num) 0.0) + (joint-control-channel-group! + a0-18 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (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! + ) + ) + ) + ) + ) + (logior! (-> self nav-enemy-flags) 8) + (let ((a0-21 (-> self skel root-channel 0))) + (set! (-> a0-21 param 0) 1.0) + (joint-control-channel-group! + a0-21 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 180) + (let ((a0-23 (-> self skel root-channel 0))) + (set! + (-> a0-23 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-23 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + 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 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-24 (-> self 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-eval! + a0-24 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (yeti-slave) + :virtual #t + :code + (behavior () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 11) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 51) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) f30-0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (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-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (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 (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-45 (-> self skel root-channel 0))) + (set! (-> v1-45 num-func) num-func-identity) + (set! (-> v1-45 frame-num) 0.0) + ) + ) + ) + (while #t + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) f30-0) + (joint-control-channel-group-eval! + a0-17 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (yeti-slave) + :virtual #t + :code + (behavior () + (set! (-> self turn-time) 60) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (when + (or + (logtest? (-> self nav-enemy-flags) 256) + (and (nav-enemy-player-vulnerable?) (nav-enemy-rnd-percent? 0.5)) + ) + (ja-channel-push! 1 30) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! (-> gp-0 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-0 param 1) f30-0) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-1 param 1) f30-0) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (while #t + (when (not (nav-enemy-facing-player? 2730.6667)) + (logior! (-> self nav-enemy-flags) 16) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) 1.0) + (joint-control-channel-group! + a0-9 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (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 12)) + ) + ) + (let ((v1-28 (-> self skel root-channel 0))) + (set! (-> v1-28 num-func) num-func-identity) + (set! (-> v1-28 frame-num) 0.0) + ) + (until (nav-enemy-facing-player? 1820.4445) + (ja-blend-eval) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) 0.75) + (joint-control-channel-group-eval! + a0-15 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + ) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 2) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((a0-23 (-> self skel root-channel 0))) + (set! + (-> a0-23 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-23 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-23 param 1) f30-0) + (set! (-> a0-23 frame-num) 0.0) + (joint-control-channel-group! + a0-23 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-24 (-> self skel root-channel 0))) + (set! + (-> a0-24 param 0) + (the float (+ (-> a0-24 frame-group data 0 length) -1)) + ) + (set! (-> a0-24 param 1) f30-0) + (joint-control-channel-group-eval! + a0-24 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (when (nav-enemy-rnd-percent? 0.3) + (ja-channel-push! 1 30) + (let ((gp-2 (-> self skel root-channel 0))) + (set! + (-> gp-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! (-> gp-2 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-2 param 1) f30-0) + (set! (-> gp-2 frame-num) 0.0) + (joint-control-channel-group! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 68.0 0)) + (set! (-> gp-3 param 1) f30-0) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-give-up (yeti-slave) + :virtual #t + :code + (behavior () + (set! (-> self rotate-speed) 218453.33) + (set! (-> self turn-time) 150) + (ja-channel-push! 1 45) + (let ((s4-0 (-> self collide-info)) + (s5-0 (target-pos 0)) + ) + (when + (< + (fabs + (deg-diff + (y-angle s4-0) + (vector-y-angle + (vector-! (new 'stack-no-clear 'vector) s5-0 (-> s4-0 trans)) + ) + ) + ) + 12743.111 + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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! + ) + ) + ) + ) + ) + (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) + (nav-enemy-get-new-patrol-point) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> a0-12 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + 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 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-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! + ) + ) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-jump-land (yeti-slave) + :virtual #t + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 22) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + ) + (set! (-> gp-0 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-0 param 1) 0.5) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 32.0 0)) + (set! (-> gp-1 param 1) 0.5) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; definition for method 47 of type yeti-slave +;; INFO: Return type mismatch int vs none. +(defmethod initialize-collision yeti-slave ((obj yeti-slave)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) 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! (-> s4-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s4-0 local-sphere) 0.0 8192.0 0.0 12288.0) + (dummy-46 s5-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 action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 4096.0 0.0 3072.0) + ) + (dummy-28 s4-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 action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 1) + (set-vector! (-> s3-1 local-sphere) 0.0 9830.4 0.0 3072.0) + ) + (dummy-28 s4-0) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (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) 2) + (set! (-> s3-2 transform-index) 6) + (set-vector! (-> s3-2 local-sphere) 0.0 0.0 0.0 2048.0) + ) + (dummy-28 s4-0) + ) + (set! (-> s5-0 nav-radius) 6144.0) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +;; definition for method 48 of type yeti-slave +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-48 yeti-slave ((obj yeti-slave)) + (dummy-14 obj *yeti-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (TODO-RENAME-45 obj *yeti-nav-enemy-info*) + (set! (-> obj neck up) (the-as uint 0)) + (set! (-> obj neck nose) (the-as uint 1)) + (set! (-> obj neck ear) (the-as uint 2)) + 0 + (none) + ) + +;; definition for method 10 of type yeti-slave +(defmethod deactivate yeti-slave ((obj yeti-slave)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 7 of type yeti-slave +;; INFO: Return type mismatch nav-enemy vs yeti-slave. +(defmethod relocate yeti-slave ((obj yeti-slave) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (the-as + yeti-slave + ((the-as + (function nav-enemy int nav-enemy) + (find-parent-method yeti-slave 7) + ) + obj + arg0 + ) + ) + ) + +;; definition for function yeti-slave-init-by-other +;; Used lq/sq +(defbehavior + yeti-slave-init-by-other yeti-slave + ((arg0 entity) (arg1 yeti) (arg2 vector) (arg3 vector) (arg4 symbol)) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 538) self) + ) + (set! + (-> self part2) + (create-launch-control (-> *part-group-id-table* 539) self) + ) + (initialize-collision self) + (set! (-> self collide-info trans quad) (-> arg2 quad)) + (vector-identity! (-> self collide-info scale)) + (forward-up->quaternion (-> self collide-info quat) arg3 *up-vector*) + (set! (-> self entity) (-> arg1 entity)) + (TODO-RENAME-48 self) + (if arg4 + (go-virtual nav-enemy-idle) + (go yeti-slave-appear-jump-up) + ) + (none) + ) + +;; definition for method 21 of type yeti +(defmethod aggro? yeti ((obj yeti) (arg0 vector)) + (let ((s5-0 (the-as (pointer process-tree) (-> obj child-process)))) + (while s5-0 + (if + (< + (vector-vector-xz-distance-squared + arg0 + (-> (the-as (pointer yeti-slave) s5-0) 0 collide-info trans) + ) + 603979800.0 + ) + (return #f) + ) + (set! s5-0 (-> s5-0 0 brother)) + ) + ) + (when *target* + (if (< (vector-vector-xz-distance-squared arg0 (target-pos 0)) 603979800.0) + (return #f) + ) + ) + #t + ) + +;; definition for method 20 of type yeti +(defmethod TODO-RENAME-20 yeti ((obj yeti) (arg0 vector) (arg1 vector)) + (let ((s3-0 (-> obj path curve num-cverts))) + (if (<= s3-0 0) + (return #f) + ) + (let ((s1-0 (rand-vu-int-count s3-0)) + (s2-0 s3-0) + ) + (while (> s2-0 0) + (eval-path-curve-div! (-> obj path) arg0 (the float s1-0) 'interp) + (when (aggro? obj arg0) + (cond + (*target* + (vector-! arg1 (target-pos 0) arg0) + (set! (-> arg1 y) 0.0) + ) + (else + (set-vector! + arg1 + (rand-vu-float-range -4096.0 4096.0) + 0.0 + (rand-vu-float-range -4096.0 4096.0) + 1.0 + ) + (set! (-> arg1 x) (+ 409.6 (-> arg1 x))) + ) + ) + (vector-normalize! arg1 1.0) + (return #t) + ) + (set! s1-0 (mod (+ s1-0 1) s3-0)) + (+! s2-0 -1) + ) + ) + ) + #f + ) + +;; failed to figure out what this is: +(defstate yeti-first-time-start (yeti) + :code + (behavior () + (while #t + (when *target* + (when + (>= + (-> self first-time-spawn-dist) + (vector-vector-xz-distance (target-pos 0) (-> self root trans)) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (go yeti-idle) + ) + ) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate yeti-resuming-start (yeti) + :code + (behavior () + (let ((gp-0 0)) + (let ((v1-0 (the-as (pointer process-tree) (-> self child-process)))) + (while v1-0 + (+! gp-0 1) + (set! v1-0 (-> v1-0 0 brother)) + (nop!) + (nop!) + ) + ) + (while (< gp-0 (-> self desired-num-children)) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (if (not (TODO-RENAME-20 self s5-0 s4-0)) + (go yeti-idle) + ) + (let ((s3-0 (get-process *default-dead-pool* yeti-slave #x4000))) + (when s3-0 + (let ((t9-3 (method-of-type yeti-slave activate))) + (t9-3 + (the-as yeti-slave s3-0) + self + 'yeti-slave + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s3-0 + yeti-slave-init-by-other + (-> self entity) + self + s5-0 + s4-0 + #t + ) + (-> s3-0 ppointer) + ) + ) + ) + (+! gp-0 1) + ) + ) + (go yeti-idle) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate yeti-idle (yeti) + :code + (behavior () + (while #t + (cond + ((zero? (-> self spawn-delay)) + (let ((v1-1 0)) + (let ((a0-0 (the-as (pointer process-tree) (-> self child-process)))) + (while a0-0 + (+! v1-1 1) + (set! a0-0 (-> a0-0 0 brother)) + (nop!) + (nop!) + ) + ) + (when (< v1-1 (-> self desired-num-children)) + (set! (-> self spawn-delay) (rand-vu-int-range 150 1200)) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + ) + ) + ) + (else + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (-> self spawn-delay) + ) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (when (TODO-RENAME-20 self gp-0 s5-0) + (let ((s4-0 (get-process *default-dead-pool* yeti-slave #x4000))) + (when s4-0 + (let ((t9-3 (method-of-type yeti-slave activate))) + (t9-3 + (the-as yeti-slave s4-0) + self + 'yeti-slave + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s4-0 + yeti-slave-init-by-other + (-> self entity) + self + gp-0 + s5-0 + #f + ) + (-> s4-0 ppointer) + ) + ) + (set! (-> self spawn-delay) 0) + 0 + ) + ) + ) + ) + ) + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type yeti +(defmethod copy-defaults! yeti ((obj yeti) (arg0 res-lump)) + (set! (-> obj spawn-delay) 0) + (set! (-> obj root) (new 'process 'trsqv)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (process-drawable-from-entity! obj arg0) + (set! + (-> obj desired-num-children) + (res-lump-value + arg0 + 'num-lurkers + int + :default + (the-as uint128 (-> obj path curve num-cverts)) + ) + ) + (set! + (-> obj first-time-spawn-dist) + (res-lump-float arg0 'notice-dist :default 204800.0) + ) + (if + (and + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status complete)) + ) + (go yeti-resuming-start) + (go yeti-first-time-start) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/qbert-plat_REF.gc b/test/decompiler/reference/levels/sunken/qbert-plat_REF.gc new file mode 100644 index 0000000000..d6df1df3dd --- /dev/null +++ b/test/decompiler/reference/levels/sunken/qbert-plat_REF.gc @@ -0,0 +1,1034 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type qbert-plat-on +(deftype qbert-plat-on (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + +;; definition for method 3 of type qbert-plat-on +(defmethod inspect qbert-plat-on ((obj qbert-plat-on)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "qbert-plat-on" + :bounds + (new 'static 'vector :y -8192.0 :w 18432.0) + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 2) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *qbert-plat-on-sg* v1-1) + ) + +;; definition of type qbert-plat +(deftype qbert-plat (rigid-body-platform) + ((anchor-point vector :inline :offset-assert 736) + (plat-id int32 :offset-assert 752) + (on? symbol :offset-assert 756) + (player-is-riding? symbol :offset-assert 760) + (master entity-actor :offset-assert 764) + ) + :heap-base #x290 + :method-count-assert 35 + :size-assert #x300 + :flag-assert #x2302900300 + ) + +;; definition for method 3 of type qbert-plat +(defmethod inspect qbert-plat ((obj qbert-plat)) + (let ((t9-0 (method-of-type rigid-body-platform inspect))) + (t9-0 obj) + ) + (format #t "~T~Tanchor-point: #~%" (-> obj anchor-point)) + (format #t "~T~Tplat-id: ~D~%" (-> obj plat-id)) + (format #t "~T~Ton?: ~A~%" (-> obj on?)) + (format #t "~T~Tplayer-is-riding?: ~A~%" (-> obj player-is-riding?)) + (format #t "~T~Tmaster: ~A~%" (-> obj master)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-3 + (new 'static 'skeleton-group + :art-group-name "qbert-plat" + :bounds + (new 'static 'vector :y -8192.0 :w 18432.0) + :version #x6 + ) + ) + ) + (set! (-> v1-3 jgeo) 0) + (set! (-> v1-3 janim) 2) + (set! (-> v1-3 mgeo 0) (the-as uint 1)) + (set! (-> v1-3 lod-dist 0) 4095996000.0) + (set! *qbert-plat-sg* v1-3) + ) + +;; definition for symbol *qbert-plat-constants*, type rigid-body-platform-constants +(define + *qbert-plat-constants* + (new 'static 'rigid-body-platform-constants + :drag-factor 2.0 + :buoyancy-factor 1.5 + :max-buoyancy-depth (meters 1.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 4 + :mass 4.0 + :inertial-tensor-x (meters 4.0) + :inertial-tensor-y (meters 4.0) + :inertial-tensor-z (meters 4.0) + :idle-distance (meters 70.0) + :platform #t + :sound-name #f + ) + ) + +;; definition of type qbert-plat-master +(deftype qbert-plat-master (process-drawable) + ((last-plat-triggered int32 :offset-assert 176) + (plat-states uint32 :offset-assert 180) + (plat-states-needed-to-open-door uint32 :offset-assert 184) + (player-in-bounds? symbol :offset-assert 188) + (player-in-water? symbol :offset-assert 192) + (play-door-cam? symbol :offset-assert 196) + (puzzle-beaten? symbol :offset-assert 200) + (door entity-actor :offset-assert 204) + (door-plat entity-actor :offset-assert 208) + (bounds-start vector :inline :offset-assert 224) + (bounds-end vector :inline :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 21 + :size-assert #x100 + :flag-assert #x1500900100 + (:methods + (plat-state-set? (_type_ uint) symbol 20) + ) + ) + +;; definition for method 3 of type qbert-plat-master +(defmethod inspect qbert-plat-master ((obj qbert-plat-master)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tlast-plat-triggered: ~D~%" (-> obj last-plat-triggered)) + (format #t "~T~Tplat-states: ~D~%" (-> obj plat-states)) + (format + #t + "~T~Tplat-states-needed-to-open-door: ~D~%" + (-> obj plat-states-needed-to-open-door) + ) + (format #t "~T~Tplayer-in-bounds?: ~A~%" (-> obj player-in-bounds?)) + (format #t "~T~Tplayer-in-water?: ~A~%" (-> obj player-in-water?)) + (format #t "~T~Tplay-door-cam?: ~A~%" (-> obj play-door-cam?)) + (format #t "~T~Tpuzzle-beaten?: ~A~%" (-> obj puzzle-beaten?)) + (format #t "~T~Tdoor: ~A~%" (-> obj door)) + (format #t "~T~Tdoor-plat: ~A~%" (-> obj door-plat)) + (format #t "~T~Tbounds-start: #~%" (-> obj bounds-start)) + (format #t "~T~Tbounds-end: #~%" (-> obj bounds-end)) + obj + ) + +;; failed to figure out what this is: +(defstate qbert-plat-on-mimic (qbert-plat) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'die) + (go qbert-plat-on-die) + ) + ) + ) + ) + :code + (behavior () + (set-vector! (-> self draw color-emissive) 0.0 0.0 1.0 0.0) + (while #t + (let ((gp-0 (-> self parent))) + (set! + (-> self root-overlay trans quad) + (-> (the-as (pointer rigid-body-platform) gp-0) 0 root-overlay trans quad) + ) + (quaternion-copy! + (-> self root-overlay quat) + (-> (the-as (pointer rigid-body-platform) gp-0) 0 root-overlay quat) + ) + (set! + (-> self root-overlay scale quad) + (-> (the-as (pointer rigid-body-platform) gp-0) 0 root-overlay scale quad) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior qbert-plat) ja-post) + ) + +;; failed to figure out what this is: +(defstate qbert-plat-on-die (qbert-plat) + :code + (behavior () + '() + (none) + ) + ) + +;; definition for function qbert-plat-on-init-by-other +;; Used lq/sq +(defbehavior + qbert-plat-on-init-by-other qbert-plat + ((arg0 entity) (arg1 qbert-plat)) + (set! (-> self entity) arg0) + (set! (-> self mask) (logior (process-mask platform) (-> self mask))) + (set! + (-> self root-overlay) + (the-as collide-shape-moving (new 'process 'trsqv)) + ) + (set! (-> self root-overlay trans quad) (-> arg1 root-overlay trans quad)) + (quaternion-copy! (-> self root-overlay quat) (-> arg1 root-overlay quat)) + (set! (-> self root-overlay scale quad) (-> arg1 root-overlay scale quad)) + (dummy-14 self *qbert-plat-on-sg* '()) + (logior! (-> self skel status) 1) + (ja-channel-set! 1) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (go qbert-plat-on-mimic) + (none) + ) + +;; definition for function qbert-plat-event-handler +(defbehavior + qbert-plat-event-handler qbert-plat + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (dummy-32 self) + ) + (else + (rigid-body-platform-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + +;; definition for method 33 of type qbert-plat +(defmethod dummy-33 qbert-plat ((obj qbert-plat)) + (with-pp + (let* ((a1-0 (-> obj master)) + (v1-0 (if a1-0 + (-> a1-0 extra process) + ) + ) + ) + (when v1-0 + (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) 'trigger) + (set! (-> a1-1 param 0) (the-as uint (-> obj plat-id))) + (send-event-function v1-0 a1-1) + ) + ) + ) + ) + ) + +;; definition for method 32 of type qbert-plat +(defmethod dummy-32 qbert-plat ((obj qbert-plat)) + (with-pp + (let* ((v1-0 (-> obj master)) + (a0-1 (if v1-0 + (-> v1-0 extra process) + ) + ) + ) + (when (the-as qbert-plat-master a0-1) + (let + ((v1-3 + (plat-state-set? + (the-as qbert-plat-master a0-1) + (the-as uint (-> obj plat-id)) + ) + ) + ) + (when (!= v1-3 (-> obj on?)) + (set! (-> obj on?) v1-3) + (cond + (v1-3 + (let ((s5-0 (get-process *default-dead-pool* qbert-plat-on #x4000))) + (when s5-0 + (let ((t9-2 (method-of-type qbert-plat-on activate))) + (t9-2 + (the-as qbert-plat-on s5-0) + obj + 'qbert-plat-on + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + qbert-plat-on-init-by-other + (-> obj entity) + obj + ) + (-> s5-0 ppointer) + ) + ) + (sound-play-by-name + (static-sound-name "plat-light-on") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (else + (let ((gp-2 (-> obj child))) + (while gp-2 + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 0) + (set! (-> a1-5 message) 'die) + (send-event-function (ppointer->process gp-2) a1-5) + ) + (set! gp-2 (-> gp-2 0 brother)) + ) + ) + (sound-play-by-name + (static-sound-name "plat-light-off") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate qbert-plat-wait-for-master (qbert-plat) + :code + (behavior () + (while #t + (let ((v1-0 (-> self master))) + (when (if v1-0 + (-> v1-0 extra process) + ) + (suspend) + (dummy-32 self) + (go-virtual rigid-body-platform-idle) + ) + ) + (suspend) + 0 + ) + (none) + ) + :post + (the-as (function none :behavior qbert-plat) ja-post) + ) + +;; failed to figure out what this is: +(defstate rigid-body-platform-idle (qbert-plat) + :virtual #t + :event + qbert-plat-event-handler + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior qbert-plat) ja-post) + ) + +;; failed to figure out what this is: +(defstate rigid-body-platform-float (qbert-plat) + :virtual #t + :event + qbert-plat-event-handler + :exit + (behavior () + (if (-> self on?) + (logior! (-> self draw status) 2) + ) + (none) + ) + :trans + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + ((-> (method-of-type rigid-body-platform rigid-body-platform-float) trans)) + (let* ((v1-5 (-> self root-overlay riders)) + (gp-1 (nonzero? (-> v1-5 num-riders))) + ) + (when gp-1 + (if (not (-> self player-is-riding?)) + (dummy-33 self) + ) + ) + (set! (-> self player-is-riding?) gp-1) + ) + (none) + ) + :post + (behavior () + ((the-as + (function none :behavior qbert-plat) + (-> (method-of-type rigid-body-platform rigid-body-platform-float) post) + ) + ) + (if (-> self on?) + (logior! (-> self draw status) 2) + ) + (none) + ) + ) + +;; definition for method 22 of type qbert-plat +(defmethod + TODO-RENAME-22 + qbert-plat + ((obj qbert-plat) (arg0 vector) (arg1 float)) + (+ + (-> obj anchor-point y) + (-> obj float-height-offset) + (* + 512.0 + (cos + (* 546.13336 (+ (* 60.0 arg1) (* 0.03 (-> arg0 x)) (* 0.03 (-> arg0 z)))) + ) + ) + ) + ) + +;; definition for method 23 of type qbert-plat +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-23 qbert-plat ((obj qbert-plat) (arg0 float)) + ((the-as + (function rigid-body-platform float none) + (find-parent-method qbert-plat 23) + ) + obj + arg0 + ) + (TODO-RENAME-27 obj (-> obj anchor-point)) + 0 + (none) + ) + +;; definition for method 30 of type qbert-plat +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-30 qbert-plat ((obj qbert-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) 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 -8192.0 0.0 18432.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-overlay) s5-0) + ) + 0 + (none) + ) + +;; definition for method 31 of type qbert-plat +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod TODO-RENAME-31 qbert-plat ((obj qbert-plat)) + (dummy-14 obj *qbert-plat-sg* '()) + (set! (-> obj anchor-point quad) (-> obj root-overlay trans quad)) + (logior! (-> obj skel status) 1) + (dummy-47 (-> obj root-overlay)) + (TODO-RENAME-29 obj *qbert-plat-constants*) + (set! (-> obj float-height-offset) 6144.0) + (let ((v1-11 (-> obj control-point-array data))) + (set! (-> v1-11 0 local-pos x) -14336.0) + (set! (-> v1-11 0 local-pos y) 0.0) + (set! (-> v1-11 0 local-pos z) -14336.0) + (set! (-> v1-11 0 local-pos w) 1.0) + ) + (let ((v1-13 (-> obj control-point-array data 1))) + (set! (-> v1-13 local-pos x) -14336.0) + (set! (-> v1-13 local-pos y) 0.0) + (set! (-> v1-13 local-pos z) 14336.0) + (set! (-> v1-13 local-pos w) 1.0) + ) + (let ((v1-15 (-> obj control-point-array data 2))) + (set! (-> v1-15 local-pos x) 14336.0) + (set! (-> v1-15 local-pos y) 0.0) + (set! (-> v1-15 local-pos z) 14336.0) + (set! (-> v1-15 local-pos w) 1.0) + ) + (let ((v1-17 (-> obj control-point-array data 3))) + (set! (-> v1-17 local-pos x) 14336.0) + (set! (-> v1-17 local-pos y) 0.0) + (set! (-> v1-17 local-pos z) -14336.0) + (set! (-> v1-17 local-pos w) 1.0) + ) + (set! (-> obj on?) #f) + (set! (-> obj player-is-riding?) #f) + (set! (-> obj master) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj plat-id) (actor-count-before (-> obj link))) + 0 + (none) + ) + +;; definition for method 11 of type qbert-plat +(defmethod copy-defaults! qbert-plat ((obj qbert-plat) (arg0 res-lump)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (TODO-RENAME-30 obj) + (process-drawable-from-entity! obj arg0) + (TODO-RENAME-31 obj) + (go qbert-plat-wait-for-master) + (none) + ) + +;; definition for method 20 of type qbert-plat-master +(defmethod + plat-state-set? + qbert-plat-master + ((obj qbert-plat-master) (arg0 uint)) + (logtest? (-> obj plat-states) (ash 1 arg0)) + ) + +;; failed to figure out what this is: +(defstate qbert-plat-master-idle (qbert-plat-master) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'trigger) + (start-hint-timer (the-as level-hint-control 842)) + (close-specific-task! + (game-task sunken-platforms) + (task-status need-hint) + ) + (when (not (-> self puzzle-beaten?)) + (let ((v1-2 (-> arg3 param 0))) + (when (!= v1-2 (-> self last-plat-triggered)) + (set! (-> self last-plat-triggered) (the-as int v1-2)) + (let + ((s5-1 + (= + (-> self plat-states-needed-to-open-door) + (-> self plat-states) + ) + ) + ) + (let ((v1-3 (ash 1 v1-2))) + (set! + (-> self plat-states) + (logxor (-> self plat-states) (the-as uint v1-3)) + ) + (if (zero? (logand v1-3 (-> self plat-states))) + (level-hint-spawn + (game-text-id sunken-qbert-hint) + "sksp0130" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'notify) + (send-event-function arg0 a1-4) + ) + (let + ((a0-13 + (= + (-> self plat-states-needed-to-open-door) + (-> self plat-states) + ) + ) + ) + (if (!= s5-1 a0-13) + (go qbert-plat-master-do-door a0-13) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (while #t + (when (not (-> self puzzle-beaten?)) + (when (task-complete? *game-info* (game-task sunken-platforms)) + (set! (-> self puzzle-beaten?) #t) + (set! (-> self plat-states) (-> self plat-states-needed-to-open-door)) + (set! (-> self play-door-cam?) #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) 'trigger) + (let ((t9-1 send-event-function) + (v1-8 (-> self door)) + ) + (t9-1 (if v1-8 + (-> v1-8 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) 'trigger) + (let ((t9-2 send-event-function) + (v1-12 (-> self door-plat)) + ) + (t9-2 (if v1-12 + (-> v1-12 extra process) + ) + a1-2 + ) + ) + ) + (send-to-all (-> self link) 'notify) + ) + ) + (when (and *target* (not (-> self puzzle-beaten?))) + (let ((gp-0 #f)) + (let ((s5-1 (logtest? (-> *target* water flags) 512))) + (when s5-1 + (when (not (-> self player-in-water?)) + (set! gp-0 #t) + (level-hint-spawn + (game-text-id sunken-qbert-hint) + "sksp0130" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (set! (-> self player-in-water?) s5-1) + ) + (when (logtest? (-> *target* control status) 1) + (let ((s5-2 #t)) + (let ((s3-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s3-0 (target-pos 0) (-> self bounds-start)) + (set! (-> s3-0 y) 0.0) + (vector-! s4-0 (-> self bounds-end) (-> self bounds-start)) + (if (< (vector-dot s3-0 s4-0) 0.0) + (set! s5-2 #f) + ) + ) + (when (and (not s5-2) (-> self player-in-bounds?)) + (set! gp-0 #t) + (level-hint-spawn + (game-text-id sunken-qbert-hint) + "sksp0130" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (set! (-> self player-in-bounds?) s5-2) + ) + ) + (when gp-0 + (set! (-> self plat-states) (the-as uint 0)) + (set! (-> self last-plat-triggered) -1) + (send-to-all (-> self link) 'notify) + (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) 'untrigger) + (let ((t9-8 send-event-function) + (v1-47 (-> self door)) + ) + (t9-8 (if v1-47 + (-> v1-47 extra process) + ) + a1-9 + ) + ) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) self) + (set! (-> a1-10 num-params) 0) + (set! (-> a1-10 message) 'untrigger) + (let ((t9-9 send-event-function) + (v1-51 (-> self door-plat)) + ) + (t9-9 (if v1-51 + (-> v1-51 extra process) + ) + a1-10 + ) + ) + ) + ) + ) + ) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate qbert-plat-master-do-door (qbert-plat-master) + :code + (behavior ((arg0 symbol)) + (when (not (-> self play-door-cam?)) + (cond + (arg0 + (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) 'trigger) + (let ((t9-0 send-event-function) + (v1-3 (-> self door)) + ) + (t9-0 (if v1-3 + (-> v1-3 extra process) + ) + a1-0 + ) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'trigger) + (let ((t9-1 send-event-function) + (v1-7 (-> self door-plat)) + ) + (t9-1 (if v1-7 + (-> v1-7 extra process) + ) + a1-1 + ) + ) + ) + ) + (else + (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) 'untrigger) + (let ((t9-2 send-event-function) + (v1-11 (-> self door)) + ) + (t9-2 (if v1-11 + (-> v1-11 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) 'untrigger) + (let ((t9-3 send-event-function) + (v1-15 (-> self door-plat)) + ) + (t9-3 (if v1-15 + (-> v1-15 extra process) + ) + a1-3 + ) + ) + ) + ) + ) + (go qbert-plat-master-idle) + ) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (cond + (arg0 + (ambient-hint-spawn "gamcam08" (the-as vector #f) *entity-pool* 'camera) + (let ((s5-0 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-0 + (let ((t9-7 (method-of-type pov-camera activate))) + (t9-7 + (the-as pov-camera s5-0) + self + 'pov-camera + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> s5-0 ppointer) + ) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 420 + ) + (suspend) + ) + ) + (else + (ambient-hint-spawn "gamcam07" (the-as vector #f) *entity-pool* 'camera) + (let ((s5-1 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-1 + (let ((t9-11 (method-of-type pov-camera activate))) + (t9-11 + (the-as pov-camera s5-1) + self + 'pov-camera + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-close" + 0 + #f + '() + ) + (-> s5-1 ppointer) + ) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 300 + ) + (suspend) + ) + ) + ) + (cond + (arg0 + (let ((a1-12 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-12 from) self) + (set! (-> a1-12 num-params) 0) + (set! (-> a1-12 message) 'trigger) + (let ((t9-13 send-event-function) + (v1-41 (-> self door)) + ) + (t9-13 (if v1-41 + (-> v1-41 extra process) + ) + a1-12 + ) + ) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 0) + (set! (-> a1-13 message) 'trigger) + (let ((t9-14 send-event-function) + (v1-45 (-> self door-plat)) + ) + (t9-14 (if v1-45 + (-> v1-45 extra process) + ) + a1-13 + ) + ) + ) + ) + (else + (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) 'untrigger) + (let ((t9-15 send-event-function) + (v1-49 (-> self door)) + ) + (t9-15 (if v1-49 + (-> v1-49 extra process) + ) + a1-14 + ) + ) + ) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) self) + (set! (-> a1-15 num-params) 0) + (set! (-> a1-15 message) 'untrigger) + (let ((t9-16 send-event-function) + (v1-53 (-> self door-plat)) + ) + (t9-16 (if v1-53 + (-> v1-53 extra process) + ) + a1-15 + ) + ) + ) + (set! (-> self play-door-cam?) #f) + ) + ) + (go qbert-plat-master-idle) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate qbert-plat-master-wait-for-door (qbert-plat-master) + :code + (behavior () + (while #t + (let* ((v1-0 (-> self door)) + (gp-0 (if v1-0 + (-> v1-0 extra process) + ) + ) + (v1-2 (-> self door-plat)) + (s5-0 (if v1-2 + (-> v1-2 extra process) + ) + ) + ) + (when (and gp-0 s5-0) + (logclear! (-> s5-0 mask) (process-mask platform)) + (when (-> self puzzle-beaten?) + (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) 'trigger) + (send-event-function gp-0 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) 'trigger) + (send-event-function s5-0 a1-1) + ) + ) + (go qbert-plat-master-idle) + ) + ) + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type qbert-plat-master +(defmethod + copy-defaults! + qbert-plat-master + ((obj qbert-plat-master) (arg0 res-lump)) + (set! (-> obj last-plat-triggered) -1) + (set! (-> obj player-in-water?) #f) + (set! (-> obj player-in-bounds?) #f) + (set! (-> obj play-door-cam?) #t) + (set! (-> obj puzzle-beaten?) #f) + (set! (-> obj plat-states) (the-as uint 0)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! + (-> obj plat-states-needed-to-open-door) + (the-as uint (get-matching-actor-type-mask (-> obj link) qbert-plat)) + ) + (set! (-> obj door) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj door-plat) (entity-actor-lookup arg0 'alt-actor 1)) + (set-vector! (-> obj bounds-start) -39034.88 0.0 27729.92 1.0) + (vector+! (-> obj bounds-start) (-> obj bounds-start) (-> obj root trans)) + (set-vector! (-> obj bounds-end) 128573.44 0.0 -38420.48 1.0) + (vector+! (-> obj bounds-end) (-> obj bounds-end) (-> obj root trans)) + (let ((v1-11 (task-complete? *game-info* (game-task sunken-platforms)))) + (set! (-> obj puzzle-beaten?) v1-11) + (when v1-11 + (set! (-> obj plat-states) (-> obj plat-states-needed-to-open-door)) + (set! (-> obj play-door-cam?) #f) + ) + ) + (go qbert-plat-master-wait-for-door) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/square-platform_REF.gc b/test/decompiler/reference/levels/sunken/square-platform_REF.gc new file mode 100644 index 0000000000..14cbd27434 --- /dev/null +++ b/test/decompiler/reference/levels/sunken/square-platform_REF.gc @@ -0,0 +1,991 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type square-platform +(deftype square-platform (baseplat) + ((plat-id int32 :offset-assert 228) + (pos-u float :offset-assert 232) + (water-entity entity-actor :offset-assert 236) + (splash-counter int32 :offset-assert 240) + (start-splash-time uint64 :offset-assert 248) + (part2 sparticle-launch-control :offset-assert 256) + (part3 sparticle-launch-control :offset-assert 260) + (part4 sparticle-launch-control :offset-assert 264) + (up-pos vector :inline :offset-assert 272) + (down-pos vector :inline :offset-assert 288) + ) + :heap-base #xc0 + :method-count-assert 28 + :size-assert #x130 + :flag-assert #x1c00c00130 + (:methods + (TODO-RENAME-27 (_type_ symbol) none 27) + ) + ) + +;; definition for method 3 of type square-platform +(defmethod inspect square-platform ((obj square-platform)) + (let ((t9-0 (method-of-type baseplat inspect))) + (t9-0 obj) + ) + (format #t "~T~Tplat-id: ~D~%" (-> obj plat-id)) + (format #t "~T~Tpos-u: ~f~%" (-> obj pos-u)) + (format #t "~T~Twater-entity: ~A~%" (-> obj water-entity)) + (format #t "~T~Tsplash-counter: ~D~%" (-> obj splash-counter)) + (format #t "~T~Tstart-splash-time: ~D~%" (-> obj start-splash-time)) + (format #t "~T~Tpart2: ~A~%" (-> obj part2)) + (format #t "~T~Tpart3: ~A~%" (-> obj part3)) + (format #t "~T~Tpart4: ~A~%" (-> obj part4)) + (format #t "~T~Tup-pos: #~%" (-> obj up-pos)) + (format #t "~T~Tdown-pos: #~%" (-> obj down-pos)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "square-platform" + :bounds + (new 'static 'vector :y -45056.0 :w 32768.0) + :max-lod 1 + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 3) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 4095996000.0) + (set! *square-platform-sg* v1-1) + ) + +;; definition of type square-platform-button +(deftype square-platform-button (basebutton) + () + :heap-base #x90 + :method-count-assert 32 + :size-assert #x100 + :flag-assert #x2000900100 + ) + +;; definition for method 3 of type square-platform-button +(defmethod inspect square-platform-button ((obj square-platform-button)) + (let ((t9-0 (method-of-type basebutton inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition of type square-platform-master +(deftype square-platform-master (process-drawable) + ((button-id int32 :offset-assert 176) + (plat-id int32 :offset-assert 180) + (plat-mask uint32 :offset-assert 184) + (plat-id-dir int32 :offset-assert 188) + (wiggled? symbol :offset-assert 192) + (timeout uint64 :offset-assert 200) + (last-plat-activated-time uint64 :offset-assert 208) + (delay-til-wiggle uint64 :offset-assert 216) + (ticker ticky :inline :offset-assert 224) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #x100 + :flag-assert #x1400900100 + ) + +;; definition for method 3 of type square-platform-master +(defmethod inspect square-platform-master ((obj square-platform-master)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tbutton-id: ~D~%" (-> obj button-id)) + (format #t "~T~Tplat-id: ~D~%" (-> obj plat-id)) + (format #t "~T~Tplat-mask: ~D~%" (-> obj plat-mask)) + (format #t "~T~Tplat-id-dir: ~D~%" (-> obj plat-id-dir)) + (format #t "~T~Twiggled?: ~A~%" (-> obj wiggled?)) + (format #t "~T~Ttimeout: ~D~%" (-> obj timeout)) + (format + #t + "~T~Tlast-plat-activated-time: ~D~%" + (-> obj last-plat-activated-time) + ) + (format #t "~T~Tdelay-til-wiggle: ~D~%" (-> obj delay-til-wiggle)) + (format #t "~T~Tticker: #~%" (-> obj ticker)) + obj + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 437) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-square-platform-breach-splash" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 2222 :flags (is-3d)) + (sp-item 2315 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2222) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters 0.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 3.5) (meters 3.5) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 3.2) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 10 29 1) + (sp-launcher-by-id spt-next-launcher 2316) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2316) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.17066666) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2315) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters 3.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.5) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 3.2) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 10 29 1) + (sp-launcher-by-id spt-next-launcher 2316) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 438) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name + "group-square-platform-submerge-bubbles" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2223)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2223) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-x (meters -4.0) (meters 8.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 900) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-flt spt-userdata -663298.44) + (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 2317) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2317) + (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-group-id-table* 439) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-square-platform-submerge-splash" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 2222 :flags (is-3d)) + (sp-item 2315 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; definition for method 27 of type square-platform +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod TODO-RENAME-27 square-platform ((obj square-platform) (arg0 symbol)) + (local-vars (v0-3 sound-id) (sv-48 int)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set! (-> s4-0 quad) (-> obj root-override trans quad)) + (set! (-> s4-0 y) (+ -20480.0 (-> s4-0 y))) + (let* ((v1-1 (-> obj water-entity)) + (a0-4 (if v1-1 + (-> v1-1 extra process) + ) + ) + ) + (when (not a0-4) + (set! + (-> obj water-entity) + (entity-actor-lookup (-> obj entity) 'alt-actor 0) + ) + (let ((v1-4 (-> obj water-entity))) + (set! a0-4 (if v1-4 + (-> v1-4 extra process) + ) + ) + ) + ) + (when (the-as water-vol a0-4) + (let ((f0-2 (get-ripple-height (the-as water-vol a0-4) s4-0)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s3-0 quad) (-> s4-0 quad)) + (set! (-> s3-0 y) f0-2) + (if (zero? (-> obj start-splash-time)) + (set! v0-3 (cond + (arg0 + (if (>= (-> s4-0 y) f0-2) + (set! + (-> obj start-splash-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + v0-3 + ) + (else + (when (>= f0-2 (-> s4-0 y)) + (set! + (-> obj start-splash-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (let ((s2-0 sound-play-by-name) + (s1-0 + (make-u128 + #x6873616c + (the-as uint #x70732d656772616c) + ) + ) + (s0-0 (new-sound-id)) + ) + (set! sv-48 1024) + (let + ((a3-0 + (the int (* 1524.0 (rand-vu-float-range -0.8 0.8))) + ) + (t0-0 0) + (t1-0 1) + (t2-0 #t) + ) + (s2-0 + (the-as sound-name s1-0) + s0-0 + sv-48 + a3-0 + t0-0 + (the-as uint t1-0) + (the-as vector t2-0) + ) + ) + ) + ) + ) + ) + ) + ) + (when (nonzero? (-> obj start-splash-time)) + (cond + (arg0 + (let ((v1-21 (-> obj splash-counter))) + (when (< v1-21 2) + (set! (-> obj splash-counter) (+ v1-21 1)) + (spawn (-> obj part2) s3-0) + ) + ) + ) + (else + (spawn (-> obj part3) s4-0) + ) + ) + ) + (when (not arg0) + (let ((v1-25 (-> obj splash-counter))) + (when (< v1-25 2) + (set! (-> obj splash-counter) (+ v1-25 1)) + (spawn (-> obj part4) s3-0) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate square-platform-lowered (square-platform) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'trigger) + (if + (and + (= (-> arg0 type) square-platform-master) + (= + (-> (the-as square-platform-master arg0) plat-id) + (-> self plat-id) + ) + ) + (go square-platform-rising) + ) + ) + ) + ) + ) + :code + (behavior () + (set! (-> self pos-u) 0.0) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate square-platform-rising (square-platform) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((or (= v1-0 'bonk) (= v1-0 'bounce)) + (dummy-22 self) + ) + ((= v1-0 'untrigger) + (go square-platform-lowering) + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self start-splash-time) (the-as uint 0)) + (set! (-> self splash-counter) 0) + 0 + (none) + ) + :trans + (behavior () + (set! + (-> self pos-u) + (seek-with-smooth + (-> self pos-u) + 1.0 + (/ 1.0 (* 0.75 (-> *display* frames-per-second))) + 0.8 + 0.01 + ) + ) + (vector-lerp! + (-> self basetrans) + (-> self down-pos) + (-> self up-pos) + (-> self pos-u) + ) + (plat-trans) + (when (= (-> self pos-u) 1.0) + (plat-post) + (go square-platform-raised) + ) + (TODO-RENAME-27 self #t) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior square-platform) plat-post) + ) + +;; failed to figure out what this is: +(defstate square-platform-raised (square-platform) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((or (= v1-0 'bonk) (= v1-0 'bounce)) + (dummy-22 self) + ) + ((= v1-0 'untrigger) + (go square-platform-lowering) + ) + ) + ) + ) + ) + :trans + (the-as (function none :behavior square-platform) plat-trans) + :code + (behavior () + (set! (-> self pos-u) 1.0) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior square-platform) plat-post) + ) + +;; failed to figure out what this is: +(defstate square-platform-lowering (square-platform) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((or (= v1-0 'bonk) (= v1-0 'bounce)) + (dummy-22 self) + ) + ((= v1-0 'trigger) + (go square-platform-rising) + ) + ((= v1-0 'touch) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'no-look-around) + (set! (-> a1-8 param 0) (the-as uint 450)) + (send-event-function arg0 a1-8) + ) + #f + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self start-splash-time) (the-as uint 0)) + (set! (-> self splash-counter) 0) + 0 + (none) + ) + :trans + (behavior () + (set! + (-> self pos-u) + (seek-with-smooth + (-> self pos-u) + 0.0 + (/ 1.0 (* 0.75 (-> *display* frames-per-second))) + 0.8 + 0.01 + ) + ) + (vector-lerp! + (-> self basetrans) + (-> self down-pos) + (-> self up-pos) + (-> self pos-u) + ) + (plat-trans) + (when (= (-> self pos-u) 0.0) + (plat-post) + (go square-platform-lowered) + ) + (TODO-RENAME-27 self #f) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior square-platform) plat-post) + ) + +;; definition for method 10 of type square-platform +(defmethod deactivate square-platform ((obj square-platform)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + (if (nonzero? (-> obj part3)) + (kill-and-free-particles (-> obj part3)) + ) + (if (nonzero? (-> obj part4)) + (kill-and-free-particles (-> obj part4)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 7 of type square-platform +;; INFO: Return type mismatch baseplat vs square-platform. +(defmethod relocate square-platform ((obj square-platform) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (if (nonzero? (-> obj part3)) + (&+! (-> obj part3) arg0) + ) + (if (nonzero? (-> obj part4)) + (&+! (-> obj part4) arg0) + ) + (the-as + square-platform + ((the-as + (function baseplat int baseplat) + (find-parent-method square-platform 7) + ) + obj + arg0 + ) + ) + ) + +;; definition for method 11 of type square-platform +;; Used lq/sq +(defmethod copy-defaults! square-platform ((obj square-platform) (arg0 res-lump)) + (local-vars (sv-16 res-tag) (sv-32 res-tag)) + (set! (-> obj pos-u) 0.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) 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 -24576.0 0.0 32768.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj plat-id) (actor-count-before (-> obj link))) + (dummy-14 obj *square-platform-sg* '()) + (dummy-21 obj) + (ja-channel-set! 1) + (let ((s4-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (set! sv-16 (new 'static 'res-tag)) + (let* + ((v1-32 (res-lump-data (-> obj entity) 'distance pointer :tag-ptr (& sv-16))) + (f30-0 (if (and v1-32 (> (the-as int (-> sv-16 elt-count)) 0)) + (-> (the-as (pointer float) v1-32)) + -8192.0 + ) + ) + ) + (set! sv-32 (new 'static 'res-tag)) + (let* + ((v1-35 + (res-lump-data (-> obj entity) 'distance pointer :tag-ptr (& sv-32)) + ) + (f0-10 (if (and v1-35 (< 1 (the-as int (-> sv-32 elt-count)))) + (-> (the-as (pointer float) v1-35) 1) + 16384.0 + ) + ) + ) + (set! (-> obj down-pos quad) (-> obj root-override trans quad)) + (+! (-> obj down-pos y) f30-0) + (set! (-> obj up-pos quad) (-> obj root-override trans quad)) + (+! (-> obj up-pos y) f0-10) + ) + ) + (set! (-> obj basetrans quad) (-> obj down-pos quad)) + (set! (-> obj root-override trans quad) (-> obj basetrans quad)) + (set! + (-> obj part2) + (create-launch-control (-> *part-group-id-table* 437) obj) + ) + (set! + (-> obj part3) + (create-launch-control (-> *part-group-id-table* 438) obj) + ) + (set! + (-> obj part4) + (create-launch-control (-> *part-group-id-table* 439) obj) + ) + (set! (-> obj water-entity) (entity-actor-lookup arg0 'alt-actor 0)) + (ja-post) + (dummy-47 (-> obj root-override)) + (go square-platform-lowered) + (none) + ) + +;; failed to figure out what this is: +(defstate square-platform-master-idle (square-platform-master) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'trigger) + (when (= (-> arg0 type) square-platform-button) + (set! + (-> self button-id) + (-> (the-as square-platform-button arg0) button-id) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go square-platform-master-activate) + ) + ) + ) + ) + ) + :code + (behavior () + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +;; failed to figure out what this is: +(defstate square-platform-master-activate (square-platform-master) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self wiggled?) #f) + (sleep (-> self ticker) (-> self timeout)) + (set! (-> self plat-id) -1) + (send-to-all (-> self link) 'trigger) + (set! (-> self plat-id) 0) + (let ((gp-0 1)) + (let ((v1-7 (-> self button-id))) + (cond + ((zero? v1-7) + (let* ((s5-0 (get-process *default-dead-pool* sunkencam #x4000)) + (a0-4 (when s5-0 + (let ((t9-3 (method-of-type sunkencam activate))) + (t9-3 + (the-as sunkencam s5-0) + self + 'sunkencam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> s5-0 ppointer) + ) + ) + ) + (set! (-> (the-as sunkencam (-> a0-4 0)) seq) (the-as uint 3)) + ) + ) + ((= v1-7 1) + (let* ((gp-1 (get-process *default-dead-pool* sunkencam #x4000)) + (v1-13 (when gp-1 + (let ((t9-6 (method-of-type sunkencam activate))) + (t9-6 + (the-as sunkencam gp-1) + self + 'sunkencam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-1 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> gp-1 ppointer) + ) + ) + ) + (set! (-> (the-as sunkencam (-> v1-13 0)) seq) (the-as uint 4)) + ) + (set! gp-0 -1) + ) + ((= v1-7 2) + (let* ((s5-1 (get-process *default-dead-pool* sunkencam #x4000)) + (a0-17 (when s5-1 + (let ((t9-9 (method-of-type sunkencam activate))) + (t9-9 + (the-as sunkencam s5-1) + self + 'sunkencam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> s5-1 ppointer) + ) + ) + ) + (set! (-> (the-as sunkencam (-> a0-17 0)) seq) (the-as uint 5)) + ) + ) + ((= v1-7 3) + (let* ((gp-2 (get-process *default-dead-pool* sunkencam #x4000)) + (v1-24 (when gp-2 + (let ((t9-12 (method-of-type sunkencam activate))) + (t9-12 + (the-as sunkencam gp-2) + self + 'sunkencam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-2 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> gp-2 ppointer) + ) + ) + ) + (set! (-> (the-as sunkencam (-> v1-24 0)) seq) (the-as uint 6)) + ) + (set! gp-0 -1) + ) + ) + ) + (if (< gp-0 0) + (set! (-> self plat-id) 32) + ) + (set! (-> self plat-id-dir) gp-0) + ) + (none) + ) + :exit + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (none) + ) + :trans + (behavior () + (when (completed? (-> self ticker)) + (send-to-all (-> self link) 'untrigger) + (go square-platform-master-idle) + ) + (when (reached-delay? (-> self ticker) (-> self delay-til-wiggle)) + (when (not (-> self wiggled?)) + (set! (-> self wiggled?) #t) + (send-to-all (-> self link) 'bounce) + ) + ) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self last-plat-activated-time)) + ) + 90 + ) + (set! + (-> self last-plat-activated-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (let ((v1-20 (-> self plat-id)) + (a0-5 (-> self plat-id-dir)) + (a1-3 (-> self plat-mask)) + ) + (while #t + (+! v1-20 a0-5) + (cond + ((<= v1-20 0) + (set! (-> self plat-id) 0) + (return #f) + ) + ((>= v1-20 32) + (set! (-> self plat-id) 32) + (return #f) + ) + (else + (when (logtest? a1-3 (ash 1 v1-20)) + (set! (-> self plat-id) v1-20) + (send-to-all (-> self link) 'trigger) + (return #f) + ) + ) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +;; definition for method 11 of type square-platform-master +(defmethod + copy-defaults! + square-platform-master + ((obj square-platform-master) (arg0 res-lump)) + (set! (-> obj button-id) -1) + (set! (-> obj plat-id) -1) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! + (-> obj timeout) + (the-as + uint + (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 10.0))) + ) + ) + (set! (-> obj delay-til-wiggle) (+ (-> obj timeout) -120)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! + (-> obj plat-mask) + (the-as uint (get-matching-actor-type-mask (-> obj link) square-platform)) + ) + (go square-platform-master-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/sunken-fish_REF.gc b/test/decompiler/reference/levels/sunken/sunken-fish_REF.gc new file mode 100644 index 0000000000..c09482874e --- /dev/null +++ b/test/decompiler/reference/levels/sunken/sunken-fish_REF.gc @@ -0,0 +1,640 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type sunkenfisha +(deftype sunkenfisha (process-drawable) + ((path-u float :offset-assert 176) + (path-speed float :offset-assert 180) + (path-speed-seek-speed float :offset-assert 184) + (targ-path-speed float :offset-assert 188) + (path-normal-speed-lo float :offset-assert 192) + (path-normal-speed-hi float :offset-assert 196) + (path-dir float :offset-assert 200) + (change-path-dir-time uint64 :offset-assert 208) + (local-path-offset vector :inline :offset-assert 224) + (targ-local-path-offset vector :inline :offset-assert 240) + (local-path-offset-dir vector :inline :offset-assert 256) + (max-local-path-offset vector :inline :offset-assert 272) + (facing-rot vector :inline :offset-assert 288) + (path-trans-offset vector :inline :offset-assert 304) + ) + :heap-base #xd0 + :method-count-assert 28 + :size-assert #x140 + :flag-assert #x1c00d00140 + (:methods + (TODO-RENAME-20 (_type_) float 20) + (TODO-RENAME-orbit?-21 (_type_ vector float vector) vector 21) + (dummy-22 (_type_) none 22) + (TODO-RENAME-23 (_type_) quaternion 23) + (TODO-RENAME-24 (_type_) vector 24) + (dummy-25 (_type_) none 25) + (TODO-RENAME-26 (_type_) float 26) + (TODO-RENAME-27 (_type_) float 27) + ) + ) + +;; definition for method 3 of type sunkenfisha +(defmethod inspect sunkenfisha ((obj sunkenfisha)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tpath-u: ~f~%" (-> obj path-u)) + (format #t "~T~Tpath-speed: ~f~%" (-> obj path-speed)) + (format #t "~T~Tpath-speed-seek-speed: ~f~%" (-> obj path-speed-seek-speed)) + (format #t "~T~Ttarg-path-speed: ~f~%" (-> obj targ-path-speed)) + (format #t "~T~Tpath-normal-speed-lo: ~f~%" (-> obj path-normal-speed-lo)) + (format #t "~T~Tpath-normal-speed-hi: ~f~%" (-> obj path-normal-speed-hi)) + (format #t "~T~Tpath-dir: ~f~%" (-> obj path-dir)) + (format #t "~T~Tchange-path-dir-time: ~D~%" (-> obj change-path-dir-time)) + (format + #t + "~T~Tlocal-path-offset: #~%" + (-> obj local-path-offset) + ) + (format + #t + "~T~Ttarg-local-path-offset: #~%" + (-> obj targ-local-path-offset) + ) + (format + #t + "~T~Tlocal-path-offset-dir: #~%" + (-> obj local-path-offset-dir) + ) + (format + #t + "~T~Tmax-local-path-offset: #~%" + (-> obj max-local-path-offset) + ) + (format #t "~T~Tfacing-rot: #~%" (-> obj facing-rot)) + (format + #t + "~T~Tpath-trans-offset: #~%" + (-> obj path-trans-offset) + ) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "sunkenfisha" + :bounds + (new 'static 'vector :y 6144.0 :w 10240.0) + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) -1) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *sunkenfisha-red-yellow-sg* v1-1) + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "sunkenfisha" + :bounds + (new 'static 'vector :y 6144.0 :w 10240.0) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 2) + (set! (-> v1-2 janim) -1) + (set! (-> v1-2 mgeo 0) (the-as uint 3)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *sunkenfisha-yellow-blue-sg* v1-2) + ) + +;; failed to figure out what this is: +(let + ((v1-3 + (new 'static 'skeleton-group + :art-group-name "sunkenfisha" + :bounds + (new 'static 'vector :y 6144.0 :w 10240.0) + :version #x6 + ) + ) + ) + (set! (-> v1-3 jgeo) 4) + (set! (-> v1-3 janim) -1) + (set! (-> v1-3 mgeo 0) (the-as uint 5)) + (set! (-> v1-3 lod-dist 0) 4095996000.0) + (set! *sunkenfisha-yellow-eye-sg* v1-3) + ) + +;; definition for method 22 of type sunkenfisha +;; INFO: Return type mismatch int vs none. +(defmethod dummy-22 sunkenfisha ((obj sunkenfisha)) + 0 + (none) + ) + +;; definition for method 21 of type sunkenfisha +(defmethod + TODO-RENAME-orbit?-21 + sunkenfisha + ((obj sunkenfisha) (arg0 vector) (arg1 float) (arg2 vector)) + (eval-path-curve! (-> obj path) arg0 arg1 'interp) + (vector+! arg0 arg0 (-> obj path-trans-offset)) + (let ((s2-0 (new 'stack-no-clear 'vector))) + (TODO-RENAME-14 (-> obj path) s2-0 arg1) + (let ((f0-2 (atan (-> s2-0 x) (-> s2-0 z))) + (s4-1 (new 'stack-no-clear 'vector)) + ) + (vector-rotate-around-y! s4-1 arg2 f0-2) + (vector+! arg0 arg0 s4-1) + ) + ) + ) + +;; definition for method 24 of type sunkenfisha +(defmethod TODO-RENAME-24 sunkenfisha ((obj sunkenfisha)) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'matrix)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s4-0 (-> obj targ-local-path-offset) (-> obj local-path-offset)) + (when (>= (* 4096.0 (-> *display* seconds-per-frame)) (vector-length s4-0)) + (until (< (* 16384.0 (-> *display* seconds-per-frame)) (vector-length s4-0)) + (set! + (-> obj targ-local-path-offset x) + (rand-vu-float-range + (- (-> obj max-local-path-offset x)) + (-> obj max-local-path-offset x) + ) + ) + (set! + (-> obj targ-local-path-offset y) + (rand-vu-float-range + (- (-> obj max-local-path-offset y)) + (-> obj max-local-path-offset y) + ) + ) + (vector-! s4-0 (-> obj targ-local-path-offset) (-> obj local-path-offset)) + ) + ) + (vector-normalize! s4-0 1.0) + (matrix-from-two-vectors-max-angle-partial! + s3-0 + (-> obj local-path-offset-dir) + s4-0 + (* 16384.0 (-> *display* seconds-per-frame)) + 0.1 + ) + (vector-matrix*! + (-> obj local-path-offset-dir) + (-> obj local-path-offset-dir) + s3-0 + ) + (vector-normalize! (-> obj local-path-offset-dir) 1.0) + (vector-float*! + gp-0 + (-> obj local-path-offset-dir) + (* 4096.0 (-> *display* seconds-per-frame)) + ) + (vector+! (-> obj local-path-offset) (-> obj local-path-offset) gp-0) + ) + ) + +;; definition for method 25 of type sunkenfisha +;; INFO: Return type mismatch float vs none. +(defmethod dummy-25 sunkenfisha ((obj sunkenfisha)) + (let* ((f0-0 (-> obj path-speed)) + (f1-1 + (seek + f0-0 + (-> obj targ-path-speed) + (* (-> obj path-speed-seek-speed) (-> *display* seconds-per-frame)) + ) + ) + ) + (set! (-> obj path-speed) f1-1) + (let + ((f30-0 + (+ + (-> obj path-u) + (* (-> obj path-dir) f1-1 (-> *display* seconds-per-frame)) + ) + ) + ) + (cond + ((< f30-0 0.0) + (set! f30-0 (- f30-0)) + (TODO-RENAME-20 obj) + ) + ((< 1.0 f30-0) + (+! f30-0 (* 2.0 (- 1.0 f30-0))) + (TODO-RENAME-20 obj) + ) + ) + (set! (-> obj path-u) f30-0) + ) + ) + (none) + ) + +;; definition for method 23 of type sunkenfisha +(defmethod TODO-RENAME-23 sunkenfisha ((obj sunkenfisha)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set-vector! + s5-0 + (- (vector-x-angle (-> obj root transv))) + (vector-y-angle (-> obj root transv)) + 0.0 + 1.0 + ) + (set! + (-> obj facing-rot x) + (deg-seek-smooth + (-> obj facing-rot x) + (-> s5-0 x) + (* 16384.0 (-> *display* seconds-per-frame)) + 0.1 + ) + ) + (set! + (-> obj facing-rot y) + (deg-seek-smooth + (-> obj facing-rot y) + (-> s5-0 y) + (* 32768.0 (-> *display* seconds-per-frame)) + 0.1 + ) + ) + ) + (quaternion-zxy! (-> obj root quat) (-> obj facing-rot)) + ) + +;; definition for method 20 of type sunkenfisha +(defmethod TODO-RENAME-20 sunkenfisha ((obj sunkenfisha)) + (set! (-> obj path-dir) (- (-> obj path-dir))) + (set! (-> obj path-speed) 0.0) + (set! + (-> obj targ-path-speed) + (rand-vu-float-range + (-> obj path-normal-speed-lo) + (-> obj path-normal-speed-hi) + ) + ) + (set! + (-> obj change-path-dir-time) + (the-as + uint + (+ (-> *display* base-frame-counter) (rand-vu-int-range 1500 5400)) + ) + ) + (set! + (-> obj targ-local-path-offset y) + (* 0.5 (+ (-> obj targ-local-path-offset y) (-> obj local-path-offset y))) + ) + (let* ((f0-8 (-> obj local-path-offset x)) + (f1-3 (- (-> obj targ-local-path-offset x) f0-8)) + ) + (when (< (fabs f1-3) 12288.0) + (cond + ((>= f1-3 0.0) + (let ((f0-10 (fmin (+ 12288.0 f0-8) (-> obj max-local-path-offset x)))) + (set! (-> obj targ-local-path-offset x) f0-10) + f0-10 + ) + ) + (else + (let + ((f0-12 (fmax (+ -12288.0 f0-8) (- (-> obj max-local-path-offset x))))) + (set! (-> obj targ-local-path-offset x) f0-12) + f0-12 + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate sunkenfisha-idle (sunkenfisha) + :trans + (behavior () + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (if + (>= + (-> *display* base-frame-counter) + (the-as int (-> self change-path-dir-time)) + ) + (TODO-RENAME-20 self) + ) + (TODO-RENAME-24 self) + (dummy-25 self) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (TODO-RENAME-orbit?-21 + self + gp-0 + (-> self path-u) + (-> self local-path-offset) + ) + (vector-! (-> self root transv) gp-0 (-> self root trans)) + (set! (-> self root trans quad) (-> gp-0 quad)) + ) + (let ((v1-16 (-> self root transv))) + (.lvf vf1 (&-> (-> self root transv) quad)) + (let ((f0-1 (-> *display* frames-per-second))) + (.mov at-0 f0-1) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-16 quad) vf1) + ) + (TODO-RENAME-23 self) + (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 6)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + 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 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior sunkenfisha) ja-post) + ) + +;; definition for method 26 of type sunkenfisha +(defmethod TODO-RENAME-26 sunkenfisha ((obj sunkenfisha)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj (-> obj entity)) + (set-vector! (-> obj root scale) 6.0 6.0 6.0 1.0) + (let ((v1-3 (rand-vu-int-count 3))) + (cond + ((zero? v1-3) + (dummy-14 obj *sunkenfisha-red-yellow-sg* '()) + ) + ((= v1-3 1) + (dummy-14 obj *sunkenfisha-yellow-blue-sg* '()) + ) + ((= v1-3 2) + (dummy-14 obj *sunkenfisha-yellow-eye-sg* '()) + ) + ) + ) + (ja-channel-set! 1) + (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 6)) + num-func-identity + ) + (let ((f0-4 0.0)) + (set! (-> s5-0 frame-num) f0-4) + f0-4 + ) + ) + ) + +;; definition for method 27 of type sunkenfisha +;; Used lq/sq +(defmethod TODO-RENAME-27 sunkenfisha ((obj sunkenfisha)) + (local-vars (sv-16 res-tag) (sv-32 res-tag) (sv-48 res-tag)) + (vector-reset! (-> obj path-trans-offset)) + (set! (-> obj path-u) (rand-vu-float-range 0.0 1.0)) + (if (zero? (rand-vu-int-count 2)) + (set! (-> obj path-dir) 1.0) + (set! (-> obj path-dir) -1.0) + ) + (set-vector! (-> obj max-local-path-offset) 16384.0 28672.0 0.0 1.0) + (set! sv-16 (new 'static 'res-tag)) + (let + ((v1-5 + (res-lump-data + (-> obj entity) + 'path-max-offset + (pointer float) + :tag-ptr + (& sv-16) + ) + ) + ) + (when v1-5 + (set! (-> obj max-local-path-offset x) (-> v1-5 0)) + (set! (-> obj max-local-path-offset y) (-> v1-5 1)) + ) + ) + (set-vector! (-> obj local-path-offset) 0.0 0.0 0.0 1.0) + (set! + (-> obj local-path-offset x) + (rand-vu-float-range + (- (-> obj max-local-path-offset x)) + (-> obj max-local-path-offset x) + ) + ) + (set! + (-> obj local-path-offset y) + (rand-vu-float-range + (- (-> obj max-local-path-offset y)) + (-> obj max-local-path-offset y) + ) + ) + (set! (-> obj targ-local-path-offset quad) (-> obj local-path-offset quad)) + (set! + (-> obj targ-local-path-offset x) + (rand-vu-float-range + (- (-> obj max-local-path-offset x)) + (-> obj max-local-path-offset x) + ) + ) + (set! + (-> obj targ-local-path-offset y) + (rand-vu-float-range + (- (-> obj max-local-path-offset y)) + (-> obj max-local-path-offset y) + ) + ) + (vector-! + (-> obj local-path-offset-dir) + (-> obj targ-local-path-offset) + (-> obj local-path-offset) + ) + (vector-normalize! (-> obj local-path-offset-dir) 1.0) + (set! + (-> obj change-path-dir-time) + (the-as + uint + (+ (-> *display* base-frame-counter) (rand-vu-int-range 1500 5400)) + ) + ) + (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) + ) + (set! sv-32 (new 'static 'res-tag)) + (let + ((v1-16 + (res-lump-data + (-> obj entity) + 'path-trans-offset + (pointer float) + :tag-ptr + (& sv-32) + ) + ) + ) + (when v1-16 + (+! (-> obj path-trans-offset x) (-> v1-16 0)) + (+! (-> obj path-trans-offset y) (-> v1-16 1)) + (+! (-> obj path-trans-offset z) (-> v1-16 2)) + ) + ) + (if (< (-> obj path curve num-cverts) 2) + (go process-drawable-art-error "bad path") + ) + (let ((f28-0 8192.0) + (f30-0 26624.0) + ) + (set! sv-48 (new 'static 'res-tag)) + (let + ((v1-23 + (res-lump-data (-> obj entity) 'speed (pointer float) :tag-ptr (& sv-48)) + ) + ) + (when v1-23 + (set! f28-0 (-> v1-23 0)) + (set! f30-0 (-> v1-23 1)) + ) + ) + (let ((f0-35 (path-distance (-> obj path)))) + (set! (-> obj path-normal-speed-lo) (/ f28-0 f0-35)) + (set! (-> obj path-normal-speed-hi) (/ f30-0 f0-35)) + ) + ) + (set! + (-> obj path-speed-seek-speed) + (* 2.0 (- (-> obj path-normal-speed-hi) (-> obj path-normal-speed-lo))) + ) + (set! + (-> obj path-speed) + (rand-vu-float-range + (-> obj path-normal-speed-lo) + (-> obj path-normal-speed-hi) + ) + ) + (set! (-> obj targ-path-speed) (-> obj path-speed)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (TODO-RENAME-14 (-> obj path) s4-0 (-> obj path-u)) + (set-vector! (-> obj facing-rot) 0.0 (atan (-> s4-0 x) (-> s4-0 z)) 0.0 1.0) + ) + (when (< (-> obj path-dir) 0.0) + (let ((f0-52 (- (-> obj facing-rot y)))) + (set! (-> obj facing-rot y) f0-52) + f0-52 + ) + ) + ) + +;; definition for function sunkenfisha-init-by-other +(defbehavior sunkenfisha-init-by-other sunkenfisha ((arg0 entity)) + (set! (-> self entity) arg0) + (TODO-RENAME-26 self) + (TODO-RENAME-27 self) + (go sunkenfisha-idle) + (none) + ) + +;; definition for method 11 of type sunkenfisha +(defmethod copy-defaults! sunkenfisha ((obj sunkenfisha) (arg0 res-lump)) + (TODO-RENAME-26 obj) + (TODO-RENAME-27 obj) + (let + ((s5-0 + (+ + (res-lump-value + (-> obj entity) + 'count + uint128 + :default + (the-as uint128 1) + ) + -1 + ) + ) + ) + (while (> (the-as int s5-0) 0) + (let ((s4-0 (get-process *default-dead-pool* sunkenfisha #x4000))) + (when s4-0 + (let ((t9-4 (method-of-type sunkenfisha activate))) + (t9-4 + (the-as sunkenfisha s4-0) + obj + 'sunkenfisha + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s4-0 sunkenfisha-init-by-other (-> obj entity)) + (-> s4-0 ppointer) + ) + ) + (+! s5-0 -1) + ) + ) + (go sunkenfisha-idle) + (none) + ) + + + + diff --git a/test/decompiler/reference/levels/sunken/sunken-water_REF.gc b/test/decompiler/reference/levels/sunken/sunken-water_REF.gc new file mode 100644 index 0000000000..1aa8a668f6 --- /dev/null +++ b/test/decompiler/reference/levels/sunken/sunken-water_REF.gc @@ -0,0 +1,384 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type sunken-water +(deftype sunken-water (water-anim) + ((use-sync? symbol :offset-assert 220) + (playing-deadly-sound? symbol :offset-assert 224) + (deadly-time float :offset-assert 228) + (deadly-fade float :offset-assert 232) + (sync sync-info :inline :offset-assert 236) + (safe-color-mult vector :inline :offset-assert 256) + (safe-color-emissive vector :inline :offset-assert 272) + (deadly-color-mult vector :inline :offset-assert 288) + (deadly-color-emissive vector :inline :offset-assert 304) + ) + :heap-base #xd0 + :method-count-assert 31 + :size-assert #x140 + :flag-assert #x1f00d00140 + (:methods + (draw-ripple (_type_) symbol 30) + ) + ) + +;; definition for method 3 of type sunken-water +(defmethod inspect sunken-water ((obj sunken-water)) + (let ((t9-0 (method-of-type water-anim inspect))) + (t9-0 obj) + ) + (format #t "~T~Tuse-sync?: ~A~%" (-> obj use-sync?)) + (format #t "~T~Tplaying-deadly-sound?: ~A~%" (-> obj playing-deadly-sound?)) + (format #t "~T~Tdeadly-time: ~f~%" (-> obj deadly-time)) + (format #t "~T~Tdeadly-fade: ~f~%" (-> obj deadly-fade)) + (format #t "~T~Tsync: #~%" (-> obj sync)) + (format #t "~T~Tsafe-color-mult: #~%" (-> obj safe-color-mult)) + (format + #t + "~T~Tsafe-color-emissive: #~%" + (-> obj safe-color-emissive) + ) + (format + #t + "~T~Tdeadly-color-mult: #~%" + (-> obj deadly-color-mult) + ) + (format + #t + "~T~Tdeadly-color-emissive: #~%" + (-> obj deadly-color-emissive) + ) + obj + ) + +;; definition for symbol ripple-for-sunken-water, type ripple-wave-set +(define + ripple-for-sunken-water + (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 446) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-sunken-water-deadly-water" + :launcher + (new 'static 'inline-array sparticle-group-item 1 + (sp-item 1736 :fade-after (meters 50.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1736) + (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-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) + (sp-flt spt-scale-y (meters 0.25)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.1875)) + (sp-flt spt-scalevel-y (meters -0.001875)) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 81) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 2022) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2022) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-fade-a -1.28) + (sp-end) + ) + ) + ) + +;; definition for method 30 of type sunken-water +(defmethod draw-ripple sunken-water ((obj sunken-water)) + (set! (-> obj draw ripple send-query) #t) + (let ((gp-0 (-> obj draw ripple query))) + (let ((a0-1 (-> *display* base-frame-counter))) + (set! (-> gp-0 start-vertex) (logand (* 13 (logand a0-1 127)) 127)) + ) + (set! (-> gp-0 vertex-skip) 128) + (dotimes (s5-0 (-> gp-0 vertex-count)) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 1736) + (-> gp-0 data s5-0) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + #f + ) + +;; failed to figure out what this is: +(defstate water-vol-idle (sunken-water) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (if (= (-> arg3 param 0) 'attack) + (sound-play-by-name + (static-sound-name "get-shocked") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + (else + ((-> (method-of-type water-anim water-vol-idle) event) arg0 arg1 arg2 arg3) + ) + ) + ) + :trans + (behavior () + (let ((t9-0 (-> (method-of-type water-anim water-vol-idle) trans))) + (if t9-0 + (t9-0) + ) + ) + (cond + ((-> self use-sync?) + (cond + ((< (get-current-phase (-> self sync)) (-> self deadly-time)) + (when (!= (-> self deadly-fade) 1.0) + (set! + (-> self deadly-fade) + (seek + (-> self deadly-fade) + 1.0 + (* 8.0 (-> *display* seconds-per-frame)) + ) + ) + (let ((f30-0 (-> self deadly-fade))) + (vector-lerp! + (-> self draw color-mult) + (-> self safe-color-mult) + (-> self deadly-color-mult) + f30-0 + ) + (vector-lerp! + (-> self draw color-emissive) + (-> self safe-color-emissive) + (-> self deadly-color-emissive) + f30-0 + ) + (set! (-> self draw color-mult w) 0.5) + (if (= f30-0 1.0) + (set! (-> self flags) (logior #x80000 (-> self flags))) + ) + ) + ) + (draw-ripple self) + (when (not (-> self playing-deadly-sound?)) + (set! (-> self playing-deadly-sound?) #t) + (sound-play-by-name + (static-sound-name "water-on") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (update! (-> self sound)) + ) + (else + (set! (-> self flags) (logand -524289 (-> self flags))) + (when (!= (-> self deadly-fade) 0.0) + (set! + (-> self deadly-fade) + (seek + (-> self deadly-fade) + 0.0 + (* 8.0 (-> *display* seconds-per-frame)) + ) + ) + (let ((f30-1 (-> self deadly-fade))) + (vector-lerp! + (-> self draw color-mult) + (-> self safe-color-mult) + (-> self deadly-color-mult) + f30-1 + ) + (vector-lerp! + (-> self draw color-emissive) + (-> self safe-color-emissive) + (-> self deadly-color-emissive) + f30-1 + ) + (set! (-> self draw color-mult w) 0.5) + (if (= f30-1 0.0) + (set! (-> self flags) (logand -524289 (-> self flags))) + ) + ) + ) + (when (-> self playing-deadly-sound?) + (set! (-> self playing-deadly-sound?) #f) + (stop! (-> self sound)) + (sound-play-by-name + (static-sound-name "water-off") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + ) + ) + (TODO-RENAME-10 + *palette-fade-controls* + 3 + (-> self deadly-fade) + (vector-vector-distance (-> self root trans) (camera-pos)) + (the-as vector #f) + ) + ) + (else + (when (logtest? #x80000 (-> self flags)) + (draw-ripple self) + (update! (-> self sound)) + (set! (-> self playing-deadly-sound?) #t) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior sunken-water) ja-post) + ) + +;; definition for method 25 of type sunken-water +;; INFO: Return type mismatch uint vs object. +(defmethod TODO-RENAME-25 sunken-water ((obj sunken-water)) + (local-vars (v0-3 uint)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-25))) + (t9-0 obj) + ) + (set! (-> obj playing-deadly-sound?) #f) + (set-vector! (-> obj safe-color-mult) 0.125 0.225 0.22 0.5) + (set-vector! (-> obj safe-color-emissive) 0.0 0.0 0.0 1.0) + (set-vector! (-> obj deadly-color-mult) 0.125 0.225 0.22 0.5) + (set-vector! (-> obj deadly-color-emissive) 0.33 0.6 0.0 1.0) + (let + ((s5-0 (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15))) + (let ((f0-16 (res-lump-float (-> obj entity) 'percent :default -1.0))) + (if (or (< f0-16 0.0) (< 1.0 f0-16)) + (set! f0-16 (cond + (s5-0 + 0.5 + ) + ((logtest? #x80000 (-> obj flags)) + 1.0 + ) + (else + 0.0 + ) + ) + ) + ) + (when (and s5-0 (or (= f0-16 0.0) (= f0-16 1.0))) + (set! s5-0 #f) + (if (= f0-16 0.0) + (set! (-> obj flags) (logior #x80000 (-> obj flags))) + (set! (-> obj flags) (logand -524289 (-> obj flags))) + ) + ) + (set! (-> obj use-sync?) s5-0) + (set! (-> obj deadly-time) f0-16) + ) + (the-as object (when s5-0 + (cond + ((< (get-current-phase (-> obj sync)) (-> obj deadly-time)) + (set! v0-3 (logior (the-as uint #x80000) (-> obj flags))) + (set! (-> obj flags) v0-3) + ) + (else + (set! v0-3 (logand (the-as uint -524289) (-> obj flags))) + (set! (-> obj flags) v0-3) + ) + ) + v0-3 + ) + ) + ) + ) + +;; definition for method 22 of type sunken-water +;; INFO: Return type mismatch ripple-merc-query vs ripple-wave-set. +;; Used lq/sq +(defmethod TODO-RENAME-22 sunken-water ((obj sunken-water)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (set! (-> obj play-ambient-sound?) #f) + (cond + ((logtest? #x80000 (-> obj flags)) + (set! (-> obj draw color-mult quad) (-> obj deadly-color-mult quad)) + (set! (-> obj draw color-emissive quad) (-> obj deadly-color-emissive quad)) + (set! (-> obj deadly-fade) 1.0) + ) + (else + (set! (-> obj draw color-mult quad) (-> obj safe-color-mult quad)) + (set! (-> obj draw color-emissive quad) (-> obj safe-color-emissive quad)) + (set! (-> obj deadly-fade) 0.0) + ) + ) + (let ((s5-0 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) s5-0) + (set! (-> s5-0 global-scale) 3072.0) + (set! (-> s5-0 close-fade-dist) 163840.0) + (set! (-> s5-0 far-fade-dist) 245760.0) + (set! (-> s5-0 waveform) ripple-for-sunken-water) + (let ((v0-2 (new 'process 'ripple-merc-query 100))) + (set! (-> s5-0 query) v0-2) + (the-as ripple-wave-set v0-2) + ) + ) + ) diff --git a/test/decompiler/reference/levels/sunken/wall-plat_REF.gc b/test/decompiler/reference/levels/sunken/wall-plat_REF.gc index 1763792d95..88fadbaf8a 100644 --- a/test/decompiler/reference/levels/sunken/wall-plat_REF.gc +++ b/test/decompiler/reference/levels/sunken/wall-plat_REF.gc @@ -107,7 +107,7 @@ (the-as (function none :behavior wall-plat) rider-trans) :code (behavior () - ((method-of-object (-> self root-override) dummy-49)) + (dummy-49 (-> self root-override)) (set! (-> self state-time) (the-as seconds (-> *display* base-frame-counter)) @@ -279,7 +279,7 @@ ) ((= f30-0 1.0) (set! gp-0 #f) - ((method-of-object (-> self root-override) dummy-49)) + (dummy-49 (-> self root-override)) ) (else (when (not gp-0) @@ -294,7 +294,7 @@ ) (set! gp-0 #t) ) - ((method-of-object (-> self root-override) dummy-49)) + (dummy-49 (-> self root-override)) ) ) ) @@ -382,7 +382,3 @@ ) (none) ) - - - - diff --git a/test/decompiler/reference/levels/swamp/swamp-bat_REF.gc b/test/decompiler/reference/levels/swamp/swamp-bat_REF.gc new file mode 100644 index 0000000000..3e739b2e2a --- /dev/null +++ b/test/decompiler/reference/levels/swamp/swamp-bat_REF.gc @@ -0,0 +1,1093 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type swamp-bat-idle-path +(deftype swamp-bat-idle-path (structure) + ((origin vector :inline :offset-assert 0) + (x-axis vector :inline :offset-assert 16) + (y-axis vector :inline :offset-assert 32) + ) + :method-count-assert 10 + :size-assert #x30 + :flag-assert #xa00000030 + (:methods + (TODO-RENAME-9 (_type_ vector float) vector 9) + ) + ) + +;; definition for method 3 of type swamp-bat-idle-path +(defmethod inspect swamp-bat-idle-path ((obj swamp-bat-idle-path)) + (format #t "[~8x] ~A~%" obj 'swamp-bat-idle-path) + (format #t "~Torigin: #~%" (-> obj origin)) + (format #t "~Tx-axis: #~%" (-> obj x-axis)) + (format #t "~Ty-axis: #~%" (-> obj y-axis)) + obj + ) + +;; definition for method 9 of type swamp-bat-idle-path +;; Used lq/sq +(defmethod + TODO-RENAME-9 + swamp-bat-idle-path + ((obj swamp-bat-idle-path) (arg0 vector) (arg1 float)) + (let ((f30-0 (* 65536.0 arg1))) + (set! (-> arg0 quad) (-> obj origin quad)) + (vector+*! arg0 arg0 (-> obj x-axis) (cos f30-0)) + (vector+*! arg0 arg0 (-> obj y-axis) (sin f30-0)) + ) + arg0 + ) + +;; definition of type swamp-bat +(deftype swamp-bat (process-drawable) + ((child-process (pointer swamp-bat-slave) :offset 20) + (root-override collide-shape :offset 112) + (fact-override fact-info-enemy :offset 144) + (path-origin vector :inline :offset-assert 176) + (idle-position-angle float 8 :offset-assert 192) + (path-select-plane plane 2 :inline :offset-assert 224) + (path-list curve-control 2 :offset-assert 256) + (path-select int8 :offset-assert 264) + (slave-count int8 :offset-assert 265) + (path-count int8 :offset-assert 266) + ) + :heap-base #xa0 + :method-count-assert 20 + :size-assert #x10b + :flag-assert #x1400a0010b + ) + +;; definition for method 3 of type swamp-bat +(defmethod inspect swamp-bat ((obj swamp-bat)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tpath-origin: #~%" (-> obj path-origin)) + (format #t "~T~Tidle-position-angle[8] @ #x~X~%" (-> obj idle-position-angle)) + (format #t "~T~Tpath-select-plane[2] @ #x~X~%" (-> obj path-select-plane)) + (format #t "~T~Tpath-list[2] @ #x~X~%" (-> obj path-list)) + (format #t "~T~Tpath-select: ~D~%" (-> obj path-select)) + (format #t "~T~Tslave-count: ~D~%" (-> obj slave-count)) + (format #t "~T~Tpath-count: ~D~%" (-> obj path-count)) + obj + ) + +;; definition for method 7 of type swamp-bat +;; INFO: Return type mismatch process-drawable vs swamp-bat. +(defmethod relocate swamp-bat ((obj swamp-bat) (arg0 int)) + (dotimes (v1-0 2) + (if (nonzero? (-> obj path-list v1-0)) + (&+! (-> obj path-list v1-0) arg0) + ) + ) + (the-as + swamp-bat + ((the-as + (function process-drawable int process-drawable) + (find-parent-method swamp-bat 7) + ) + obj + arg0 + ) + ) + ) + +;; definition of type swamp-bat-slave +(deftype swamp-bat-slave (process-drawable) + ((parent-process (pointer swamp-bat) :offset 12) + (root-override collide-shape-moving :offset 112) + (sync sync-info :inline :offset-assert 176) + (idle-anim-speed float :offset-assert 184) + (strafe-envelope float :offset-assert 188) + (strafe-distance float :offset-assert 192) + (path-point-count float :offset-assert 196) + (idle-path swamp-bat-idle-path :inline :offset-assert 208) + (idle-position vector :inline :offset-assert 256) + (idle-position-index int8 :offset-assert 272) + (path-select int8 :offset-assert 273) + (launch-ready symbol :offset-assert 276) + ) + :heap-base #xb0 + :method-count-assert 21 + :size-assert #x118 + :flag-assert #x1500b00118 + (:methods + (dummy-20 (_type_) float 20) + ) + ) + +;; definition for method 3 of type swamp-bat-slave +(defmethod inspect swamp-bat-slave ((obj swamp-bat-slave)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tsync: #~%" (-> obj sync)) + (format #t "~T~Tidle-anim-speed: ~f~%" (-> obj idle-anim-speed)) + (format #t "~T~Tstrafe-envelope: ~f~%" (-> obj strafe-envelope)) + (format #t "~T~Tstrafe-distance: ~f~%" (-> obj strafe-distance)) + (format #t "~T~Tpath-point-count: ~f~%" (-> obj path-point-count)) + (format + #t + "~T~Tidle-path: #~%" + (-> obj idle-path) + ) + (format #t "~T~Tidle-position: #~%" (-> obj idle-position)) + (format #t "~T~Tidle-position-index: ~D~%" (-> obj idle-position-index)) + (format #t "~T~Tpath-select: ~D~%" (-> obj path-select)) + (format #t "~T~Tlaunch-ready: ~A~%" (-> obj launch-ready)) + obj + ) + +;; definition for function swamp-bat-slave-event-handler +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defbehavior + swamp-bat-slave-event-handler swamp-bat-slave + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'attack) + (logclear! (-> self mask) (process-mask actor-pause)) + (go swamp-bat-slave-die (process->handle arg0)) + ) + ((= v1-0 'touch) + (level-hint-spawn + (game-text-id swamp-bats-hint) + "sksp0156" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (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)) + (set! + (-> a1-2 param 1) + (the-as uint (new 'static 'attack-info)) + ) + (send-event-function arg0 a1-2) + ) + ) + ((= v1-0 'launch) + (if (-> self launch-ready) + (go swamp-bat-slave-launch) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +swamp-bat-slave-event-handler + +;; definition for function swamp-bat-slave-post +(defbehavior swamp-bat-slave-post swamp-bat-slave () + (transform-post) + ) + +;; definition for method 20 of type swamp-bat-slave +(defmethod dummy-20 swamp-bat-slave ((obj swamp-bat-slave)) + (* (get-current-phase (-> obj sync)) (-> obj path-point-count)) + ) + +;; definition for function swamp-bat-slave-path-post +;; Used lq/sq +(defbehavior swamp-bat-slave-path-post swamp-bat-slave () + (let ((s2-0 (-> self parent-process 0 path-list (-> self path-select))) + (s5-0 (new-stack-vector0)) + (gp-0 (new-stack-vector0)) + (s4-0 (new-stack-vector0)) + (f30-0 (dummy-20 self)) + (s3-0 (new 'static 'vector :y 1.0 :w 1.0)) + ) + (eval-path-curve-div! s2-0 s5-0 f30-0 'interp) + (TODO-RENAME-12 s2-0 gp-0 f30-0) + (vector-cross! s4-0 gp-0 s3-0) + (vector-normalize! s4-0 1.0) + (let + ((f0-4 + (fmax + (fmin + (- (vector-dot (target-pos 0) s4-0) (vector-dot s5-0 s4-0)) + (-> self strafe-envelope) + ) + (- (-> self strafe-envelope)) + ) + ) + ) + (set! + (-> self strafe-distance) + (seek + (-> self strafe-distance) + f0-4 + (* 20480.0 (-> *display* seconds-per-frame)) + ) + ) + ) + (vector-float*! s4-0 s4-0 (-> self strafe-distance)) + (vector+! (-> self root-override trans) s5-0 s4-0) + (forward-up->quaternion (-> self root-override quat) gp-0 s3-0) + ) + (swamp-bat-slave-post) + ) + +;; failed to figure out what this is: +(let + ((v1-7 + (new 'static 'skeleton-group + :art-group-name "swamp-bat" + :bounds (new 'static 'vector :w 10240.0) + :max-lod 2 + :version #x6 + ) + ) + ) + (set! (-> v1-7 jgeo) 0) + (set! (-> v1-7 janim) 4) + (set! (-> v1-7 mgeo 0) (the-as uint 1)) + (set! (-> v1-7 lod-dist 0) 81920.0) + (set! (-> v1-7 mgeo 1) (the-as uint 2)) + (set! (-> v1-7 lod-dist 1) 163840.0) + (set! (-> v1-7 mgeo 2) (the-as uint 3)) + (set! (-> v1-7 lod-dist 2) 4095996000.0) + (set! *swamp-bat-slave-sg* v1-7) + ) + +;; definition for function swamp-bat-slave-get-new-path +;; Used lq/sq +(defbehavior swamp-bat-slave-get-new-path swamp-bat-slave () + (set! (-> self path-select) (-> self parent-process 0 path-select)) + (set! + (-> self idle-path origin quad) + (-> self parent-process 0 path-origin quad) + ) + (let* + ((f28-0 + (-> + self + parent-process + 0 + idle-position-angle + (-> self idle-position-index) + ) + ) + (f30-0 (cos f28-0)) + (f26-0 (sin f28-0)) + (f28-1 (cos 8192.0)) + ) + (let ((f0-0 (sin 8192.0))) + (set! (-> self idle-path x-axis x) (* 12288.0 f30-0)) + (set! (-> self idle-path x-axis y) 0.0) + (set! (-> self idle-path x-axis z) (* 12288.0 f26-0)) + (set! (-> self idle-path x-axis w) 1.0) + (set! (-> self idle-path y-axis x) (* -12288.0 f26-0 f28-1)) + (set! (-> self idle-path y-axis y) (* 12288.0 f0-0)) + ) + (set! (-> self idle-path y-axis z) (* 12288.0 f30-0 f28-1)) + ) + (set! (-> self idle-path y-axis w) 1.0) + (vector+! + (-> self idle-position) + (the-as vector (-> self idle-path)) + (-> self idle-path x-axis) + ) + (let + ((f0-8 + (the + float + (+ + (-> + self + parent-process + 0 + path-list + (-> self path-select) + curve + num-cverts + ) + -1 + ) + ) + ) + ) + (set! (-> self path-point-count) f0-8) + f0-8 + ) + ) + +;; failed to figure out what this is: +(defstate swamp-bat-slave-idle (swamp-bat-slave) + :event + swamp-bat-slave-event-handler + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self launch-ready) #f) + (ja-channel-push! 1 49) + (let ((v1-4 (-> self skel root-channel 0))) + (set! + (-> v1-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> s5-0 quad) (-> self root-override trans quad)) + (let + ((s4-0 + (quaternion-copy! + (new 'stack-no-clear 'quaternion) + (-> self root-override quat) + ) + ) + (gp-0 (new-stack-quaternion0)) + ) + (let + ((s2-0 + (TODO-RENAME-12 + (-> self parent-process 0 path-list (-> self path-select)) + (new 'stack-no-clear 'vector) + 0.1 + ) + ) + ) + 0 + (let* ((f0-0 300.0) + (f1-0 32768.0) + (s3-0 + (the + int + (* + f0-0 + (/ 1.0 f1-0) + (vector-vector-distance s5-0 (-> self idle-position)) + ) + ) + ) + ) + (forward-up->quaternion gp-0 s2-0 (new 'static 'vector :y 1.0 :w 1.0)) + (while #t + (let + ((v1-17 + (- + (-> *display* base-frame-counter) + (the-as int (-> self state-time)) + ) + ) + ) + (when (>= v1-17 s3-0) + 0 + (goto cfg-10) + ) + (let ((f30-1 (/ (the float v1-17) (the float s3-0)))) + (when *run-time-assert-enable* + (set-pos + *__private-assert-info* + "swamp-bat" + (the-as uint 283) + (the-as uint 20) + ) + (__assert (< f30-1 1.0) "(< interp 1.0)") + ) + (vector-lerp! + (-> self root-override trans) + s5-0 + (-> self idle-position) + f30-1 + ) + (quaternion-slerp! (-> self root-override quat) s4-0 gp-0 f30-1) + ) + ) + (let ((a0-16 (-> self skel root-channel 0))) + (set! (-> a0-16 param 0) (-> self idle-anim-speed)) + (joint-control-channel-group-eval! + a0-16 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + 0 + ) + ) + ) + (label cfg-10) + (set! (-> self root-override trans quad) (-> self idle-position quad)) + (quaternion-copy! (-> self root-override quat) gp-0) + ) + ) + (set! (-> self launch-ready) #t) + (logior! (-> self mask) (process-mask actor-pause)) + (let ((f30-2 0.0)) + (while #t + (let ((f26-0 (cos f30-2)) + (f28-0 (sin f30-2)) + ) + (set! (-> self root-override trans quad) (-> self idle-path origin quad)) + (vector+*! + (-> self root-override trans) + (-> self root-override trans) + (-> self idle-path x-axis) + f26-0 + ) + (vector+*! + (-> self root-override trans) + (-> self root-override trans) + (-> self idle-path y-axis) + f28-0 + ) + ) + (let ((a0-26 (-> self skel root-channel 0))) + (set! (-> a0-26 param 0) (-> self idle-anim-speed)) + (joint-control-channel-group-eval! + a0-26 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + (+! + f30-2 + (* 32768.0 (-> *display* seconds-per-frame) (-> self idle-anim-speed)) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-post) + ) + +;; failed to figure out what this is: +(defstate swamp-bat-slave-launch (swamp-bat-slave) + :event + swamp-bat-slave-event-handler + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self launch-ready) #f) + (ja-channel-push! 1 30) + (let ((gp-0 (new-stack-vector0))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (let ((s5-0 (new-stack-vector0))) + (eval-path-curve-div! + (-> self parent-process 0 path-list (-> self path-select)) + s5-0 + 0.0 + 'interp + ) + (let ((v1-12 (-> self skel root-channel 0))) + (set! + (-> v1-12 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + ) + (while #t + (let + ((s4-0 + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + ) + ) + (if (>= s4-0 90) + (go swamp-bat-slave-swoop) + ) + (let ((f0-1 (* 0.011111111 (the float s4-0)))) + (vector-lerp! (-> self root-override trans) gp-0 s5-0 f0-1) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (-> self idle-anim-speed)) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + 0 + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-post) + ) + +;; failed to figure out what this is: +(defstate swamp-bat-slave-swoop (swamp-bat-slave) + :event + swamp-bat-slave-event-handler + :code + (behavior () + (set! (-> self strafe-envelope) 0.0) + (ja-channel-push! 1 30) + (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) + ) + (until (ja-done? 0) + (if (< (ja-aframe-num 0) 10.0) + (sync-now! (-> self sync) 0.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 strafe-envelope) 20480.0) + (ja-channel-push! 1 30) + (let ((v1-18 (-> self skel root-channel 0))) + (set! + (-> v1-18 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + ) + (while #t + (if (>= (dummy-20 self) 2.0) + (go swamp-bat-slave-strafe) + ) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) 1.0) + (joint-control-channel-group-eval! + a0-11 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-path-post) + ) + +;; failed to figure out what this is: +(defstate swamp-bat-slave-strafe (swamp-bat-slave) + :event + swamp-bat-slave-event-handler + :code + (behavior () + (set! (-> self strafe-envelope) 20480.0) + (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 7)) + ) + ) + (while #t + (if (>= (dummy-20 self) 6.0) + (go swamp-bat-slave-return) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-path-post) + ) + +;; failed to figure out what this is: +(defstate swamp-bat-slave-return (swamp-bat-slave) + :event + swamp-bat-slave-event-handler + :code + (behavior () + (set! (-> self strafe-envelope) 0.0) + (ja-channel-push! 1 22) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + ) + (let ((f30-0 (+ -1.0 (-> self path-point-count))) + (gp-0 #t) + ) + (while #t + (let ((f28-0 (dummy-20 self))) + (if (>= f28-0 f30-0) + (go swamp-bat-slave-idle) + ) + (when (and gp-0 (>= f28-0 7.0) (< f28-0 8.0)) + (set! gp-0 #f) + (when (!= (-> self path-select) (-> self parent-process 0 path-select)) + (swamp-bat-slave-get-new-path) + (go swamp-bat-slave-idle) + ) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) 1.0) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-path-post) + ) + +;; failed to figure out what this is: +(defstate swamp-bat-slave-die (swamp-bat-slave) + :event + (the-as + (function process int symbol event-message-block object :behavior swamp-bat-slave) + process-drawable-death-event-handler + ) + :code + (behavior ((arg0 handle)) + (ja-channel-push! 1 21) + (let ((gp-0 (new-stack-vector0))) + (let ((v1-1 (handle->process arg0))) + (if v1-1 + (vector-! + gp-0 + (-> self root-override trans) + (-> (the-as swamp-bat v1-1) root-override trans) + ) + ) + ) + (set! (-> gp-0 y) (+ -6144.0 (-> gp-0 y))) + (vector-normalize! gp-0 98304.0) + (let ((v1-8 (-> self skel root-channel 0))) + (set! + (-> v1-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + ) + (until (ja-done? 0) + (vector-v++! (-> self root-override trans) gp-0) + (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) 0.5) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (suspend) + ) + ) + (dummy-18 self) + (none) + ) + :post + (the-as (function none :behavior swamp-bat-slave) swamp-bat-slave-post) + ) + +;; definition for function swamp-bat-slave-init-by-other +;; Used lq/sq +(defbehavior + swamp-bat-slave-init-by-other swamp-bat-slave + ((arg0 swamp-bat-slave) (arg1 int)) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (let + ((s4-0 + (new + 'process + 'collide-shape-moving + self + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 1) 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 6144.0) + (dummy-46 s4-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 3) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> self root-override) s4-0) + ) + (set! (-> self root-override trans quad) (-> arg0 root-override trans quad)) + (set! + (-> self root-override quat vec quad) + (-> arg0 root-override quat vec quad) + ) + (vector-float*! (-> self root-override scale) *identity-vector* 2.0) + (set! (-> self root-override pause-adjust-distance) 286720.0) + (set! + (-> self fact) + (new + 'process + 'fact-info-enemy + self + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! (-> self idle-anim-speed) (rand-vu-float-range 0.9 1.1)) + (set! (-> self strafe-distance) 0.0) + (set! (-> self strafe-envelope) 0.0) + (set! (-> self idle-position-index) arg1) + (swamp-bat-slave-get-new-path) + (set! (-> self root-override trans quad) (-> self idle-position quad)) + (setup-params! (-> self sync) (the-as uint 1200) 0.0 0.15 0.15) + (dummy-14 self *swamp-bat-slave-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (go swamp-bat-slave-idle) + (none) + ) + +;; definition for function swamp-bat-setup-new-path +(defbehavior swamp-bat-setup-new-path swamp-bat ((arg0 int)) + (when *run-time-assert-enable* + (set-pos + *__private-assert-info* + "swamp-bat" + (the-as uint 520) + (the-as uint 2) + ) + (__assert-zero-lim-range-int + arg0 + (-> self path-count) + "path-index" + "(-> self path-count)" + ) + ) + (when (< 0.0 (the float (+ (-> self path-list arg0 curve num-cverts) -1))) + (set! (-> self path-select) arg0) + (let ((f30-0 0.0) + (f28-0 (/ 65536.0 (the float (-> self slave-count)))) + ) + (eval-path-curve-div! + (-> self path-list arg0) + (-> self path-origin) + 0.0 + 'interp + ) + (dotimes (v1-16 (-> self slave-count)) + (set! (-> self idle-position-angle v1-16) f30-0) + (+! f30-0 f28-0) + ) + ) + #f + ) + ) + +;; definition for function swamp-bat-make-path-select-plane +(defbehavior swamp-bat-make-path-select-plane swamp-bat ((arg0 int)) + (when *run-time-assert-enable* + (set-pos + *__private-assert-info* + "swamp-bat" + (the-as uint 538) + (the-as uint 2) + ) + (__assert-zero-lim-range-int + arg0 + (-> self path-count) + "path-index" + "(-> self path-count)" + ) + ) + (let* ((s5-0 (-> self path-list arg0)) + (gp-1 (TODO-RENAME-12 s5-0 (-> self path-select-plane arg0) 5.0)) + (s5-1 + (eval-path-curve-div! s5-0 (new 'stack-no-clear 'vector) 5.0 'interp) + ) + ) + (set! (-> gp-1 y) 0.0) + (vector-normalize! gp-1 1.0) + (let ((f0-3 (- (vector-dot s5-1 gp-1)))) + (set! (-> gp-1 w) f0-3) + f0-3 + ) + ) + ) + +;; definition for function swamp-bat-update-path +;; INFO: Return type mismatch symbol vs none. +(defbehavior swamp-bat-update-path swamp-bat () + (dotimes (gp-0 (-> self path-count)) + (when (!= (-> self path-select) gp-0) + (let* ((s5-0 (-> self path-select-plane gp-0)) + (f0-2 + (+ (vector-dot (target-pos 0) (the-as vector s5-0)) (-> s5-0 w)) + ) + ) + (if (< 0.0 f0-2) + (swamp-bat-setup-new-path gp-0) + ) + ) + ) + ) + (none) + ) + +;; definition for function swamp-bat-debug +;; INFO: Return type mismatch int vs none. +(defbehavior swamp-bat-debug swamp-bat () + 0 + (none) + ) + +;; definition for function swamp-bat-check-slave-paths-match? +(defbehavior swamp-bat-check-slave-paths-match? swamp-bat ((arg0 int)) + (let ((v1-0 (the-as (pointer process-tree) (-> self child-process)))) + (while v1-0 + (if + (and + (-> (the-as swamp-bat-slave (-> v1-0 0)) launch-ready) + (!= (-> (the-as swamp-bat-slave (-> v1-0 0)) path-select) arg0) + ) + (return #f) + ) + (set! v1-0 (-> v1-0 0 brother)) + ) + ) + #t + ) + +;; failed to figure out what this is: +(defstate swamp-bat-idle (swamp-bat) + :trans + swamp-bat-debug + :code + (behavior () + (when (zero? (-> self path-count)) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + ) + (while #t + (when + (and + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 60 + ) + *target* + (>= + (-> self fact-override idle-distance) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (when (not (-> self child-process)) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + ) + (swamp-bat-update-path) + (let ((s5-0 (method-of-object (-> self vol) dummy-10))) + (target-pos 5) + (if + (or + (s5-0) + (not (swamp-bat-check-slave-paths-match? (-> self path-select))) + ) + (go swamp-bat-launch-slaves) + ) + ) + ) + (let ((gp-1 (new 'static 'matrix))) + (quaternion->matrix gp-1 (-> self root-override quat)) + (set! (-> gp-1 vector 3 quad) (-> self root-override trans quad)) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat) #f) + ) + +;; definition for function swamp-bat-launch-slave +(defbehavior swamp-bat-launch-slave swamp-bat () + (let ((gp-0 (the-as (pointer process-tree) (-> self child-process))) + (v0-0 (the-as object #f)) + ) + (while (and gp-0 (not v0-0)) + (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) 'launch) + (set! v0-0 (send-event-function (ppointer->process gp-0) a1-0)) + ) + (set! gp-0 (-> gp-0 0 brother)) + ) + v0-0 + ) + ) + +;; failed to figure out what this is: +(defstate swamp-bat-launch-slaves (swamp-bat) + :trans + swamp-bat-debug + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (while #t + (swamp-bat-update-path) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 150 + ) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (if (not (swamp-bat-launch-slave)) + (go swamp-bat-idle) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-bat) #f) + ) + +;; definition for method 11 of type swamp-bat +(defmethod copy-defaults! swamp-bat ((obj swamp-bat) (arg0 res-lump)) + (let + ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (set-vector! + (-> + (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)) + local-sphere + ) + 0.0 + 0.0 + 0.0 + 0.0 + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (set! (-> obj vol) (new 'process 'vol-control obj)) + (logior! (-> obj vol flags) 3) + (set! + (-> obj path-list 0) + (new 'process 'curve-control obj 'path -1000000000.0) + ) + (set! + (-> obj path-list 1) + (new 'process 'curve-control obj 'pathb -1000000000.0) + ) + (logior! + (-> obj path-list 0 flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (logior! + (-> obj path-list 1 flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (set! (-> obj path-count) 0) + (when (< 0.0 (the float (+ (-> obj path-list 0 curve num-cverts) -1))) + (+! (-> obj path-count) 1) + (swamp-bat-make-path-select-plane 0) + ) + (when (< 0.0 (the float (+ (-> obj path-list 1 curve num-cverts) -1))) + (+! (-> obj path-count) 1) + (swamp-bat-make-path-select-plane 1) + ) + (if (!= (-> obj path-count) 2) + (go process-drawable-art-error "need 2 paths") + ) + (set! + (-> obj fact-override) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (let + ((a1-10 + (res-lump-value arg0 'num-lurkers uint128 :default (the-as uint128 6)) + ) + ) + (set! (-> obj slave-count) (max 2 (min 8 (the-as int a1-10)))) + ) + (swamp-bat-setup-new-path 0) + (swamp-bat-update-path) + (dotimes (s5-1 (-> obj slave-count)) + (let ((s4-1 (get-process *default-dead-pool* swamp-bat-slave 4512))) + (when s4-1 + (let ((t9-16 (method-of-type swamp-bat-slave activate))) + (t9-16 + (the-as swamp-bat-slave s4-1) + obj + 'swamp-bat-slave + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s4-1 swamp-bat-slave-init-by-other obj s5-1) + (-> s4-1 ppointer) + ) + ) + ) + (go swamp-bat-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc b/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc new file mode 100644 index 0000000000..0953847ceb --- /dev/null +++ b/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc @@ -0,0 +1,2033 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 292) + (new 'static 'sparticle-launch-group + :length 6 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-a-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 6 + (sp-item 1334) + (sp-item 1335) + (sp-item 1336) + (sp-item 1337) + (sp-item 1338) + (sp-item 1339) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 293) + (new 'static 'sparticle-launch-group + :length 4 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-b-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1342) + (sp-item 1339) + (sp-item 1337) + (sp-item 1334) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 294) + (new 'static 'sparticle-launch-group + :length 4 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-c-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1335) + (sp-item 1339) + (sp-item 1337) + (sp-item 1334) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 295) + (new 'static 'sparticle-launch-group + :length 3 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-a-puff" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 1346) + (sp-item 1347) + (sp-item 1348) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 296) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-b-puff" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1350) + (sp-item 1351) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 297) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-c-puff" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1353) + (sp-item 1354) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1353) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 1.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 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 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.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.14222223) + (sp-rnd-flt spt-accel-y -0.34133333 -0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1354) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 85.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1355) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters -4.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 48.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 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.07111111) + (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 80.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1350) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters -0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 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 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.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.14222223) + (sp-rnd-flt spt-accel-y -0.34133333 -0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1351) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters -1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 85.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 3.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1352) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters -10.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 48.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 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.07111111) + (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 80.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1334) + (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 1.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-flt spt-r 196.0) + (sp-flt spt-g 160.0) + (sp-flt spt-b 96.0) + (sp-flt spt-a 32.0) + (sp-flt spt-fade-a -1.0) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1341) + (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 -12.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-flt spt-r 128.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 96.0) + (sp-flt spt-a 16.0) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1339) + (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-rnd-flt spt-num 8.0 8.0 1.0) + (sp-rnd-flt spt-y (meters -1.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.75) (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 48.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.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.08) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.85333335) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-flt spt-friction 0.92) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 40.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.5) (meters 1.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1335) + (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-rnd-flt spt-num 16.0 8.0 1.0) + (sp-rnd-flt spt-y (meters -2.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 48.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.21333334) + (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1340) + (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-rnd-flt spt-num 10.0 5.0 1.0) + (sp-rnd-flt spt-y (meters -12.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 48.0 32.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.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.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.10666667) + (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1336) + (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-rnd-flt spt-num 12.0 8.0 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 48.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.21333334) + (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 50.000004) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 1.0) (meters 1.75) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1337) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 8.0 16.0 1.0) + (sp-rnd-flt spt-y (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.6) 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 32.0 16.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 2.4) 1.0) + (sp-rnd-flt spt-accel-y -8.192 -2.7306666 1.0) + (sp-int spt-timer 750) + (sp-cpuinfo-flags bit2 bit12) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-rnd-flt spt-conerot-x (degrees 15.0) (degrees 60.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 3.5) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1338) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) + (sp-rnd-flt spt-num 32.0 32.0 1.0) + (sp-rnd-flt spt-y (meters 2.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.25) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -6.826667 1.0) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 3.5) (meters 1.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1346) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 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 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.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.14222223) + (sp-rnd-flt spt-accel-y -0.34133333 -0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.5) (meters 1.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1349) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters -12.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 48.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 8.0 8.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.035555556) + (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 80.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.5) (meters 1.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1347) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (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.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 3.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1348) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) + (sp-rnd-flt spt-num 0.5 0.5 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.25) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 3.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1342) + (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-rnd-flt spt-num 20.0 8.0 1.0) + (sp-rnd-flt spt-y (meters -3.5) (meters 2.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 48.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.21333334) + (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1343) + (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-rnd-flt spt-num 16.0 5.0 1.0) + (sp-rnd-flt spt-y (meters -10.5) (meters 2.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 48.0 32.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.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.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.10666667) + (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1344) + (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 -5.0) + (sp-flt spt-y (meters -12.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-flt spt-r 128.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 96.0) + (sp-flt spt-a 16.0) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1345) + (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-rnd-flt spt-num 12.0 4.0 1.0) + (sp-rnd-flt spt-y (meters -4.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 48.0 32.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 48.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.16) + (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) + +;; definition of type swamp-rat-nest +(deftype swamp-rat-nest (process-drawable) + ((child-process (pointer swamp-rat-nest-dummy) :offset 20) + (fact-override fact-info-enemy :offset 144) + (dummy (pointer swamp-rat-nest-dummy) :offset-assert 176) + (damaged symbol :offset-assert 180) + (dummy-type int8 :offset-assert 184) + (rat-count int8 :offset-assert 185) + (hit-points int8 :offset-assert 186) + (defensive-rat-count int8 :offset-assert 187) + (spawn-period float :offset-assert 188) + (spawn-period-scale float :offset-assert 192) + (test-interval 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 swamp-rat-nest +(defmethod inspect swamp-rat-nest ((obj swamp-rat-nest)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tdummy: #x~X~%" (-> obj dummy)) + (format #t "~T~Tdamaged: ~A~%" (-> obj damaged)) + (format #t "~T~Tdummy-type: ~D~%" (-> obj dummy-type)) + (format #t "~T~Trat-count: ~D~%" (-> obj rat-count)) + (format #t "~T~Thit-points: ~D~%" (-> obj hit-points)) + (format #t "~T~Tdefensive-rat-count: ~D~%" (-> obj defensive-rat-count)) + (format #t "~T~Tspawn-period: ~f~%" (-> obj spawn-period)) + (format #t "~T~Tspawn-period-scale: ~f~%" (-> obj spawn-period-scale)) + (format #t "~T~Ttest-interval: ~D~%" (-> obj test-interval)) + (format #t "~T~Tplayer-attack-id: ~D~%" (-> obj player-attack-id)) + obj + ) + +;; definition of type swamp-rat-nest-dummy +(deftype swamp-rat-nest-dummy (process-drawable) + ((parent-process (pointer swamp-rat-nest) :offset 12) + (root-override collide-shape :offset 112) + (top-sphere sphere :inline :offset-assert 176) + (death-part sparticle-launch-group :offset-assert 192) + (spawn-joint-array int8 6 :offset-assert 196) + (spawn-joint-count int8 :offset-assert 202) + (particle-spawn-joint int8 :offset-assert 203) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xcc + :flag-assert #x16006000cc + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) int 21) + ) + ) + +;; definition for method 3 of type swamp-rat-nest-dummy +(defmethod inspect swamp-rat-nest-dummy ((obj swamp-rat-nest-dummy)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttop-sphere: #~%" (-> obj top-sphere)) + (format #t "~T~Tdeath-part: ~A~%" (-> obj death-part)) + (format #t "~T~Tspawn-joint-array[6] @ #x~X~%" (-> obj spawn-joint-array)) + (format #t "~T~Tspawn-joint-count: ~D~%" (-> obj spawn-joint-count)) + (format #t "~T~Tparticle-spawn-joint: ~D~%" (-> obj particle-spawn-joint)) + obj + ) + +;; definition of type swamp-rat-nest-dummy-a +(deftype swamp-rat-nest-dummy-a (swamp-rat-nest-dummy) + () + :heap-base #x60 + :method-count-assert 22 + :size-assert #xcc + :flag-assert #x16006000cc + ) + +;; definition for method 3 of type swamp-rat-nest-dummy-a +(defmethod inspect swamp-rat-nest-dummy-a ((obj swamp-rat-nest-dummy-a)) + (let ((t9-0 (method-of-type swamp-rat-nest-dummy inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition of type swamp-rat-nest-dummy-b +(deftype swamp-rat-nest-dummy-b (swamp-rat-nest-dummy) + () + :heap-base #x60 + :method-count-assert 22 + :size-assert #xcc + :flag-assert #x16006000cc + ) + +;; definition for method 3 of type swamp-rat-nest-dummy-b +(defmethod inspect swamp-rat-nest-dummy-b ((obj swamp-rat-nest-dummy-b)) + (let ((t9-0 (method-of-type swamp-rat-nest-dummy inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition of type swamp-rat-nest-dummy-c +(deftype swamp-rat-nest-dummy-c (swamp-rat-nest-dummy) + () + :heap-base #x60 + :method-count-assert 22 + :size-assert #xcc + :flag-assert #x16006000cc + ) + +;; definition for method 3 of type swamp-rat-nest-dummy-c +(defmethod inspect swamp-rat-nest-dummy-c ((obj swamp-rat-nest-dummy-c)) + (let ((t9-0 (method-of-type swamp-rat-nest-dummy inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for function swamp-rat-nest-dummy-draw-spawn-joints +(defbehavior swamp-rat-nest-dummy-draw-spawn-joints swamp-rat-nest-dummy () + (dotimes (gp-0 (-> self spawn-joint-count)) + (let* ((a0-0 (-> self spawn-joint-array gp-0)) + (a2-0 (-> self node-list data a0-0 bone transform)) + ) + (add-debug-matrix #t (bucket-id debug-draw1) a2-0) + ) + ) + #f + ) + +;; definition for function swamp-rat-nest-dummy-take-damage +(defbehavior swamp-rat-nest-dummy-take-damage swamp-rat-nest-dummy ((arg0 int)) + (when (not (-> self parent-process 0 damaged)) + (set! (-> self parent-process 0 damaged) #t) + (+! + (-> self parent-process 0 rat-count) + (-> self parent-process 0 defensive-rat-count) + ) + (set! (-> self parent-process 0 spawn-period) 600.0) + ) + (let ((v0-0 (- (-> self parent-process 0 hit-points) arg0))) + (set! (-> self parent-process 0 hit-points) v0-0) + v0-0 + ) + ) + +;; definition for function swamp-rat-nest-dummy-event-handler +;; INFO: Return type mismatch none vs object. +(defbehavior + swamp-rat-nest-dummy-event-handler swamp-rat-nest-dummy + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'shake) + (if (= (-> self next-state name) 'swamp-rat-nest-dummy-idle) + (go swamp-rat-nest-dummy-shake) + ) + ) + ((= v1-0 'attack) + (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) 'hit) + (send-event-function + (ppointer->process (-> self parent-process)) + a1-1 + ) + ) + (let ((v1-7 (-> arg3 param 2))) + (when (!= v1-7 (-> self parent-process 0 player-attack-id)) + (set! + (-> self parent-process 0 player-attack-id) + (the-as int v1-7) + ) + (cond + ((and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (swamp-rat-nest-dummy-take-damage 3) + (when + (< + (vector-vector-distance + (target-pos 0) + (-> self top-sphere) + ) + (-> self top-sphere w) + ) + (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) 'no-look-around) + (set! (-> a1-3 param 0) (the-as uint 75)) + (send-event-function *target* a1-3) + ) + ) + (go swamp-rat-nest-dummy-hit) + ) + (else + (level-hint-spawn + (game-text-id swamp-rats-nest-hint) + "sksp0144" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (swamp-rat-nest-dummy-take-damage 0) + (go swamp-rat-nest-dummy-hit) + ) + ) + ) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate swamp-rat-nest-dummy-idle (swamp-rat-nest-dummy) + :event + swamp-rat-nest-dummy-event-handler + :code + (behavior () + (while #t + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 num-func) num-func-identity) + (set! + (-> v1-2 frame-num) + (the float (+ (-> v1-2 frame-group data 0 length) -1)) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest-dummy) transform-post) + ) + +;; failed to figure out what this is: +(defstate swamp-rat-nest-dummy-hit (swamp-rat-nest-dummy) + :event + swamp-rat-nest-dummy-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (if (<= (-> self parent-process 0 hit-points) 0) + (go swamp-rat-nest-dummy-die) + ) + (none) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-0 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (< (-> self parent-process 0 hit-points) 3) + (spawn + (-> self part) + (-> + self + node-list + data + (-> self particle-spawn-joint) + bone + transform + vector + 3 + ) + ) + ) + (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 swamp-rat-nest-dummy-idle) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest-dummy) transform-post) + ) + +;; failed to figure out what this is: +(defstate swamp-rat-nest-dummy-shake (swamp-rat-nest-dummy) + :event + swamp-rat-nest-dummy-event-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-0 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 param 0) + (the float (+ (-> a0-1 frame-group data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! + a0-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go swamp-rat-nest-dummy-idle) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest-dummy) transform-post) + ) + +;; failed to figure out what this is: +(defstate swamp-rat-nest-dummy-die (swamp-rat-nest-dummy) + :event + (the-as + (function process int symbol event-message-block object :behavior swamp-rat-nest-dummy) + #f + ) + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! + (-> self parent-process 0 dummy) + (the-as (pointer swamp-rat-nest-dummy) #f) + ) + (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 + (-> self death-part) + -1 + #f + #f + #f + (-> + self + node-list + data + (-> self particle-spawn-joint) + bone + transform + vector + 3 + ) + ) + (-> gp-0 ppointer) + ) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 30 + ) + (suspend) + ) + (ja-channel-set! 0) + (while (-> self child) + (suspend) + ) + (deactivate self) + (none) + ) + ) + +;; definition for function swamp-rat-nest-dummy-init-by-other +;; Used lq/sq +(defbehavior + swamp-rat-nest-dummy-init-by-other swamp-rat-nest-dummy + ((arg0 swamp-rat-nest-dummy)) + (let ((gp-0 (-> arg0 entity))) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (dummy-20 self) + (process-drawable-from-entity! self gp-0) + (set! (-> self top-sphere quad) (-> self root-override trans quad)) + (set! (-> self top-sphere y) (+ 24576.0 (-> self top-sphere y))) + (set! (-> self top-sphere w) 18432.0) + (set! (-> self entity) gp-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-current-poly! + (-> self nav) + (TODO-RENAME-18 (-> self nav) (-> self root-override trans)) + ) + (+! (-> self parent-process 0 hit-points) 3) + (dummy-21 self) + (when (zero? (-> self skel)) + (set! (-> self spawn-joint-count) 0) + 0 + ) + (if (zero? (-> self parent-process 0 dummy-type)) + (go swamp-rat-nest-dummy-idle) + (go swamp-rat-nest-dummy-hit) + ) + (none) + ) + +;; definition for function swamp-rat-nest-default-event-handler +;; INFO: Return type mismatch none vs object. +(defbehavior + swamp-rat-nest-default-event-handler swamp-rat-nest + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'victory) + (go swamp-rat-nest-victory) + ) + ) + ) + ) + +;; failed to figure out what this is: +swamp-rat-nest-default-event-handler + +;; definition for function swamp-rat-nest-pick-spawn-joint +;; Used lq/sq +(defbehavior swamp-rat-nest-pick-spawn-joint swamp-rat-nest () + (when + (and + *target* + (>= + 32768.0 + (vector-vector-distance (-> self root trans) (-> *target* control trans)) + ) + ) + (dotimes (gp-0 5) + (let* + ((s5-0 + (-> + self + dummy + 0 + spawn-joint-array + (rand-vu-int-count (-> self dummy 0 spawn-joint-count)) + ) + ) + (v1-15 (-> self dummy 0 node-list data s5-0 bone)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s3-0 quad) (-> v1-15 transform vector 3 quad)) + (let + ((s2-0 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> v1-15 transform vector 1) + 1.0 + ) + ) + (s4-1 (vector-! (new 'stack-no-clear 'vector) (target-pos 0) s3-0)) + ) + (set! (-> s4-1 y) 0.0) + (vector-normalize! s4-1 1.0) + (if (< (vector-dot s2-0 s4-1) (cos 8192.0)) + (return s5-0) + ) + ) + ) + ) + ) + (-> + self + dummy + 0 + spawn-joint-array + (rand-vu-int-count (-> self dummy 0 spawn-joint-count)) + ) + ) + +;; definition for function swamp-rat-nest-spawn-rat +;; WARN: Function may read a register that is not set: t2 +;; Used lq/sq +(defbehavior swamp-rat-nest-spawn-rat swamp-rat-nest () + (local-vars (t2-0 none)) + (when (and (-> self dummy) (> (-> self dummy 0 spawn-joint-count) 0)) + (let* ((v1-5 (swamp-rat-nest-pick-spawn-joint)) + (v1-8 (-> self dummy 0 node-list data v1-5 bone)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> gp-0 quad) (-> v1-8 transform vector 3 quad)) + (let + ((s5-0 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> v1-8 transform vector 1) + 1.0 + ) + ) + (s4-0 (if (= (-> self fact-override pickup-type) (pickup-type none)) + 0 + 9 + ) + ) + (s3-0 (get-process *default-dead-pool* swamp-rat #x4000)) + ) + (when s3-0 + (let ((t9-3 (method-of-type swamp-rat activate))) + (t9-3 + (the-as swamp-rat s3-0) + self + 'swamp-rat + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s3-0 swamp-rat-init-by-other self gp-0 s5-0 s4-0 t2-0) + (-> s3-0 ppointer) + ) + ) + ) + ) + ) + +;; definition for function swamp-rat-nest-check-dummy +;; INFO: Return type mismatch float vs none. +(defbehavior swamp-rat-nest-check-dummy swamp-rat-nest () + (when (not (-> self dummy)) + (let ((v1-1 (-> self dummy-type))) + (cond + ((zero? v1-1) + (let + ((gp-0 (get-process *default-dead-pool* swamp-rat-nest-dummy-a #x4000))) + (set! (-> self dummy) (the-as (pointer swamp-rat-nest-dummy) (when gp-0 + (let + ((t9-1 + (method-of-type + swamp-rat-nest-dummy-a + activate + ) + ) + ) + (t9-1 + (the-as + swamp-rat-nest-dummy-a + gp-0 + ) + self + 'swamp-rat-nest-dummy-a + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + gp-0 + swamp-rat-nest-dummy-init-by-other + self + ) + (-> + gp-0 + ppointer + ) + ) + ) + ) + ) + ) + ((= v1-1 1) + (let + ((gp-1 (get-process *default-dead-pool* swamp-rat-nest-dummy-b #x4000))) + (set! (-> self dummy) (the-as (pointer swamp-rat-nest-dummy) (when gp-1 + (let + ((t9-4 + (method-of-type + swamp-rat-nest-dummy-b + activate + ) + ) + ) + (t9-4 + (the-as + swamp-rat-nest-dummy-b + gp-1 + ) + self + 'swamp-rat-nest-dummy-b + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + gp-1 + swamp-rat-nest-dummy-init-by-other + self + ) + (-> + gp-1 + ppointer + ) + ) + ) + ) + ) + ) + ((= v1-1 2) + (let + ((gp-2 (get-process *default-dead-pool* swamp-rat-nest-dummy-c #x4000))) + (set! (-> self dummy) (the-as (pointer swamp-rat-nest-dummy) (when gp-2 + (let + ((t9-7 + (method-of-type + swamp-rat-nest-dummy-c + activate + ) + ) + ) + (t9-7 + (the-as + swamp-rat-nest-dummy-c + gp-2 + ) + self + 'swamp-rat-nest-dummy-c + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + gp-2 + swamp-rat-nest-dummy-init-by-other + self + ) + (-> + gp-2 + ppointer + ) + ) + ) + ) + ) + ) + (else + (go swamp-rat-nest-die) + ) + ) + ) + (+! (-> self dummy-type) 1) + (set! (-> self spawn-period) (* 0.75 (-> self spawn-period))) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate swamp-rat-nest-idle (swamp-rat-nest) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'hit) + (go swamp-rat-nest-active) + ) + ) + ) + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (if + (and + *target* + (>= + (-> self fact-override idle-distance) + (vector-vector-distance (-> self root trans) (-> *target* control trans)) + ) + ) + (go swamp-rat-nest-active) + ) + (none) + ) + :code + (behavior () + (swamp-rat-nest-check-dummy) + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest) #f) + ) + +;; failed to figure out what this is: +(defstate swamp-rat-nest-active (swamp-rat-nest) + :event + swamp-rat-nest-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (swamp-rat-nest-check-dummy) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> self test-interval)) + ) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self test-interval) (the-as uint 60)) + (let ((v1-6 0)) + (let ((a0-2 (the-as (pointer process-tree) (-> self child-process)))) + (while a0-2 + (if (= (-> (ppointer->process a0-2) type) swamp-rat) + (+! v1-6 1) + ) + (set! a0-2 (-> a0-2 0 brother)) + ) + ) + (if (< v1-6 (-> self rat-count)) + (go swamp-rat-nest-gestate) + ) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest) #f) + ) + +;; failed to figure out what this is: +(defstate swamp-rat-nest-gestate (swamp-rat-nest) + :event + swamp-rat-nest-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (swamp-rat-nest-check-dummy) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the int (* (-> self spawn-period-scale) (-> self spawn-period))) + ) + (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) 'shake) + (send-event-function (ppointer->process (-> self dummy)) a1-0) + ) + (swamp-rat-nest-spawn-rat) + (go swamp-rat-nest-active) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest) #f) + ) + +;; failed to figure out what this is: +(defstate swamp-rat-nest-victory (swamp-rat-nest) + :event + (the-as + (function process int symbol event-message-block object :behavior swamp-rat-nest) + #f + ) + :code + (behavior () + (let ((gp-0 (the-as (pointer process-tree) (-> self child-process)))) + (while gp-0 + (let* ((s5-0 (ppointer->process gp-0)) + (a0-1 + (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) swamp-rat)) + s5-0 + ) + ) + ) + (when a0-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) 'victory) + (send-event-function (the-as process a0-1) a1-1) + ) + ) + ) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (go swamp-rat-nest-active) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest) #f) + ) + +;; failed to figure out what this is: +(defstate swamp-rat-nest-die (swamp-rat-nest) + :event + swamp-rat-nest-default-event-handler + :code + (behavior () + (process-entity-status! self (entity-perm-status complete) #t) + (process-entity-status! self (entity-perm-status dead) #t) + (TODO-RENAME-9 + (-> self fact-override) + #t + *entity-pool* + (-> self fact-override) + 0 + ) + (while (-> self child-process) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat-nest) #f) + ) + +;; definition for method 11 of type swamp-rat-nest +(defmethod copy-defaults! swamp-rat-nest ((obj swamp-rat-nest) (arg0 res-lump)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! + (-> obj fact-override) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (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) + ) + (let + ((s5-1 + (res-lump-value arg0 'num-lurkers uint128 :default (the-as uint128 3)) + ) + ) + (let* ((a0-8 *game-info*) + (t9-5 (method-of-object a0-8 get-health-percent-lost)) + ) + (if (>= (t9-5 a0-8) 0.5) + (+! s5-1 -1) + ) + ) + (set! (-> obj rat-count) (max 1 (min 4 (the-as int s5-1)))) + ) + (set! (-> obj defensive-rat-count) 2) + (let* ((a0-11 *game-info*) + (t9-6 (method-of-object a0-11 get-health-percent-lost)) + ) + (if (>= (t9-6 a0-11) 0.75) + (+! (-> obj defensive-rat-count) -1) + ) + ) + (set! (-> obj dummy) (the-as (pointer swamp-rat-nest-dummy) #f)) + (set! (-> obj dummy-type) 0) + (set! (-> obj hit-points) 0) + (set! (-> obj damaged) #f) + (set! (-> obj spawn-period) (* 1200.0 (rand-vu-float-range 0.9 1.1))) + (let* ((f30-1 1.0) + (f28-0 2.0) + (a0-13 *game-info*) + (t9-8 (method-of-object a0-13 get-health-percent-lost)) + ) + (set! (-> obj spawn-period-scale) (+ f30-1 (* f28-0 (t9-8 a0-13)))) + ) + (set! (-> obj test-interval) (the-as uint (rand-vu-int-range 30 60))) + (go swamp-rat-nest-idle) + (none) + ) + +;; failed to figure out what this is: +(let + ((v1-51 + (new 'static 'skeleton-group + :art-group-name "swamp-rat-nest" + :bounds (new 'static 'vector :w 32768.0) + :max-lod 1 + :version #x6 + ) + ) + ) + (set! (-> v1-51 jgeo) 0) + (set! (-> v1-51 janim) 3) + (set! (-> v1-51 mgeo 0) (the-as uint 1)) + (set! (-> v1-51 lod-dist 0) 81920.0) + (set! (-> v1-51 mgeo 1) (the-as uint 2)) + (set! (-> v1-51 lod-dist 1) 4095996000.0) + (set! *swamp-rat-nest-dummy-a-sg* v1-51) + ) + +;; failed to figure out what this is: +(let + ((v1-52 + (new 'static 'skeleton-group + :art-group-name "swamp-rat-nest" + :bounds (new 'static 'vector :w 32768.0) + :max-lod 1 + :version #x6 + ) + ) + ) + (set! (-> v1-52 jgeo) 4) + (set! (-> v1-52 janim) 7) + (set! (-> v1-52 mgeo 0) (the-as uint 5)) + (set! (-> v1-52 lod-dist 0) 81920.0) + (set! (-> v1-52 mgeo 1) (the-as uint 6)) + (set! (-> v1-52 lod-dist 1) 4095996000.0) + (set! *swamp-rat-nest-dummy-b-sg* v1-52) + ) + +;; failed to figure out what this is: +(let + ((v1-53 + (new 'static 'skeleton-group + :art-group-name "swamp-rat-nest" + :bounds (new 'static 'vector :w 20480.0) + :version #x6 + ) + ) + ) + (set! (-> v1-53 jgeo) 8) + (set! (-> v1-53 janim) 11) + (set! (-> v1-53 mgeo 0) (the-as uint 9)) + (set! (-> v1-53 lod-dist 0) 4095996000.0) + (set! *swamp-rat-nest-dummy-c-sg* v1-53) + ) + +;; definition for method 20 of type swamp-rat-nest-dummy-a +(defmethod dummy-20 swamp-rat-nest-dummy-a ((obj swamp-rat-nest-dummy-a)) + (let + ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let + ((s4-0 + (new + 'process + 'collide-shape-prim-mesh + s5-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 12288.0 0.0 20480.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-override) s5-0) + ) + (dummy-14 obj *swamp-rat-nest-dummy-a-sg* '()) + (none) + ) + +;; definition for method 20 of type swamp-rat-nest-dummy-b +(defmethod dummy-20 swamp-rat-nest-dummy-b ((obj swamp-rat-nest-dummy-b)) + (let + ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let + ((s4-0 + (new + 'process + 'collide-shape-prim-mesh + s5-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 12288.0 0.0 16384.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-override) s5-0) + ) + (dummy-14 obj *swamp-rat-nest-dummy-b-sg* '()) + (none) + ) + +;; definition for method 20 of type swamp-rat-nest-dummy-c +(defmethod dummy-20 swamp-rat-nest-dummy-c ((obj swamp-rat-nest-dummy-c)) + (let + ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let + ((s4-0 + (new + 'process + 'collide-shape-prim-mesh + s5-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 12288.0 0.0 12288.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-override) s5-0) + ) + (dummy-14 obj *swamp-rat-nest-dummy-c-sg* '()) + (none) + ) + +;; definition for method 21 of type swamp-rat-nest-dummy-a +(defmethod dummy-21 swamp-rat-nest-dummy-a ((obj swamp-rat-nest-dummy-a)) + (let ((v1-0 0)) + (let* + ((a0-1 + '( + (the binteger 5) (the binteger 6) (the binteger 7) (the binteger 8) (the binteger 9) (the binteger 10) + ) + ) + (a1-0 (car a0-1)) + ) + (while (not (null? a0-1)) + (when (< v1-0 6) + (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) + (+! v1-0 1) + ) + (set! a0-1 (cdr a0-1)) + (set! a1-0 (car a0-1)) + ) + ) + (set! (-> obj spawn-joint-count) v1-0) + ) + (set! (-> obj death-part) (-> *part-group-id-table* 292)) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 295) obj) + ) + (let ((v0-1 6)) + (set! (-> obj particle-spawn-joint) v0-1) + v0-1 + ) + ) + +;; definition for method 21 of type swamp-rat-nest-dummy-b +(defmethod dummy-21 swamp-rat-nest-dummy-b ((obj swamp-rat-nest-dummy-b)) + (let ((v1-0 0)) + (let* + ((a0-1 + '( + (the binteger 5) (the binteger 9) (the binteger 10) (the binteger 6) (the binteger 7) (the binteger 8) + ) + ) + (a1-0 (car a0-1)) + ) + (while (not (null? a0-1)) + (when (< v1-0 6) + (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) + (+! v1-0 1) + ) + (set! a0-1 (cdr a0-1)) + (set! a1-0 (car a0-1)) + ) + ) + (set! (-> obj spawn-joint-count) v1-0) + ) + (set! (-> obj death-part) (-> *part-group-id-table* 293)) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 296) obj) + ) + (let ((v0-1 9)) + (set! (-> obj particle-spawn-joint) v0-1) + v0-1 + ) + ) + +;; definition for method 21 of type swamp-rat-nest-dummy-c +(defmethod dummy-21 swamp-rat-nest-dummy-c ((obj swamp-rat-nest-dummy-c)) + (let ((v1-0 0)) + (let* ((a0-1 '((the binteger 5) (the binteger 6))) + (a1-0 (car a0-1)) + ) + (while (not (null? a0-1)) + (when (< v1-0 6) + (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) + (+! v1-0 1) + ) + (set! a0-1 (cdr a0-1)) + (set! a1-0 (car a0-1)) + ) + ) + (set! (-> obj spawn-joint-count) v1-0) + ) + (set! (-> obj death-part) (-> *part-group-id-table* 294)) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 297) obj) + ) + (let ((v0-1 5)) + (set! (-> obj particle-spawn-joint) v0-1) + v0-1 + ) + ) diff --git a/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc b/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc new file mode 100644 index 0000000000..43b84b4165 --- /dev/null +++ b/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc @@ -0,0 +1,963 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type swamp-rat +(deftype swamp-rat (nav-enemy) + ((up-vector vector :inline :offset-assert 400) + (state-float float :offset-assert 416) + (state-vector vector :inline :offset-assert 432) + (_hack uint64 :offset-assert 448) + (wiggle-time uint64 :offset-assert 456) + (wiggle-angle float :offset-assert 464) + (delta-wiggle-angle float :offset-assert 468) + (wiggle-factor float :offset-assert 472) + (min-height float :offset-assert 476) + (chase-rest-time uint64 :offset-assert 480) + (target-nav-time uint64 :offset-assert 488) + ) + :heap-base #x180 + :method-count-assert 76 + :size-assert #x1f0 + :flag-assert #x4c018001f0 + ) + +;; definition for method 3 of type swamp-rat +(defmethod inspect swamp-rat ((obj swamp-rat)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~T~Tup-vector: #~%" (-> obj up-vector)) + (format #t "~T~Tstate-float: ~f~%" (-> obj state-float)) + (format #t "~T~Tstate-vector: ~`vector`P~%" (-> obj state-vector)) + (format #t "~T~Tfree-time: ~D~%" (-> obj free-time)) + (format #t "~T~Twiggle-time: ~D~%" (-> obj wiggle-time)) + (format #t "~T~Twiggle-angle: ~f~%" (-> obj wiggle-angle)) + (format #t "~T~Tdelta-wiggle-angle: ~f~%" (-> obj delta-wiggle-angle)) + (format #t "~T~Twiggle-factor: ~f~%" (-> obj wiggle-factor)) + (format #t "~T~Tmin-height: ~f~%" (-> obj min-height)) + (format #t "~T~Tchase-rest-time: ~D~%" (-> obj chase-rest-time)) + (format #t "~T~Ttarget-nav-time: ~D~%" (-> obj target-nav-time)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "swamp-rat" + :bounds + (new 'static 'vector :y 4096.0 :w 16384.0) + :max-lod 2 + :longest-edge (meters 1.0) + :version #x6 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 4) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 163840.0) + (set! (-> v1-1 mgeo 2) (the-as uint 3)) + (set! (-> v1-1 lod-dist 2) 4095996000.0) + (set! *swamp-rat-sg* v1-1) + ) + +;; definition for method 44 of type swamp-rat +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defmethod + dummy-44 + swamp-rat + ((obj swamp-rat) (arg0 process) (arg1 event-message-block)) + (with-pp + (the-as + object + (when + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + (when + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + (let* ((s5-1 (-> obj parent)) + (a0-4 + (if (and (nonzero? s5-1) (type-type? pointer process-drawable)) + s5-1 + ) + ) + ) + (cond + (a0-4 + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) pp) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'victory) + (send-event-function (the-as process a0-4) a1-4) + ) + ) + (else + (go (method-of-object obj nav-enemy-victory)) + ) + ) + ) + ) + ) + ) + ) + ) + +;; definition for function swamp-rat-default-event-handler +;; INFO: Return type mismatch none vs object. +(defbehavior + swamp-rat-default-event-handler swamp-rat + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'victory) + (go-virtual nav-enemy-victory) + (nav-enemy-default-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + +;; failed to figure out what this is: +swamp-rat-default-event-handler + +;; definition for method 39 of type swamp-rat +;; Used lq/sq +(defmethod common-post swamp-rat ((obj swamp-rat)) + (when (logtest? (-> obj collide-info status) 1) + (vector-deg-seek + (-> obj up-vector) + (-> obj up-vector) + (-> obj collide-info surface-normal) + 910.2222 + ) + (vector-normalize! (-> obj up-vector) 1.0) + ) + (forward-up-nopitch->quaternion + (-> obj collide-info quat) + (vector-z-quaternion! (new-stack-vector0) (-> obj collide-info quat)) + (-> obj up-vector) + ) + ((the-as (function nav-enemy none) (find-parent-method swamp-rat 39)) obj) + (none) + ) + +;; definition for method 38 of type swamp-rat +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod TODO-RENAME-38 swamp-rat ((obj swamp-rat)) + (dummy-59 + (-> obj collide-info) + (-> obj collide-info transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (when (< (-> obj collide-info trans y) (-> obj min-height)) + (let ((a1-1 (new 'stack-no-clear 'vector))) + (set! (-> a1-1 quad) (-> obj collide-info trans quad)) + (set! (-> a1-1 y) (-> obj min-height)) + (TODO-RENAME-61 + (-> obj collide-info) + a1-1 + (-> obj collide-info transv) + *y-vector* + ) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-idle (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :post + (behavior () + (ja-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (behavior () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) f30-0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) f30-0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-notice (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 51) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! (-> gp-0 param 0) (ja-aframe 30.0 0)) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 30.0 0)) + (set! (-> gp-1 param 1) 1.0) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-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! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; definition for function swamp-rat-update-wiggle-params +(defbehavior swamp-rat-update-wiggle-params swamp-rat () + (let* ((f0-0 (rand-vu-float-range 0.0 1.0)) + (f1-1 (+ 1.0 (* 2.0 f0-0))) + (f2-2 f1-1) + (f2-4 (/ 1.0 f2-2)) + (f0-2 (+ 1.0 (* 0.2 f0-0))) + ) + (set! (-> self delta-wiggle-angle) (* 910.2222 f1-1)) + (set! (-> self wiggle-factor) (* 1.5 f2-4)) + (let ((f0-3 (* 28672.0 f0-2))) + (set! (-> self target-speed) f0-3) + f0-3 + ) + ) + ) + +;; definition for function swamp-rat-update-wiggle-target +;; Used lq/sq +(defbehavior swamp-rat-update-wiggle-target swamp-rat ((arg0 vector)) + (+! (-> self wiggle-angle) (-> self delta-wiggle-angle)) + (if (< 65536.0 (-> self wiggle-angle)) + (set! (-> self wiggle-angle) (+ -65536.0 (-> self wiggle-angle))) + ) + (let* ((v1-3 (-> self collide-info trans)) + (a1-1 (vector-! (new 'stack-no-clear 'vector) v1-3 arg0)) + (s3-0 + (vector-rotate-around-y! (new 'stack-no-clear 'vector) a1-1 16384.0) + ) + (v1-4 + (vector+*! + (new 'stack-no-clear 'vector) + arg0 + s3-0 + (* (-> self wiggle-factor) (sin (-> self wiggle-angle))) + ) + ) + (v0-3 (-> self nav target-pos)) + ) + (set! (-> v0-3 quad) (-> v1-4 quad)) + v0-3 + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :trans + (behavior () + (if + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> self chase-rest-time)) + ) + (go-virtual nav-enemy-victory) + ) + ((-> (method-of-type nav-enemy nav-enemy-chase) trans)) + (none) + ) + :code + (behavior () + (set! + (-> self target-nav-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (set! + (-> self wiggle-time) + (the-as uint (+ (-> *display* base-frame-counter) -3000)) + ) + (set! (-> self wiggle-angle) 0.0) + (set! (-> self chase-rest-time) (the-as uint (rand-vu-int-range 300 1200))) + (ja-channel-push! 1 51) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self wiggle-time))) + 300 + ) + (set! + (-> self wiggle-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (swamp-rat-update-wiggle-params) + ) + (suspend) + (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! + ) + ) + ) + (none) + ) + :post + (behavior () + (swamp-rat-update-wiggle-target (target-pos 0)) + (nav-enemy-travel-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stop-chase (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (-> (method-of-type nav-enemy nav-enemy-stop-chase) code) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (behavior () + (set! (-> self rotate-speed) 1456355.5) + (set! (-> self turn-time) 22) + (let ((f30-0 (rand-vu-float-range 0.8 1.2))) + (while #t + (logior! (-> self nav-enemy-flags) 16) + (ja-channel-push! 1 30) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) f30-0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (let ((gp-0 (rand-vu-int-range 300 600)) + (s5-0 (-> *display* base-frame-counter)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-0) gp-0) + (let ((v1-33 (-> self skel root-channel 0))) + (set! (-> v1-33 num-func) num-func-identity) + (set! (-> v1-33 frame-num) 0.0) + ) + (ja-blend-eval) + (suspend) + (suspend) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-give-up (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (behavior () + (ja-channel-push! 1 22) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) + (nav-enemy-get-new-patrol-point) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 frame-group) + (the-as art-joint-anim (-> self draw art-group data 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) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-attack (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (behavior () + (ja-channel-push! 1 22) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go-virtual nav-enemy-victory) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-victory (swamp-rat) + :virtual #t + :event + swamp-rat-default-event-handler + :code + (-> (method-of-type nav-enemy nav-enemy-victory) code) + ) + +;; failed to figure out what this is: +(defstate swamp-rat-spawn (swamp-rat) + :event + swamp-rat-default-event-handler + :code + (behavior () + (let ((gp-0 (new-stack-vector0))) + (set! (-> gp-0 x) 0.0) + (set! (-> gp-0 y) (- (-> *standard-dynamics* gravity-length))) + (set! (-> gp-0 z) 0.0) + (set! (-> gp-0 w) 1.0) + (let ((f30-0 0.125)) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (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 5)) + num-func-identity + ) + (set! (-> s5-0 frame-num) 0.0) + ) + (while #t + (set! f30-0 (seek f30-0 1.5 0.1)) + (vector-v++! (-> self collide-info transv) gp-0) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (when + (or + (logtest? (-> self collide-info status) 4) + (or + (< (-> self collide-info trans y) (-> self min-height)) + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self state-time)) + ) + 300 + ) + ) + ) + 0 + (goto cfg-13) + ) + (vector-float*! (-> self collide-info scale) *identity-vector* f30-0) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) 1.0) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + ) + ) + ) + (label cfg-13) + (if (< (-> self collide-info trans y) (-> self min-height)) + (set! (-> self collide-info trans y) (-> self min-height)) + ) + (set! (-> self collide-info transv quad) (-> *null-vector* quad)) + (vector-float*! (-> self collide-info scale) *identity-vector* 1.5) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-10 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + 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 6)) + 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! + ) + ) + ) + (if (TODO-RENAME-46 self (-> self nav-info stop-chase-distance)) + (go-virtual nav-enemy-chase) + (go-virtual nav-enemy-idle) + ) + (none) + ) + :post + (the-as (function none :behavior swamp-rat) nav-enemy-simple-post) + ) + +;; definition for symbol *swamp-rat-nav-enemy-info*, type nav-enemy-info +(define + *swamp-rat-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 4 + :walk-anim 7 + :turn-anim 7 + :notice-anim 8 + :run-anim 9 + :jump-anim 9 + :jump-land-anim 6 + :victory-anim 10 + :taunt-anim 10 + :die-anim 11 + :neck-joint 7 + :run-travel-speed (meters 7.0) + :run-rotate-speed (degrees 7999.9995) + :run-acceleration (meters 1.0) + :run-turn-time #x16 + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 7999.9995) + :walk-acceleration (meters 1.0) + :walk-turn-time #x16 + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 1.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 3.0) + :frustration-time #x1c2 + :die-anim-hold-frame 20.0 + :jump-anim-start-frame 19.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #f + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +;; definition for method 47 of type swamp-rat +;; INFO: Return type mismatch int vs none. +(defmethod initialize-collision swamp-rat ((obj swamp-rat)) + (let + ((s5-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 3)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 2) + (set-vector! (-> s4-0 local-sphere) 0.0 3686.4001 0.0 3686.4001) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +;; definition for method 48 of type swamp-rat +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod TODO-RENAME-48 swamp-rat ((obj swamp-rat)) + (dummy-14 obj *swamp-rat-sg* '()) + (TODO-RENAME-45 obj *swamp-rat-nav-enemy-info*) + (vector-float*! (-> obj collide-info scale) *identity-vector* 1.5) + (set! (-> obj neck up) (the-as uint 1)) + (set! (-> obj neck nose) (the-as uint 2)) + (set! (-> obj neck ear) (the-as uint 0)) + (set! (-> obj wiggle-angle) 0.0) + (set! (-> obj delta-wiggle-angle) 910.2222) + (set! (-> obj wiggle-factor) 1.5) + (set! (-> obj reaction-time) (rand-vu-int-range 30 240)) + (set! (-> obj chase-rest-time) (the-as uint 300)) + (set! (-> obj water) (new 'process 'water-control obj 7 0.0 8192.0 2048.0)) + (set! (-> obj water flags) (the-as uint 2)) + (set! (-> obj water height) (res-lump-float (-> obj entity) 'water-height)) + (set! (-> obj water ripple-size) 12288.0) + (set! (-> obj min-height) (+ -2048.0 (-> obj water height))) + (set! (-> obj up-vector quad) (-> *y-vector* quad)) + 0 + (none) + ) + +;; definition for function swamp-rat-init-by-other +;; Used lq/sq +(defbehavior + swamp-rat-init-by-other swamp-rat + ((arg0 swamp-rat-nest) + (arg1 vector) + (arg2 vector) + (arg3 pickup-type) + (arg4 symbol) + ) + (initialize-collision self) + (if arg4 + (logclear! (-> self mask) (process-mask actor-pause)) + (logior! (-> self mask) (process-mask actor-pause)) + ) + (set! (-> self collide-info trans quad) (-> arg1 quad)) + (forward-up->quaternion (-> self collide-info quat) arg2 *up-vector*) + (vector-float*! (-> self collide-info scale) *identity-vector* 1.5) + (vector-float*! (-> self collide-info transv) arg2 49152.0) + (set! (-> self entity) (-> arg0 entity)) + (TODO-RENAME-48 self) + (set! (-> self enemy-info pickup-type) arg3) + (go swamp-rat-spawn) + (none) + ) diff --git a/test/decompiler/reference/levels/village1/assistant_REF.gc b/test/decompiler/reference/levels/village1/assistant_REF.gc index f4310988d7..992d698387 100644 --- a/test/decompiler/reference/levels/village1/assistant_REF.gc +++ b/test/decompiler/reference/levels/village1/assistant_REF.gc @@ -43,7 +43,7 @@ (defmethod dummy-52 assistant ((obj assistant)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -4096.0 f0-0))) ) @@ -60,7 +60,7 @@ ) ;; definition for method 48 of type assistant -(defmethod draw-shadow assistant ((obj assistant)) +(defmethod draw-npc-shadow assistant ((obj assistant)) (-> obj draw shadow-ctrl) (cond ((and @@ -72,7 +72,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -363,27 +363,27 @@ ) (cond ((< 16384.0 (-> s5-0 y)) + #f ) ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "ASSTLP01" #f (-> obj root-override trans)) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "ASSTLP04" #f (-> obj root-override trans)) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "ASSTLP05" #f (-> obj root-override trans)) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "ASSTLP02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "ASSTLP02" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "ASSTLP03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "ASSTLP03" #f (-> obj root-override trans)) ) ) ) ) ) - (none) ) ;; failed to figure out what this is: @@ -1025,7 +1025,3 @@ ) (none) ) - - - - diff --git a/test/decompiler/reference/levels/village1/explorer_REF.gc b/test/decompiler/reference/levels/village1/explorer_REF.gc index eb1c3c43d9..cc39f3d711 100644 --- a/test/decompiler/reference/levels/village1/explorer_REF.gc +++ b/test/decompiler/reference/levels/village1/explorer_REF.gc @@ -41,7 +41,7 @@ (defmethod dummy-52 explorer ((obj explorer)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -4096.0 f0-0))) ) @@ -58,7 +58,7 @@ ) ;; definition for method 48 of type explorer -(defmethod draw-shadow explorer ((obj explorer)) +(defmethod draw-npc-shadow explorer ((obj explorer)) (-> obj draw shadow-ctrl) (cond ((and @@ -70,7 +70,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -248,7 +248,7 @@ ) (cond ((< 0.85714287 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-AM05" #f (-> obj root-override trans)) ) ((< 0.71428573 f0-2) (if @@ -259,17 +259,17 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "EXP-LO02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-LO02" #f (-> obj root-override trans)) ) ) ((< 0.5714286 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-AM04" #f (-> obj root-override trans)) ) ((< 0.42857143 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-AM03" #f (-> obj root-override trans)) ) ((< 0.2857143 f0-2) - (dummy-11 (-> obj ambient) "EXP-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-AM02" #f (-> obj root-override trans)) ) ((< 0.14285715 f0-2) (if @@ -280,16 +280,15 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "EXP-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-AM01" #f (-> obj root-override trans)) ) ) (else - (dummy-11 (-> obj ambient) "EXP-LO1A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "EXP-LO1A" #f (-> obj root-override trans)) ) ) ) ) - (none) ) ;; definition for method 47 of type explorer diff --git a/test/decompiler/reference/levels/village1/farmer_REF.gc b/test/decompiler/reference/levels/village1/farmer_REF.gc index c784279d4b..79b1eb3a5f 100644 --- a/test/decompiler/reference/levels/village1/farmer_REF.gc +++ b/test/decompiler/reference/levels/village1/farmer_REF.gc @@ -135,30 +135,31 @@ ) (cond ((< 0.8333333 f0-2) - (dummy-11 (-> obj ambient) "FAR-LO1A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "FAR-LO1A" #f (-> obj root-override trans)) ) ((< 0.6666667 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "FAR-AM01" #f (-> obj root-override trans)) ) ((< 0.5 f0-2) + #f ) ((< 0.33333334 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM2A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "FAR-AM2A" #f (-> obj root-override trans)) ) ((< 0.16666667 f0-2) - (dummy-11 (-> obj ambient) "FAR-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "FAR-AM02" #f (-> obj root-override trans)) ) (else + #f ) ) ) ) - (none) ) ;; definition for method 41 of type farmer ;; INFO: Return type mismatch int vs none. -(defmethod initialize-collision farmer ((obj farmer) (arg0 int)) +(defmethod initialize-collision farmer ((obj farmer) (arg0 int) (arg1 vector)) (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) @@ -187,7 +188,7 @@ ) (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (dummy-50 s5-0) - (set! (-> obj root) s5-0) + (set! (-> obj root-override) s5-0) ) 0 (none) @@ -196,8 +197,8 @@ ;; definition for method 11 of type farmer (defmethod copy-defaults! farmer ((obj farmer) (arg0 res-lump)) (dummy-40 obj arg0 *farmer-sg* 3 25 (new 'static 'vector :w 4096.0) 5) - (set! (-> obj root nav-radius) 40960.0) - (nav-mesh-connect obj (-> obj root) (the-as nav-control #f)) + (set! (-> obj root-override nav-radius) 40960.0) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) (set! (-> obj tasks) (get-task-control (game-task village1-yakow))) (dummy-42 obj) (none) diff --git a/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc b/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc new file mode 100644 index 0000000000..38cfd1dcdc --- /dev/null +++ b/test/decompiler/reference/levels/village1/fishermans-boat_REF.gc @@ -0,0 +1,2803 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol *fishermans-boat-constants*, type rigid-body-platform-constants +(define + *fishermans-boat-constants* + (new 'static 'rigid-body-platform-constants + :drag-factor 2.0 + :buoyancy-factor 1.5 + :max-buoyancy-depth (meters 1.0) + :gravity-factor 1.0 + :gravity (meters 80.0) + :player-weight (meters 40.0) + :player-bonk-factor 1.0 + :player-dive-factor 1.0 + :player-force-distance (meters 10.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 6 + :mass 2.0 + :inertial-tensor-x (meters 4.0) + :inertial-tensor-y (meters 10.0) + :inertial-tensor-z (meters 15.0) + :cm-joint-y (meters 3.0) + :cm-joint-z (meters 1.0) + :idle-distance (meters 50.0) + :platform #t + :sound-name #f + ) + ) + +;; definition of type boat-stabilizer +(deftype boat-stabilizer (structure) + ((local-pos vector :inline :offset-assert 0) + (normal vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +;; definition for method 3 of type boat-stabilizer +(defmethod inspect boat-stabilizer ((obj boat-stabilizer)) + (format #t "[~8x] ~A~%" obj 'boat-stabilizer) + (format #t "~Tlocal-pos: #~%" (-> obj local-pos)) + (format #t "~Tnormal: #~%" (-> obj normal)) + obj + ) + +;; definition of type vehicle-path +(deftype vehicle-path (structure) + ((point-array vector 10 :inline :offset-assert 0) + (point-count int32 :offset-assert 160) + ) + :method-count-assert 14 + :size-assert #xa4 + :flag-assert #xe000000a4 + (:methods + (get-point-count (_type_) int 9) + (nth-point (_type_ int vector) vector 10) + (distance-to-next-point (_type_ int vector) vector 11) + (add-point! (_type_ float float float float) none 12) + (debug-draw (_type_) symbol 13) + ) + ) + +;; definition for method 3 of type vehicle-path +(defmethod inspect vehicle-path ((obj vehicle-path)) + (format #t "[~8x] ~A~%" obj 'vehicle-path) + (format #t "~Tpoint-array[10] @ #x~X~%" (-> obj point-array)) + (format #t "~Tpoint-count: ~D~%" (-> obj point-count)) + obj + ) + +;; definition for method 9 of type vehicle-path +(defmethod get-point-count vehicle-path ((obj vehicle-path)) + (-> obj point-count) + ) + +;; definition for method 10 of type vehicle-path +;; Used lq/sq +(defmethod nth-point vehicle-path ((obj vehicle-path) (arg0 int) (arg1 vector)) + (set! (-> arg1 quad) (-> obj point-array arg0 quad)) + arg1 + ) + +;; definition for method 11 of type vehicle-path +(defmethod + distance-to-next-point + vehicle-path + ((obj vehicle-path) (arg0 int) (arg1 vector)) + (let ((a2-1 (+ arg0 1))) + (if (>= a2-1 (-> obj point-count)) + (set! a2-1 0) + ) + (vector-! arg1 (-> obj point-array a2-1) (-> obj point-array arg0)) + ) + (set! (-> arg1 y) 0.0) + (vector-normalize! arg1 1.0) + arg1 + ) + +;; definition for method 12 of type vehicle-path +;; INFO: Return type mismatch int vs none. +(defmethod + add-point! + vehicle-path + ((obj vehicle-path) (arg0 float) (arg1 float) (arg2 float) (arg3 float)) + (let ((v1-0 (-> obj point-count))) + (when (< v1-0 10) + (set-vector! (-> obj point-array v1-0) arg0 arg1 arg2 arg3) + (+! (-> obj point-count) 1) + ) + ) + 0 + (none) + ) + +;; definition for method 13 of type vehicle-path +;; Used lq/sq +(defmethod debug-draw vehicle-path ((obj vehicle-path)) + (local-vars (sv-64 int) (sv-80 (function _varargs_ object))) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 y) 0.0) + (set! (-> s5-0 w) 1.0) + (dotimes (s2-0 (-> obj point-count)) + (let ((v1-1 (mod (+ s2-0 1) (-> obj point-count)))) + (set! (-> s4-0 quad) (-> obj point-array s2-0 quad)) + (set! (-> s3-0 quad) (-> obj point-array v1-1 quad)) + ) + (let ((f30-0 (-> s4-0 y)) + (f28-0 (-> s4-0 w)) + ) + (set! (-> s5-0 x) (* f30-0 (cos f28-0))) + (set! (-> s5-0 z) (* f30-0 (sin f28-0))) + ) + (set! (-> s4-0 y) 0.0) + (set! (-> s4-0 w) 1.0) + (set! (-> s3-0 y) 0.0) + (set! (-> s3-0 w) 1.0) + (add-debug-line + #t + (bucket-id debug-draw1) + s4-0 + s3-0 + (new 'static 'rgba :r #xff :g #xff :a #x80) + #f + (the-as rgba -1) + ) + (add-debug-vector + #t + (bucket-id debug-draw1) + s4-0 + s5-0 + (meters 0.00024414062) + (new 'static 'rgba :r #xff :a #x80) + ) + (let ((s1-0 add-debug-text-3d) + (s0-0 #t) + ) + (set! sv-64 68) + (set! sv-80 format) + (let ((a0-9 (clear *temp-string*)) + (a1-6 "~D") + (a2-2 s2-0) + ) + (sv-80 a0-9 a1-6 a2-2) + ) + (let ((a2-3 *temp-string*) + (a3-2 s4-0) + (t0-2 4) + (t1-2 #f) + ) + (s1-0 + s0-0 + (the-as bucket-id sv-64) + a2-3 + a3-2 + (the-as font-color t0-2) + (the-as vector2h t1-2) + ) + ) + ) + ) + ) + #f + ) + +;; definition for symbol *boat-turning-radius-table*, type (pointer float) +(define + *boat-turning-radius-table* + (new 'static 'array float 32 + 409600.0 + 90931.2 + 94699.52 + 95600.64 + 100802.56 + 97566.72 + 99246.08 + 98713.6 + 95846.4 + 100474.88 + 88842.24 + 105472.0 + 95436.8 + 97525.76 + 102481.92 + 96501.76 + 97198.08 + 93102.08 + 98631.68 + 100270.08 + 96788.48 + 100884.48 + 97402.88 + 98590.72 + 97280.0 + 100065.28 + 104079.36 + 92610.56 + 97034.24 + 88309.76 + 0.0 + 0.0 + ) + ) + +;; definition for symbol *boat-throttle-control-table*, type (pointer float) +(define + *boat-throttle-control-table* + (new 'static 'array float 32 + 0.0 + 0.031 + 0.0646 + 0.0952 + 0.1237 + 0.1508 + 0.1753 + 0.2018 + 0.2231 + 0.2473 + 0.2695 + 0.2904 + 0.3119 + 0.3312 + 0.3514 + 0.3701 + 0.3906 + 0.4148 + 0.4272 + 0.4483 + 0.4686 + 0.4856 + 0.5096 + 0.5203 + 0.5507 + 0.5697 + 0.5856 + 0.6184 + 0.6366 + 0.6694 + 0.0 + 0.0 + ) + ) + +;; definition of type vehicle-controller +(deftype vehicle-controller (structure) + ((path vehicle-path :offset-assert 0) + (turning-radius-table (pointer float) :offset-assert 4) + (throttle-control-table (pointer float) :offset-assert 8) + (table-step float :offset-assert 12) + (table-length int32 :offset-assert 16) + (circle-radius float :offset-assert 20) + (throttle float :offset-assert 24) + (steering float :offset-assert 28) + (path-dest-index int8 :offset-assert 32) + (left-circle int8 :offset-assert 33) + (path-dest-point vector :inline :offset-assert 48) + (path-dest-velocity vector :inline :offset-assert 64) + (dest-circle vector :inline :offset-assert 80) + (target-point vector :inline :offset-assert 96) + (sample-dir vector :inline :offset-assert 112) + (sample-time uint64 :offset-assert 128) + (sample-index int32 :offset-assert 136) + ) + :method-count-assert 17 + :size-assert #x8c + :flag-assert #x110000008c + (:methods + (init! (_type_ vehicle-path (pointer float) (pointer float) int float) none 9) + (TODO-RENAME-10 (_type_ vector float int) none 10) + (dummy-11 (_type_) none 11) + (TODO-RENAME-12 (_type_ int vector) none 12) + (move-to-next-point (_type_ vector) none 13) + (TODO-RENAME-14 (_type_ vector vector) none 14) + (dummy-15 (_type_ collide-shape-moving) none 15) + (dummy-16 (_type_) none 16) + ) + ) + +;; definition for method 3 of type vehicle-controller +(defmethod inspect vehicle-controller ((obj vehicle-controller)) + (format #t "[~8x] ~A~%" obj 'vehicle-controller) + (format #t "~Tpath: #~%" (-> obj path)) + (format #t "~Tturning-radius-table: #x~X~%" (-> obj turning-radius-table)) + (format #t "~Tthrottle-control-table: #x~X~%" (-> obj throttle-control-table)) + (format #t "~Ttable-step: ~f~%" (-> obj table-step)) + (format #t "~Ttable-length: ~D~%" (-> obj table-length)) + (format #t "~Tcircle-radius: ~f~%" (-> obj circle-radius)) + (format #t "~Tthrottle: ~f~%" (-> obj throttle)) + (format #t "~Tsteering: ~f~%" (-> obj steering)) + (format #t "~Tpath-dest-index: ~D~%" (-> obj path-dest-index)) + (format #t "~Tleft-circle: ~D~%" (-> obj left-circle)) + (format #t "~Tpath-dest-point: #~%" (-> obj path-dest-point)) + (format + #t + "~Tpath-dest-velocity: #~%" + (-> obj path-dest-velocity) + ) + (format #t "~Tdest-circle: #~%" (-> obj dest-circle)) + (format #t "~Ttarget-point: #~%" (-> obj target-point)) + (format #t "~Tsample-dir: #~%" (-> obj sample-dir)) + (format #t "~Tsample-time: ~D~%" (-> obj sample-time)) + (format #t "~Tsample-index: ~D~%" (-> obj sample-index)) + obj + ) + +;; definition for method 7 of type vehicle-controller +;; INFO: Return type mismatch int vs vehicle-controller. +(defmethod relocate vehicle-controller ((obj vehicle-controller) (arg0 int)) + (if (nonzero? (-> obj path)) + (&+! (-> obj path) arg0) + ) + (the-as vehicle-controller 0) + ) + +;; definition for method 12 of type vehicle-controller +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod + TODO-RENAME-12 + vehicle-controller + ((obj vehicle-controller) (arg0 int) (arg1 vector)) + (when (< arg0 (get-point-count (-> obj path))) + (set! (-> obj path-dest-index) arg0) + (nth-point (-> obj path) arg0 (-> obj path-dest-point)) + (let ((f30-0 (-> obj path-dest-point y)) + (f28-0 (-> obj path-dest-point w)) + ) + (set! (-> obj path-dest-velocity x) (* f30-0 (cos f28-0))) + (set! (-> obj path-dest-velocity z) (* f30-0 (sin f28-0))) + ) + (set! (-> obj path-dest-velocity y) 0.0) + (set! (-> obj path-dest-velocity w) 1.0) + (set! (-> obj path-dest-point y) 0.0) + (set! (-> obj path-dest-point w) 1.0) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (vector-! s3-0 (-> obj path-dest-point) arg1) + (set! (-> s5-1 quad) (-> obj path-dest-velocity quad)) + (set! (-> s5-1 x) (-> obj path-dest-velocity z)) + (set! (-> s5-1 z) (- (-> obj path-dest-velocity x))) + (vector-xz-normalize! s5-1 1.0) + (set! (-> obj left-circle) 1) + (when (< 0.0 (vector-dot s3-0 s5-1)) + (set! (-> obj left-circle) 0) + (vector-float*! s5-1 s5-1 -1.0) + ) + ) + (vector+*! + (-> obj dest-circle) + (-> obj path-dest-point) + s5-1 + (-> obj circle-radius) + ) + ) + (set! (-> obj dest-circle w) (-> obj circle-radius)) + ) + 0 + (none) + ) + +;; definition for method 13 of type vehicle-controller +;; INFO: Return type mismatch int vs none. +(defmethod + move-to-next-point + vehicle-controller + ((obj vehicle-controller) (arg0 vector)) + (let ((s4-0 (+ (-> obj path-dest-index) 1))) + (if (>= s4-0 (get-point-count (-> obj path))) + (set! s4-0 0) + ) + (TODO-RENAME-12 obj s4-0 arg0) + ) + 0 + (none) + ) + +;; definition for method 14 of type vehicle-controller +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod + TODO-RENAME-14 + vehicle-controller + ((obj vehicle-controller) (arg0 vector) (arg1 vector)) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (vector-! s5-0 (-> obj dest-circle) arg0) + (let ((f30-0 (vector-xz-length s5-0)) + (f28-0 (-> obj dest-circle w)) + ) + (if (< f30-0 f28-0) + (set! f28-0 (* 0.9 f30-0)) + ) + (vector-normalize! s5-0 1.0) + (set! (-> s3-0 x) (-> s5-0 z)) + (set! (-> s3-0 z) (- (-> s5-0 x))) + (if (= (-> obj left-circle) 1) + (vector-float*! s3-0 s3-0 -1.0) + ) + (let* ((f0-5 f30-0) + (f0-7 (* f0-5 f0-5)) + (f1-0 f28-0) + (f0-9 (sqrtf (- f0-7 (* f1-0 f1-0)))) + (f28-1 (/ (* f28-0 f0-9) f30-0)) + ) + (let ((f0-12 (/ (* f0-9 f0-9) f30-0))) + (set! (-> arg1 quad) (-> arg0 quad)) + (vector+*! arg1 (-> obj target-point) s5-0 f0-12) + ) + (vector+*! arg1 (-> obj target-point) s3-0 f28-1) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 15 of type vehicle-controller +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod + dummy-15 + vehicle-controller + ((obj vehicle-controller) (arg0 collide-shape-moving)) + (TODO-RENAME-14 obj (-> arg0 trans) (-> obj target-point)) + (let ((s3-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s3-0 quad) (-> obj path-dest-velocity quad)) + (vector-xz-normalize! s3-0 1.0) + (vector-! s4-0 (-> obj path-dest-point) (-> arg0 trans)) + (let ((f30-0 (vector-dot s3-0 s4-0))) + (if (and (< (vector-xz-length s4-0) (-> obj circle-radius)) (< f30-0 0.0)) + (move-to-next-point obj (-> arg0 trans)) + ) + ) + ) + (let + ((s4-2 + (max + 0 + (min + (the + int + (/ (vector-xz-length (-> obj path-dest-velocity)) (-> obj table-step)) + ) + (+ (-> obj table-length) -1) + ) + ) + ) + ) + (set! (-> obj throttle) (-> obj throttle-control-table s4-2)) + ) + (let ((s3-1 (new 'stack-no-clear 'vector)) + (s4-3 (new 'stack-no-clear 'vector)) + ) + (vector-z-quaternion! s3-1 (-> arg0 quat)) + (vector-x-quaternion! s4-3 (-> arg0 quat)) + (let* ((v1-16 (-> arg0 trans)) + (f0-9 + (- (vector-dot s3-1 (-> obj target-point)) (vector-dot s3-1 v1-16)) + ) + (f3-0 + (- (vector-dot s4-3 (-> obj target-point)) (vector-dot s4-3 v1-16)) + ) + ) + (set! + (-> obj steering) + (fmax -1.0 (fmin 1.0 (/ (* 4.0 f3-0) (fmax 4096.0 f0-9)))) + ) + ) + ) + 0 + 0 + (none) + ) + +;; definition for method 11 of type vehicle-controller +;; INFO: Return type mismatch int vs none. +(defmethod dummy-11 vehicle-controller ((obj vehicle-controller)) + (format + #t + "(define *turning-radius-table* (new 'static 'inline-array 'float 0~%" + ) + (dotimes (s5-0 (-> obj table-length)) + (format #t " (meters ~4,,2M)~%" (-> obj turning-radius-table s5-0)) + ) + (format #t " )~%") + (format #t " )~%") + (format + #t + "(define *throttle-control-table* (new 'static 'inline-array 'float 0~%" + ) + (dotimes (s5-1 (-> obj table-length)) + (format #t " ~f~%" (-> obj throttle-control-table s5-1)) + ) + (format #t " )~%") + (format #t " )~%") + 0 + (none) + ) + +;; definition for method 10 of type vehicle-controller +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod + TODO-RENAME-10 + vehicle-controller + ((obj vehicle-controller) (arg0 vector) (arg1 float) (arg2 int)) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (set! (-> s3-0 quad) (-> arg0 quad)) + (set! (-> s3-0 y) 0.0) + (vector-xz-normalize! s3-0 1.0) + (cond + ((= arg2 (-> obj sample-index)) + (let* + ((f30-0 + (* + 0.0033333334 + (the + float + (- + (-> *display* base-frame-counter) + (the-as int (-> obj sample-time)) + ) + ) + ) + ) + (f28-0 (* (-> obj table-step) (the float arg2))) + (f0-4 (acos-rad (vector-dot s3-0 (-> obj sample-dir)))) + (f26-0 (/ (* f28-0 f30-0) f0-4)) + ) + (when (and (>= arg2 0) (< arg2 (-> obj table-length))) + (set! (-> obj turning-radius-table arg2) f26-0) + (set! (-> obj throttle-control-table arg2) arg1) + (format + #t + "sample ~d (~M m/s) angle ~f deg, time ~f sec~%" + arg2 + f28-0 + (* 57.29747 f0-4) + f30-0 + ) + (format + #t + "sample ~d (~M m/s) radius ~M throttle ~f~%" + arg2 + f28-0 + f26-0 + arg1 + ) + ) + ) + ) + (else + (set! (-> obj sample-index) arg2) + (set! (-> obj sample-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> obj sample-dir quad) (-> s3-0 quad)) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 16 of type vehicle-controller +;; INFO: Return type mismatch int vs none. +(defmethod dummy-16 vehicle-controller ((obj vehicle-controller)) + (debug-draw (-> obj path)) + (add-debug-sphere + #t + (bucket-id debug-draw1) + (-> obj dest-circle) + (-> obj dest-circle w) + (new 'static 'rgba :g #xff :a #x80) + ) + (add-debug-x + #t + (bucket-id debug-draw1) + (-> obj target-point) + (new 'static 'rgba :r #xff :g #xff :b #xff :a #x80) + ) + 0 + (none) + ) + +;; definition for method 9 of type vehicle-controller +;; INFO: Return type mismatch int vs none. +(defmethod + init! + vehicle-controller + ((obj vehicle-controller) + (arg0 vehicle-path) + (arg1 (pointer float)) + (arg2 (pointer float)) + (arg3 int) + (arg4 float) + ) + (set! (-> obj path) arg0) + (set! (-> obj turning-radius-table) arg1) + (set! (-> obj throttle-control-table) arg2) + (set! (-> obj table-length) arg3) + (set! (-> obj table-step) arg4) + (set! (-> obj circle-radius) 102400.0) + 0 + (none) + ) + +;; definition of type fishermans-boat +(deftype fishermans-boat (rigid-body-platform) + ((stabilizer-array boat-stabilizer 2 :inline :offset-assert 736) + (engine-thrust-local-pos vector :inline :offset-assert 800) + (ignition symbol :offset-assert 816) + (engine-thrust float :offset-assert 820) + (propeller joint-mod-spinner :offset-assert 824) + (dock-point vector :inline :offset-assert 832) + (dest-dir vector :inline :offset-assert 848) + (dock-point-index int8 :offset-assert 864) + (auto-pilot symbol :offset-assert 868) + (anchored symbol :offset-assert 872) + (waiting-for-player symbol :offset-assert 876) + (player-riding symbol :offset-assert 880) + (boat-path vehicle-path :inline :offset-assert 896) + (cam-tracker handle :offset-assert 1064) + (kill-player symbol :offset 1076) + (engine-sound-id sound-id :offset 1080) + (engine-sound-envelope float :offset 1084) + (debug-draw basic :offset 1088) + (debug-path-record basic :offset 1092) + (debug-path-playback basic :offset 1096) + (measure-parameters basic :offset 1100) + (controller vehicle-controller :inline :offset 1104) + (anim spool-anim :offset 1244) + (old-target-pos transformq :inline :offset 1248) + (evilbro handle :offset 1296) + (evilsis handle :offset 1304) + ) + :heap-base #x4b0 + :method-count-assert 35 + :size-assert #x520 + :flag-assert #x2304b00520 + ) + +;; definition for method 3 of type fishermans-boat +(defmethod inspect fishermans-boat ((obj fishermans-boat)) + (let ((t9-0 (method-of-type rigid-body-platform inspect))) + (t9-0 obj) + ) + (format #t "~T~Tstabilizer-array[2] @ #x~X~%" (-> obj stabilizer-array)) + (format + #t + "~T~Tengine-thrust-local-pos: #~%" + (-> obj engine-thrust-local-pos) + ) + (format #t "~T~Tignition: ~A~%" (-> obj ignition)) + (format #t "~T~Tengine-thrust: ~f~%" (-> obj engine-thrust)) + (format #t "~T~Tpropeller: ~A~%" (-> obj propeller)) + (format #t "~T~Tdock-point: #~%" (-> obj dock-point)) + (format #t "~T~Tdest-dir: #~%" (-> obj dest-dir)) + (format #t "~T~Tdock-point-index: ~D~%" (-> obj dock-point-index)) + (format #t "~T~Tauto-pilot: ~A~%" (-> obj auto-pilot)) + (format #t "~T~Tanchored: ~A~%" (-> obj anchored)) + (format #t "~T~Twaiting-for-player: ~A~%" (-> obj waiting-for-player)) + (format #t "~T~Tplayer-riding: ~A~%" (-> obj player-riding)) + (format #t "~T~Tboat-path: #~%" (-> obj boat-path)) + (format #t "~T~Tcam-tracker: ~D~%" (-> obj cam-tracker)) + (format #t "~T~Tplayer-attack-id: ~D~%" (-> obj player-attack-id)) + (format #t "~T~Tkill-player: ~A~%" (-> obj kill-player)) + (format #t "~T~Tengine-sound-id: ~D~%" (-> obj engine-sound-id)) + (format #t "~T~Tengine-sound-envelope: ~f~%" (-> obj engine-sound-envelope)) + (format #t "~T~Tdebug-draw: ~A~%" (-> obj debug-draw)) + (format #t "~T~Tdebug-path-record: ~A~%" (-> obj debug-path-record)) + (format #t "~T~Tdebug-path-playback: ~A~%" (-> obj debug-path-playback)) + (format #t "~T~Tmeasure-parameters: ~A~%" (-> obj measure-parameters)) + (format + #t + "~T~Tcontroller: #~%" + (-> obj controller) + ) + (format #t "~T~Tanim: ~A~%" (-> obj anim)) + (format + #t + "~T~Told-target-pos: #~%" + (-> obj old-target-pos) + ) + (format #t "~T~Tevilbro: ~D~%" (-> obj evilbro)) + (format #t "~T~Tevilsis: ~D~%" (-> obj evilsis)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-7 + (new 'static 'skeleton-group + :art-group-name "fishermans-boat" + :bounds + (new 'static 'vector :y 12288.0 :w 61440.0) + :max-lod 1 + :longest-edge (meters 7.3) + :version #x6 + ) + ) + ) + (set! (-> v1-7 jgeo) 0) + (set! (-> v1-7 janim) 3) + (set! (-> v1-7 mgeo 0) (the-as uint 1)) + (set! (-> v1-7 lod-dist 0) 81920.0) + (set! (-> v1-7 mgeo 1) (the-as uint 2)) + (set! (-> v1-7 lod-dist 1) 4095996000.0) + (set! *fishermans-boat-sg* v1-7) + ) + +;; failed to figure out what this is: +(let + ((v1-8 + (new 'static 'skeleton-group + :art-group-name "evilbro" + :bounds (new 'static 'vector :w 4096.0) + :version #x6 + ) + ) + ) + (set! (-> v1-8 jgeo) 0) + (set! (-> v1-8 janim) 3) + (set! (-> v1-8 mgeo 0) (the-as uint 1)) + (set! (-> v1-8 lod-dist 0) 4095996000.0) + (set! *fb-evilbro-sg* v1-8) + ) + +;; failed to figure out what this is: +(let + ((v1-9 + (new 'static 'skeleton-group + :art-group-name "evilsis" + :bounds (new 'static 'vector :w 4096.0) + :version #x6 + ) + ) + ) + (set! (-> v1-9 jgeo) 0) + (set! (-> v1-9 janim) 3) + (set! (-> v1-9 mgeo 0) (the-as uint 1)) + (set! (-> v1-9 lod-dist 0) 4095996000.0) + (set! *fb-evilsis-sg* v1-9) + ) + +;; definition for method 23 of type fishermans-boat +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod TODO-RENAME-23 fishermans-boat ((obj fishermans-boat) (arg0 float)) + (local-vars + (sv-128 int) + (sv-144 rigid-body-control-point) + (sv-160 int) + (sv-176 vector) + ) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s1-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (s0-0 (new 'stack-no-clear 'vector)) + (s2-0 (new 'stack-no-clear 'vector)) + (s3-0 (-> obj rbody matrix)) + ) + (set! (-> s2-0 quad) (-> s3-0 vector 2 quad)) + (set! sv-128 0) + (while (< sv-128 6) + (set! sv-144 (-> obj control-point-array data sv-128)) + (vector-matrix*! s5-0 (-> sv-144 local-pos) s3-0) + (set! (-> sv-144 world-pos quad) (-> s5-0 quad)) + (TODO-RENAME-17 (-> obj rbody) s5-0 s1-0) + (set! (-> sv-144 velocity quad) (-> s1-0 quad)) + (set! (-> sv-144 world-pos w) (ocean-get-height s5-0)) + (let* ((f0-2 (- (-> sv-144 world-pos w) (-> s5-0 y))) + (f30-0 (fmin 1.0 (/ f0-2 (-> obj info max-buoyancy-depth)))) + ) + (when (< 0.0 f0-2) + (vector-float*! s4-0 *y-vector* (* 20.0 f0-2 (-> obj rbody mass))) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + (vector-float*! + s4-0 + *y-vector* + (* 1.6 f30-0 (fmax 0.0 (vector-dot s2-0 s1-0))) + ) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + (vector-float*! s4-0 s1-0 (* -1.0 (-> obj info drag-factor) f30-0)) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + (vector-float*! + s4-0 + (the-as vector (-> s3-0 vector)) + (* -0.5 (vector-dot (the-as vector (-> s3-0 vector)) s1-0)) + ) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + ) + ) + 0 + (set! sv-128 (+ sv-128 1)) + ) + (set! sv-160 0) + (while (< sv-160 2) + (set! sv-176 (-> obj stabilizer-array sv-160 local-pos)) + (vector-matrix*! s5-0 (the-as vector (&-> sv-176 x)) s3-0) + (vector-rotate*! s0-0 (&+ sv-176 16) s3-0) + (TODO-RENAME-17 (-> obj rbody) s5-0 s1-0) + (vector-float*! s4-0 s0-0 (* -1.0 (vector-dot s0-0 s1-0))) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + 0 + (set! sv-160 (+ sv-160 1)) + ) + (when (-> obj anchored) + (let ((s1-1 (new 'stack-no-clear 'vector))) + (vector+*! s5-0 (-> s3-0 vector 3) s2-0 24576.0) + (vector+*! s1-1 (-> obj dock-point) (-> obj dest-dir) 24576.0) + (vector-! s4-0 s1-1 s5-0) + (set! (-> s4-0 y) 0.0) + (vector-float*! s4-0 s4-0 10.0) + (if (< 81920.0 (vector-length s4-0)) + (vector-normalize! s4-0 81920.0) + ) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + (vector+*! s5-0 (-> s3-0 vector 3) s2-0 -24576.0) + (vector+*! s1-1 (-> obj dock-point) (-> obj dest-dir) -24576.0) + (vector-! s4-0 s1-1 s5-0) + ) + (set! (-> s4-0 y) 0.0) + (vector-float*! s4-0 s4-0 10.0) + (if (< 81920.0 (vector-length s4-0)) + (vector-normalize! s4-0 81920.0) + ) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + ) + (when (-> obj ignition) + (let ((s2-1 (new 'stack-no-clear 'vector))) + (vector-matrix*! s5-0 (-> obj engine-thrust-local-pos) s3-0) + (set-vector! s2-1 (- (-> obj controller steering)) 0.0 2.0 1.0) + (vector-rotate*! s2-1 s2-1 s3-0) + (vector-normalize! s2-1 1.0) + (vector-float*! s4-0 s2-1 (-> obj engine-thrust)) + ) + (TODO-RENAME-13 (-> obj rbody) s5-0 s4-0) + ) + ) + (TODO-RENAME-26 obj) + (TODO-RENAME-25 obj) + 0 + (none) + ) + +;; definition for function fishermans-boat-set-dock-point +;; INFO: Return type mismatch int vs none. +(defbehavior fishermans-boat-set-dock-point fishermans-boat ((arg0 int)) + (set! (-> self dock-point-index) arg0) + (nth-point (-> self boat-path) arg0 (-> self dock-point)) + 0 + (none) + ) + +;; definition for function fishermans-boat-set-path-point +;; INFO: Return type mismatch int vs none. +(defbehavior fishermans-boat-set-path-point fishermans-boat ((arg0 vector)) + (TODO-RENAME-12 + (-> self controller) + (the-as int arg0) + (-> self root-overlay trans) + ) + (vector-normalize-copy! + (-> self dest-dir) + (-> self controller path-dest-velocity) + 1.0 + ) + 0 + (none) + ) + +;; definition for function fishermans-boat-next-path-point +;; INFO: Return type mismatch int vs none. +(defbehavior fishermans-boat-next-path-point fishermans-boat () + (move-to-next-point (-> self controller) (-> self root-overlay trans)) + (vector-normalize-copy! + (-> self dest-dir) + (-> self controller path-dest-velocity) + 1.0 + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2896) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xa :page #x2)) + (sp-flt spt-num 0.06) + (sp-flt spt-x (meters 10.0)) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 3.0) 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-rnd-flt spt-scale-y (meters 1.5) (meters 3.0) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters 0.01) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.008666666) 1.0) + (sp-rnd-flt spt-scalevel-y (meters 0.006666667) (meters 0.008666666) 1.0) + (sp-flt spt-fade-a 0.7111111) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 119) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; definition for function fishermans-boat-wave +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior + fishermans-boat-wave fishermans-boat + ((arg0 vector) (arg1 float) (arg2 float)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> arg0 quad)) + (set! (-> gp-0 y) (ocean-get-height arg0)) + (set! (-> *part-id-table* 2896 init-specs 4 initial-valuef) (+ 24576.0 arg1)) + (set! + (-> *part-id-table* 2896 init-specs 19 initial-valuef) + (+ 49152.0 arg1) + ) + (set! + (-> *part-id-table* 2896 init-specs 1 initial-valuef) + (* 0.0000036621095 arg2) + ) + (set! (-> *part-id-table* 2896 init-specs 2 initial-valuef) (* 0.1 arg2)) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2896) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + 0 + (none) + ) + +;; definition for function fishermans-boat-spawn-particles +;; INFO: Return type mismatch int vs none. +(defbehavior fishermans-boat-spawn-particles fishermans-boat ((arg0 float)) + (let* ((s5-0 (-> self node-list data 3 bone transform)) + (s4-0 (new 'stack-no-clear 'vector)) + (f30-0 (vector-y-angle (-> s5-0 vector 2))) + ) + (vector-matrix*! s4-0 (new 'static 'vector :z 40960.0 :w 1.0) s5-0) + (fishermans-boat-wave s4-0 f30-0 arg0) + (vector-matrix*! + s4-0 + (new 'static 'vector :x 20480.0 :z -8192.0 :w 1.0) + s5-0 + ) + (fishermans-boat-wave s4-0 f30-0 arg0) + (vector-matrix*! + s4-0 + (new 'static 'vector :x -20480.0 :z -8192.0 :w 1.0) + s5-0 + ) + (fishermans-boat-wave s4-0 f30-0 arg0) + ) + 0 + (none) + ) + +;; definition for function fishermans-boat-play-sounds +;; INFO: Return type mismatch int vs none. +(defbehavior fishermans-boat-play-sounds fishermans-boat () + (if (-> self ignition) + (set! + (-> self engine-sound-envelope) + (seek + (-> self engine-sound-envelope) + 1.0 + (* 2.0 (-> *display* seconds-per-frame)) + ) + ) + (set! + (-> self engine-sound-envelope) + (seek (-> self engine-sound-envelope) 0.0 (-> *display* seconds-per-frame)) + ) + ) + (cond + ((< 0.0 (-> self engine-sound-envelope)) + (if (zero? (-> self engine-sound-id)) + (set! (-> self engine-sound-id) (new-sound-id)) + ) + (* 0.0000008138021 (-> self engine-thrust)) + (let ((f30-0 (* 100.0 (-> self engine-sound-envelope))) + (f28-0 (+ -1.0 (* 2.0 (-> self engine-sound-envelope)))) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! gp-0 (-> self node-list data 4)) + (sound-play-by-name + (static-sound-name "boat-engine") + (-> self engine-sound-id) + (the int (* 10.24 f30-0)) + (the int (* 1524.0 f28-0)) + 0 + (the-as uint 1) + gp-0 + ) + ) + ) + (else + (when (nonzero? (-> self engine-sound-id)) + (sound-stop (-> self engine-sound-id)) + (set! (-> self engine-sound-id) (new 'static 'sound-id)) + 0 + ) + ) + ) + (none) + ) + +;; definition for function fishermans-boat-post +;; INFO: Return type mismatch int vs none. +(defbehavior fishermans-boat-post fishermans-boat () + (when (and *target* (-> self kill-player)) + (set! (-> self kill-player) #f) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 2) + (set! (-> a1-0 message) 'attack) + (set! (-> a1-0 param 0) (the-as uint #f)) + (let ((a0-0 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-0 mode) 'endlessfall) + (set! (-> a1-0 param 1) (the-as uint a0-0)) + ) + (when (send-event-function *target* a1-0) + ) + ) + ) + (when (and *target* (-> self ignition)) + (cond + ((-> self auto-pilot) + (dummy-15 (-> self controller) (-> self root-overlay)) + (vector-normalize-copy! + (-> self dest-dir) + (-> self controller path-dest-velocity) + 1.0 + ) + ) + (else + (when (not (-> self measure-parameters)) + (let + ((f0-0 + (analog-input + (the-as int (-> *cpad-list* cpads 0 leftx)) + 128.0 + 48.0 + 110.0 + -1.0 + ) + ) + ) + (set! + (-> self controller steering) + (seek + (-> self controller steering) + (fmax -1.0 (fmin 1.0 f0-0)) + (-> *display* seconds-per-frame) + ) + ) + ) + (if (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons x)) + (set! + (-> self controller throttle) + (seek + (-> self controller throttle) + 0.8 + (-> *display* seconds-per-frame) + ) + ) + (set! + (-> self controller throttle) + (seek + (-> self controller throttle) + 0.0 + (* 0.25 (-> *display* seconds-per-frame)) + ) + ) + ) + 0 + ) + ) + ) + (when + (and + (-> self player-riding) + (and + (zero? (-> self root-overlay riders num-riders)) + (or + (not *target*) + (< + 32768.0 + (vector-vector-distance + (-> self root-overlay trans) + (-> *target* control trans) + ) + ) + ) + ) + ) + (if (process-release? *target*) + (set! (-> self kill-player) #t) + ) + (set! (-> self controller throttle) 0.0) + (set! (-> self controller steering) 0.0) + ) + ) + (if (-> self ignition) + (set! + (-> self engine-thrust) + (seek + (-> self engine-thrust) + (* 1228800.0 (-> self controller throttle)) + 6144.0 + ) + ) + (set! (-> self engine-thrust) 0.0) + ) + (cond + ((-> self ignition) + (let ((f0-20 60.0) + (f1-4 1820.4445) + (f2-1 6735.6445) + (f3-0 1228800.0) + ) + (set! + (-> self propeller spin-rate) + (* f0-20 (+ f1-4 (* f2-1 (/ 1.0 f3-0) (-> self engine-thrust)))) + ) + ) + ) + (else + (set! + (-> self propeller spin-rate) + (seek (-> self propeller spin-rate) 0.0 218.45334) + ) + ) + ) + (TODO-RENAME-28 self) + (quaternion-copy! (-> self root-overlay quat) (-> self rbody rotation)) + (TODO-RENAME-18 (-> self rbody) (-> self root-overlay trans)) + (when (-> self debug-draw) + (dummy-16 (-> self controller)) + (add-debug-sphere + #t + (bucket-id debug-draw1) + (the-as vector (-> self boat-path)) + 614400.0 + (new 'static 'rgba :b #xff :a #x80) + ) + (add-debug-sphere + #t + (bucket-id debug-draw1) + (the-as vector (&-> self stack 848)) + 409600.0 + (new 'static 'rgba :b #xff :a #x80) + ) + ) + (fishermans-boat-spawn-particles 8192.0) + (fishermans-boat-play-sounds) + (rider-post) + (none) + ) + +;; definition for function fishermans-boat-leave-dock? +(defbehavior fishermans-boat-leave-dock? fishermans-boat () + (let ((gp-0 #f)) + (when + (and + (< (vector-vector-distance (target-pos 0) (-> self rbody position)) 6144.0) + (or + (task-complete? *game-info* (game-task jungle-fishgame)) + (and + *cheat-mode* + (logtest? (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons l3)) + ) + ) + (not (level-hint-displayed?)) + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 900 + ) + (file-status *art-control* (-> self anim name) 0) + ) + (hide-hud) + (level-hint-surpress!) + (kill-current-level-hint '() '(sidekick voicebox) 'exit) + (when + (and + (hud-hidden?) + (can-grab-display? (the-as process-taskable self)) + (= *kernel-boot-message* 'play) + ) + (let + ((s5-1 + (new + 'stack + 'font-context + *font-default-matrix* + 32 + 160 + 0.0 + (font-color default) + (font-flags shadow kerning) + ) + ) + ) + (let ((v1-17 s5-1)) + (set! (-> v1-17 width) (the float 440)) + ) + (let ((v1-18 s5-1)) + (set! (-> v1-18 height) (the float 80)) + ) + (set! (-> s5-1 flags) (font-flags shadow kerning large)) + (print-game-text + (lookup-text! *common-text* (game-text-id press-to-use) #f) + s5-1 + #f + 128 + 22 + ) + ) + (when + (and + (logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons circle)) + (process-grab? *target*) + ) + (set! (-> self waiting-for-player) #f) + (set! (-> self player-riding) #t) + (set! (-> self auto-pilot) #t) + (set! (-> self ignition) #t) + (set! (-> self anchored) #f) + (set! gp-0 #t) + ) + ) + ) + gp-0 + ) + ) + +;; definition for function fishermans-boat-enter-dock? +(defbehavior fishermans-boat-enter-dock? fishermans-boat () + (when + (and + (-> self player-riding) + (= (-> self controller path-dest-index) (-> self dock-point-index)) + ) + (if (process-release? *target*) + (set! (-> self player-riding) #f) + ) + ) + (let + ((f0-0 + (vector-vector-xz-distance + (-> self root-overlay trans) + (-> self dock-point) + ) + ) + ) + (when + (and + (= (-> self controller path-dest-index) (-> self dock-point-index)) + (not (-> self anchored)) + (< f0-0 81920.0) + ) + (set! (-> self ignition) #f) + (set! (-> self anchored) #t) + ) + (< f0-0 28672.0) + ) + ) + +;; failed to figure out what this is: +(defstate fishermans-boat-docked-village (fishermans-boat) + :event + (the-as + (function process int symbol event-message-block object :behavior fishermans-boat) + rigid-body-platform-event-handler + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (if (fishermans-boat-leave-dock?) + (go fishermans-boat-ride-to-misty) + ) + (rider-trans) + (if (nonzero? (-> self anim)) + (spool-push *art-control* (-> self anim name) 0 self -99.0) + ) + (none) + ) + :code + (behavior () + (set! + (-> self anim) + (new 'static 'spool-anim + :name "fishermans-boat-ride-to-misty" + :index 15 + :parts 3 + :command-list + '( + (0 + want-levels + village1 + misty + ) + (0 + shadow + target + #f + ) + (0 + shadow + sidekick + #f + ) + ((the binteger 250) + display-level + misty + display + ) + ((the binteger 250) + display-level + village1 + special + ) + ((the binteger 250) + want-vis + mis + ) + ((the binteger 250) + want-force-vis + misty + #t + ) + ((the binteger 459) + want-force-vis + misty + #f + ) + ((the binteger 459) + save + ) + ((the binteger 459) + blackout + (the binteger 20) + ) + ((the binteger 459) shadow target #t) + ) + ) + ) + (fishermans-boat-set-dock-point 0) + (fishermans-boat-set-path-point (the-as vector 0)) + (anim-loop) + (none) + ) + :post + fishermans-boat-post + ) + +;; failed to figure out what this is: +(defstate fishermans-boat-leaving-village (fishermans-boat) + :trans + (behavior () + (when + (< + 614400.0 + (vector-vector-xz-distance + (-> self root-overlay trans) + (-> self dock-point) + ) + ) + (load-state-want-display-level 'village1 'special) + (load-state-want-display-level 'misty 'display) + (load-state-want-vis 'mis) + (load-state-want-force-vis 'misty #t) + (go fishermans-boat-player-control) + ) + (rider-trans) + (none) + ) + :code + (behavior () + (load-state-want-levels 'village1 'misty) + (let ((gp-0 (get-process *default-dead-pool* camera-tracker #x4000))) + (set! (-> self cam-tracker) (ppointer->handle (when gp-0 + (let + ((t9-2 + (method-of-type + camera-tracker + activate + ) + ) + ) + (t9-2 + (the-as + camera-tracker + gp-0 + ) + self + 'camera-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + camera-tracker-init + (lambda :behavior fishermans-boat + () + (camera-change-to + "camera-282" + 0 + #f + ) + (while + (!= + (-> + self + rbody + lin-momentum-damping-factor + ) + 'release + ) + (suspend) + ) + (set! + (-> + self + rbody + lin-momentum-damping-factor + ) + (the-as float #f) + ) + (camera-change-to + (the-as string 'base) + 0 + #f + ) + (none) + ) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 1) + (set! (-> a1-4 message) 'border) + (set! (-> a1-4 param 0) (the-as uint #t)) + (send-event-function (handle->process (-> self cam-tracker)) a1-4) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'mask) + (set! (-> a1-5 param 0) (the-as uint #x20800)) + (send-event-function (handle->process (-> self cam-tracker)) a1-5) + ) + (fishermans-boat-set-path-point (the-as vector 0)) + (fishermans-boat-next-path-point) + (while #t + (suspend) + ) + (none) + ) + :post + fishermans-boat-post + ) + +;; failed to figure out what this is: +(defstate fishermans-boat-entering-village (fishermans-boat) + :trans + (behavior () + (when (fishermans-boat-enter-dock?) + (set! (-> self waiting-for-player) #f) + (when #t + (set! (-> *camera* cam-entity) (the-as entity #t)) + (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) 'clear-entity) + (send-event-function *camera* a1-0) + ) + (load-commands-set! *level* '()) + (load-state-want-display-level 'village1 'display) + (load-state-want-force-vis 'village1 #f) + (go fishermans-boat-docked-village) + ) + ) + (rider-trans) + (none) + ) + :code + (behavior () + (load-state-want-levels 'village1 'beach) + (load-state-want-vis 'vi1) + (fishermans-boat-set-dock-point 0) + (fishermans-boat-set-path-point (the-as vector 5)) + (anim-loop) + (none) + ) + :post + fishermans-boat-post + ) + +;; failed to figure out what this is: +(defstate fishermans-boat-docked-misty (fishermans-boat) + :event + (the-as + (function process int symbol event-message-block object :behavior fishermans-boat) + rigid-body-platform-event-handler + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :trans + (behavior () + (if (fishermans-boat-leave-dock?) + (go fishermans-boat-ride-to-village1) + ) + (rider-trans) + (if (nonzero? (-> self anim)) + (spool-push *art-control* (-> self anim name) 0 self -99.0) + ) + (none) + ) + :code + (behavior () + (if #t + (set! + (-> self anim) + (new 'static 'spool-anim + :name "fishermans-boat-ride-to-village1" + :index 16 + :parts 3 + :command-list + '( + (0 + want-levels + village1 + misty + ) + (0 + shadow + target + #f + ) + (0 + shadow + sidekick + #f + ) + ((the binteger 250) + display-level + village1 + display + ) + ((the binteger 250) + display-level + misty + #f + ) + ((the binteger 250) + want-vis + vi1 + ) + ((the binteger 250) + want-force-vis + village1 + #t + ) + ((the binteger 459) + want-force-vis + village1 + #f + ) + ((the binteger 459) + save + ) + ((the binteger 459) + blackout + (the binteger 20) + ) + ((the binteger 459) shadow target #t) + ) + ) + ) + (set! + (-> self anim) + (new 'static 'spool-anim + :name "fishermans-boat-ride-to-village1-alt" + :index 17 + :parts 12 + :command-list + '( + (0 + want-levels + village1 + misty + ) + ((the binteger 105) + want-levels + village1 + intro + ) + ((the binteger 150) + display-level + intro + display + ) + ((the binteger 150) + want-vis + int + ) + ((the binteger 150) + kill + "med-res-level-3" + ) + ((the binteger 150) + want-force-vis + intro + #t + ) + ((the binteger 151) + send-event + self + evilbro + ) + ((the binteger 1199) + send-event + self + evilsis + ) + ((the binteger 1200) + want-force-vis + intro + #f + ) + ((the binteger 1200) + want-levels + village1 + beach + ) + ((the binteger 1200) + display-level + village1 + display + ) + ((the binteger 1200) + want-vis + vi1 + ) + ((the binteger 1200) + want-force-vis + village1 + #t + ) + ((the binteger 1349) + want-force-vis + village1 + #f + ) + ((the binteger 1349) + save + ) + ((the binteger 1349) blackout (the binteger 20)) + ) + ) + ) + ) + (load-state-want-force-vis 'misty #f) + (fishermans-boat-set-dock-point 4) + (fishermans-boat-set-path-point (the-as vector 4)) + (anim-loop) + (none) + ) + :post + fishermans-boat-post + ) + +;; failed to figure out what this is: +(defstate fishermans-boat-leaving-misty (fishermans-boat) + :trans + (behavior () + (when + (< + 409600.0 + (vector-vector-xz-distance + (-> self root-overlay trans) + (-> self dock-point) + ) + ) + (load-state-want-force-vis 'village1 #t) + (load-state-want-display-level 'village1 'display) + (set-continue! *game-info* "village1-hut") + (load-commands-set! *level* (load-command-get-index *level* 'village1 2)) + (go fishermans-boat-player-control) + ) + (rider-trans) + (none) + ) + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* camera-tracker #x4000))) + (set! (-> self cam-tracker) (ppointer->handle (when gp-0 + (let + ((t9-1 + (method-of-type + camera-tracker + activate + ) + ) + ) + (t9-1 + (the-as + camera-tracker + gp-0 + ) + self + 'camera-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + camera-tracker-init + (lambda :behavior fishermans-boat + () + (camera-change-to + "camera-287" + 0 + #f + ) + (while + (!= + (-> + self + rbody + lin-momentum-damping-factor + ) + 'release + ) + (suspend) + ) + (set! + (-> + self + rbody + lin-momentum-damping-factor + ) + (the-as float #f) + ) + (camera-change-to + (the-as string 'base) + 0 + #f + ) + (none) + ) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (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) 'border) + (set! (-> a1-3 param 0) (the-as uint #t)) + (send-event-function (handle->process (-> self cam-tracker)) a1-3) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 1) + (set! (-> a1-4 message) 'mask) + (set! (-> a1-4 param 0) (the-as uint #x20800)) + (send-event-function (handle->process (-> self cam-tracker)) a1-4) + ) + (fishermans-boat-set-path-point (the-as vector 4)) + (fishermans-boat-next-path-point) + (while #t + (suspend) + ) + (none) + ) + :post + fishermans-boat-post + ) + +;; failed to figure out what this is: +(defstate fishermans-boat-entering-misty (fishermans-boat) + :trans + (behavior () + (when (fishermans-boat-enter-dock?) + (set! (-> self waiting-for-player) #f) + (level-hint-spawn + (game-text-id misty-daxter-scared) + "sksp0060" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (when #t + (set! (-> *camera* cam-entity) (the-as entity #t)) + (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) 'clear-entity) + (send-event-function *camera* a1-1) + ) + (go fishermans-boat-docked-misty) + ) + ) + (rider-trans) + (none) + ) + :code + (behavior () + (set-continue! *game-info* "misty-start") + (fishermans-boat-set-dock-point 4) + (fishermans-boat-set-path-point (the-as vector 2)) + (while #t + (suspend) + ) + (none) + ) + :post + fishermans-boat-post + ) + +;; failed to figure out what this is: +(defstate fishermans-boat-player-control (fishermans-boat) + :exit + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 2) + (set! (-> a1-0 message) 'change-state) + (set! (-> a1-0 param 0) (the-as uint *camera-base-mode*)) + (set! (-> a1-0 param 1) (the-as uint 0)) + (send-event-function *camera* a1-0) + ) + (set! (-> self auto-pilot) #t) + (none) + ) + :trans + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (nth-point (-> self boat-path) 0 gp-0) + (if + (< (vector-vector-xz-distance (-> self root-overlay trans) gp-0) 614400.0) + (go fishermans-boat-entering-village) + ) + (nth-point (-> self boat-path) 4 gp-0) + (if + (< (vector-vector-xz-distance (-> self root-overlay trans) gp-0) 409600.0) + (go fishermans-boat-entering-misty) + ) + ) + 0 + (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) 'message) + (set! (-> a1-0 param 0) (the-as uint 'release)) + (send-event-function (handle->process (-> self cam-tracker)) a1-0) + ) + (suspend) + (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) 'change-state) + (set! (-> a1-1 param 0) (the-as uint cam-stick)) + (set! (-> a1-1 param 1) (the-as uint 0)) + (send-event-function *camera* a1-1) + ) + (while #t + (if + (and + (= *cheat-mode* 'debug) + (logtest? (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle)) + ) + (set! (-> self auto-pilot) #f) + ) + (suspend) + ) + (none) + ) + :post + fishermans-boat-post + ) + +;; definition for function fishermans-boat-set-throttle-by-speed +;; INFO: Return type mismatch int vs none. +(defbehavior fishermans-boat-set-throttle-by-speed fishermans-boat ((arg0 float)) + (let* ((f0-0 (vector-xz-length (-> self rbody lin-velocity))) + (f1-2 (/ (- arg0 f0-0) arg0)) + (f30-0 (* 0.005 f1-2)) + ) + (format + *stdcon* + "current ~M target ~M throttle ~f~%" + f0-0 + arg0 + (-> self controller throttle) + ) + (set! + (-> self controller throttle) + (fmax 0.0 (fmin 1.0 (+ (-> self controller throttle) f30-0))) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate fishermans-boat-measurements (fishermans-boat) + :exit + (behavior () + (set! (-> self measure-parameters) #f) + (none) + ) + :trans + (behavior () + (if (logtest? (-> *cpad-list* cpads 1 button0-rel 0) (pad-buttons square)) + (go fishermans-boat-player-control) + ) + (none) + ) + :code + (behavior () + (set! (-> self auto-pilot) #f) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 1) + (s4-0 (+ (-> self controller table-length) -1)) + ) + (while (>= s4-0 s5-0) + (let ((f30-0 (* (the float s5-0) (-> self controller table-step)))) + (set! (-> self measure-parameters) #t) + (set! (-> self controller steering) 1.0) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 300 + ) + (let + ((f0-6 + (/ + (fabs (- f30-0 (vector-xz-length (-> self rbody lin-velocity)))) + f30-0 + ) + ) + ) + (if (< 0.05 f0-6) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + ) + ) + (fishermans-boat-set-throttle-by-speed f30-0) + (suspend) + ) + (vector-z-quaternion! gp-0 (-> self root-overlay quat)) + (TODO-RENAME-10 + (-> self controller) + gp-0 + (-> self controller throttle) + s5-0 + ) + (let ((s3-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s3-0) 300) + (fishermans-boat-set-throttle-by-speed f30-0) + (suspend) + (suspend) + ) + ) + ) + (vector-z-quaternion! gp-0 (-> self root-overlay quat)) + (TODO-RENAME-10 + (-> self controller) + gp-0 + (-> self controller throttle) + s5-0 + ) + (+! s5-0 1) + ) + ) + (go fishermans-boat-player-control) + (none) + ) + :post + fishermans-boat-post + ) + +;; definition for method 7 of type fishermans-boat +;; INFO: Return type mismatch rigid-body-platform vs fishermans-boat. +(defmethod relocate fishermans-boat ((obj fishermans-boat) (arg0 int)) + (relocate (-> obj controller) arg0) + (if (nonzero? (-> obj propeller)) + (&+! (-> obj propeller) arg0) + ) + (the-as + fishermans-boat + ((the-as + (function rigid-body-platform int rigid-body-platform) + (find-parent-method fishermans-boat 7) + ) + obj + arg0 + ) + ) + ) + +;; definition for method 30 of type fishermans-boat +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-30 fishermans-boat ((obj fishermans-boat)) + (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) nothing) + (dummy-29 s5-0 1) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 1) 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-vector! (-> s4-0 local-sphere) 0.0 8192.0 0.0 61440.0) + (dummy-46 s5-0) + (let + ((s3-0 + (new + 'process + 'collide-shape-prim-mesh + s5-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 8192.0 0.0 61440.0) + ) + (dummy-28 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-overlay) s5-0) + ) + 0 + (none) + ) + +;; definition for method 31 of type fishermans-boat +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod TODO-RENAME-31 fishermans-boat ((obj fishermans-boat)) + (dummy-14 obj *fishermans-boat-sg* '()) + (logclear! (-> obj mask) (process-mask actor-pause movie)) + (logior! (-> obj skel status) 1) + (process-entity-status! obj (entity-perm-status bit-3) #t) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (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 boat-path point-count) 0) + (add-point! (-> obj boat-path) -88473.6 28672.0 425984.0 16384.0) + (add-point! (-> obj boat-path) 18432.0 69632.0 1014169.6 14563.556) + (add-point! (-> obj boat-path) 292864.0 122880.0 2875801.5 18204.445) + (add-point! (-> obj boat-path) 167936.0 40960.0 3069952.0 32768.0) + (add-point! (-> obj boat-path) 49971.2 28672.0 2924544.0 -16384.0) + (add-point! (-> obj boat-path) 175718.4 122880.0 626688.0 -18204.445) + (add-point! (-> obj boat-path) 50790.4 40960.0 197427.2 32768.0) + (init! + (-> obj controller) + (-> obj boat-path) + *boat-turning-radius-table* + *boat-throttle-control-table* + 30 + 4096.0 + ) + (set! + (-> obj propeller) + (new + 'process + 'joint-mod-spinner + obj + 4 + (new 'static 'vector :z -1.0 :w 1.0) + 0.0 + ) + ) + (set! (-> obj ignition) #f) + (set! (-> obj anchored) #t) + (set! (-> obj player-riding) #f) + (set! (-> obj kill-player) #f) + (set! (-> obj debug-draw) #f) + (set! (-> obj cam-tracker) (the-as handle #f)) + (set! (-> obj auto-pilot) #f) + (if (= (-> *game-info* current-continue level) 'misty) + (fishermans-boat-set-dock-point 4) + (fishermans-boat-set-dock-point 0) + ) + (fishermans-boat-set-path-point (the-as vector (-> obj dock-point-index))) + (fishermans-boat-next-path-point) + (set! (-> obj root-overlay trans quad) (-> obj dock-point quad)) + (set! (-> obj root-overlay trans y) 0.0) + (forward-up-nopitch->quaternion + (-> obj root-overlay quat) + (-> obj dest-dir) + *up-vector* + ) + (TODO-RENAME-29 obj *fishermans-boat-constants*) + (let ((v1-39 (-> obj control-point-array data))) + (set! (-> v1-39 0 local-pos x) 0.0) + (set! (-> v1-39 0 local-pos y) 0.0) + (set! (-> v1-39 0 local-pos z) 24576.0) + (set! (-> v1-39 0 local-pos w) 1.0) + ) + (let ((v1-41 (-> obj control-point-array data 1))) + (set! (-> v1-41 local-pos x) 22528.0) + (set! (-> v1-41 local-pos y) 0.0) + (set! (-> v1-41 local-pos z) -20480.0) + (set! (-> v1-41 local-pos w) 1.0) + ) + (let ((v1-43 (-> obj control-point-array data 2))) + (set! (-> v1-43 local-pos x) -22528.0) + (set! (-> v1-43 local-pos y) 0.0) + (set! (-> v1-43 local-pos z) -20480.0) + (set! (-> v1-43 local-pos w) 1.0) + ) + (let ((v1-45 (-> obj control-point-array data 3))) + (set! (-> v1-45 local-pos x) 0.0) + (set! (-> v1-45 local-pos y) 0.0) + (set! (-> v1-45 local-pos z) 49152.0) + (set! (-> v1-45 local-pos w) 1.0) + ) + (let ((v1-47 (-> obj control-point-array data 4))) + (set! (-> v1-47 local-pos x) 22528.0) + (set! (-> v1-47 local-pos y) 0.0) + (set! (-> v1-47 local-pos z) 12288.0) + (set! (-> v1-47 local-pos w) 1.0) + ) + (let ((v1-49 (-> obj control-point-array data 5))) + (set! (-> v1-49 local-pos x) -22528.0) + (set! (-> v1-49 local-pos y) 0.0) + (set! (-> v1-49 local-pos z) 12288.0) + (set! (-> v1-49 local-pos w) 1.0) + ) + (let ((v1-50 (-> obj stabilizer-array))) + (set! (-> v1-50 0 local-pos x) 16384.0) + (set! (-> v1-50 0 local-pos y) 20480.0) + (set! (-> v1-50 0 local-pos z) -32768.0) + (set! (-> v1-50 0 local-pos w) 1.0) + ) + (set-vector! + (-> obj stabilizer-array 1 local-pos) + -16384.0 + 20480.0 + -32768.0 + 1.0 + ) + (set-vector! (-> obj stabilizer-array 0 normal) 0.0 0.75 0.2 1.0) + (set-vector! (-> obj stabilizer-array 1 normal) 0.0 0.75 0.2 1.0) + (set-vector! (-> obj engine-thrust-local-pos) 0.0 12288.0 -20480.0 1.0) + (set! (-> obj root-overlay nav-radius) 53248.0) + (nav-mesh-connect obj (-> obj root-overlay) (the-as nav-control #f)) + (set! (-> obj engine-sound-id) (new 'static 'sound-id)) + (set! (-> obj debug-path-record) #f) + (set! (-> obj debug-path-playback) #f) + (set! (-> obj measure-parameters) #f) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (let ((a0-29 (-> obj entity))) + (if (when a0-29 + (let ((a0-30 (-> a0-29 extra perm task))) + (if a0-30 + (= a0-30 (game-task none)) + ) + ) + ) + (set! (-> obj entity extra perm task) (game-task complete)) + ) + ) + (none) + ) + +;; definition for method 11 of type fishermans-boat +(defmethod copy-defaults! fishermans-boat ((obj fishermans-boat) (arg0 res-lump)) + (stack-size-set! (-> obj main-thread) 512) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (TODO-RENAME-30 obj) + (process-drawable-from-entity! obj arg0) + (TODO-RENAME-31 obj) + (if (= (-> *game-info* current-continue level) 'misty) + (go fishermans-boat-docked-misty) + (go fishermans-boat-docked-village) + ) + (none) + ) + +;; definition for function fishermans-boat-reset-physics +;; INFO: Return type mismatch int vs none. +(defbehavior fishermans-boat-reset-physics fishermans-boat () + (TODO-RENAME-22 + (-> self rbody) + (-> self root-overlay trans) + (-> self root-overlay quat) + (-> self info linear-damping) + (-> self info angular-damping) + ) + (vector-reset! (-> self player-force)) + (set! (-> self player-impulse) #f) + (set! (-> self player-contact) #f) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate fishermans-boat-ride-to-misty (fishermans-boat) + :code + (behavior () + (set! (-> self propeller enable) #f) + (quaternion-identity! (-> self root-overlay quat)) + (set! (-> self root-overlay trans quad) (-> self entity extra trans quad)) + (set! (-> self player-riding) #f) + (set! (-> self auto-pilot) #f) + (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) 'clone-anim) + (set! (-> a1-0 param 0) (the-as uint self)) + (when (send-event-function *target* 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) 'matrix) + (set! (-> a1-1 param 0) (the-as uint 'play-anim)) + (send-event-function (ppointer->process (-> *target* sidekick)) 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) 'blend-shape) + (set! (-> a1-2 param 0) (the-as uint #t)) + (send-event-function *target* a1-2) + ) + (let* ((gp-0 (get-process *default-dead-pool* othercam #x4000)) + (v1-20 (when gp-0 + (let ((t9-5 (method-of-type othercam activate))) + (t9-5 + (the-as othercam gp-0) + self + 'othercam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + othercam-init-by-other + self + 5 + #f + #t + ) + (-> gp-0 ppointer) + ) + ) + (a1-6 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'mask) + (set! (-> a1-6 param 0) (the-as uint 2048)) + (send-event-function (ppointer->process v1-20) a1-6) + ) + (set! (-> self draw force-lod) 0) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim (-> self draw art-group data 3)) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (set! (-> self draw force-lod) -1) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'blend-shape) + (set! (-> a1-8 param 0) (the-as uint #f)) + (send-event-function *target* a1-8) + ) + (ja-channel-set! 1) + (let ((v1-33 (-> self skel root-channel 0))) + (set! + (-> v1-33 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + (vector<-cspace! (-> self root-overlay trans) (-> self node-list data 3)) + (matrix->quaternion + (-> self root-overlay quat) + (-> self node-list data 3 bone transform) + ) + (fishermans-boat-reset-physics) + (transform-post) + (when *target* + (vector<-cspace! + (the-as vector (-> self old-target-pos)) + (-> *target* node-list data 3) + ) + (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) 'trans) + (set! (-> a1-12 param 0) (the-as uint 'restore)) + (set! (-> a1-12 param 1) (the-as uint (-> self old-target-pos))) + (send-event-function *target* a1-12) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 0) + (set! (-> a1-13 message) 'end-mode) + (send-event-function *target* a1-13) + ) + (dummy-47 (-> self root-overlay)) + (dummy-60 + (-> *target* control) + 4096.0 + 40960.0 + #t + (-> *target* control root-prim collide-with) + ) + (logior! (-> *target* control status) 7) + (suspend) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) self) + (set! (-> a1-15 num-params) 0) + (set! (-> a1-15 message) 'teleport-to-other-start-string) + (send-event-function *camera* a1-15) + ) + ) + (set-continue! *game-info* "misty-start") + ) + ) + (set! (-> self waiting-for-player) #t) + (set! (-> self ignition) #f) + (set! (-> self anchored) #t) + (set! (-> self propeller enable) #t) + (fishermans-boat-play-sounds) + (copy-settings-from-target! *setting-control*) + (let ((gp-1 (get-process *default-dead-pool* process #x4000))) + (when gp-1 + (let ((t9-25 (method-of-type process activate))) + (t9-25 gp-1 self 'process (the-as pointer #x70004000)) + ) + (run-next-time-in-process + gp-1 + (lambda :behavior fishermans-boat + () + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 300) + (suspend) + ) + ) + (while + (or + (-> *setting-control* current ambient) + (-> *setting-control* current hint) + (-> *setting-control* current movie) + ) + (suspend) + ) + (suspend) + (level-hint-spawn + (game-text-id misty-daxter-scared) + "sksp0060" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (none) + ) + ) + (-> gp-1 ppointer) + ) + ) + (go fishermans-boat-docked-misty) + (none) + ) + :post + (behavior () + (ja-post) + (fishermans-boat-spawn-particles 81920.0) + (fishermans-boat-play-sounds) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate fishermans-boat-ride-to-village1 (fishermans-boat) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'evilbro) + (when (= (level-status *level* 'intro) 'active) + (let ((gp-1 (entity-by-name "evilbro-2"))) + (when gp-1 + (let + ((s5-0 (get-process *default-dead-pool* manipy #x4000)) + ) + (set! (-> self evilbro) (ppointer->handle (when s5-0 + (let + ((t9-3 + (method-of-type + manipy + activate + ) + ) + ) + (t9-3 + (the-as + manipy + s5-0 + ) + self + 'manipy + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-0 + manipy-init + (-> + self + root-overlay + trans + ) + gp-1 + *fb-evilbro-sg* + #f + ) + (-> + s5-0 + ppointer + ) + ) + ) + ) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'anim-mode) + (set! (-> a1-5 param 0) (the-as uint 'clone-anim)) + (send-event-function + (handle->process (-> self evilbro)) + a1-5 + ) + ) + (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) 'blend-shape) + (set! (-> a1-6 param 0) (the-as uint #t)) + (send-event-function + (handle->process (-> self evilbro)) + a1-6 + ) + ) + (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) 'center-joint) + (set! (-> a1-7 param 0) (the-as uint 3)) + (send-event-function + (handle->process (-> self evilbro)) + a1-7 + ) + ) + ) + ) + (let ((gp-2 (entity-by-name "evilsis-2"))) + (when gp-2 + (let + ((s5-1 (get-process *default-dead-pool* manipy #x4000)) + ) + (set! (-> self evilsis) (ppointer->handle (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-overlay + trans + ) + gp-2 + *fb-evilsis-sg* + #f + ) + (-> + s5-1 + ppointer + ) + ) + ) + ) + ) + (let + ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) self) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'anim-mode) + (set! (-> a1-11 param 0) (the-as uint 'clone-anim)) + (send-event-function + (handle->process (-> self evilsis)) + a1-11 + ) + ) + (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) 'blend-shape) + (set! (-> a1-12 param 0) (the-as uint #t)) + (send-event-function + (handle->process (-> self evilsis)) + a1-12 + ) + ) + (let + ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 1) + (set! (-> a1-13 message) 'center-joint) + (set! (-> a1-13 param 0) (the-as uint 3)) + (send-event-function + (handle->process (-> self evilsis)) + a1-13 + ) + ) + ) + ) + ) + ) + ((= v1-0 'evilsis) + (let ((a0-44 (handle->process (-> self evilbro)))) + (if a0-44 + (deactivate a0-44) + ) + ) + (let ((a0-48 (handle->process (-> self evilsis)))) + (if a0-48 + (deactivate a0-48) + ) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (set! (-> self propeller enable) #f) + (set! (-> self evilbro) (the-as handle #f)) + (set! (-> self evilsis) (the-as handle #f)) + (quaternion-identity! (-> self root-overlay quat)) + (set! (-> self root-overlay trans quad) (-> self entity extra trans quad)) + (set! (-> self player-riding) #f) + (set! (-> self auto-pilot) #f) + (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) 'clone-anim) + (set! (-> a1-0 param 0) (the-as uint self)) + (when (send-event-function *target* 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) 'matrix) + (set! (-> a1-1 param 0) (the-as uint 'play-anim)) + (send-event-function (ppointer->process (-> *target* sidekick)) 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) 'blend-shape) + (set! (-> a1-2 param 0) (the-as uint #t)) + (send-event-function *target* a1-2) + ) + (let* ((gp-0 (get-process *default-dead-pool* othercam #x4000)) + (v1-20 (when gp-0 + (let ((t9-5 (method-of-type othercam activate))) + (t9-5 + (the-as othercam gp-0) + self + 'othercam + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + othercam-init-by-other + self + 5 + #f + #t + ) + (-> gp-0 ppointer) + ) + ) + (a1-6 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 1) + (set! (-> a1-6 message) 'mask) + (set! (-> a1-6 param 0) (the-as uint 2048)) + (send-event-function (ppointer->process v1-20) a1-6) + ) + (set! (-> self draw force-lod) 0) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim (-> self draw art-group data 3)) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (set! (-> self draw force-lod) -1) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'blend-shape) + (set! (-> a1-8 param 0) (the-as uint #f)) + (send-event-function *target* a1-8) + ) + (ja-channel-set! 1) + (let ((v1-33 (-> self skel root-channel 0))) + (set! + (-> v1-33 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + (vector<-cspace! (-> self root-overlay trans) (-> self node-list data 3)) + (matrix->quaternion + (-> self root-overlay quat) + (-> self node-list data 3 bone transform) + ) + (fishermans-boat-reset-physics) + (transform-post) + (when *target* + (vector<-cspace! + (the-as vector (-> self old-target-pos)) + (-> *target* node-list data 3) + ) + (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) 'trans) + (set! (-> a1-12 param 0) (the-as uint 'restore)) + (set! (-> a1-12 param 1) (the-as uint (-> self old-target-pos))) + (send-event-function *target* a1-12) + ) + (let ((a1-13 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-13 from) self) + (set! (-> a1-13 num-params) 0) + (set! (-> a1-13 message) 'end-mode) + (send-event-function *target* a1-13) + ) + (dummy-47 (-> self root-overlay)) + (dummy-60 + (-> *target* control) + 4096.0 + 40960.0 + #t + (-> *target* control root-prim collide-with) + ) + (logior! (-> *target* control status) 7) + (suspend) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) self) + (set! (-> a1-15 num-params) 0) + (set! (-> a1-15 message) 'teleport-to-other-start-string) + (send-event-function *camera* a1-15) + ) + ) + (set-continue! *game-info* "village1-hut") + ) + ) + (set! (-> self waiting-for-player) #t) + (set! (-> self ignition) #f) + (set! (-> self anchored) #t) + (set! (-> self propeller enable) #t) + (fishermans-boat-play-sounds) + (process-entity-status! self (entity-perm-status complete) #t) + (go fishermans-boat-docked-village) + (none) + ) + :post + (behavior () + (ja-post) + (fishermans-boat-spawn-particles 81920.0) + (fishermans-boat-play-sounds) + (none) + ) + ) diff --git a/test/decompiler/reference/levels/village1/sage_REF.gc b/test/decompiler/reference/levels/village1/sage_REF.gc index 4d76afaba2..a68a5491a1 100644 --- a/test/decompiler/reference/levels/village1/sage_REF.gc +++ b/test/decompiler/reference/levels/village1/sage_REF.gc @@ -650,7 +650,7 @@ (run-now-in-process s5-2 manipy-init - (-> obj root trans) + (-> obj root-override trans) (-> obj entity) *assistant-sg* #f @@ -1022,7 +1022,10 @@ ) ((and (-> obj reminder-played) - (< 81920.0 (vector-vector-distance (-> obj root trans) (camera-pos))) + (< + 81920.0 + (vector-vector-distance (-> obj root-override trans) (camera-pos)) + ) ) #t ) @@ -1134,27 +1137,27 @@ ) (cond ((< (-> s5-0 y) -12288.0) + #f ) ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "SAGELP03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP03" #f (-> obj root-override trans)) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "SAGELP04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP04" #f (-> obj root-override trans)) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "SAGELP05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP05" #f (-> obj root-override trans)) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "SAGELP06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP06" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "SAGELP11" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP11" #f (-> obj root-override trans)) ) ) ) ) ) - (none) ) ;; failed to figure out what this is: @@ -1228,7 +1231,10 @@ (if (and (-> self reminder-played) - (< 81920.0 (vector-vector-distance (-> self root trans) (camera-pos))) + (< + 81920.0 + (vector-vector-distance (-> self root-override trans) (camera-pos)) + ) ) (go-virtual idle) ) @@ -1346,7 +1352,7 @@ ;; definition for method 41 of type sage ;; INFO: Return type mismatch int vs none. -(defmethod initialize-collision sage ((obj sage) (arg0 int)) +(defmethod initialize-collision sage ((obj sage) (arg0 int) (arg1 vector)) (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) @@ -1378,7 +1384,7 @@ ) (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (dummy-50 s5-0) - (set! (-> obj root) s5-0) + (set! (-> obj root-override) s5-0) ) 0 (none) diff --git a/test/decompiler/reference/levels/village1/yakow_REF.gc b/test/decompiler/reference/levels/village1/yakow_REF.gc new file mode 100644 index 0000000000..984a5dfc93 --- /dev/null +++ b/test/decompiler/reference/levels/village1/yakow_REF.gc @@ -0,0 +1,1601 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(let + ((v1-0 + (new 'static 'skeleton-group + :art-group-name "village1cam" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + ) + ) + ) + (set! (-> v1-0 jgeo) 0) + (set! (-> v1-0 janim) 2) + (set! (-> v1-0 mgeo 0) (the-as uint 1)) + (set! (-> v1-0 lod-dist 0) 4095996000.0) + (set! *village1cam-sg* v1-0) + ) + +;; definition for function yakow-cam +;; INFO: Return type mismatch (pointer process) vs none. +(defun yakow-cam () + (with-pp + (let ((gp-0 (entity-actor-lookup (-> pp entity) 'alt-actor 0))) + (when gp-0 + (let ((s5-0 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-0 + (let ((t9-2 (method-of-type pov-camera activate))) + (t9-2 + (the-as pov-camera s5-0) + pp + 'pov-camera + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> gp-0 extra trans) + *village1cam-sg* + "anim" + 0 + #f + '() + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + (none) + ) + ) + +;; definition of type yakow-bank +(deftype yakow-bank (basic) + ((walk-cycle-frame-count float :offset-assert 4) + (run-cycle-frame-count float :offset-assert 8) + (walk-speed meters :offset-assert 12) + (run-speed meters :offset-assert 16) + (walk-anim-speed float :offset-assert 20) + (run-anim-speed float :offset-assert 24) + (walk-away-dist meters :offset-assert 28) + (run-away-dist meters :offset-assert 32) + (walk-rotate-speed float :offset-assert 36) + (run-rotate-speed float :offset-assert 40) + (walk-turn-time uint64 :offset-assert 48) + (run-turn-time uint64 :offset-assert 56) + (max-walk-speed float :offset-assert 64) + (min-run-speed float :offset-assert 68) + (walk-run-blend-rate float :offset-assert 72) + (walk-turn-blend-rate float :offset-assert 76) + (max-run-speed float :offset-assert 80) + (acceleration meters :offset-assert 84) + (default-patrol-time uint64 :offset-assert 88) + (default-idle-distance meters :offset-assert 96) + (safe-distance meters :offset-assert 100) + (min-run-anim-speed float :offset-assert 104) + (max-run-anim-speed float :offset-assert 108) + (min-walk-anim-speed float :offset-assert 112) + (speed-boost-impulse meters :offset-assert 116) + ) + :method-count-assert 9 + :size-assert #x78 + :flag-assert #x900000078 + ) + +;; definition for method 3 of type yakow-bank +(defmethod inspect yakow-bank ((obj yakow-bank)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Twalk-cycle-frame-count: ~f~%" (-> obj walk-cycle-frame-count)) + (format #t "~Trun-cycle-frame-count: ~f~%" (-> obj run-cycle-frame-count)) + (format #t "~Twalk-speed: (meters ~m)~%" (-> obj walk-speed)) + (format #t "~Trun-speed: (meters ~m)~%" (-> obj run-speed)) + (format #t "~Twalk-anim-speed: ~f~%" (-> obj walk-anim-speed)) + (format #t "~Trun-anim-speed: ~f~%" (-> obj run-anim-speed)) + (format #t "~Twalk-away-dist: (meters ~m)~%" (-> obj walk-away-dist)) + (format #t "~Trun-away-dist: (meters ~m)~%" (-> obj run-away-dist)) + (format #t "~Twalk-rotate-speed: ~f~%" (-> obj walk-rotate-speed)) + (format #t "~Trun-rotate-speed: ~f~%" (-> obj run-rotate-speed)) + (format #t "~Twalk-turn-time: ~D~%" (-> obj walk-turn-time)) + (format #t "~Trun-turn-time: ~D~%" (-> obj run-turn-time)) + (format #t "~Tmax-walk-speed: ~f~%" (-> obj max-walk-speed)) + (format #t "~Tmin-run-speed: ~f~%" (-> obj min-run-speed)) + (format #t "~Twalk-run-blend-rate: ~f~%" (-> obj walk-run-blend-rate)) + (format #t "~Twalk-turn-blend-rate: ~f~%" (-> obj walk-turn-blend-rate)) + (format #t "~Tmax-run-speed: ~f~%" (-> obj max-run-speed)) + (format #t "~Tacceleration: (meters ~m)~%" (-> obj acceleration)) + (format #t "~Tdefault-patrol-time: ~D~%" (-> obj default-patrol-time)) + (format + #t + "~Tdefault-idle-distance: (meters ~m)~%" + (-> obj default-idle-distance) + ) + (format #t "~Tsafe-distance: (meters ~m)~%" (-> obj safe-distance)) + (format #t "~Tmin-run-anim-speed: ~f~%" (-> obj min-run-anim-speed)) + (format #t "~Tmax-run-anim-speed: ~f~%" (-> obj max-run-anim-speed)) + (format #t "~Tmin-walk-anim-speed: ~f~%" (-> obj min-walk-anim-speed)) + (format + #t + "~Tspeed-boost-impulse: (meters ~m)~%" + (-> obj speed-boost-impulse) + ) + obj + ) + +;; definition for symbol *YAKOW-bank*, type yakow-bank +(define + *YAKOW-bank* + (new 'static 'yakow-bank + :walk-cycle-frame-count 16.0 + :run-cycle-frame-count 16.0 + :walk-speed (meters 2.13) + :run-speed (meters 6.0) + :walk-anim-speed 1.0 + :run-anim-speed 2.0 + :walk-away-dist (meters 10.0) + :run-away-dist (meters 6.0) + :walk-rotate-speed 131072.0 + :run-rotate-speed 131072.0 + :walk-turn-time #x96 + :run-turn-time #x3c + :max-walk-speed 16384.0 + :min-run-speed 15155.2 + :walk-run-blend-rate 6.0 + :walk-turn-blend-rate 4.0 + :max-run-speed 61440.0 + :acceleration (meters 3.0) + :default-patrol-time #x12c + :default-idle-distance (meters 10.0) + :safe-distance (meters 20.0) + :min-run-anim-speed 0.5 + :max-run-anim-speed 1.5 + :min-walk-anim-speed 0.5 + :speed-boost-impulse (meters 4.0) + ) + ) + +;; definition of type yakow +(deftype yakow (process-drawable) + ((root-override collide-shape-moving :offset 112) + (fact-override fact-info-enemy :offset 144) + (player-attack-id int32 :offset-assert 176) + (walk-run-blend float :offset-assert 180) + (walk-turn-blend float :offset-assert 184) + (run-mode basic :offset-assert 188) + (travel-speed meters :offset-assert 192) + (final-speed meters :offset-assert 196) + (rotate-speed float :offset-assert 200) + (turn-time uint64 :offset-assert 208) + (vulnerable basic :offset-assert 216) + (grazing basic :offset-assert 220) + (push-velocity vector :inline :offset-assert 224) + (home-base vector :inline :offset-assert 240) + (dest-base vector :inline :offset-assert 256) + (dest-rot degrees :offset-assert 272) + (enable-turn-around basic :offset-assert 276) + (rotating basic :offset-assert 280) + (in-pen basic :offset-assert 284) + ) + :heap-base #xb0 + :method-count-assert 20 + :size-assert #x120 + :flag-assert #x1400b00120 + ) + +;; definition for method 3 of type yakow +(defmethod inspect yakow ((obj yakow)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tplayer-attack-id: ~D~%" (-> obj player-attack-id)) + (format #t "~T~Twalk-run-blend: ~f~%" (-> obj walk-run-blend)) + (format #t "~T~Twalk-turn-blend: ~f~%" (-> obj walk-turn-blend)) + (format #t "~T~Trun-mode: ~A~%" (-> obj run-mode)) + (format #t "~T~Ttravel-speed: (meters ~m)~%" (-> obj travel-speed)) + (format #t "~T~Tfinal-speed: (meters ~m)~%" (-> obj final-speed)) + (format #t "~T~Trotate-speed: ~f~%" (-> obj rotate-speed)) + (format #t "~T~Tturn-time: ~D~%" (-> obj turn-time)) + (format #t "~T~Tvulnerable: ~A~%" (-> obj vulnerable)) + (format #t "~T~Tgrazing: ~A~%" (-> obj grazing)) + (format #t "~T~Tpush-velocity: #~%" (-> obj push-velocity)) + (format #t "~T~Thome-base: ~`vector`P~%" (-> obj home-base)) + (format #t "~T~Tdest-base: ~`vector`P~%" (-> obj dest-base)) + (format #t "~T~Tdest-rot: (deg ~r)~%" (-> obj dest-rot)) + (format #t "~T~Tenable-turn-around: ~A~%" (-> obj enable-turn-around)) + (format #t "~T~Trotating: ~A~%" (-> obj rotating)) + (format #t "~T~Tin-pen: ~A~%" (-> obj in-pen)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-5 + (new 'static 'skeleton-group + :art-group-name "yakow" + :bounds + (new 'static 'vector :y 10240.0 :w 18022.4) + :max-lod 1 + :longest-edge (meters 1.3) + :version #x6 + :shadow 3 + ) + ) + ) + (set! (-> v1-5 jgeo) 0) + (set! (-> v1-5 janim) 4) + (set! (-> v1-5 mgeo 0) (the-as uint 1)) + (set! (-> v1-5 lod-dist 0) 81920.0) + (set! (-> v1-5 mgeo 1) (the-as uint 2)) + (set! (-> v1-5 lod-dist 1) 4095996000.0) + (set! *yakow-sg* v1-5) + ) + +;; definition for function yakow-default-event-handler +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defbehavior + yakow-default-event-handler yakow + ((arg0 process-drawable) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'touch) + (let* ((s4-0 arg0) + (v1-2 + (if + (and + (nonzero? s4-0) + (type-type? (-> s4-0 type) process-drawable) + ) + s4-0 + ) + ) + ) + (when + (and + v1-2 + (< + 8192.0 + (- + (-> v1-2 root trans y) + (-> self root-override trans y) + ) + ) + ) + (dummy-45 (-> self root-override)) + (dummy-55 + (-> self root-override) + arg0 + (-> arg3 param 0) + 0.7 + 6144.0 + 16384.0 + ) + ) + ) + ) + ((= v1-0 'attack) + (let ((v1-9 (-> arg3 param 2))) + (the-as none (cond + ((!= v1-9 (-> self player-attack-id)) + (set! + (-> self player-attack-id) + (the-as int v1-9) + ) + (if (-> self vulnerable) + (go yakow-kicked) + ) + ) + (else + 'push + ) + ) + ) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +yakow-default-event-handler + +;; definition for function yakow-task-complete? +(defbehavior yakow-task-complete? yakow ((arg0 symbol)) + (local-vars (sv-16 symbol) (sv-20 (pointer process-tree))) + (let + ((gp-0 + (not + (and + (-> self entity) + (logtest? + (-> self entity extra perm status) + (entity-perm-status complete) + ) + ) + ) + ) + ) + (if arg0 + (process-entity-status! self (entity-perm-status complete) #t) + (process-entity-status! self (entity-perm-status complete) #f) + ) + (when (or (-> self link prev) (-> self link next)) + (set! sv-16 (the-as symbol #f)) + (set! sv-20 (-> self child)) + (apply-all (-> self link) actor-link-subtask-complete-hook (& sv-16)) + (cond + (sv-16 + (close-specific-task! + (-> self entity extra perm task) + (task-status need-hint) + ) + (close-specific-task! + (-> self entity extra perm task) + (task-status need-introduction) + ) + (close-specific-task! + (-> self entity extra perm task) + (task-status need-reminder) + ) + (if gp-0 + (yakow-cam) + ) + (level-hint-spawn + (game-text-id yakow-owed-powercell) + "sksp018a" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (else + (open-specific-task! + (-> self entity extra perm task) + (task-status need-reminder) + ) + ) + ) + sv-16 + ) + ) + ) + +;; definition for function yakow-common-post +(defbehavior yakow-common-post yakow () + (dummy-14 (-> self draw shadow-ctrl)) + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> self root-override root-prim prim-core)) + #f + self + ) + ) + (ja-post) + (none) + ) + +;; definition for function yakow-simple-post +(defbehavior yakow-simple-post yakow () + (yakow-common-post) + (dummy-47 (-> self root-override)) + (none) + ) + +;; definition for function yakow-post +;; Used lq/sq +(defbehavior yakow-post yakow () + (dummy-11 (-> self nav) (-> self nav target-pos)) + (set! (-> self rotating) #f) + (let ((f30-0 0.0)) + (when (< 40.96 (vector-length (-> self nav travel))) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (vector-z-quaternion! s5-0 (-> self root-override quat)) + (seek-toward-heading-vec! + (-> self root-override) + (-> self nav travel) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + (vector-z-quaternion! gp-0 (-> self root-override quat)) + (set! + (-> self rotating) + (< + (vector-dot gp-0 s5-0) + (cos (* 8192.0 (-> *display* seconds-per-frame))) + ) + ) + (when (-> self rotating) + (let ((v1-16 (new 'stack-no-clear 'vector))) + (vector-cross! v1-16 gp-0 s5-0) + (set! f30-0 (sign (-> v1-16 y))) + ) + ) + ) + ) + (set! + (-> self walk-turn-blend) + (seek + (-> self walk-turn-blend) + f30-0 + (* (-> *YAKOW-bank* walk-turn-blend-rate) (-> *display* seconds-per-frame)) + ) + ) + ) + (set! + (-> self final-speed) + (fmin + (-> self travel-speed) + (* (vector-length (-> self nav travel)) (-> *display* frames-per-second)) + ) + ) + (let + ((v1-24 + (vector-normalize-copy! + (new-stack-vector0) + (-> self nav travel) + (-> self final-speed) + ) + ) + ) + (set! (-> self root-override transv x) (-> v1-24 x)) + (set! (-> self root-override transv z) (-> v1-24 z)) + ) + (vector-v++! + (-> self root-override transv) + (dummy-62 (-> self root-override) (new-stack-vector0) 0.0) + ) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (set! (-> gp-2 quad) (-> self root-override trans quad)) + (dummy-59 + (-> self root-override) + (-> self root-override transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (set! + (-> self final-speed) + (* + (vector-vector-xz-distance gp-2 (-> self root-override trans)) + (-> *display* frames-per-second) + ) + ) + ) + (set! + (-> self travel-speed) + (fmin (-> self travel-speed) (-> self final-speed)) + ) + (dummy-10 (-> self water)) + (when + (and + (logtest? (-> self nav current-poly pat) 2) + (not + (and + (-> self entity) + (logtest? + (-> self entity extra perm status) + (entity-perm-status complete) + ) + ) + ) + ) + (set! (-> self in-pen) #t) + (set! (-> self nav destination-pos quad) (-> self dest-base quad)) + (yakow-task-complete? #t) + ) + (yakow-common-post) + (none) + ) + +;; definition for function yakow-generate-travel-vector +;; Used lq/sq +(defbehavior yakow-generate-travel-vector yakow () + (let + ((gp-1 + (vector-! + (new 'stack-no-clear 'vector) + (-> self root-override trans) + (target-pos 0) + ) + ) + (s5-1 + (vector-z-quaternion! + (new 'stack-no-clear 'vector) + (-> self root-override quat) + ) + ) + ) + 0.0 + 0.0 + (set! (-> gp-1 y) 0.0) + (set! (-> self nav travel quad) (-> gp-1 quad)) + (vector-normalize! (-> self nav travel) 409600.0) + (dummy-24 (-> self nav) 204.8 #f) + (when (not (-> self enable-turn-around)) + (set! (-> gp-1 quad) (-> self nav travel quad)) + (let ((f30-0 (vector-length gp-1))) + (vector-normalize! gp-1 1.0) + (if (and (< 409.6 f30-0) (>= (vector-dot s5-1 gp-1) (cos 10922.667))) + (set! (-> s5-1 quad) (-> gp-1 quad)) + ) + ) + (set! (-> self nav travel quad) (-> s5-1 quad)) + (vector-normalize! (-> self nav travel) 409600.0) + (dummy-24 (-> self nav) 204.8 #f) + (vector-length (-> self nav travel)) + ) + ) + (vector+! + (-> self nav target-pos) + (-> self root-override trans) + (-> self nav travel) + ) + ) + +;; definition for function yakow-run-post +(defbehavior yakow-run-post yakow () + (yakow-generate-travel-vector) + (yakow-post) + (none) + ) + +;; definition for function yakow-blend-walk-run +(defbehavior yakow-blend-walk-run yakow () + (let ((gp-0 (-> *display* base-frame-counter))) + (while #t + (let ((f30-0 (-> self final-speed))) + (cond + ((and (>= 409.6 (-> self final-speed)) (not (-> self rotating))) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 4) + ) + ) + (ja-channel-push! 1 45) + ) + (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 4)) + num-func-identity + ) + (set! (-> s5-0 frame-num) 0.0) + ) + (while + (or + (< (- (-> *display* base-frame-counter) gp-0) 60) + (< (-> self final-speed) 409.6) + ) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) 1.0) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (else + (set! gp-0 (-> *display* base-frame-counter)) + ) + ) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 6) + ) + ) + (ja-channel-push! 3 22) + (let ((s5-1 (-> self skel root-channel 0))) + (set! (-> s5-1 frame-interp) 0.0) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (let ((s5-2 (-> self skel root-channel 1))) + (set! (-> s5-2 frame-interp) 0.0) + (joint-control-channel-group-eval! + s5-2 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-identity + ) + (set! (-> s5-2 frame-num) 0.0) + ) + (let ((s5-3 (-> self skel root-channel 2))) + (set! (-> s5-3 frame-interp) 0.0) + (joint-control-channel-group-eval! + s5-3 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-identity + ) + (set! (-> s5-3 frame-num) 0.0) + ) + ) + (cond + ((< (-> self walk-turn-blend) 0.0) + (let ((v1-49 (-> self skel root-channel 1))) + (set! + (-> v1-49 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + ) + ) + (else + (let ((v1-52 (-> self skel root-channel 1))) + (set! + (-> v1-52 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + ) + ) + ) + (cond + ((< f30-0 (-> *YAKOW-bank* min-run-speed)) + (set! (-> self run-mode) #f) + ) + ((< (-> *YAKOW-bank* max-walk-speed) f30-0) + (set! (-> self run-mode) #t) + ) + ) + (if (-> self run-mode) + (set! + (-> self walk-run-blend) + (seek + (-> self walk-run-blend) + 1.0 + (* + (-> *YAKOW-bank* walk-run-blend-rate) + (-> *display* seconds-per-frame) + ) + ) + ) + (set! + (-> self walk-run-blend) + (seek + (-> self walk-run-blend) + 0.0 + (* + (-> *YAKOW-bank* walk-run-blend-rate) + (-> *display* seconds-per-frame) + ) + ) + ) + ) + (let ((v1-68 (-> self skel root-channel 1))) + (set! (-> v1-68 frame-interp) (fabs (-> self walk-turn-blend))) + ) + (let ((v1-72 (-> self skel root-channel 2))) + (set! (-> v1-72 frame-interp) (-> self walk-run-blend)) + ) + (let* ((f0-25 (* (-> *YAKOW-bank* walk-anim-speed) f30-0)) + (f1-5 (-> *YAKOW-bank* walk-speed)) + (f0-26 (* f0-25 (/ 1.0 f1-5))) + ) + (let* ((f1-9 (* (-> *YAKOW-bank* run-anim-speed) f30-0)) + (f2-1 (-> *YAKOW-bank* run-speed)) + (f1-12 + (fmax + (fmin (* f1-9 (/ 1.0 f2-1)) (-> *YAKOW-bank* max-run-anim-speed)) + (-> *YAKOW-bank* min-run-anim-speed) + ) + ) + ) + (if (-> self run-mode) + (set! f0-26 f1-12) + ) + ) + (if (-> self rotating) + (set! f0-26 (fmax (-> *YAKOW-bank* min-walk-anim-speed) f0-26)) + ) + (let ((a0-24 (-> self skel root-channel 0))) + (set! (-> a0-24 param 0) f0-26) + (joint-control-channel-group-eval! + a0-24 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (let ((s5-4 (-> self skel root-channel 1))) + (set! (-> s5-4 num-func) num-func-identity) + (set! (-> s5-4 frame-num) (ja-frame-num 0)) + ) + (let ((s5-5 (-> self skel root-channel 2))) + (set! (-> s5-5 num-func) num-func-identity) + (set! (-> s5-5 frame-num) (ja-frame-num 0)) + ) + (suspend) + 0 + ) + ) + (none) + ) + +;; definition for function yakow-facing-direction? +;; Used lq/sq +(defbehavior yakow-facing-direction? yakow ((arg0 vector) (arg1 float)) + (let + ((s4-0 + (vector-z-quaternion! + (new 'stack-no-clear 'vector) + (-> self root-override quat) + ) + ) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> arg0 quad)) + (set! (-> s5-0 y) 0.0) + (vector-normalize! s5-0 1.0) + (>= (vector-dot s4-0 s5-0) (cos arg1)) + ) + ) + +;; definition for function yakow-facing-point? +(defbehavior yakow-facing-point? yakow ((arg0 vector) (arg1 float)) + (let + ((v1-1 + (vector-! (new 'stack-no-clear 'vector) arg0 (-> self root-override trans)) + ) + ) + (yakow-facing-direction? v1-1 arg1) + ) + ) + +;; definition for function yakow-facing-player? +(defbehavior yakow-facing-player? yakow ((arg0 float)) + (yakow-facing-point? (target-pos 0) arg0) + ) + +;; failed to figure out what this is: +(defstate yakow-idle (yakow) + :event + yakow-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self travel-speed) 0.0) + (none) + ) + :trans + (behavior () + (if + (and + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> *YAKOW-bank* default-patrol-time)) + ) + (and + *target* + (>= + (-> self fact-override idle-distance) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (not (yakow-facing-player? 21845.334)) + ) + (go yakow-notice) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 45) + (while #t + (cond + ((rand-vu-percent? 0.2) + (dummy-10 (-> self skel effect) 'yakow-1 0.0 -1) + ) + ((rand-vu-percent? 0.2) + (dummy-10 (-> self skel effect) 'yakow-2 0.0 -1) + ) + ) + (let ((f30-0 (rand-vu-float-range 0.9 1.1))) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) f30-0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) f30-0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (when (rand-vu-percent? 0.25) + (ja-channel-push! 1 30) + (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! + ) + ) + ) + (ja-channel-push! 1 30) + ) + ) + (none) + ) + :post + (the-as (function none :behavior yakow) ja-post) + ) + +;; failed to figure out what this is: +(defstate yakow-notice (yakow) + :event + yakow-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self travel-speed) 0.0) + (none) + ) + :code + (behavior () + (go yakow-run-away) + (none) + ) + :post + yakow-simple-post + ) + +;; failed to figure out what this is: +(defstate yakow-walk-to (yakow) + :event + yakow-default-event-handler + :enter + (behavior ((arg0 vector)) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (logior! (-> self nav flags) (nav-control-flags bit10)) + (set! (-> self nav destination-pos quad) (-> arg0 quad)) + (set! (-> self rotate-speed) (-> *YAKOW-bank* walk-rotate-speed)) + (set! (-> self turn-time) (-> *YAKOW-bank* walk-turn-time)) + (none) + ) + :trans + (behavior () + (if + (and + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> *YAKOW-bank* default-patrol-time)) + ) + (not (-> self in-pen)) + (and + *target* + (>= + (-> self fact-override idle-distance) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (not (yakow-facing-player? 21845.334)) + ) + (go yakow-notice) + ) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 15 + ) + (when + (or + (logtest? (nav-control-flags bit19) (-> self nav flags)) + (< + (vector-vector-xz-distance + (-> self root-override trans) + (-> self nav destination-pos) + ) + 4096.0 + ) + ) + (if (-> self in-pen) + (go yakow-graze) + (go yakow-idle) + ) + ) + ) + (set! + (-> self travel-speed) + (seek + (-> self travel-speed) + (-> *YAKOW-bank* walk-speed) + (* (-> *YAKOW-bank* acceleration) (-> *display* seconds-per-frame)) + ) + ) + (none) + ) + :code + (the-as (function vector none :behavior yakow) yakow-blend-walk-run) + :post + (behavior () + (dummy-19 + (-> self nav) + (-> self nav target-pos) + (-> self root-override) + (-> self nav destination-pos) + 131072.0 + ) + (if (logtest? (nav-control-flags bit21) (-> self nav flags)) + (logclear! (-> self nav flags) (nav-control-flags bit10)) + ) + (yakow-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate yakow-graze (yakow) + :event + yakow-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self travel-speed) 0.0) + (set! (-> self grazing) #t) + (let ((v1-3 (entity-actor-lookup (-> self entity) 'alt-actor 0)) + (a1-1 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'update) + (send-event-function (if v1-3 + (-> v1-3 extra process) + ) + a1-1 + ) + ) + (none) + ) + :code + (behavior () + (while + (< + 546.13336 + (fabs (deg-diff (-> self dest-rot) (y-angle (-> self root-override)))) + ) + (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 22) + ) + (seek-toward-yaw-angle! + (-> self root-override) + (-> self dest-rot) + 16384.0 + 150 + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! (-> a0-6 param 0) 1.0) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-loop! + ) + ) + (suspend) + ) + (ja-channel-push! 1 45) + (while #t + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-10 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + 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 4)) + 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! + ) + ) + ) + (when (rand-vu-percent? 0.5) + (ja-channel-push! 1 30) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-15 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! + a0-15 + (the-as art-joint-anim (-> self draw art-group data 5)) + 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! + ) + ) + ) + (ja-channel-push! 1 30) + ) + ) + (none) + ) + :post + yakow-simple-post + ) + +;; failed to figure out what this is: +(defstate yakow-graze-kicked (yakow) + :event + (the-as + (function process int symbol event-message-block object :behavior yakow) + #f + ) + :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 11)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 11)) + 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 11)) + 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 yakow-graze) + (none) + ) + :post + yakow-simple-post + ) + +;; failed to figure out what this is: +(defstate yakow-run-away (yakow) + :event + yakow-default-event-handler + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (logior! (-> self nav flags) (nav-control-flags bit10)) + (set! (-> self rotate-speed) (-> *YAKOW-bank* run-rotate-speed)) + (set! (-> self turn-time) (-> *YAKOW-bank* run-turn-time)) + (none) + ) + :trans + (behavior () + (when + (or + (not *target*) + (< + (-> *YAKOW-bank* safe-distance) + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (if (-> self in-pen) + (go yakow-walk-to (-> self dest-base)) + (go yakow-walk-to (-> self home-base)) + ) + ) + (let* ((f0-2 (* (if (-> self run-mode) + 0.5 + 1.0 + ) + (vector-vector-distance + (-> self root-override trans) + (target-pos 0) + ) + ) + ) + (f30-2 + (lerp-scale + (-> *YAKOW-bank* run-speed) + (-> *YAKOW-bank* walk-speed) + f0-2 + (-> *YAKOW-bank* run-away-dist) + (-> *YAKOW-bank* walk-away-dist) + ) + ) + ) + (if (yakow-facing-player? 21845.334) + (set! f30-2 0.0) + ) + (set! (-> self enable-turn-around) (< (-> *YAKOW-bank* run-speed) f30-2)) + (set! + (-> self travel-speed) + (seek + (-> self travel-speed) + f30-2 + (* (-> *YAKOW-bank* acceleration) (-> *display* seconds-per-frame)) + ) + ) + ) + (none) + ) + :code + yakow-blend-walk-run + :post + yakow-run-post + ) + +;; failed to figure out what this is: +(defstate yakow-kicked (yakow) + :event + (the-as + (function process int symbol event-message-block object :behavior yakow) + #f + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (if (-> self grazing) + (go yakow-graze-kicked) + ) + (set! + (-> self travel-speed) + (fmax + (fmin + (+ (-> self travel-speed) (-> *YAKOW-bank* speed-boost-impulse)) + (-> *YAKOW-bank* max-run-speed) + ) + (-> *YAKOW-bank* run-speed) + ) + ) + (none) + ) + :exit + (behavior () + '() + (none) + ) + :trans + (behavior () + (if + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 60 + ) + (set! + (-> self travel-speed) + (seek + (-> self travel-speed) + (-> *YAKOW-bank* run-speed) + (* (-> *YAKOW-bank* acceleration) (-> *display* seconds-per-frame)) + ) + ) + ) + 0 + (none) + ) + :code + (behavior () + (set! (-> self enable-turn-around) #t) + 1.0 + (suspend) + (ja-channel-push! 1 15) + (cond + ((< 40.96 (vector-length (-> self nav travel))) + (let ((v1-4 (-> self skel root-channel 0))) + (set! + (-> v1-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + ) + (let ((v1-7 (-> self skel root-channel 0))) + (set! (-> v1-7 num-func) num-func-identity) + (set! (-> v1-7 frame-num) 0.0) + ) + (until (ja-done? 0) + (suspend) + (let* ((f0-3 0.75) + (f1-0 0.25) + (f2-0 (-> *YAKOW-bank* run-speed)) + (f0-4 + (fmax + f0-3 + (fmin + (* + f1-0 + (/ 1.0 f2-0) + (-> self final-speed) + (-> *YAKOW-bank* run-anim-speed) + ) + (-> *YAKOW-bank* max-run-anim-speed) + ) + ) + ) + (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) f0-4) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 11)) + ) + (set! + (-> a0-8 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 11)) + 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 11)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (< 40.96 (-> self final-speed)) + (go yakow-run-away) + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (go yakow-run-away) + (none) + ) + :post + yakow-run-post + ) + +;; failed to figure out what this is: +(defstate yakow-die (yakow) + :event + (the-as + (function process int symbol event-message-block object :behavior yakow) + #f + ) + :code + (behavior () + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 collide-with) (the-as uint 0)) + (set! (-> v1-1 prim-core collide-as) (the-as uint 0)) + ) + 0 + (TODO-RENAME-9 + (-> self fact-override) + #t + *entity-pool* + (-> self fact-override) + 0 + ) + (process-entity-status! self (entity-perm-status dead) #t) + (none) + ) + ) + +;; definition for method 11 of type yakow +;; Used lq/sq +(defmethod copy-defaults! yakow ((obj yakow) (arg0 res-lump)) + (stack-size-set! (-> obj main-thread) 512) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (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 3073)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 4096.0 0.0 10240.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set! (-> obj align) (new 'process 'align-control obj)) + (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 nav nearest-y-threshold) 409600.0) + (set! + (-> obj fact-override) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! + (-> obj fact-override idle-distance) + (-> *YAKOW-bank* default-idle-distance) + ) + (dummy-14 obj *yakow-sg* '()) + (set! + (-> obj draw shadow-ctrl) + (new + 'process + 'shadow-control + -4096.0 + 4096.0 + 614400.0 + (the-as float 24) + 245760.0 + ) + ) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj water) (new 'process 'water-control obj 6 0.0 8192.0 2048.0)) + (set! (-> obj water flags) (the-as uint 2)) + (set! (-> obj water height) (res-lump-float (-> obj entity) 'water-height)) + (set! (-> obj water ripple-size) 12288.0) + (set! (-> obj home-base quad) (-> obj root-override trans quad)) + (let ((v1-40 (res-lump-struct (-> obj entity) 'alt-vector vector))) + (when v1-40 + (set! (-> obj dest-base quad) (-> v1-40 quad)) + (set! (-> obj dest-rot) (-> v1-40 w)) + (set! (-> obj dest-base w) 1.0) + ) + ) + (set! (-> obj vulnerable) #t) + (set! (-> obj grazing) #f) + (set! (-> obj enable-turn-around) #f) + (set! + (-> obj in-pen) + (and + (-> obj entity) + (logtest? (-> obj entity extra perm status) (entity-perm-status complete)) + ) + ) + (cond + ((-> obj in-pen) + (set! (-> obj root-override trans quad) (-> obj dest-base quad)) + (set-yaw-angle-clear-roll-pitch! (-> obj root-override) (-> obj dest-rot)) + (go yakow-graze) + ) + (else + (yakow-task-complete? #f) + (go yakow-idle) + ) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/village2/assistant-village2_REF.gc b/test/decompiler/reference/levels/village2/assistant-village2_REF.gc new file mode 100644 index 0000000000..7a16ca4bac --- /dev/null +++ b/test/decompiler/reference/levels/village2/assistant-village2_REF.gc @@ -0,0 +1,3195 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type assistant-levitator +(deftype assistant-levitator (process-taskable) + ((boulder entity-actor :offset-assert 380) + (particle sparticle-launch-control 4 :offset-assert 384) + ) + :heap-base #x120 + :method-count-assert 53 + :size-assert #x190 + :flag-assert #x3501200190 + ) + +;; definition for method 3 of type assistant-levitator +(defmethod inspect assistant-levitator ((obj assistant-levitator)) + (let ((t9-0 (method-of-type process-taskable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tboulder: ~A~%" (-> obj boulder)) + (format #t "~T~Tparticle[4] @ #x~X~%" (-> obj particle)) + obj + ) + +;; definition for method 7 of type assistant-levitator +;; INFO: Return type mismatch process-taskable vs assistant-levitator. +(defmethod relocate assistant-levitator ((obj assistant-levitator) (arg0 int)) + (dotimes (v1-0 4) + (if (nonzero? (-> obj particle v1-0)) + (&+! (-> obj particle v1-0) arg0) + ) + ) + (the-as + assistant-levitator + ((method-of-type process-taskable relocate) obj arg0) + ) + ) + +;; definition for method 10 of type assistant-levitator +(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) + ) + ) + ) + ((method-of-type process-taskable deactivate) obj) + (none) + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "assistant-village2" + :bounds (new 'static 'vector :w 8192.0) + :max-lod 2 + :version #x6 + :shadow 4 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 5) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 81920.0) + (set! (-> v1-1 mgeo 1) (the-as uint 2)) + (set! (-> v1-1 lod-dist 1) 163840.0) + (set! (-> v1-1 mgeo 2) (the-as uint 3)) + (set! (-> v1-1 lod-dist 2) 4095996000.0) + (set! *assistant-village2-sg* v1-1) + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "jaws" + :bounds (new 'static 'vector :w 1024.0) + :version #x6 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) 2) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *jaws-sg* v1-2) + ) + +;; definition for method 52 of type assistant-levitator +;; INFO: Return type mismatch int vs none. +(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))) + ) + 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) + ) + +;; definition for method 48 of type assistant-levitator +(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) + ) + (let ((v1-9 (-> obj draw shadow-ctrl))) + (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) + ) + 0 + (dummy-14 (-> obj draw shadow-ctrl)) + ) + (else + (let ((v1-14 (-> obj draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +;; definition for method 32 of type assistant-bluehut +(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)) + ((1 2 3) + (if (not arg0) + (set! (-> obj will-talk) #t) + ) + (case (current-task (-> obj tasks)) + ((103) + (when arg0 + (close-status! (-> obj tasks) (task-status need-introduction)) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'clone) + (set! (-> a1-5 param 0) (the-as uint (process->handle obj))) + (send-event-function (-> obj sage extra process) a1-5) + ) + (let ((s5-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> s5-1 from) pp) + (set! (-> s5-1 num-params) 1) + (set! (-> s5-1 message) 'clone) + (set! (-> s5-1 param 0) (the-as uint (process->handle obj))) + (send-event-function + (-> (entity-by-type flutflut-bluehut) extra process) + s5-1 + ) + ) + ) + (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") + ) + ) + ) + ((47) + (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)) + ) + ) + (let ((a1-14 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-14 from) pp) + (set! (-> a1-14 num-params) 1) + (set! (-> a1-14 message) 'anim-mode) + (set! (-> a1-14 param 0) (the-as uint 'clone-anim)) + (send-event-function (handle->process (-> obj jaws)) a1-14) + ) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) pp) + (set! (-> a1-15 num-params) 1) + (set! (-> a1-15 message) 'center-joint) + (set! (-> a1-15 param 0) (the-as uint 3)) + (send-event-function (handle->process (-> obj jaws)) a1-15) + ) + (let ((s5-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> s5-4 from) pp) + (set! (-> s5-4 num-params) 1) + (set! (-> s5-4 message) 'clone) + (set! (-> s5-4 param 0) (the-as uint (process->handle obj))) + (send-event-function + (-> (entity-by-type flutflut-bluehut) extra process) + s5-4 + ) + ) + ) + (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") + ) + ) + ) + ((53) + (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)) + (let ((s5-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> s5-6 from) pp) + (set! (-> s5-6 num-params) 1) + (set! (-> s5-6 message) 'clone) + (set! (-> s5-6 param 0) (the-as uint (process->handle obj))) + (send-event-function + (-> (entity-by-type flutflut-bluehut) extra process) + s5-6 + ) + ) + ) + (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") + ) + ) + ) + ) + ) + ((5) + (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 '() + ) + ) + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string + (the-as task-status (current-status (-> obj tasks))) + ) + ) + ) + (-> obj draw art-group data 5) + ) + ) + ) + ) + +;; definition for method 31 of type assistant-bluehut +(defmethod get-art-elem assistant-bluehut ((obj assistant-bluehut)) + (-> obj draw art-group data 10) + ) + +;; definition for method 44 of type assistant-bluehut +(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) + ) + ) + (else + #f + ) + ) + ) + +;; definition for method 47 of type assistant-bluehut +(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) + ) + ) + ) + (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) + ) + +;; definition for method 43 of type assistant-bluehut +(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))) + ) + (cond + ((= (get-task-status (game-task village2-levitator)) (task-status invalid)) + #f + ) + ((< 0.5 f30-0) + (dummy-11 (-> obj ambient) "ASSTLP23" #f (-> obj root-override trans)) + ) + (else + (dummy-11 (-> obj ambient) "ASSTLP24" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate idle (assistant-bluehut) + :virtual #t + :trans + (behavior () + (case (get-task-status (game-task village2-levitator)) + (((task-status need-hint) (task-status need-introduction)) + (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) 'play-anim) + (send-event-function self a1-1) + ) + ) + ) + ((-> (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 + (the-as uint 1) + (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! + ) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate play-anim (assistant-bluehut) + :virtual #t + :exit + (behavior () + (let ((a0-1 (handle->process (-> self jaws)))) + (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) 0) + (set! (-> a1-1 message) 'end-mode) + (send-event-function (-> self sage extra process) a1-1) + ) + (let ((gp-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> gp-0 from) self) + (set! (-> gp-0 num-params) 0) + (set! (-> gp-0 message) 'end-mode) + (send-event-function + (-> (entity-by-type flutflut-bluehut) extra process) + gp-0 + ) + ) + ((-> (method-of-type process-taskable play-anim) exit)) + (close-specific-task! + (game-task village2-levitator) + (task-status need-reminder-a) + ) + (none) + ) + :trans + (behavior () + '() + (none) + ) + ) + +;; definition for method 39 of type assistant-bluehut +(defmethod should-display? assistant-bluehut ((obj assistant-bluehut)) + (cond + ((not + (closed? + (-> obj tasks) + (game-task village2-levitator) + (task-status unknown) + ) + ) + (dummy-33 obj) + #f + ) + ((or + (= + (get-task-status (game-task village2-levitator)) + (task-status need-reward-speech) + ) + (sages-kidnapped?) + ) + #f + ) + (else + #t + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; definition for function check-drop-level-assistant-bluehut +(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 + (the-as uint 1) + (the-as vector #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 + ) + ) + ) + (none) + ) + +;; definition for method 11 of type assistant-bluehut +(defmethod + copy-defaults! + assistant-bluehut + ((obj assistant-bluehut) (arg0 res-lump)) + (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)) + (set! (-> obj im-talking) #t) + (set! (-> obj draw light-index) (the-as uint 1)) + (set! (-> obj sound-id) (new-sound-id)) + (dummy-42 obj) + (none) + ) + +;; failed to figure out what this is: +(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) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + +;; failed to figure out what this is: +(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) + ) + ) + ) + +;; definition for function assistant-levitator-blue-glow +;; INFO: Return type mismatch object vs none. +(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) + ) + (none) + ) + +;; definition for function assistant-levitator-blue-beam +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior assistant-levitator-blue-beam assistant-levitator () + (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)) + ) + (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! (-> *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) + ) + (none) + ) + +;; definition for method 32 of type assistant-levitator +(defmethod + play-anim! + assistant-levitator + ((obj assistant-levitator) (arg0 symbol)) + (with-pp + (case (current-status (-> obj tasks)) + ((6) + (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") + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string + (the-as task-status (current-status (-> obj tasks))) + ) + ) + ) + (-> obj draw art-group data 5) + ) + ) + ) + ) + +;; definition for method 31 of type assistant-levitator +(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) + ) + ) + +;; failed to figure out what this is: +(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) + ) + a1-0 + ) + ) + ) + ((-> (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) + ) + ((-> (method-of-type process-taskable play-anim) trans)) + (none) + ) + ) + +;; failed to figure out what this is: +(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 + (set! + (-> self state-time) + (the-as seconds (-> *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)) + ) + ) + (< + (- + (-> *display* base-frame-counter) + (the-as int (-> 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 + ) + ) + ) + (level-hint-spawn + (game-text-id village2-not-enough-cells-levitator) + "asstvb71" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (none) + ) + ) + +;; definition for method 47 of type assistant-levitator +(defmethod + target-above-threshold? + assistant-levitator + ((obj assistant-levitator)) + (= + (get-task-status (game-task village2-levitator)) + (task-status need-reward-speech) + ) + ) + +;; failed to figure out what this is: +(defstate idle (assistant-levitator) + :virtual #t + :exit + (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) + ) + :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 + (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 + ) + ) + ) + (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! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; definition for method 39 of type assistant-levitator +(defmethod should-display? assistant-levitator ((obj assistant-levitator)) + (or + (= + (get-task-status (game-task village2-levitator)) + (task-status need-reward-speech) + ) + (zero? (get-task-status (game-task village2-levitator))) + ) + ) + +;; failed to figure out what this is: +(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) + ) + (none) + ) + ) + +;; definition for method 11 of type assistant-levitator +(defmethod + copy-defaults! + assistant-levitator + ((obj assistant-levitator) (arg0 res-lump)) + (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-char + (new 'static 'array uint8 16 + #x6c + #x65 + #x76 + #x2d + #x6d + #x61 + #x63 + #x68 + #x2d + #x69 + #x64 + #x6c + #x65 + #x0 + #x0 + #x0 + ) + :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) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/village2/gambler_REF.gc b/test/decompiler/reference/levels/village2/gambler_REF.gc index 090f5f5b45..053170ff54 100644 --- a/test/decompiler/reference/levels/village2/gambler_REF.gc +++ b/test/decompiler/reference/levels/village2/gambler_REF.gc @@ -275,50 +275,49 @@ ) (cond ((< 0.9230769 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM01" #f (-> obj root-override trans)) ) ((< 0.84615386 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM02" #f (-> obj root-override trans)) ) ((< 0.7692308 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM03" #f (-> obj root-override trans)) ) ((< 0.6923077 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM04" #f (-> obj root-override trans)) ) ((< 0.61538464 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM05" #f (-> obj root-override trans)) ) ((< 0.53846157 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM06" #f (-> obj root-override trans)) ) ((< 0.46153846 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM07" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM07" #f (-> obj root-override trans)) ) ((< 0.3846154 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM08" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM08" #f (-> obj root-override trans)) ) ((< 0.30769232 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM09" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM09" #f (-> obj root-override trans)) ) ((< 0.23076923 f0-2) (if (not (task-closed? (game-task ogre-boss) (task-status need-reminder))) - (dummy-11 (-> obj ambient) "GAM-AM10" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM10" #f (-> obj root-override trans)) ) ) ((< 0.15384616 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM11" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM11" #f (-> obj root-override trans)) ) ((< 0.07692308 f0-2) - (dummy-11 (-> obj ambient) "GAM-AM12" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM12" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "GAM-AM13" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GAM-AM13" #f (-> obj root-override trans)) ) ) ) ) - (none) ) ;; failed to figure out what this is: diff --git a/test/decompiler/reference/levels/village2/geologist_REF.gc b/test/decompiler/reference/levels/village2/geologist_REF.gc index 2b860f4e4d..e90374383b 100644 --- a/test/decompiler/reference/levels/village2/geologist_REF.gc +++ b/test/decompiler/reference/levels/village2/geologist_REF.gc @@ -239,7 +239,7 @@ ) (cond ((< 0.8888889 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM01" #f (-> obj root-override trans)) ) ((< 0.7777778 f0-2) (if @@ -250,11 +250,11 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "GEO-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM02" #f (-> obj root-override trans)) ) ) ((< 0.6666667 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM03" #f (-> obj root-override trans)) ) ((< 0.5555556 f0-2) (if @@ -263,14 +263,14 @@ (game-task village2-geologist-money) (task-status need-introduction) ) - (dummy-11 (-> obj ambient) "GEO-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM04" #f (-> obj root-override trans)) ) ) ((< 0.44444445 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM05" #f (-> obj root-override trans)) ) ((< 0.33333334 f0-2) - (dummy-11 (-> obj ambient) "GEO-AM06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM06" #f (-> obj root-override trans)) ) ((< 0.22222222 f0-2) (if @@ -281,26 +281,25 @@ (task-status need-reminder) ) ) - (dummy-11 (-> obj ambient) "GEO-AM07" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM07" #f (-> obj root-override trans)) ) ) ((< 0.11111111 f0-2) - (dummy-11 (-> obj ambient) "GEO-LO02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-LO02" #f (-> obj root-override trans)) ) ((closed? (-> obj tasks) (game-task village2-geologist-money) (task-status need-resolution) ) - (dummy-11 (-> obj ambient) "GEO-AM08" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-AM08" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "GEO-LO01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "GEO-LO01" #f (-> obj root-override trans)) ) ) ) ) - (none) ) ;; definition for method 11 of type geologist diff --git a/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc b/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc index 5c3d0defc1..10a9f1773f 100644 --- a/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc +++ b/test/decompiler/reference/levels/village2/sage-bluehut_REF.gc @@ -4,7 +4,7 @@ ;; definition of type assistant-bluehut (deftype assistant-bluehut (process-taskable) ((sound-id sound-id :offset-assert 380) - (jaws uint64 :offset-assert 384) + (jaws handle :offset-assert 384) (sage entity-actor :offset-assert 392) (im-talking symbol :offset-assert 396) ) @@ -258,7 +258,10 @@ ) ((and (-> obj reminder-played) - (< 81920.0 (vector-vector-distance (-> obj root trans) (camera-pos))) + (< + 81920.0 + (vector-vector-distance (-> obj root-override trans) (camera-pos)) + ) ) #t ) @@ -401,24 +404,23 @@ ) (cond ((< 0.8 f0-2) - (dummy-11 (-> obj ambient) "SAGELP20" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP20" #f (-> obj root-override trans)) ) ((< 0.6 f0-2) - (dummy-11 (-> obj ambient) "SAGELP21" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP21" #f (-> obj root-override trans)) ) ((< 0.4 f0-2) - (dummy-11 (-> obj ambient) "SAGELP22" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP22" #f (-> obj root-override trans)) ) ((< 0.2 f0-2) - (dummy-11 (-> obj ambient) "SAGELP23" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP23" #f (-> obj root-override trans)) ) ((nonzero? (get-task-status (game-task citadel-sage-blue))) - (dummy-11 (-> obj ambient) "SAGELP24" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "SAGELP24" #f (-> obj root-override trans)) ) ) ) ) - (none) ) ;; failed to figure out what this is: @@ -622,7 +624,3 @@ (dummy-42 obj) (none) ) - - - - diff --git a/test/decompiler/reference/levels/village2/warrior_REF.gc b/test/decompiler/reference/levels/village2/warrior_REF.gc index 179a9a68a3..1162a77878 100644 --- a/test/decompiler/reference/levels/village2/warrior_REF.gc +++ b/test/decompiler/reference/levels/village2/warrior_REF.gc @@ -46,7 +46,7 @@ (defmethod dummy-52 warrior ((obj warrior)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -4096.0 f0-0))) ) @@ -60,7 +60,7 @@ ) ;; definition for method 48 of type warrior -(defmethod draw-shadow warrior ((obj warrior)) +(defmethod draw-npc-shadow warrior ((obj warrior)) (-> obj draw shadow-ctrl) (cond ((and @@ -72,7 +72,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -276,23 +276,22 @@ ) (cond ((< 0.66 f0-2) - (dummy-11 (-> obj ambient) "WAR-LO1A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "WAR-LO1A" #f (-> obj root-override trans)) ) ((< 0.33 f0-2) - (dummy-11 (-> obj ambient) "WAR-LO1B" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "WAR-LO1B" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "WAR-LO1C" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "WAR-LO1C" #f (-> obj root-override trans)) ) ) ) ) - (none) ) ;; definition for method 41 of type warrior ;; INFO: Return type mismatch int vs none. -(defmethod initialize-collision warrior ((obj warrior) (arg0 int)) +(defmethod initialize-collision warrior ((obj warrior) (arg0 int) (arg1 vector)) (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) @@ -321,7 +320,7 @@ ) (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) (dummy-50 s5-0) - (set! (-> obj root) s5-0) + (set! (-> obj root-override) s5-0) ) 0 (none) diff --git a/test/decompiler/reference/levels/village3/assistant-village3_REF.gc b/test/decompiler/reference/levels/village3/assistant-village3_REF.gc new file mode 100644 index 0000000000..ea2e4a4cb5 --- /dev/null +++ b/test/decompiler/reference/levels/village3/assistant-village3_REF.gc @@ -0,0 +1,360 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type assistant-villagec +(deftype assistant-villagec (process-taskable) + () + :heap-base #x110 + :method-count-assert 53 + :size-assert #x17c + :flag-assert #x350110017c + ) + +;; definition for method 3 of type assistant-villagec +(defmethod inspect assistant-villagec ((obj assistant-villagec)) + (let ((t9-0 (method-of-type process-taskable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "assistant-village3" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 3) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *assistant-village3-sg* v1-1) + ) + +;; definition for method 52 of type assistant-villagec +;; INFO: Return type mismatch int vs none. +(defmethod dummy-52 assistant-villagec ((obj assistant-villagec)) + (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) (- (+ -2048.0 f0-0))) + ) + 0 + (set! (-> v1-1 settings top-plane w) (- (+ 1024.0 f0-0))) + ) + 0 + ) + ) + (none) + ) + +;; definition for method 48 of type assistant-villagec +(defmethod draw-npc-shadow assistant-villagec ((obj assistant-villagec)) + (-> obj draw shadow-ctrl) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (let ((v1-9 (-> obj draw shadow-ctrl))) + (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) + ) + 0 + (dummy-14 (-> obj draw shadow-ctrl)) + ) + (else + (let ((v1-14 (-> obj draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +;; definition for method 32 of type assistant-villagec +(defmethod play-anim! assistant-villagec ((obj assistant-villagec) (arg0 symbol)) + (set! (-> obj talk-message) (the-as uint 292)) + (cond + ((= + (get-task-status (game-task finalboss-movies)) + (task-status need-introduction) + ) + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string (the-as task-status (current-status (-> obj tasks)))) + ) + ) + (get-art-elem obj) + ) + (else + (new 'static 'spool-anim + :name "assistant-village3-reminder" + :index 4 + :parts 3 + :command-list '() + ) + ) + ) + ) + +;; definition for method 31 of type assistant-villagec +(defmethod get-art-elem assistant-villagec ((obj assistant-villagec)) + (-> obj draw art-group data 3) + ) + +;; definition for method 39 of type assistant-villagec +(defmethod should-display? assistant-villagec ((obj assistant-villagec)) + (and + (task-closed? (game-task village3-button) (task-status need-introduction)) + (not (sages-kidnapped?)) + ) + ) + +;; definition for method 47 of type assistant-villagec +;; INFO: Return type mismatch basic vs symbol. +(defmethod target-above-threshold? assistant-villagec ((obj assistant-villagec)) + (the-as symbol (and *target* (< (-> (target-pos 0) z) -14245888.0))) + ) + +;; definition for method 43 of type assistant-villagec +(defmethod TODO-RENAME-43 assistant-villagec ((obj assistant-villagec)) + (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))) + (f0-2 (+ -1.0 (the-as float v1-4))) + ) + (cond + ((< 0.85714287 f0-2) + (dummy-11 (-> obj ambient) "ASSTLP31" #f (-> obj root-override trans)) + ) + ((< 0.71428573 f0-2) + (dummy-11 (-> obj ambient) "ASSTLP32" #f (-> obj root-override trans)) + ) + ((< 0.5714286 f0-2) + (dummy-11 (-> obj ambient) "ASSTLP33" #f (-> obj root-override trans)) + ) + ((< 0.42857143 f0-2) + (let ((v1-16 (get-task-status (game-task lavatube-end)))) + (if + (not + (or + (= v1-16 (task-status need-reward-speech)) + (= v1-16 (task-status invalid)) + ) + ) + (dummy-11 (-> obj ambient) "ASSTLP34" #f (-> obj root-override trans)) + ) + ) + ) + ((< 0.2857143 f0-2) + (let ((v1-21 (get-task-status (game-task lavatube-end)))) + (if + (not + (or + (= v1-21 (task-status need-reward-speech)) + (= v1-21 (task-status invalid)) + ) + ) + (dummy-11 (-> obj ambient) "ASSTLP35" #f (-> obj root-override trans)) + ) + ) + ) + ((< 0.14285715 f0-2) + (let ((v1-26 (get-task-status (game-task lavatube-end)))) + (if + (not + (or + (= v1-26 (task-status need-reward-speech)) + (= v1-26 (task-status invalid)) + ) + ) + (dummy-11 (-> obj ambient) "ASSTLP36" #f (-> obj root-override trans)) + ) + ) + ) + ((nonzero? (get-task-status (game-task citadel-sage-green))) + (dummy-11 (-> obj ambient) "ASSTLP37" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate idle (assistant-villagec) + :virtual #t + :code + (behavior () + (if (!= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (get-art-elem self) + ) + (ja-channel-push! 1 15) + ) + (while #t + (TODO-RENAME-43 self) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-8 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + 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 3)) + 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! + ) + ) + ) + (let ((gp-0 (-> *display* base-frame-counter))) + (while (let* ((s5-0 (-> *display* base-frame-counter)) + (f30-0 300.0) + (f28-0 0.16) + (f26-0 0.17000002) + (v1-31 + (/ (the-as int (rand-uint31-gen *random-generator*)) 256) + ) + (v1-32 (the-as number (logior #x3f800000 v1-31))) + ) + (< + (- + s5-0 + (the + int + (* f30-0 (+ f28-0 (* f26-0 (+ -1.0 (the-as float v1-32))))) + ) + ) + gp-0 + ) + ) + (suspend) + ) + ) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> gp-1 param 0) (ja-aframe 0.0 0)) + (set! (-> gp-1 param 1) 1.0) + (set! (-> gp-1 frame-num) (ja-aframe 16.0 0)) + (joint-control-channel-group! gp-1 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (ja-aframe 0.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 ((gp-3 (-> *display* base-frame-counter))) + (while (let* ((s5-1 (-> *display* base-frame-counter)) + (f30-1 300.0) + (f28-1 0.16) + (f26-1 0.17000002) + (v1-56 + (/ (the-as int (rand-uint31-gen *random-generator*)) 256) + ) + (v1-57 (the-as number (logior #x3f800000 v1-56))) + ) + (< + (- + s5-1 + (the + int + (* f30-1 (+ f28-1 (* f26-1 (+ -1.0 (the-as float v1-57))))) + ) + ) + gp-3 + ) + ) + (suspend) + ) + ) + ) + (none) + ) + ) + +;; definition for method 11 of type assistant-villagec +(defmethod + copy-defaults! + assistant-villagec + ((obj assistant-villagec) (arg0 res-lump)) + (dummy-40 + obj + arg0 + *assistant-village3-sg* + 3 + 31 + (new 'static 'vector :w 4096.0) + 5 + ) + (set! (-> obj tasks) (get-task-control (game-task assistant-village3))) + (dummy-42 obj) + (none) + ) diff --git a/test/decompiler/reference/levels/village3/miners_REF.gc b/test/decompiler/reference/levels/village3/miners_REF.gc index eb2b89d8a2..9353a0d0e5 100644 --- a/test/decompiler/reference/levels/village3/miners_REF.gc +++ b/test/decompiler/reference/levels/village3/miners_REF.gc @@ -71,7 +71,7 @@ (defmethod dummy-52 minertall ((obj minertall)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -4096.0 f0-0))) ) @@ -88,7 +88,7 @@ ) ;; definition for method 48 of type minertall -(defmethod draw-shadow minertall ((obj minertall)) +(defmethod draw-npc-shadow minertall ((obj minertall)) (-> obj draw shadow-ctrl) (cond ((and @@ -100,7 +100,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -308,7 +308,7 @@ (defmethod dummy-52 minershort ((obj minershort)) (let ((v1-1 (-> obj draw shadow-ctrl))) (when v1-1 - (let ((f0-0 (-> obj root trans y))) + (let ((f0-0 (-> obj root-override trans y))) (let ((a0-2 v1-1)) (set! (-> a0-2 settings bot-plane w) (- (+ -4096.0 f0-0))) ) @@ -325,7 +325,7 @@ ) ;; definition for method 48 of type minershort -(defmethod draw-shadow minershort ((obj minershort)) +(defmethod draw-npc-shadow minershort ((obj minershort)) (-> obj draw shadow-ctrl) (cond ((and @@ -337,7 +337,7 @@ (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) ) 0 - ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (dummy-14 (-> obj draw shadow-ctrl)) ) (else (let ((v1-14 (-> obj draw shadow-ctrl))) @@ -818,96 +818,95 @@ ) (cond ((< 0.9655172 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MIN-LO01" #f (-> obj root-override trans)) ) ((< 0.9310345 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MIN-LO03" #f (-> obj root-override trans)) ) ((< 0.8965517 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MIN-LO04" #f (-> obj root-override trans)) ) ((< 0.86206895 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MIN-LO05" #f (-> obj root-override trans)) ) ((< 0.82758623 f0-2) - (dummy-11 (-> obj ambient) "MIN-LO06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MIN-LO06" #f (-> obj root-override trans)) ) ((< 0.79310346 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM01" #f (-> obj root-override trans)) ) ((< 0.7586207 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM02" #f (-> obj root-override trans)) ) ((< 0.7241379 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM03" #f (-> obj root-override trans)) ) ((< 0.6896552 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM04" #f (-> obj root-override trans)) ) ((< 0.6551724 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM05" #f (-> obj root-override trans)) ) ((< 0.62068963 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM06" #f (-> obj root-override trans)) ) ((< 0.5862069 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM07" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM07" #f (-> obj root-override trans)) ) ((< 0.55172414 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM08" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM08" #f (-> obj root-override trans)) ) ((< 0.51724136 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM09" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM09" #f (-> obj root-override trans)) ) ((< 0.4827586 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM10" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM10" #f (-> obj root-override trans)) ) ((< 0.44827586 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM11" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM11" #f (-> obj root-override trans)) ) ((< 0.41379312 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM12" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM12" #f (-> obj root-override trans)) ) ((< 0.37931034 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM1A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM1A" #f (-> obj root-override trans)) ) ((< 0.3448276 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM2A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM2A" #f (-> obj root-override trans)) ) ((< 0.31034482 f0-2) - (dummy-11 (-> obj ambient) "MSH-AM3A" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MSH-AM3A" #f (-> obj root-override trans)) ) ((< 0.27586207 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM01" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM01" #f (-> obj root-override trans)) ) ((< 0.2413793 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM02" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM02" #f (-> obj root-override trans)) ) ((< 0.20689656 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM03" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM03" #f (-> obj root-override trans)) ) ((< 0.1724138 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM04" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM04" #f (-> obj root-override trans)) ) ((< 0.13793103 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM05" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM05" #f (-> obj root-override trans)) ) ((< 0.10344828 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM06" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM06" #f (-> obj root-override trans)) ) ((< 0.06896552 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM07" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM07" #f (-> obj root-override trans)) ) ((< 0.03448276 f0-2) - (dummy-11 (-> obj ambient) "MTA-AM08" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM08" #f (-> obj root-override trans)) ) (else - (dummy-11 (-> obj ambient) "MTA-AM09" #f (-> obj root trans)) + (dummy-11 (-> obj ambient) "MTA-AM09" #f (-> obj root-override trans)) ) ) ) ) - (none) ) ;; failed to figure out what this is: @@ -1041,7 +1040,3 @@ (go (method-of-object obj idle)) (none) ) - - - - diff --git a/test/decompiler/reference/levels/village3/sage-village3_REF.gc b/test/decompiler/reference/levels/village3/sage-village3_REF.gc new file mode 100644 index 0000000000..2b6d05fc62 --- /dev/null +++ b/test/decompiler/reference/levels/village3/sage-village3_REF.gc @@ -0,0 +1,670 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type sage-villagec +(deftype sage-villagec (process-taskable) + ((evilbro handle :offset-assert 384) + (evilsis handle :offset-assert 392) + (assistant entity-actor :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 53 + :size-assert #x194 + :flag-assert #x3501300194 + ) + +;; definition for method 3 of type sage-villagec +(defmethod inspect sage-villagec ((obj sage-villagec)) + (let ((t9-0 (method-of-type process-taskable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tevilbro: ~D~%" (-> obj evilbro)) + (format #t "~T~Tevilsis: ~D~%" (-> obj evilsis)) + (format #t "~T~Tassistant: ~A~%" (-> obj assistant)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "sage-village3" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-1 jgeo) 0) + (set! (-> v1-1 janim) 3) + (set! (-> v1-1 mgeo 0) (the-as uint 1)) + (set! (-> v1-1 lod-dist 0) 4095996000.0) + (set! *sage-village3-sg* v1-1) + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "evilbro-village3" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-2 jgeo) 0) + (set! (-> v1-2 janim) 3) + (set! (-> v1-2 mgeo 0) (the-as uint 1)) + (set! (-> v1-2 lod-dist 0) 4095996000.0) + (set! *evilbro-village3-sg* v1-2) + ) + +;; failed to figure out what this is: +(let + ((v1-3 + (new 'static 'skeleton-group + :art-group-name "evilsis-village3" + :bounds (new 'static 'vector :w 16384.0) + :version #x6 + :shadow 2 + ) + ) + ) + (set! (-> v1-3 jgeo) 0) + (set! (-> v1-3 janim) 3) + (set! (-> v1-3 mgeo 0) (the-as uint 1)) + (set! (-> v1-3 lod-dist 0) 4095996000.0) + (set! *evilsis-village3-sg* v1-3) + ) + +;; definition for method 32 of type sage-villagec +(defmethod play-anim! sage-villagec ((obj sage-villagec) (arg0 symbol)) + (with-pp + (set! (-> obj talk-message) (the-as uint 291)) + (case (current-status (-> obj tasks)) + ((1 2 3) + (if (not arg0) + (set! (-> obj will-talk) #t) + ) + (case (current-task (-> obj tasks)) + ((105) + (when arg0 + (close-status! (-> obj tasks) (task-status need-introduction)) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'clone) + (set! (-> a1-5 param 0) (the-as uint (process->handle obj))) + (send-event-function (-> obj assistant extra process) a1-5) + ) + (let ((s5-1 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj evilbro) (ppointer->handle (when s5-1 + (let + ((t9-5 + (method-of-type + manipy + activate + ) + ) + ) + (t9-5 + (the-as manipy s5-1) + obj + 'manipy + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-1 + manipy-init + (-> + obj + root-override + trans + ) + (-> obj entity) + *evilbro-village3-sg* + #f + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) pp) + (set! (-> a1-9 num-params) 1) + (set! (-> a1-9 message) 'anim-mode) + (set! (-> a1-9 param 0) (the-as uint 'clone-anim)) + (send-event-function (handle->process (-> obj evilbro)) a1-9) + ) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) pp) + (set! (-> a1-10 num-params) 1) + (set! (-> a1-10 message) 'blend-shape) + (set! (-> a1-10 param 0) (the-as uint #t)) + (send-event-function (handle->process (-> obj evilbro)) a1-10) + ) + (let ((a1-11 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-11 from) pp) + (set! (-> a1-11 num-params) 1) + (set! (-> a1-11 message) 'center-joint) + (set! (-> a1-11 param 0) (the-as uint 3)) + (send-event-function (handle->process (-> obj evilbro)) a1-11) + ) + (let ((s5-2 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj evilsis) (ppointer->handle (when s5-2 + (let + ((t9-11 + (method-of-type + manipy + activate + ) + ) + ) + (t9-11 + (the-as manipy s5-2) + obj + 'manipy + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-2 + manipy-init + (-> + obj + root-override + trans + ) + (-> obj entity) + *evilsis-village3-sg* + #f + ) + (-> s5-2 ppointer) + ) + ) + ) + ) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) pp) + (set! (-> a1-15 num-params) 1) + (set! (-> a1-15 message) 'anim-mode) + (set! (-> a1-15 param 0) (the-as uint 'clone-anim)) + (send-event-function (handle->process (-> obj evilsis)) a1-15) + ) + (let ((a1-16 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-16 from) pp) + (set! (-> a1-16 num-params) 1) + (set! (-> a1-16 message) 'blend-shape) + (set! (-> a1-16 param 0) (the-as uint #t)) + (send-event-function (handle->process (-> obj evilsis)) a1-16) + ) + (let ((a1-17 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-17 from) pp) + (set! (-> a1-17 num-params) 1) + (set! (-> a1-17 message) 'center-joint) + (set! (-> a1-17 param 0) (the-as uint 3)) + (send-event-function (handle->process (-> obj evilsis)) a1-17) + ) + (set! (-> obj draw bounds w) 40960.0) + ) + (new 'static 'spool-anim + :name "sage-village3-introduction" + :index 8 + :parts 58 + :command-list + '( + ((the binteger 206) + joint + "cameraB" + ) + ((the binteger 268) + joint + "camera" + ) + ((the binteger 321) + joint + "cameraB" + ) + ((the binteger 415) + joint + "camera" + ) + ((the binteger 502) + joint + "cameraB" + ) + ((the binteger 655) + joint + "camera" + ) + ((the binteger 864) + joint + "cameraB" + ) + ((the binteger 958) + joint + "camera" + ) + ((the binteger 1178) + joint + "cameraB" + ) + ((the binteger 1295) + joint + "camera" + ) + ((the binteger 1377) + joint + "cameraB" + ) + ((the binteger 1683) + joint + "camera" + ) + ((the binteger 2066) + joint + "cameraB" + ) + ((the binteger 2209) + joint + "camera" + ) + ((the binteger 2389) + joint + "cameraB" + ) + ((the binteger 2707) + joint + "camera" + ) + ((the binteger 2769) + joint + "cameraB" + ) + ((the binteger 2901) + joint + "camera" + ) + ((the binteger 3021) + joint + "cameraB" + ) + ((the binteger 3158) + joint + "camera" + ) + ((the binteger 3301) + joint + "cameraB" + ) + ((the binteger 3533) + joint + "camera" + ) + ((the binteger 3632) + joint + "cameraB" + ) + ((the binteger 3692) + joint + "camera" + ) + ((the binteger 3780) + joint + "cameraB" + ) + ((the binteger 3818) + joint + "camera" + ) + ((the binteger 4188) + joint + "cameraB" + ) + ((the binteger 4324) + joint + "camera" + ) + ((the binteger 4462) + joint + "cameraB" + ) + ((the binteger 4542) joint "camera") + ) + ) + ) + ((79) + (when arg0 + (let* ((s5-3 (-> obj tasks)) + (s4-0 (method-of-object s5-3 save-reminder)) + (a1-18 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-18 from) pp) + (set! (-> a1-18 num-params) 2) + (set! (-> a1-18 message) 'query) + (set! (-> a1-18 param 0) (the-as uint 'pickup)) + (set! (-> a1-18 param 1) (the-as uint 6)) + (s4-0 + s5-3 + (the int (the-as float (send-event-function *target* a1-18))) + 1 + ) + ) + (close-status! (-> obj tasks) (task-status need-introduction)) + ) + (new 'static 'spool-anim + :name "sage-village3-introduction-dark-eco" + :index 4 + :parts 9 + :command-list + '( + ((the binteger 111) + joint + "cameraB" + ) + ((the binteger 189) + joint + "camera" + ) + ((the binteger 455) + joint + "cameraB" + ) + ((the binteger 638) + joint + "camera" + ) + ((the binteger 753) joint "cameraB") + ) + ) + ) + (else + (if arg0 + (close-specific-task! + (game-task snow-ram) + (task-status need-introduction) + ) + ) + (new 'static 'spool-anim + :name "sage-village3-introduction-rams" + :index 6 + :parts 6 + :command-list + '( + ((the binteger 155) + joint + "cameraB" + ) + ((the binteger 370) joint "camera") + ) + ) + ) + ) + ) + ((4 5) + (set! (-> obj skippable) #t) + (let ((s4-1 (+ (get-reminder (-> obj tasks) 0) 1))) + (if (< (the-as uint 1) (the-as uint s4-1)) + (set! s4-1 0) + ) + (countdown (s3-0 2) + (cond + ((zero? s4-1) + (if + (!= + (get-task-status (game-task cave-dark-crystals)) + (task-status need-reminder) + ) + (set! s4-1 1) + ) + ) + (else + (if + (not + (or + (= + (get-task-status (game-task snow-ram)) + (task-status need-reminder) + ) + (= + (get-task-status (game-task snow-ram)) + (task-status need-reminder-a) + ) + ) + ) + (set! s4-1 0) + ) + ) + ) + ) + (if arg0 + (save-reminder (-> obj tasks) s4-1 0) + ) + (if (zero? s4-1) + (new 'static 'spool-anim + :name "sage-village3-reminder-1-dark-eco" + :index 5 + :parts 2 + :command-list '() + ) + (new 'static 'spool-anim + :name "sage-village3-reminder-1-rams" + :index 7 + :parts 3 + :command-list '() + ) + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string + (the-as task-status (current-status (-> obj tasks))) + ) + ) + ) + (get-art-elem obj) + ) + ) + ) + ) + +;; definition for method 31 of type sage-villagec +(defmethod get-art-elem sage-villagec ((obj sage-villagec)) + (-> obj draw art-group data 3) + ) + +;; definition for method 47 of type sage-villagec +;; INFO: Return type mismatch basic vs symbol. +(defmethod target-above-threshold? sage-villagec ((obj sage-villagec)) + (the-as + symbol + (and + *target* + (< (-> (target-pos 0) x) 4575232.0) + (< -14323302.0 (-> (target-pos 0) z)) + ) + ) + ) + +;; definition for method 43 of type sage-villagec +(defmethod TODO-RENAME-43 sage-villagec ((obj sage-villagec)) + (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))) + (f0-2 (+ -1.0 (the-as float v1-4))) + ) + (cond + ((< 0.875 f0-2) + (dummy-11 (-> obj ambient) "SAGELP31" #f (-> obj root-override trans)) + ) + ((< 0.75 f0-2) + (if + (not + (closed? + (-> obj tasks) + (game-task cave-dark-crystals) + (task-status need-reminder) + ) + ) + (dummy-11 (-> obj ambient) "SAGELP32" #f (-> obj root-override trans)) + ) + ) + ((< 0.625 f0-2) + (if (nonzero? (get-task-status (game-task citadel-sage-green))) + (dummy-11 (-> obj ambient) "SAGELP33" #f (-> obj root-override trans)) + ) + ) + ((< 0.5 f0-2) + (dummy-11 (-> obj ambient) "SAGELP34" #f (-> obj root-override trans)) + ) + ((< 0.375 f0-2) + (dummy-11 (-> obj ambient) "SAGELP35" #f (-> obj root-override trans)) + ) + ((< 0.25 f0-2) + (dummy-11 (-> obj ambient) "SAGELP36" #f (-> obj root-override trans)) + ) + ((< 0.125 f0-2) + (if (nonzero? (get-task-status (game-task citadel-sage-green))) + (dummy-11 (-> obj ambient) "SAGELP37" #f (-> obj root-override trans)) + ) + ) + ((!= + (get-task-status (game-task citadel-sage-green)) + (task-status need-resolution) + ) + (dummy-11 (-> obj ambient) "SAGELP38" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate idle (sage-villagec) + :virtual #t + :trans + (behavior () + (case (get-task-status (game-task village3-button)) + (((task-status need-introduction)) + (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) + (send-event-function self a1-0) + ) + ) + ) + ((-> (method-of-type process-taskable idle) trans)) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate play-anim (sage-villagec) + :virtual #t + :exit + (behavior () + (set! (-> self draw bounds w) 10240.0) + (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) 'end-mode) + (send-event-function (-> self assistant extra process) a1-0) + ) + (let ((a0-2 (handle->process (-> self evilbro)))) + (if a0-2 + (deactivate a0-2) + ) + ) + (let ((a0-6 (handle->process (-> self evilsis)))) + (if a0-6 + (deactivate a0-6) + ) + ) + ((-> (method-of-type process-taskable play-anim) exit)) + (none) + ) + ) + +;; definition for method 39 of type sage-villagec +(defmethod should-display? sage-villagec ((obj sage-villagec)) + (cond + ((not + (closed? + (-> obj tasks) + (game-task village3-button) + (task-status need-hint) + ) + ) + (dummy-33 obj) + #f + ) + ((sages-kidnapped?) + (dummy-33 obj) + #f + ) + (else + #t + ) + ) + ) + +;; definition for method 48 of type sage-villagec +(defmethod draw-npc-shadow sage-villagec ((obj sage-villagec)) + (let ((v1-1 (-> obj draw shadow-ctrl))) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (set! (-> v1-1 settings flags) (logand -9 (-> v1-1 settings flags))) + (set! (-> v1-1 settings flags) (logand -5 (-> v1-1 settings flags))) + (set! (-> v1-1 settings bot-plane w) 20480.0) + (let ((a0-8 v1-1)) + (set! (-> a0-8 settings flags) (logand -33 (-> a0-8 settings flags))) + ) + 0 + (dummy-14 v1-1) + ) + (else + (logior! (-> v1-1 settings flags) 32) + 0 + ) + ) + ) + (none) + ) + +;; definition for method 11 of type sage-villagec +(defmethod copy-defaults! sage-villagec ((obj sage-villagec) (arg0 res-lump)) + (dummy-40 obj arg0 *sage-village3-sg* 3 40 (new 'static 'vector :w 8192.0) 5) + (set! (-> obj tasks) (get-task-control (game-task cave-dark-crystals))) + (set! (-> obj assistant) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj evilbro) (the-as handle #f)) + (set! (-> obj evilsis) (the-as handle #f)) + (set! (-> obj sound-flava) (the-as uint 5)) + (dummy-42 obj) + (none) + ) diff --git a/test/decompiler/reference/levels/village_common/oracle_REF.gc b/test/decompiler/reference/levels/village_common/oracle_REF.gc index 40373101d5..ec9ac95e15 100644 --- a/test/decompiler/reference/levels/village_common/oracle_REF.gc +++ b/test/decompiler/reference/levels/village_common/oracle_REF.gc @@ -625,7 +625,7 @@ :volume #x400 :fo-max 50 ) - (-> obj root trans) + (-> obj root-override trans) ) ) (set! (-> obj first-task) (the-as uint (-> arg0 extra perm task))) @@ -638,7 +638,7 @@ (set! (-> obj left-eye-cell) (the-as handle #f)) (logior! (-> obj draw status) 32) (let ((s4-0 (new 'stack-no-clear 'vector)) - (s5-1 (lambda :behavior oracle () (let* ((gp-0 (-> self root)) + (s5-1 (lambda :behavior oracle () (let* ((gp-0 (-> self root-override)) (v1-1 (if (and @@ -653,14 +653,15 @@ ) (a1-1 (if v1-1 (-> - (the-as - collide-shape - v1-1 - ) + v1-1 root-prim prim-core ) - (-> self root trans) + (-> + self + root-override + trans + ) ) ) ) diff --git a/test/offline/offline_test_main.cpp b/test/offline/offline_test_main.cpp index 520a6a42ba..d7d9e6c1db 100644 --- a/test/offline/offline_test_main.cpp +++ b/test/offline/offline_test_main.cpp @@ -15,8 +15,9 @@ namespace { // list of object files to ignore during reference checks const std::unordered_set g_files_to_skip_compiling = { - "timer", // accessing timer regs - "display", // interrupt handlers + "timer", // accessing timer regs + "display", // interrupt handlers + "target-snowball", // screwed up labels, likely cut content }; // the functions we expect the decompiler to skip @@ -186,7 +187,8 @@ std::vector g_object_files_to_decompile_or_ref_check; std::vector dgos = { "CGO/KERNEL.CGO", "CGO/ENGINE.CGO", "CGO/GAME.CGO", "DGO/BEA.DGO", "DGO/INT.DGO", "DGO/VI1.DGO", "DGO/VI2.DGO", "DGO/VI3.DGO", "DGO/CIT.DGO", "DGO/MIS.DGO", "DGO/JUB.DGO", "DGO/SUN.DGO", - "DGO/DEM.DGO", "DGO/FIN.DGO", "DGO/JUN.DGO", "DGO/FIC.DGO", "DGO/OGR.DGO"}; + "DGO/DEM.DGO", "DGO/FIN.DGO", "DGO/JUN.DGO", "DGO/FIC.DGO", "DGO/SNO.DGO", "DGO/SWA.DGO", + "DGO/MAI.DGO", "DGO/ROB.DGO", "DGO/LAV.DGO", "DGO/OGR.DGO"}; } // namespace