diff --git a/Taskfile.yml b/Taskfile.yml index b923fcf6b7..ad38f0dbcc 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -64,3 +64,4 @@ tasks: type-test: cmds: - ./out/build/Release/bin/goalc-test.exe --gtest_brief=0 --gtest_filter="*TypeConsistency*" + diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index b5ef60cc83..ed4a51f4bf 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -10879,7 +10879,7 @@ (:methods (new (symbol type basic uint int) _type_ 0) (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-10 (_type_ uint) collide-shape-prim 10) (dummy-11 () none 11) (dummy-12 () none 12) (dummy-13 () none 13) @@ -10966,7 +10966,7 @@ (dummy-31 () none 31) (dummy-32 () none 32) (dummy-33 (_type_ vector uint) none 33) - (dummy-34 () none 34) + (dummy-34 (_type_ uint) collide-shape-prim 34) (dummy-35 (_type_) none 35) (dummy-36 () none 36) (dummy-37 () none 37) @@ -10987,7 +10987,7 @@ (dummy-52 () none 52) (dummy-53 (_type_ int int int) none 53) (dummy-54 (_type_ int int) none 54) - (dummy-55 () none 55) + (dummy-55 (_type_ process uint float float float) none 55) ) ) @@ -14624,7 +14624,7 @@ (dummy-13 () none 13) (dummy-14 (_type_) none 14) (set-target-pos! (_type_ vector) none 15) - (dummy-16 (_type_ vector) symbol 16) ; see - nav-enemy-test-point-in-nav-mesh? + (dummy-16 (_type_ vector) nav-poly 16) ; see - nav-enemy-test-point-in-nav-mesh? (dummy-17 () none 17) (dummy-18 () none 18) (dummy-19 (_type_ vector collide-shape-moving vector float) none 19) @@ -17888,10 +17888,10 @@ (:methods (new (symbol type process int float float float) _type_ 0) (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-10 (_type_) none 10) (dummy-11 () none 11) (distance-from-surface (_type_) float 12) - (dummy-13 () none 13) + (dummy-13 (_type_ float vector int vector) none 13) (display-water-marks? (_type_) symbol 14) (dummy-15 () none 15) (dummy-16 () none 16) @@ -19301,7 +19301,7 @@ ;;(define-extern target-hit object) ;; unknown type ;;(define-extern target-eco-powerup object) ;; unknown type ;;(define-extern target-load-wait object) ;; unknown type -;;(define-extern target-grab object) ;; unknown type +(define-extern target-grab (state target)) ;; unknown type ;;(define-extern target-look-around object) ;; unknown type ;;(define-extern target-billy-game object) ;; unknown type ;;(define-extern target-racing-start object) ;; unknown type @@ -19310,7 +19310,7 @@ ;;(define-extern target-tube-start object) ;; unknown type ;;(define-extern target-periscope object) ;; unknown type ;;(define-extern target-fishing object) ;; unknown type -;;(define-extern target-final-door object) ;; unknown type +(define-extern target-final-door (state basic handle target)) ;; unknown type ;;(define-extern target-play-anim object) ;; unknown type ;;(define-extern target-clone-anim object) ;; unknown type ;;(define-extern target-edge-grab object) ;; unknown type @@ -19338,7 +19338,7 @@ ;; - Unknowns ;;(define-extern target-hit-ground object) ;; unknown type -;;(define-extern target-stance object) ;; unknown type +(define-extern target-stance (state target)) ;; unknown type ;;(define-extern target-high-jump object) ;; unknown type ;;(define-extern target-attack-air object) ;; unknown type ;;(define-extern target-wheel-flip object) ;; unknown type @@ -19447,7 +19447,7 @@ ;;(define-extern *smack-mods* object) ;; unknown type ;;(define-extern *smack-up-mods* object) ;; unknown type ;;(define-extern target-title object) ;; unknown type -;;(define-extern target-demo object) ;; unknown type +(define-extern target-demo (state target)) ;; unknown type ;;(define-extern target-warp-in object) ;; unknown type ;;(define-extern *auto-continue* object) ;; unknown type @@ -22727,11 +22727,11 @@ ;; - Functions -(define-extern sharkey-get-player-position function) -(define-extern sharkey-follow-trajectory function) -(define-extern sharkey-reset-position function) -(define-extern sharkey-notice-player? function) -(define-extern sharkey-move-to-attack-position function) +(define-extern sharkey-get-player-position (function vector none)) +(define-extern sharkey-follow-trajectory (function float quaternion :behavior sharkey)) +(define-extern sharkey-reset-position (function none :behavior sharkey)) +(define-extern sharkey-notice-player? (function symbol :behavior sharkey)) +(define-extern sharkey-move-to-attack-position (function float :behavior sharkey)) ;; - Unknowns @@ -23930,14 +23930,14 @@ ;; - Functions -(define-extern lurkercrab-vulnerable function) -(define-extern lurkercrab-invulnerable function) +(define-extern lurkercrab-vulnerable (function int :behavior lurkercrab)) +(define-extern lurkercrab-invulnerable (function int :behavior lurkercrab)) ;; - Unknowns (define-extern *lurkercrab-sg* skeleton-group) (define-extern *lurkercrab-nav-enemy-info* nav-enemy-info) -;;(define-extern lurkercrab-pushed object) ;; unknown type +(define-extern lurkercrab-pushed (state lurkercrab)) ;; unknown type ;; ---------------------- @@ -26476,60 +26476,13 @@ ;; - Types -; (deftype assistant-lavatube-end (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-end (process-taskable) + () + :method-count-assert 53 + :size-assert #x17c + :heap-base #x110 + :flag-assert #x350110017c + ) ;; - Unknowns @@ -27139,7 +27092,7 @@ ;; - Functions -(define-extern static-screen-spawn function) +(define-extern static-screen-spawn (function int int int int int symbol target (pointer process))) ;; target may differ ;; ---------------------- @@ -27258,28 +27211,22 @@ ;; - Types -; (deftype static-screen (process) -; ((part UNKNOWN 1 :offset-assert 112) -; (state-time uint64 :offset-assert 120) -; ) -; :method-count-assert 15 -; :size-assert #x80 -; :heap-base #x10 -; :flag-assert #xf00100080 -; ;; 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 static-screen (process) + ((part sparticle-launch-control 1 :offset-assert 112) + (state-time uint64 :offset-assert 120) + ) + :method-count-assert 15 + :size-assert #x80 + :heap-base #x10 + :flag-assert #xf00100080 + (:methods + (idle (int int symbol) _type_ :state 14) + ) + ) ;; - Functions -(define-extern static-screen-init-by-other function) +(define-extern static-screen-init-by-other (function int int int int int symbol none :behavior static-screen)) ;; ---------------------- @@ -27317,25 +27264,69 @@ ;; - Types -; (deftype robotboss-dda (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; bad get label -; ) +;; definition of type robotboss-dda +(deftype robotboss-dda (structure) + ((blue-bomb-time float :offset-assert 0) + (num-blobs int32 :offset-assert 4) + (green-bomb-time float :offset-assert 8) + (red-shots-min int32 :offset-assert 12) + (red-shots-rnd int32 :offset-assert 16) + (red-shot-time-min float :offset-assert 20) + (red-shot-time-rnd float :offset-assert 24) + (red-bomb-time float :offset-assert 28) + (yellow-shot-time-min float :offset-assert 32) + (yellow-shot-time-rnd float :offset-assert 36) + (yellow-gun-hits int32 :offset-assert 40) + (yellow-bomb-time float :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) -; (deftype robotboss (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; unrecognized get op: (set! v1 process-drawable) parent was UNKNOWN -; ) +(deftype robotboss (process-drawable) + ((alts entity-actor 13 :offset-assert 176) + (desired-loc vector :inline :offset-assert 240) + (old-loc vector :inline :offset-assert 256) + (loc-t float :offset-assert 272) + (loc-t-start seconds :offset-assert 280) + (loc-t-duration seconds :offset-assert 288) + (hits-to-go int32 :offset-assert 296) + (took-hit symbol :offset-assert 300) + (children-spawned int32 :offset-assert 304) + (vulnerable seconds :offset-assert 312) + (till-next-shot seconds :offset-assert 320) + (shot-attractor uint64 :offset-assert 328) + (desired-pool-y float :offset-assert 336) + (particle sparticle-launch-control 7 :offset-assert 340) + (blue-smoke basic :offset-assert 368) + (red-smoke basic :offset-assert 372) + (yellow-smoke basic :offset-assert 376) + (white-eco handle :offset-assert 384) + (des-cam-entity basic :offset-assert 392) + (use-interesting symbol :offset-assert 396) + (ignore-camera symbol :offset-assert 400) + (ambient ambient-control :offset 408) + (yellow-gun joint-mod :offset 424) + (palette-val float :offset 428) + (looping-sound ambient-sound 4 :offset 432) + (dda robotboss-dda :offset 448) + (valid-frames int32 :offset 452) + (skip-cut symbol :offset 456) + (keep-charging symbol :offset 460) + ) + :heap-base #x16 + :method-count-assert 21 + :size-assert #x1d0 + :flag-assert #x15001601d0 + (:methods + (dummy-20 () none 20) + ) + ) ;; - Functions -(define-extern target-has-all-the-cells? function) +(define-extern target-has-all-the-cells? (function symbol)) ;; ---------------------- @@ -27994,46 +27985,12 @@ ;; - Types -; (deftype fin-door (process-hidden) -; ((name basic :offset-assert 4) -; (mask uint32 :offset-assert 8) -; (parent uint32 :offset-assert 12) -; (brother uint32 :offset-assert 16) -; (child uint32 :offset-assert 20) -; (ppointer uint32 :offset-assert 24) -; (self basic :offset-assert 28) -; (pool basic :offset-assert 32) -; (status basic :offset-assert 36) -; (pid int32 :offset-assert 40) -; (main-thread basic :offset-assert 44) -; (top-thread basic :offset-assert 48) -; (entity basic :offset-assert 52) -; (state basic :offset-assert 56) -; (trans-hook basic :offset-assert 60) -; (post-hook basic :offset-assert 64) -; (event-hook basic :offset-assert 68) -; (allocated-length int32 :offset-assert 72) -; (next-state basic :offset-assert 76) -; (heap-base uint32 :offset-assert 80) -; (heap-top uint32 :offset-assert 84) -; (heap-cur uint32 :offset-assert 88) -; (stack-frame-top basic :offset-assert 92) -; (heap kheap :inline :offset-assert 80) -; (connection-list 'connectable :inline :offset-assert 96) -; (stack UNKNOWN :dynamic :offset-assert 112) -; ) -; :method-count-assert 15 -; :size-assert #x70 -; :flag-assert #xf00000070 -; (: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 fin-door (process-hidden) + () + :method-count-assert 15 + :size-assert #x70 + :flag-assert #xf00000070 + ) (deftype final-door (process-drawable) () @@ -28043,93 +28000,48 @@ :flag-assert #x17004000b0 ;; not enough basic ops (:methods - (idle () none 20) ;; state - (dummy-21 () none 21) - (dummy-22 () none 22) + (idle () _type_ :state 20) ;; state + (dummy-21 (_type_) none 21) + (open () _type_ :state 22) ) ) -; (deftype power-left (final-door) -; () -; :method-count-assert 23 -; :size-assert #xb0 -; :heap-base #x40 -; :flag-assert #x17004000b0 -; ;; 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) -; ) -; ) +(deftype power-left (final-door) + () + :method-count-assert 23 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x17004000b0 + ) -; (deftype power-right (final-door) -; () -; :method-count-assert 23 -; :size-assert #xb0 -; :heap-base #x40 -; :flag-assert #x17004000b0 -; ;; 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) -; ) -; ) +(deftype power-right (final-door) + () + :method-count-assert 23 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x17004000b0 + ) -; (deftype powercellalt (process-drawable) -; ((jump-pos vector :inline :offset-assert 176) -; (base vector :inline :offset-assert 192) -; (index int32 :offset-assert 208) -; ) -; :method-count-assert 23 -; :size-assert #xd4 -; :heap-base #x70 -; :flag-assert #x17007000d4 -; ;; 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 powercellalt (process-drawable) + ((root-override collide-shape-moving :score 100 :offset 112) + (jump-pos vector :inline :offset-assert 176) + (base vector :inline :offset-assert 192) + (index int32 :offset-assert 208) + ) + :method-count-assert 23 + :size-assert #xd4 + :heap-base #x70 + :flag-assert #x17007000d4 + (:methods + (dummy-20 () none 20) + (jump () _type_ :state 21) + (idle () _type_ :state 22) + ) + ) ;; - Functions -(define-extern powercellalt-init-by-other function) +(define-extern powercellalt-init-by-other (function entity vector vector int none :behavior powercellalt)) ;; - Unknowns @@ -28742,90 +28654,20 @@ ;; - Types -; (deftype aphid (nav-enemy) -; ((try int32 :offset-assert 400) -; ) -; :method-count-assert 76 -; :size-assert #x194 -; :heap-base #x130 -; :flag-assert #x4c01300194 -; ;; 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 aphid (nav-enemy) + ((try int32 :offset-assert 400) + ) + :method-count-assert 76 + :size-assert #x194 + :heap-base #x130 + :flag-assert #x4c01300194 + ) ;; - Functions -(define-extern aphid-invulnerable function) -(define-extern aphid-vulnerable function) -(define-extern aphid-init-by-other function) +(define-extern aphid-invulnerable (function none :behavior aphid)) +(define-extern aphid-vulnerable (function none :behavior aphid)) +(define-extern aphid-init-by-other (function nav-enemy vector vector none :behavior aphid)) ;; - 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 23b9c59650..a9077916ae 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -704,5 +704,14 @@ [16, "(function sparticle-launch-control :behavior sequenceB)"] ], + "demo-obs": [ + [1, "(function target)"] + ], + + "final-door": [ + [11, "(function final-door symbol)"], + [12, "(function final-door symbol)"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index c14a8c68db..25eb1a5c27 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -491,6 +491,25 @@ ["L34", "vector"] ], + "sharkey": [ + ["L101", "attack-info"] + ], + + "assistant-citadel": [ + ["L28", "vector"] + ], + + "robotboss-h": [ + ["L67", "float", true], + ["L68", "uint64", true], + ["L69", "uint64", true] + ], + + "final-door": [ + ["L59", "vector"], + ["L60", "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 6ba4ba6a39..56a9dc3d6c 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -1602,5 +1602,82 @@ [16, "vector"] ], + "(method 37 sharkey)": [ + [16, "vector"] + ], + + "(method 39 sharkey)": [ + [16, "vector"] + ], + + "sharkey-notice-player?": [ + [16, "event-message-block"] + ], + + "sharkey-move-to-attack-position": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(code nav-enemy-attack sharkey)": [ + [16, "vector"], + [32, "vector"], + [48, "event-message-block"] + ], + + "(trans nav-enemy-chase sharkey)": [ + [16, "event-message-block"] + ], + + "(method 43 lurkercrab)": [ + [16, "vector"], + [32, "vector"] + ], + + "(enter idle assistant-lavatube-end)": [ + [16, "event-message-block"] + ], + + "target-has-all-the-cells?": [ + [16, "event-message-block"] + ], + + "(code idle power-left)": [ + [16, "event-message-block"] + ], + + "(code jump powercellalt)": [ + [16, "trajectory"] + ], + + "(enter target-final-door)": [ + [16, "event-message-block"] + ], + + "(exit target-final-door)": [ + [16, "event-message-block"] + ], + + "(code target-final-door)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "event-message-block"] + ], + + "(method 43 aphid)": [ + [16, "event-message-block"] + ], + + "(code nav-enemy-give-up aphid)": [ + [16, "vector"] + ], + + "aphid-init-by-other": [ + [16, "vector"], + [32, "event-message-block"] + ], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index bd19571a55..c8a55e670c 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -2737,5 +2737,144 @@ [329, "v1", "art-joint-anim"] ], + "(method 39 sharkey)": [ + [71, "t9", "(function nav-enemy none)"] + ], + + "(code nav-enemy-patrol sharkey)": [ + [27, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-attack sharkey)": [ + [144, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-chase sharkey)": [ + [40, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-stop-chase sharkey)": [ + [22, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-victory sharkey)": [ + [24, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-chase lurkercrab)": [ + [17, "v1", "art-joint-anim"], + [338, "v1", "art-joint-anim"], + [388, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-patrol lurkercrab)": [ + [21, "v1", "art-joint-anim"], + [77, "v1", "art-joint-anim"], + [191, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-notice lurkerpuppy)": [ + [24, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-victory lurkerpuppy)": [ + [20, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-give-up lurkerpuppy)": [ + [18, "v1", "art-joint-anim"], + [76, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-chase lurkerpuppy)": [ + [25, "v1", "art-joint-anim"], + [111, "v1", "art-joint-anim"] + ], + + "static-screen-init-by-other": [ + [32, "s3", "sparticle-launch-group"], + [35, "s3", "sparticle-launch-group"] + ], + + "(code target-demo)": [ + [66, "v1", "handle"], + [69, "v1", "handle"], + [96, "v1", "handle"], + [99, "v1", "handle"], + [126, "v1", "handle"], + [163, "v1", "handle"], + [196, "v1", "handle"], + [229, "v1", "handle"], + [262, "v1", "handle"], + [293, "v1", "handle"], + [323, "v1", "handle"], + [357, "v1", "handle"], + [390, "v1", "handle"], + [423, "v1", "handle"], + [456, "v1", "handle"], + [487, "v1", "handle"], + [518, "v1", "handle"], + [548, "v1", "handle"], + [578, "v1", "handle"], + [129, "v1", "handle"], + [166, "v1", "handle"], + [199, "v1", "handle"], + [232, "v1", "handle"], + [261, "v1", "handle"], + [265, "v1", "handle"], + [296, "v1", "handle"], + [298, "v1", "handle"], + [326, "v1", "handle"], + [360, "v1", "handle"], + [393, "v1", "handle"], + [426, "v1", "handle"], + [459, "v1", "handle"], + [490, "v1", "handle"], + [521, "v1", "handle"], + [551, "v1", "handle"], + [581, "v1", "handle"] + ], + + "target-has-all-the-cells?": [ + [17, "v1", "float"] + ], + + "(code open final-door)": [ + [13, "v1", "art-joint-anim"], + [66, "v1", "art-joint-anim"] + ], + + "(code idle powercellalt)": [ + [8, "a1", "process-drawable"] + ], + + "(code target-final-door)": [ + [85, "gp", "handle"], + [105, "gp", "handle"], + [117, "gp", "handle"], + [133, "s1", "process-drawable"], + [200, "s1", "process-drawable"] + ], + + "(event open final-door)": [ + [4, "v1", "float"], + [6, "v1", "float"] + ], + + "(code nav-enemy-chase aphid)": [ + [42, "v1", "art-joint-anim"], + [168, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-stare aphid)": [ + [34, "v1", "art-joint-anim"], + [160, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-give-up aphid)": [ + [43, "v1", "art-joint-anim"], + [101, "v1", "art-joint-anim"] + ], + "placeholder-do-not-add-below": [] } diff --git a/goal_src/engine/collide/collide-shape-h.gc b/goal_src/engine/collide/collide-shape-h.gc index 771c8f29c1..972ae3b83a 100644 --- a/goal_src/engine/collide/collide-shape-h.gc +++ b/goal_src/engine/collide/collide-shape-h.gc @@ -155,7 +155,7 @@ (:methods (new (symbol type basic uint int) _type_ 0) (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-10 (_type_ uint) collide-shape-prim 10) (dummy-11 () none 11) (dummy-12 () none 12) (dummy-13 () none 13) @@ -255,7 +255,7 @@ (dummy-31 () none 31) (dummy-32 () none 32) (dummy-33 (_type_ vector uint) none 33) - (dummy-34 () none 34) + (dummy-34 (_type_ uint) collide-shape-prim 34) (dummy-35 (_type_) none 35) (dummy-36 () none 36) (dummy-37 () none 37) @@ -276,7 +276,7 @@ (dummy-52 () none 52) (dummy-53 (_type_ int int int) none 53) (dummy-54 (_type_ int int) none 54) - (dummy-55 () none 55) + (dummy-55 (_type_ process uint float float float) none 55) ) ) diff --git a/goal_src/engine/gfx/water/water-h.gc b/goal_src/engine/gfx/water/water-h.gc index d15d0fdb08..6b44920783 100644 --- a/goal_src/engine/gfx/water/water-h.gc +++ b/goal_src/engine/gfx/water/water-h.gc @@ -47,10 +47,10 @@ (:methods (new (symbol type process int float float float) _type_ 0) (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-10 (_type_) none 10) (dummy-11 () none 11) (distance-from-surface (_type_) float 12) - (dummy-13 () none 13) + (dummy-13 (_type_ float vector int vector) none 13) (display-water-marks? (_type_) symbol 14) (dummy-15 () none 15) (dummy-16 () none 16) diff --git a/goal_src/engine/nav/navigate-h.gc b/goal_src/engine/nav/navigate-h.gc index 5f40be3bfe..6679914f81 100644 --- a/goal_src/engine/nav/navigate-h.gc +++ b/goal_src/engine/nav/navigate-h.gc @@ -244,7 +244,7 @@ (dummy-13 () none 13) (dummy-14 (_type_) none 14) (set-target-pos! (_type_ vector) none 15) - (dummy-16 (_type_ vector) symbol 16) ; see - nav-enemy-test-point-in-nav-mesh? + (dummy-16 (_type_ vector) nav-poly 16) ; see - nav-enemy-test-point-in-nav-mesh? (dummy-17 () none 17) (dummy-18 () none 18) (dummy-19 (_type_ vector collide-shape-moving vector float) none 19) diff --git a/goal_src/engine/sparticle/sparticle-launcher.gc b/goal_src/engine/sparticle/sparticle-launcher.gc index 516582e5c9..adf2b87761 100644 --- a/goal_src/engine/sparticle/sparticle-launcher.gc +++ b/goal_src/engine/sparticle/sparticle-launcher.gc @@ -11,3 +11,6 @@ ;; TODO - for particle related code (define-extern sp-launch-particles-var (function sparticle-system sparticle-launcher vector symbol symbol float none)) + +;; TODO - for static-screen +(define-extern lookup-part-group-by-name (function string basic)) diff --git a/goal_src/engine/target/target.gc b/goal_src/engine/target/target.gc index 2a5883963e..5f5dc658df 100644 --- a/goal_src/engine/target/target.gc +++ b/goal_src/engine/target/target.gc @@ -5,3 +5,5 @@ ;; name in dgo: target ;; dgos: GAME, ENGINE +;; TODO - for final-door +(define-extern target-stance (state target)) diff --git a/goal_src/engine/target/target2.gc b/goal_src/engine/target/target2.gc index 7980091788..7dcebc22f0 100644 --- a/goal_src/engine/target/target2.gc +++ b/goal_src/engine/target/target2.gc @@ -5,3 +5,5 @@ ;; name in dgo: target2 ;; dgos: GAME, ENGINE +;; TODO - for final-door +(define-extern target-grab (state target)) diff --git a/goal_src/engine/ui/hud-classes.gc b/goal_src/engine/ui/hud-classes.gc index 258f654e8a..a54578e262 100644 --- a/goal_src/engine/ui/hud-classes.gc +++ b/goal_src/engine/ui/hud-classes.gc @@ -8,3 +8,5 @@ ;; TODO - for assistant-firecanyon (define-extern hide-hud (function none)) (define-extern hud-hidden? (function symbol)) +;; TODO - for static-screen +(define-extern hide-hud-quick (function none)) diff --git a/goal_src/levels/beach/lurkercrab.gc b/goal_src/levels/beach/lurkercrab.gc index c7b86d7c84..00b8d4c70e 100644 --- a/goal_src/levels/beach/lurkercrab.gc +++ b/goal_src/levels/beach/lurkercrab.gc @@ -5,3 +5,1436 @@ ;; name in dgo: lurkercrab ;; dgos: BEA, L1 +(define-extern *lurkercrab-sg* skeleton-group) +(declare-type lurkercrab nav-enemy) +(define-extern lurkercrab-pushed (state lurkercrab)) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 159) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :name "group-lurkercrab-slide" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (new 'static 'sparticle-group-item + :launcher #x297 + :fade-after (meters 40.0) + :falloff-to (meters 40.0) + ) + (new 'static 'sparticle-group-item + :launcher #x298 + :fade-after (meters 40.0) + :falloff-to (meters 40.0) + ) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 663) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3e99999a + :random-range #x3e99999a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -973078528 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x46000000 + :random-range #x46000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41f00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42a00000 + :random-range #x41a00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x41f00000 + :random-range #x41f00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x41800000 + :random-range #x42400000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x415a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value #x43088889 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1101368306 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1106522267 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x12c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x1004 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 664) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200f00) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3dcccccd + :random-range #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -973078528 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x444ccccd + :random-range #x444ccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42960000 + :random-range #x42700000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42700000 + :random-range #x41a00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x41b80000 + :random-range #x41f00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x42da740e + :random-range #x42da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1092979698 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1059425266 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x12c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x1004 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :initial-value #x45aaaaab + :random-range #x45aaaaab + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3e + :flags #x1 + :initial-value #x444ccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; definition of type lurkercrab +(deftype lurkercrab (nav-enemy) + ((orient basic :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x194 + :flag-assert #x4c01300194 + ) + +;; failed to figure out what this is: +(let + ((v1-4 + (new 'static 'skeleton-group + :art-group-name "lurkercrab" + :bounds (new 'static 'vector :w 10240.0) + :max-lod 2 + :version #x6 + ) + ) + ) + (set! (-> v1-4 jgeo) 0) + (set! (-> v1-4 janim) 4) + (set! (-> v1-4 mgeo 0) (the-as uint 1)) + (set! (-> v1-4 lod-dist 0) 81920.0) + (set! (-> v1-4 mgeo 1) (the-as uint 2)) + (set! (-> v1-4 lod-dist 1) 163840.0) + (set! (-> v1-4 mgeo 2) (the-as uint 3)) + (set! (-> v1-4 lod-dist 2) 4095996000.0) + (set! *lurkercrab-sg* v1-4) + ) + +;; definition for method 44 of type lurkercrab +;; INFO: Return type mismatch none vs object. +(defmethod + dummy-44 + lurkercrab + ((obj lurkercrab) (arg0 process) (arg1 event-message-block)) + (if + (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) + ) + ) + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + ) + (dummy-55 (-> obj collide-info) arg0 (-> arg1 param 0) 0.7 6144.0 16384.0) + (the-as object (if (zero? (logand (-> obj nav-enemy-flags) 256)) + (dummy-45 (-> obj collide-info)) + ) + ) + ) + +;; definition for method 43 of type lurkercrab +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; Used lq/sq +(defmethod + dummy-43 + lurkercrab + ((obj lurkercrab) (arg0 process) (arg1 event-message-block)) + (let ((s5-0 (-> obj incomming-attack-id))) + (set! (-> obj incomming-attack-id) (the-as handle (-> arg1 param 2))) + (let ((v1-1 (-> arg1 param 1))) + (the-as object (cond + ((or (= v1-1 'flop) (= v1-1 'explode) (= v1-1 'darkeco)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go (method-of-object obj nav-enemy-die)) + ) + ((= v1-1 'punch) + (the-as none (cond + ((logtest? (-> obj nav-enemy-flags) 32) + (logclear! + (-> obj mask) + (process-mask actor-pause) + ) + (go (method-of-object obj nav-enemy-die)) + ) + ((begin + (let ((s4-0 (new 'stack-no-clear 'vector))) + (let + ((f30-0 + (quaternion-xz-angle (target-rot)) + ) + ) + (set-vector! + s4-0 + (* 24576.0 (sin f30-0)) + 0.0 + (* 24576.0 (cos f30-0)) + 1.0 + ) + ) + (vector+! + s4-0 + (-> obj collide-info trans) + s4-0 + ) + (set! + (-> obj nav target-pos quad) + (-> s4-0 quad) + ) + ) + (go lurkercrab-pushed) + (= s5-0 (-> obj incomming-attack-id)) + ) + 'push + ) + (else + #t + ) + ) + ) + ) + (else + (the-as none (cond + ((logtest? (-> obj nav-enemy-flags) 32) + (logclear! + (-> obj mask) + (process-mask actor-pause) + ) + (go (method-of-object obj nav-enemy-die)) + ) + ((begin + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector-! + s4-1 + (-> obj collide-info trans) + (target-pos 0) + ) + (vector-normalize! s4-1 24576.0) + (vector+! + s4-1 + (-> obj collide-info trans) + s4-1 + ) + (set! + (-> obj nav target-pos quad) + (-> s4-1 quad) + ) + ) + (go lurkercrab-pushed) + (= s5-0 (-> obj incomming-attack-id)) + ) + 'push + ) + (else + #t + ) + ) + ) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +nav-enemy-default-event-handler + +;; definition for method 37 of type lurkercrab +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-37 lurkercrab ((obj lurkercrab)) + (when (-> obj orient) + (if (logtest? (nav-control-flags bit19) (-> obj nav flags)) + (seek-to-point-toward-point! + (-> obj collide-info) + (-> obj nav target-pos) + (-> obj rotate-speed) + (-> obj turn-time) + ) + (seek-toward-heading-vec! + (-> obj collide-info) + (-> obj nav travel) + (-> obj rotate-speed) + (-> obj turn-time) + ) + ) + ) + (if (not (-> obj orient)) + (quaternion-rotate-y! + (-> obj collide-info quat) + (-> obj collide-info quat) + (* 163840.0 (-> *display* seconds-per-frame)) + ) + ) + 0 + (none) + ) + +;; definition for method 38 of type lurkercrab +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-38 lurkercrab ((obj lurkercrab)) + (dummy-59 + (-> obj collide-info) + (-> obj collide-info transv) + (the-as uint 1) + 8192.0 + #f + #f + #f + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-idle (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (set! (-> self draw force-lod) -1) + (none) + ) + :code + (behavior () + (set! (-> self target-speed) 0.0) + (set! (-> self draw force-lod) 2) + (ja-channel-push! 1 22) + (while #t + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-identity + ) + (set! (-> gp-0 frame-num) (ja-aframe 1.0 0)) + ) + (let ((gp-1 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-1) 900) + (suspend) + ) + ) + (let ((gp-2 (-> self skel root-channel 0))) + (set! + (-> gp-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! (-> gp-2 param 0) (ja-aframe 19.0 0)) + (set! (-> gp-2 param 1) 1.0) + (set! (-> gp-2 frame-num) (ja-aframe 1.0 0)) + (joint-control-channel-group! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 19.0 0)) + (set! (-> gp-3 param 1) 1.0) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((gp-4 (-> self skel root-channel 0))) + (set! (-> gp-4 num-func) num-func-identity) + (set! (-> gp-4 frame-num) (ja-aframe 19.0 0)) + ) + (let ((gp-5 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-5) 300) + (suspend) + ) + ) + (let ((gp-6 (-> self skel root-channel 0))) + (set! + (-> gp-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! (-> gp-6 param 0) (ja-aframe 1.0 0)) + (set! (-> gp-6 param 1) 1.0) + (set! (-> gp-6 frame-num) (ja-aframe 19.0 0)) + (joint-control-channel-group! + gp-6 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-7 (-> self skel root-channel 0))) + (set! (-> gp-7 param 0) (ja-aframe 1.0 0)) + (set! (-> gp-7 param 1) 1.0) + (joint-control-channel-group-eval! + gp-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + ) + +;; definition for function lurkercrab-invulnerable +(defbehavior lurkercrab-invulnerable lurkercrab () + (set! (-> self nav-enemy-flags) (logand -33 (-> self nav-enemy-flags))) + (let ((v1-3 (dummy-34 (-> self collide-info) (the-as uint 2)))) + (when v1-3 + (let ((v0-1 4)) + (set! (-> v1-3 prim-core offense) v0-1) + v0-1 + ) + ) + ) + ) + +;; definition for function lurkercrab-vulnerable +(defbehavior lurkercrab-vulnerable lurkercrab () + (logior! (-> self nav-enemy-flags) 32) + (let ((v1-3 (dummy-34 (-> self collide-info) (the-as uint 2)))) + (when v1-3 + (let ((v0-1 1)) + (set! (-> v1-3 prim-core offense) v0-1) + v0-1 + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (lurkercrab-invulnerable) + (set! (-> self nav-enemy-flags) (logand -65 (-> self nav-enemy-flags))) + (logior! (-> self nav-enemy-flags) 8) + (none) + ) + :code + (behavior () + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 4) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-4 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (ja-channel-push! 1 22) + (while #t + (dotimes (gp-0 6) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-8 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + 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 6)) + 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! + ) + ) + ) + ) + (when (nav-enemy-rnd-go-idle? 0.2) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) 1.0) + (joint-control-channel-group! + a0-12 + (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))) + (nav-enemy-rnd-int-range 2 6) + (until (not (nav-enemy-rnd-go-idle? 0.2)) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-identity + ) + (set! (-> gp-1 frame-num) (ja-aframe 1.0 0)) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-2) 600) + (suspend) + ) + ) + ) + (logior! (-> self nav-enemy-flags) 8) + (let ((a0-19 (-> self skel root-channel 0))) + (set! + (-> a0-19 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-19 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + 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 5)) + 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 ((gp-3 (-> self skel root-channel 0))) + (set! + (-> gp-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! (-> gp-3 param 0) (ja-aframe 30.0 0)) + (set! (-> gp-3 param 1) 1.0) + (set! (-> gp-3 frame-num) (ja-aframe 1.0 0)) + (joint-control-channel-group! + gp-3 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-4 (-> self skel root-channel 0))) + (set! (-> gp-4 param 0) (ja-aframe 30.0 0)) + (set! (-> gp-4 param 1) 1.0) + (joint-control-channel-group-eval! + gp-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (lurkercrab-vulnerable) + (logior! (-> self nav-enemy-flags) 64) + (dotimes (gp-5 2) + (let ((s5-0 (-> self skel root-channel 0))) + (set! + (-> s5-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! (-> s5-0 param 0) (ja-aframe 60.0 0)) + (set! (-> s5-0 param 1) 1.0) + (set! (-> s5-0 frame-num) (ja-aframe 30.0 0)) + (joint-control-channel-group! + s5-0 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((s5-1 (-> self skel root-channel 0))) + (set! (-> s5-1 param 0) (ja-aframe 60.0 0)) + (set! (-> s5-1 param 1) 1.0) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (lurkercrab-invulnerable) + (set! (-> self nav-enemy-flags) (logand -65 (-> self nav-enemy-flags))) + (let ((gp-6 (-> self skel root-channel 0))) + (set! + (-> gp-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! (-> gp-6 param 0) (ja-aframe 90.0 0)) + (set! (-> gp-6 param 1) 1.0) + (set! (-> gp-6 frame-num) (ja-aframe 60.0 0)) + (joint-control-channel-group! + gp-6 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-7 (-> self skel root-channel 0))) + (set! (-> gp-7 param 0) (ja-aframe 90.0 0)) + (set! (-> gp-7 param 1) 1.0) + (joint-control-channel-group-eval! + gp-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-notice (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :code + (behavior () + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (lurkercrab-invulnerable) + (set! (-> self nav-enemy-flags) (logand -65 (-> self nav-enemy-flags))) + (none) + ) + :trans + (behavior () + (if (logtest? (-> *target* state-flags) #x80f8) + (go-virtual nav-enemy-victory) + ) + (if (< (ja-aframe-num 0) 2.0) + ((-> (method-of-type nav-enemy nav-enemy-chase) trans)) + ) + (none) + ) + :code + (behavior () + (logior! (-> self nav-enemy-flags) 8) + (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 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! + ) + ) + ) + (lurkercrab-vulnerable) + (logior! (-> self nav-enemy-flags) 64) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! (-> gp-0 param 0) (ja-aframe 30.0 0)) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 1.0 0)) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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 ((gp-2 (-> self skel root-channel 0))) + (set! + (-> gp-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + (set! (-> gp-2 param 0) (ja-aframe 120.0 0)) + (set! (-> gp-2 param 1) 1.0) + (set! (-> gp-2 frame-num) (ja-aframe 30.0 0)) + (joint-control-channel-group! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 120.0 0)) + (set! (-> gp-3 param 1) 1.0) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((gp-4 (-> self skel root-channel 0))) + (set! + (-> gp-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! (-> gp-4 param 0) (ja-aframe 60.0 0)) + (set! (-> gp-4 param 1) 1.0) + (set! (-> gp-4 frame-num) (ja-aframe 30.0 0)) + (joint-control-channel-group! + gp-4 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-5 (-> self skel root-channel 0))) + (set! (-> gp-5 param 0) (ja-aframe 60.0 0)) + (set! (-> gp-5 param 1) 1.0) + (joint-control-channel-group-eval! + gp-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((gp-6 (-> self skel root-channel 0))) + (set! + (-> gp-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! (-> gp-6 param 0) (ja-aframe 60.0 0)) + (set! (-> gp-6 param 1) 1.0) + (set! (-> gp-6 frame-num) (ja-aframe 30.0 0)) + (joint-control-channel-group! + gp-6 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-7 (-> self skel root-channel 0))) + (set! (-> gp-7 param 0) (ja-aframe 60.0 0)) + (set! (-> gp-7 param 1) 1.0) + (joint-control-channel-group-eval! + gp-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (lurkercrab-invulnerable) + (set! (-> self nav-enemy-flags) (logand -65 (-> self nav-enemy-flags))) + (let ((gp-8 (-> self skel root-channel 0))) + (set! + (-> gp-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! (-> gp-8 param 0) (ja-aframe 90.0 0)) + (set! (-> gp-8 param 1) 1.0) + (set! (-> gp-8 frame-num) (ja-aframe 60.0 0)) + (joint-control-channel-group! + gp-8 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-9 (-> self skel root-channel 0))) + (set! (-> gp-9 param 0) (ja-aframe 90.0 0)) + (set! (-> gp-9 param 1) 1.0) + (joint-control-channel-group-eval! + gp-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-35 (-> self skel root-channel 0))) + (set! + (-> a0-35 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-35 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-35 param 1) 1.0) + (set! (-> a0-35 frame-num) 0.0) + (joint-control-channel-group! + a0-35 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-36 (-> self skel root-channel 0))) + (set! + (-> a0-36 param 0) + (the float (+ (-> a0-36 frame-group data 0 length) -1)) + ) + (set! (-> a0-36 param 1) 1.0) + (joint-control-channel-group-eval! + a0-36 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-38 (-> self skel root-channel 0))) + (set! + (-> a0-38 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-38 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-38 param 1) 1.0) + (set! (-> a0-38 frame-num) 0.0) + (joint-control-channel-group! + a0-38 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-39 (-> self skel root-channel 0))) + (set! + (-> a0-39 param 0) + (the float (+ (-> a0-39 frame-group data 0 length) -1)) + ) + (set! (-> a0-39 param 1) 1.0) + (joint-control-channel-group-eval! + a0-39 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stop-chase (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :code + (behavior () + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :code + (behavior () + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-victory (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (ja-channel-push! 1 22) + (let ((v1-4 (-> self skel root-channel 0))) + (set! + (-> v1-4 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + ) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 300 + ) + (let ((v1-7 (-> self skel root-channel 0))) + (set! (-> v1-7 num-func) num-func-identity) + (set! (-> v1-7 frame-num) 0.0) + ) + (suspend) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate lurkercrab-pushed (lurkercrab) + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (set! (-> self orient) #t) + (none) + ) + :code + (behavior () + (set! (-> self momentum-speed) 57344.0) + (set! (-> self target-speed) 0.0) + (set! (-> self orient) #f) + (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) (ja-aframe 18.0 0)) + (set! (-> gp-0 param 1) 0.75) + (set! (-> gp-0 frame-num) (ja-aframe 1.0 0)) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 18.0 0)) + (set! (-> gp-1 param 1) 0.75) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-2) 75) + (suspend) + ) + ) + (let ((gp-3 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-3) 30) + (suspend) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + :post + (behavior () + (let ((a0-0 (-> self part)) + (a1-0 (-> self collide-info root-prim prim-core)) + ) + (dummy-11 a0-0 (the-as vector a1-0)) + ) + (nav-enemy-travel-post) + (none) + ) + ) + +;; definition for symbol *lurkercrab-nav-enemy-info*, type nav-enemy-info +(define + *lurkercrab-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 4 + :walk-anim 6 + :turn-anim -1 + :notice-anim 4 + :run-anim 6 + :jump-anim 6 + :jump-land-anim 6 + :victory-anim 4 + :taunt-anim 4 + :die-anim 11 + :neck-joint -1 + :player-look-at-joint 5 + :run-travel-speed (meters 5.0) + :run-rotate-speed (degrees 999.99994) + :run-acceleration (meters 12.0) + :run-turn-time #x1e + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 999.99994) + :walk-acceleration (meters 12.0) + :walk-turn-time #x1e + :attack-shove-back (meters 1.2) + :attack-shove-up (meters 1.5) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 25.0) + :stop-chase-distance (meters 35.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 4.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 #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #t + :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 lurkercrab +(defmethod copy-defaults! lurkercrab ((obj lurkercrab) (arg0 res-lump)) + (let + ((s4-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 10240.0 0.0 12288.0) + (dummy-46 s4-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set-vector! (-> s2-0 local-sphere) 0.0 4915.2 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core offense) 2) + (set! (-> s2-1 transform-index) 16) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 1638.4) + ) + (dummy-28 s3-0) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 2) + (set! (-> s2-2 transform-index) 21) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 1638.4) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) 4096.0) + (dummy-50 s4-0) + (set! (-> obj collide-info) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *lurkercrab-sg* '()) + (TODO-RENAME-45 obj *lurkercrab-nav-enemy-info*) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 159) obj) + ) + (set! (-> obj orient) #t) + (set! (-> obj nav-enemy-flags) (logand -97 (-> obj nav-enemy-flags))) + (set! (-> obj target-speed) 0.0) + (set! (-> obj momentum-speed) 0.0) + (set! (-> obj draw force-lod) 2) + (go (method-of-object obj nav-enemy-idle)) + (none) + ) + + + + diff --git a/goal_src/levels/beach/lurkerpuppy.gc b/goal_src/levels/beach/lurkerpuppy.gc index bd491add07..c45335d187 100644 --- a/goal_src/levels/beach/lurkerpuppy.gc +++ b/goal_src/levels/beach/lurkerpuppy.gc @@ -5,3 +5,642 @@ ;; name in dgo: lurkerpuppy ;; dgos: BEA, L1 +(define-extern *lurkerpuppy-sg* skeleton-group) + +;; definition of type lurkerpuppy +(deftype lurkerpuppy (nav-enemy) + () + :heap-base #x120 + :method-count-assert 76 + :size-assert #x190 + :flag-assert #x4c01200190 + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "lurkerpuppy" + :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! *lurkerpuppy-sg* v1-1) + ) + +;; failed to figure out what this is: +nav-enemy-default-event-handler + +;; failed to figure out what this is: +(defstate nav-enemy-notice (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-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 ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + 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 8)) + 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! + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-default-event-handler + ) + :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 51) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> gp-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 4.0 0)) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 7)) + 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 51) + ) + ) + (let ((f30-0 (rand-vu-float-range 0.9 1.1))) + (while #t + (if (rand-vu-percent? 0.25) + (sound-play-by-name + (static-sound-name "puppy-bark") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (let ((a0-14 (-> self skel root-channel 0))) + (set! + (-> a0-14 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> a0-14 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-14 param 1) f30-0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! + a0-14 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (logtest? (-> self nav-enemy-flags) 256) + (go-virtual nav-enemy-attack) + ) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 param 0) + (the float (+ (-> a0-15 frame-group data 0 length) -1)) + ) + (set! (-> a0-15 param 1) f30-0) + (joint-control-channel-group-eval! + a0-15 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-default-event-handler + ) + :code + (behavior () + (set! (-> self rotate-speed) 1456355.5) + (set! (-> self turn-time) 30) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (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 ((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 12.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) + (let ((f0-3 (ja-aframe-num 0))) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (if (and (>= f0-3 2.5) (>= 7.5 f0-3)) + (logior! (-> self nav-enemy-flags) 16) + ) + ) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 12.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! + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) 1.0) + (joint-control-channel-group! + a0-11 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 30) + (let ((v1-31 (-> self skel root-channel 0))) + (set! + (-> v1-31 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + ) + (let ((v1-34 (-> self skel root-channel 0))) + (set! (-> v1-34 num-func) num-func-identity) + (set! (-> v1-34 frame-num) 0.0) + ) + (let ((gp-2 (rand-vu-int-range 750 900)) + (s5-0 (-> *display* base-frame-counter)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-0) gp-2) + (let ((a0-18 (-> self skel root-channel 0))) + (set! (-> a0-18 param 0) 1.0) + (joint-control-channel-group-eval! + a0-18 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-blend-eval) + (suspend) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-give-up (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-default-event-handler + ) + :code + (behavior () + (set! (-> self rotate-speed) 218453.33) + (set! (-> self turn-time) 150) + (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 5)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (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 5)) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.4) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (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-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.4) + (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 (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-default-event-handler + ) + :code + (behavior () + (sound-play-by-name + (static-sound-name "head-butt") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual nav-enemy-victory) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-victory (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (logior! (-> self nav-enemy-flags) 16) + (none) + ) + :code + (behavior () + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (ja-channel-push! 1 22) + (dotimes (gp-0 4) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + 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 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (let ((f0-4 (ja-aframe-num 0))) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (if (and (>= f0-4 2.5) (>= 7.5 f0-4)) + (logior! (-> self nav-enemy-flags) 16) + ) + ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + :post + (the-as (function none :behavior lurkerpuppy) nav-enemy-face-player-post) + ) + +;; definition for symbol *lurkerpuppy-nav-enemy-info*, type nav-enemy-info +(define + *lurkerpuppy-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 5 + :walk-anim 6 + :turn-anim 6 + :notice-anim 8 + :run-anim 7 + :jump-anim 9 + :jump-land-anim 10 + :victory-anim 8 + :taunt-anim 8 + :die-anim 11 + :neck-joint -1 + :player-look-at-joint 5 + :run-travel-speed (meters 5.0) + :run-rotate-speed (degrees 3999.9998) + :run-acceleration (meters 1.0) + :run-turn-time #x2d + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 1999.9999) + :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 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 6.0 + :jump-anim-start-frame 3.5 + :jump-land-anim-end-frame 14.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.5) + :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 47 of type lurkerpuppy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-47 lurkerpuppy ((obj lurkerpuppy)) + (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 4915.2) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) 2048.0) + (dummy-50 s5-0) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +;; definition for method 48 of type lurkerpuppy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-48 lurkerpuppy ((obj lurkerpuppy)) + (dummy-14 obj *lurkerpuppy-sg* '()) + (TODO-RENAME-45 obj *lurkerpuppy-nav-enemy-info*) + (when (nonzero? (-> obj neck)) + (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/citadel/assistant-citadel.gc b/goal_src/levels/citadel/assistant-citadel.gc index fa5f9e0b51..0dc0bf489e 100644 --- a/goal_src/levels/citadel/assistant-citadel.gc +++ b/goal_src/levels/citadel/assistant-citadel.gc @@ -5,3 +5,270 @@ ;; name in dgo: assistant-citadel ;; dgos: CIT, L1 +(define-extern *assistant-lavatube-end-sg* skeleton-group) + +;; definition of type assistant-lavatube-end +(deftype assistant-lavatube-end (process-taskable) + () + :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 + :art-group-name "assistant-lavatube-end" + :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-end-sg* v1-1) + ) + +;; definition for method 32 of type assistant-lavatube-end +(defmethod + play-anim! + assistant-lavatube-end + ((obj assistant-lavatube-end) (arg0 symbol)) + (case (current-status (-> obj tasks)) + ((1 2) + (new 'static 'spool-anim + :name "assistant-lavatube-end-resolution" + :index 4 + :parts 11 + :command-list '() + ) + ) + ((6) + (if arg0 + (close-current! (-> obj tasks)) + ) + (new 'static 'spool-anim + :name "assistant-lavatube-end-resolution" + :index 4 + :parts 11 + :command-list + '( + ((the binteger 61) + joint + "cameraB" + ) + ((the binteger 151) + joint + "camera" + ) + ((the binteger 226) + joint + "cameraB" + ) + ((the binteger 273) + joint + "camera" + ) + ((the binteger 316) + joint + "cameraB" + ) + ((the binteger 451) + joint + "camera" + ) + ((the binteger 651) + joint + "cameraB" + ) + ((the binteger 786) + joint + "camera" + ) + ((the binteger 888) + joint + "cameraB" + ) + ((the binteger 1011) + joint + "camera" + ) + ((the binteger 1011) + shadow + target + #f + ) + ((the binteger 1140) + shadow + target + #t + ) + ((the binteger 1191) joint "cameraB") + ) + ) + ) + (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-end +(defmethod get-art-elem assistant-lavatube-end ((obj assistant-lavatube-end)) + (-> obj draw art-group data 3) + ) + +;; failed to figure out what this is: +(defstate hidden (assistant-lavatube-end) + :virtual #t + :trans + (behavior () + (dummy-33 self) + ((-> (method-of-type process-taskable hidden) trans)) + (when + (and + (and + *target* + (>= + 61440.0 + (vector-vector-distance (-> self root trans) (-> *target* control trans)) + ) + ) + (not + (closed? + (-> self tasks) + (game-task village4-button) + (task-status need-reward-speech) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (assistant-lavatube-end) + :virtual #t + :enter + (behavior () + ((-> (method-of-type process-taskable idle) enter)) + (case (get-task-status (game-task village4-button)) + (((task-status need-reward-speech)) + (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) + ) + ) + ) + (none) + ) + :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 ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-10 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-10 param 1) 1.0) + (set! (-> a0-10 frame-num) 0.0) + (joint-control-channel-group! + a0-10 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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! + ) + ) + ) + ) + (none) + ) + ) + +;; definition for method 39 of type assistant-lavatube-end +(defmethod should-display? assistant-lavatube-end ((obj assistant-lavatube-end)) + (first-any (-> obj tasks) #t) + (let ((v1-3 (current-status (-> obj tasks)))) + (and + (or (= v1-3 6) (= v1-3 0)) + (not (task-closed? (game-task citadel-sage-green) (task-status need-hint))) + ) + ) + ) + +;; definition for method 11 of type assistant-lavatube-end +(defmethod + copy-defaults! + assistant-lavatube-end + ((obj assistant-lavatube-end) (arg0 res-lump)) + (dummy-40 + obj + arg0 + *assistant-lavatube-end-sg* + 3 + 29 + (new 'static 'vector :w 4096.0) + 5 + ) + (set! (-> obj tasks) (get-task-control (game-task village4-button))) + (first-any (-> obj tasks) #t) + (dummy-42 obj) + (none) + ) diff --git a/goal_src/levels/common/nav-enemy.gc b/goal_src/levels/common/nav-enemy.gc index f5668a8b58..b057cc22f8 100644 --- a/goal_src/levels/common/nav-enemy.gc +++ b/goal_src/levels/common/nav-enemy.gc @@ -771,17 +771,22 @@ nav-enemy-default-event-handler ) ;; 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)) - (dummy-16 (-> self nav) arg0) + (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)) - (and - (dummy-16 (-> self nav) arg0) - (< - (-> arg0 y) - (+ (-> self collide-info trans y) (-> self enemy-info notice-top)) + (the-as + symbol + (and + (dummy-16 (-> self nav) arg0) + (< + (-> arg0 y) + (+ (-> self collide-info trans y) (-> self enemy-info notice-top)) + ) ) ) ) @@ -2775,8 +2780,8 @@ nav-enemy-default-event-handler :code (behavior () (nav-enemy-execute-jump) - (let ((a1-0 (the-as structure (-> self nav user-poly)))) - (if (not (the-as nav-poly a1-0)) + (let ((a1-0 (-> self nav user-poly))) + (if (not a1-0) (set! a1-0 (dummy-16 (-> self nav) (-> self jump-dest))) ) (if a1-0 diff --git a/goal_src/levels/common/sharkey.gc b/goal_src/levels/common/sharkey.gc index 3981d018d9..99399a00ad 100644 --- a/goal_src/levels/common/sharkey.gc +++ b/goal_src/levels/common/sharkey.gc @@ -5,3 +5,1359 @@ ;; name in dgo: sharkey ;; dgos: GAME, COMMON, L1 +(define-extern *sharkey-sg* skeleton-group) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 106) + (new 'static 'sparticle-launch-group + :length 16 + :duration #x78 + :linger-duration #x30c + :flags #x1 + :name "group-sharkey-splash" + :launcher + (new 'static 'inline-array sparticle-group-item 16 + (new 'static 'sparticle-group-item + :launcher #x7c + :flags #x1 + :period #x384 + :length #x3f + ) + (new 'static 'sparticle-group-item :launcher #x7d :period #x384 :length #xf) + (new 'static 'sparticle-group-item + :launcher #x7e + :flags #x1 + :period #x384 + :length #xf + ) + (new 'static 'sparticle-group-item + :launcher #x7f + :flags #x1 + :period #x384 + :length #xf + ) + (new 'static 'sparticle-group-item + :launcher #x80 + :period #x384 + :length #xa + :binding #x81 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +;; definition of type sharkey +(deftype sharkey (nav-enemy) + ((dir vector :inline :offset-assert 400) + (spawn-point vector :inline :offset-assert 416) + (scale float :offset-assert 432) + (anim-speed float :offset-assert 436) + (y-max meters :offset-assert 440) + (y-min meters :offset-assert 444) + (attack-time float :offset-assert 448) + (player-water-time uint64 :offset-assert 456) + (player-in-water basic :offset-assert 464) + (last-y float :offset-assert 468) + (spawn-distance meters :offset-assert 472) + (chase-speed meters :offset-assert 476) + (y-speed meters :offset-assert 480) + (sound-id sound-id :offset-assert 484) + (enable-patrol basic :offset-assert 488) + ) + :heap-base #x180 + :method-count-assert 76 + :size-assert #x1ec + :flag-assert #x4c018001ec + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "sharkey" + :bounds (new 'static 'vector :w 24576.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! *sharkey-sg* v1-2) + ) + +;; definition for method 44 of type sharkey +;; INFO: Return type mismatch symbol vs object. +(defmethod + dummy-44 + sharkey + ((obj sharkey) (arg0 process) (arg1 event-message-block)) + (the-as object #t) + ) + +;; definition for method 43 of type sharkey +;; INFO: Return type mismatch symbol vs object. +(defmethod + dummy-43 + sharkey + ((obj sharkey) (arg0 process) (arg1 event-message-block)) + (the-as object #t) + ) + +;; failed to figure out what this is: +nav-enemy-default-event-handler + +;; definition for method 12 of type sharkey +(defmethod run-logic? sharkey ((obj sharkey)) + (or + (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or + (>= + (+ + (-> *ACTOR-bank* pause-dist) + (-> obj collide-info pause-adjust-distance) + ) + (vector-vector-distance (-> obj collide-info trans) (math-camera-pos)) + ) + (and + (nonzero? (-> obj skel)) + (!= (-> obj skel root-channel 0) (-> obj skel channel)) + ) + (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) + ) + ) + ) + +;; definition for method 40 of type sharkey +;; INFO: Return type mismatch int vs none. +(defmethod dummy-40 sharkey ((obj sharkey)) + (dummy-11 (-> obj nav) (-> obj nav target-pos)) + (let* + ((f0-0 + (vector-vector-xz-distance + (-> obj collide-info trans) + (-> obj nav target-pos) + ) + ) + (f30-0 + (/ + (- + (fmin (-> obj y-max) (-> obj nav target-pos y)) + (-> obj collide-info trans y) + ) + f0-0 + ) + ) + ) + (set! + (-> obj nav travel y) + (* 4.0 (vector-length (-> obj nav travel)) f30-0) + ) + ) + 0 + (none) + ) + +;; definition for method 37 of type sharkey +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-37 sharkey ((obj sharkey)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (when (< 8192.0 (vector-length (-> obj nav travel))) + (vector-normalize-copy! s5-0 (-> obj nav travel) 1.0) + (vector-deg-seek + (-> obj dir) + (-> obj dir) + s5-0 + (* 65536.0 (-> *display* seconds-per-frame)) + ) + (vector-normalize! (-> obj dir) 1.0) + (forward-up->quaternion (-> obj collide-info quat) (-> obj dir) *up-vector*) + ) + ) + 0 + (none) + ) + +;; definition for method 41 of type sharkey +;; INFO: Return type mismatch int vs none. +(defmethod dummy-41 sharkey ((obj sharkey)) + (let* ((f0-1 (- (-> obj target-speed) (-> obj momentum-speed))) + (f1-3 + (fmin + (* (-> obj acceleration) (-> *display* seconds-per-frame)) + (fabs f0-1) + ) + ) + ) + (if (< f0-1 0.0) + (set! (-> obj momentum-speed) (- (-> obj momentum-speed) f1-3)) + (+! (-> obj momentum-speed) f1-3) + ) + ) + (let + ((f0-9 + (fmin + (* (-> obj speed-scale) (-> obj momentum-speed)) + (* (vector-length (-> obj nav travel)) (-> *display* frames-per-second)) + ) + ) + ) + (vector-normalize-copy! + (-> obj collide-info transv) + (-> obj nav travel) + f0-9 + ) + ) + 0 + (none) + ) + +;; definition for method 39 of type sharkey +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod TODO-RENAME-39 sharkey ((obj sharkey)) + (let ((f30-0 (-> obj water height)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (let* ((f3-0 (- -36864.0 (-> obj collide-info trans y))) + (f0-2 (fmax 0.0 (fmin 1.0 (- 1.0 (* 0.00008138021 f3-0))))) + ) + (set-vector! (-> obj draw color-mult) f0-2 f0-2 f0-2 1.0) + ) + (dummy-10 (-> obj water)) + (let ((f28-0 (-> obj collide-info trans y))) + (when + (or + (and (< f30-0 f28-0) (>= f30-0 (-> obj last-y))) + (and (>= f30-0 f28-0) (< f30-0 (-> obj last-y))) + ) + (set! (-> s5-0 quad) (-> obj collide-info trans quad)) + (set! (-> s5-0 y) f30-0) + (dummy-13 (-> obj water) 1.0 s5-0 1 (-> obj collide-info transv)) + ) + (set! (-> obj last-y) f28-0) + ) + ) + ((the-as (function nav-enemy none) (find-parent-method sharkey 39)) obj) + 0 + (none) + ) + +;; definition for function sharkey-notice-player? +(defbehavior sharkey-notice-player? sharkey () + (if *target* + (and + (< (- (-> *target* control trans y) (-> self y-max)) 0.0) + (let ((gp-0 'racer) + (a1-0 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'query) + (set! (-> a1-0 param 0) (the-as uint 'mode)) + (!= gp-0 (send-event-function *target* a1-0)) + ) + (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) + ) + ) + ) + +;; definition for function sharkey-get-player-position +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun sharkey-get-player-position ((arg0 vector)) + (set! (-> arg0 quad) (-> (target-pos 5) quad)) + 0 + (none) + ) + +;; definition for function sharkey-reset-position +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior sharkey-reset-position sharkey () + (set! (-> self collide-info trans quad) (-> self entity extra trans quad)) + 0 + (none) + ) + +;; definition for function sharkey-move-to-attack-position +;; Used lq/sq +(defbehavior sharkey-move-to-attack-position sharkey () + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (let ((s4-0 (-> *target* control trans))) + (let ((f30-0 4096000.0)) + (set! (-> s3-0 quad) (-> self entity extra trans quad)) + (set! (-> s5-0 quad) (-> self collide-info trans quad)) + (dotimes (s2-0 (-> self path curve num-cverts)) + (eval-path-curve-div! (-> self path) s3-0 (the float s2-0) 'interp) + (let ((f0-2 (vector-vector-xz-distance s4-0 s3-0))) + (when (< f0-2 f30-0) + (set! f30-0 f0-2) + (set! (-> s5-0 quad) (-> s3-0 quad)) + ) + ) + ) + ) + (vector-! (-> self dir) s4-0 s5-0) + (vector-normalize! (-> self dir) 1.0) + (vector+*! gp-0 s4-0 (-> self dir) (- (-> self spawn-distance))) + ) + ((method-of-object (-> self nav) dummy-17)) + (set! (-> gp-0 y) (-> self y-min)) + (set! (-> self spawn-point quad) (-> gp-0 quad)) + ) + (set! (-> self collide-info trans quad) (-> self spawn-point quad)) + (forward-up->quaternion (-> self collide-info quat) (-> self dir) *up-vector*) + (let ((f0-6 0.0)) + (set! (-> self momentum-speed) f0-6) + f0-6 + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-idle (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) + (none) + ) + :exit + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) + :trans + (behavior () + (cond + ((-> self enable-patrol) + (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) + ) + ) + ((sharkey-notice-player?) + (when (zero? (logand (-> self nav-enemy-flags) 1)) + (logior! (-> self nav-enemy-flags) 1) + (set! (-> self notice-time) (-> *display* base-frame-counter)) + ) + (let ((a0-4 (dummy-16 (-> self nav) (-> *target* control trans)))) + (when + (or + (and a0-4 (logtest? (-> a0-4 pat) 2)) + (and + (logtest? (-> self draw status) 2) + (>= + (- (-> *display* base-frame-counter) (-> self notice-time)) + (-> self reaction-time) + ) + ) + ) + (sharkey-move-to-attack-position) + (set! (-> self player-in-water) #t) + (go-virtual nav-enemy-chase) + ) + ) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (-> self notice-time)) 3000) + (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) + ) + ) + ) + (none) + ) + :code + (behavior () + (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 (-> self nav-info idle-anim)) + ) + ) + ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) + ) + (until (= (-> self collide-info trans y) (-> self y-min)) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (set! + (-> self collide-info trans y) + (seek + (-> self collide-info trans y) + (-> self y-min) + (* (-> self y-speed) (-> *display* seconds-per-frame)) + ) + ) + (dummy-10 (-> self water)) + (ja-post) + (suspend) + ) + (logior! (-> self draw status) 2) + (anim-loop) + (none) + ) + :post + (the-as (function none :behavior sharkey) #f) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :trans + (behavior () + (if (sharkey-notice-player?) + (go-virtual nav-enemy-chase) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (set! (-> self nav target-pos quad) (-> self spawn-point quad)) + (while #t + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + (set! + (-> a0-3 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-3 param 1) (-> self anim-speed)) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (cond + ((-> self enable-patrol) + (set! + (-> self collide-info trans y) + (seek + (-> self collide-info trans y) + (-> self y-max) + (* (-> self y-speed) (-> *display* seconds-per-frame)) + ) + ) + ) + (else + (if (< (- (-> self collide-info trans y) (-> self y-min)) 409.6) + (go-virtual nav-enemy-idle) + ) + ) + ) + (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) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (behavior () + (nav-enemy-travel-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-notice (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :enter + (behavior () + (go-virtual nav-enemy-chase) + (none) + ) + :code + (behavior () + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; definition for function sharkey-follow-trajectory +(defbehavior sharkey-follow-trajectory sharkey ((arg0 float)) + (let ((gp-0 (-> self jump-trajectory))) + (eval-position! gp-0 arg0 (-> self collide-info trans)) + (eval-velocity! gp-0 arg0 (-> self collide-info transv)) + ) + (vector-normalize-copy! (-> self dir) (-> self collide-info transv) 1.0) + (forward-up->quaternion (-> self collide-info quat) (-> self dir) *up-vector*) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-attack (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :code + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (-> *display* base-frame-counter) + (sound-play-by-name + (static-sound-name "bigshark-bite") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> gp-0 quad) (-> self collide-info trans quad)) + (ja-channel-push! 1 30) + (let ((s4-1 (-> self skel root-channel 0))) + (set! + (-> s4-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! (-> s4-1 param 0) (ja-aframe 3.0 0)) + (set! (-> s4-1 param 1) 2.0) + (set! (-> s4-1 frame-num) 0.0) + (joint-control-channel-group! + s4-1 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (sharkey-get-player-position s5-0) + (setup-from-to-duration! + (-> self jump-trajectory) + gp-0 + s5-0 + 3.0 + -291.27112 + ) + (set! (-> self attack-time) (ja-aframe-num 0)) + (sharkey-follow-trajectory (-> self attack-time)) + (suspend) + (let ((s4-2 (-> self skel root-channel 0))) + (set! (-> s4-2 param 0) (ja-aframe 3.0 0)) + (set! (-> s4-2 param 1) 2.0) + (joint-control-channel-group-eval! + s4-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 2) + (set! (-> a1-7 message) 'attack-invinc) + (set! (-> a1-7 param 0) (the-as uint #f)) + (let ((a0-15 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-15 mode) 'sharkey) + (set! (-> a1-7 param 1) (the-as uint a0-15)) + ) + (when (send-event-function *target* a1-7) + (logclear! (-> self mask) (process-mask enemy)) + (vector-float*! + (-> self collide-info transv) + (-> self collide-info transv) + 8.0 + ) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (let ((f30-0 -409600.0) + (f28-0 (-> self collide-info transv y)) + (f26-0 (-> self collide-info trans y)) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 900 + ) + (let ((gp-1 (-> self skel root-channel 0))) + (set! + (-> gp-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> gp-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-1 param 1) 1.0) + (set! (-> gp-1 frame-num) (ja-aframe 3.0 0)) + (joint-control-channel-group! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (+! f28-0 (* f30-0 (-> *display* seconds-per-frame))) + (+! f26-0 (* f28-0 (-> *display* seconds-per-frame))) + (set! (-> self collide-info transv y) f28-0) + (when (< (-> self collide-info trans y) (-> self water height)) + (set! f28-0 (* 0.9 f28-0)) + (vector-float*! + (-> self collide-info transv) + (-> self collide-info transv) + 0.9 + ) + ) + (vector-normalize-copy! (-> self dir) (-> self collide-info transv) 1.0) + (forward-up->quaternion + (-> self collide-info quat) + (-> self dir) + *up-vector* + ) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (set! (-> self collide-info trans y) f26-0) + (suspend) + (let ((a0-27 (-> self skel root-channel 0))) + (set! + (-> a0-27 param 0) + (the float (+ (-> a0-27 frame-group data 0 length) -1)) + ) + (set! (-> a0-27 param 1) 1.0) + (joint-control-channel-group-eval! + a0-27 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (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) 'end-mode) + (send-event-function *target* a1-14) + ) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + ) + ) + (sharkey-reset-position) + (logior! (-> self draw status) 2) + (go-virtual nav-enemy-idle) + (none) + ) + :post + (behavior () + (nav-enemy-simple-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (sound-stop (-> self sound-id)) + (none) + ) + :trans + (behavior () + (if (not *target*) + (go-virtual nav-enemy-patrol) + ) + (let ((gp-0 (-> *target* control trans))) + (let + ((s5-0 + (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) + ) + (s4-0 'racer) + (a1-0 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'query) + (set! (-> a1-0 param 0) (the-as uint 'mode)) + (if (or (= s4-0 (send-event-function *target* a1-0)) (not s5-0)) + (go-virtual nav-enemy-patrol) + ) + ) + (when (logtest? (-> *target* control status) 2) + (set! + (-> self player-in-water) + (logtest? (-> *target* control status) 1024) + ) + (if (-> self player-in-water) + (set! + (-> self player-water-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + (if + (and + *target* + (>= + 8192.0 + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (go-virtual nav-enemy-attack) + ) + (cond + ((-> self player-in-water) + (set! (-> self free-time) (-> *display* base-frame-counter)) + (if + (and + (< (fabs (- (-> gp-0 y) (-> self collide-info trans y))) 40960.0) + (< + (vector-vector-xz-distance gp-0 (-> self collide-info trans)) + 24576.0 + ) + ) + (go-virtual nav-enemy-attack) + ) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (-> self free-time)) 900) + (go-virtual nav-enemy-patrol) + ) + ) + ) + ) + (let ((a0-10 (-> self nav target-poly))) + (if (and a0-10 (logtest? (-> a0-10 pat) 2)) + (set! (-> self target-speed) (* 2.0 (-> self chase-speed))) + (set! (-> self target-speed) (-> self chase-speed)) + ) + ) + (none) + ) + :code + (behavior () + (set! + (-> self player-water-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (ja-channel-push! 1 51) + (sound-play-by-name + (static-sound-name "bigshark-idle") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (while #t + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + (set! + (-> a0-3 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-3 param 1) (-> self anim-speed)) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (set! + (-> self anim-speed) + (seek (-> self anim-speed) 1.0 (* 3.0 (-> *display* seconds-per-frame))) + ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (behavior () + (sharkey-get-player-position (-> self nav target-pos)) + (nav-enemy-travel-post) + (let* + ((f3-0 + (vector-vector-distance + (-> self collide-info trans) + (-> self nav target-pos) + ) + ) + (f1-2 + (fmax + 0.0 + (fmin + 1.0 + (- 1.0 (/ (+ -24576.0 f3-0) (+ -24576.0 (-> self spawn-distance)))) + ) + ) + ) + (f0-2 (+ 0.5 (* 1.5 f1-2))) + ) + (sound-play-by-name + (static-sound-name "bigshark-alert") + (-> self sound-id) + 1024 + (the int (* 1524.0 f0-2)) + 0 + (the-as uint 1) + (-> self collide-info trans) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stop-chase (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :code + (behavior () + (ja-channel-push! 1 51) + (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) (-> self anim-speed)) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (set! + (-> self collide-info trans y) + (seek + (-> self collide-info trans y) + (-> self y-max) + (* (-> self y-speed) (-> *display* seconds-per-frame)) + ) + ) + (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) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :trans + (behavior () + (if (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + ) + (if + (>= + (- (-> *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 51) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) + ) + (while #t + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (set! + (-> self collide-info trans y) + (seek + (-> self collide-info trans y) + (-> self y-max) + (* (-> self y-speed) (-> *display* seconds-per-frame)) + ) + ) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-victory (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :code + (behavior () + (ja-channel-push! 1 22) + (dotimes (gp-0 3) + (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 victory-anim)) + ) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) (-> self anim-speed)) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-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) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (go-virtual nav-enemy-stare) + (none) + ) + ) + +;; definition for symbol *sharkey-nav-enemy-info*, type nav-enemy-info +(define + *sharkey-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 2 + :walk-anim 2 + :turn-anim -1 + :notice-anim 2 + :run-anim 2 + :jump-anim -1 + :jump-land-anim -1 + :victory-anim 2 + :taunt-anim 2 + :die-anim 2 + :neck-joint -1 + :player-look-at-joint 5 + :run-travel-speed (meters 12.0) + :run-rotate-speed (degrees 1999.9999) + :run-acceleration (meters 6.0) + :run-turn-time #x96 + :walk-travel-speed (meters 6.0) + :walk-rotate-speed (degrees 1999.9999) + :walk-acceleration (meters 6.0) + :walk-turn-time #x96 + :attack-shove-back (meters 1.0) + :attack-shove-up (meters 0.5) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 3.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 500.0) + :stop-chase-distance (meters 510.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 10000000000.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 #f + :hover-if-no-ground #f + :use-momentum #t + :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 sharkey +;; Used lq/sq +(defmethod copy-defaults! sharkey ((obj sharkey) (arg0 res-lump)) + (set! (-> obj scale) (res-lump-float arg0 'scale :default 1.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) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core offense) 2) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 (* 6144.0 (-> obj scale))) + ) + (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 *sharkey-sg* '()) + (TODO-RENAME-45 obj *sharkey-nav-enemy-info*) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! + (-> obj water) + (new 'process 'water-control obj 3 12288.0 8192.0 2048.0) + ) + (set! (-> obj water flags) (the-as uint #xc00002)) + (set! (-> obj water height) (res-lump-float (-> obj entity) 'water-height)) + (set! (-> obj water ripple-size) 20480.0) + (set! (-> obj spawn-point quad) (-> obj collide-info trans quad)) + (set! (-> obj collide-info nav-radius) 8192.0) + (set! (-> obj nav nearest-y-threshold) 4096000.0) + (set! (-> obj y-max) (- (-> obj water height) (* 2048.0 (-> obj scale)))) + (set! (-> obj y-min) (+ -49152.0 (-> obj y-max))) + (set! (-> obj collide-info trans y) (-> obj y-min)) + (set! (-> obj anim-speed) 1.0) + (set-vector! + (-> obj collide-info scale) + (-> obj scale) + (-> obj scale) + (-> obj scale) + 1.0 + ) + (set! + (-> obj reaction-time) + (the int (* 300.0 (res-lump-float (-> obj entity) 'delay :default 1.0))) + ) + (set! + (-> obj spawn-distance) + (res-lump-float (-> obj entity) 'distance :default 122880.0) + ) + (set! + (-> obj chase-speed) + (res-lump-float (-> obj entity) 'speed :default 49152.0) + ) + (set! (-> obj y-speed) (-> obj chase-speed)) + (set! (-> obj enable-patrol) #f) + (set! (-> obj sound-id) (new-sound-id)) + (set! (-> obj enemy-info cam-vert) 49152.0) + (go (method-of-object obj nav-enemy-idle)) + (none) + ) diff --git a/goal_src/levels/common/static-screen.gc b/goal_src/levels/common/static-screen.gc index aa906c02d8..55bc88f30c 100644 --- a/goal_src/levels/common/static-screen.gc +++ b/goal_src/levels/common/static-screen.gc @@ -5,3 +5,409 @@ ;; name in dgo: static-screen ;; dgos: DEM, L1, TIT + +;; definition of type static-screen +(deftype static-screen (process) + ((part sparticle-launch-control 1 :offset-assert 112) + (state-time uint64 :offset-assert 120) + ) + :heap-base #x10 + :method-count-assert 15 + :size-assert #x80 + :flag-assert #xf00100080 + (:methods + (idle (int int symbol) _type_ :state 14) + ) + ) + +;; definition for method 7 of type static-screen +;; INFO: Return type mismatch process vs static-screen. +(defmethod relocate static-screen ((obj static-screen) (arg0 int)) + (let ((v1-0 *kernel-context*)) + (set! (-> v1-0 relocating-process) obj) + (set! (-> v1-0 relocating-min) (the-as int (&-> obj type))) + (set! + (-> v1-0 relocating-max) + (the-as + int + (+ (+ (-> obj allocated-length) -4 (-> process size)) (the-as int obj)) + ) + ) + (set! (-> v1-0 relocating-offset) arg0) + ) + (dotimes (v1-2 1) + (if (nonzero? (-> obj part v1-2)) + (&+! (-> obj part v1-2) arg0) + ) + ) + (the-as static-screen ((method-of-type process relocate) obj arg0)) + ) + +;; definition for method 10 of type static-screen +(defmethod deactivate static-screen ((obj static-screen)) + (dotimes (s5-0 1) + (if (nonzero? (-> obj part s5-0)) + (deactivate (-> obj part s5-0)) + ) + ) + ((method-of-type process deactivate) obj) + (none) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2966) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x5c600000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value #x45970a3d + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x47700000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x1 + :initial-value #x46d00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value -1 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x2204 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2967) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x5c600100) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -979252543 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x47700000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x1 + :initial-value #x46500000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value -1 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x2204 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2968) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x5c600200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -971056873 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x47700000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x1 + :initial-value #x45d00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value -1 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x2204 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 707) + (new 'static 'sparticle-launch-group + :length 3 + :duration #xbb8 + :linger-duration #x5dc + :flags #x4 + :name "group-part-screen1" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (new 'static 'sparticle-group-item :launcher #xb96 :flags #x8) + (new 'static 'sparticle-group-item :launcher #xb97 :flags #x8) + (new 'static 'sparticle-group-item :launcher #xb98 :flags #x8) + ) + :bounds (new 'static 'sphere :w 4096.0) + ) + ) + +;; failed to figure out what this is: +(defstate idle (static-screen) + :virtual #t + :enter + (behavior ((arg0 int) (arg1 int) (arg2 symbol)) + (set! (-> *setting-control* current bg-a) 1.0) + (set! (-> *setting-control* default bg-a) 0.0) + (push-setting! + *setting-control* + self + (the-as (function object object object object object) 'common-page) + 'set + 0.0 + (ash 1 (+ arg0 1)) + ) + (none) + ) + :trans + (behavior () + (hide-hud-quick) + (dummy-11 (-> self part 0) *zero-vector*) + 0 + (none) + ) + :code + (behavior ((arg0 int) (arg1 int) (arg2 symbol)) + (local-vars (v1-6 symbol)) + (set! (-> self state-time) (the-as uint (-> *display* base-frame-counter))) + (until v1-6 + (suspend) + (set! + v1-6 + (or + (and + (> arg1 0) + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + arg1 + ) + ) + (and + arg2 + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 300 + ) + (logtest? + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons select start triangle circle x square) + ) + ) + ) + ) + ) + (set! (-> *setting-control* default bg-a) 1.0) + (while + (!= (-> *setting-control* current bg-a) (-> *setting-control* default bg-a)) + (suspend) + ) + (clear-pending-settings-from-process *setting-control* self 'common-page) + (suspend) + 0 + (none) + ) + ) + +;; definition for function static-screen-init-by-other +;; INFO: Return type mismatch int vs none. +(defbehavior + static-screen-init-by-other static-screen + ((arg0 int) (arg1 int) (arg2 int) (arg3 int) (arg4 int) (arg5 symbol)) + (let ((s3-0 (lookup-part-group-by-name "group-part-screen1"))) + (when + (and + s3-0 + (nonzero? s3-0) + (type-type? (-> s3-0 type) sparticle-launch-group) + ) + (set! (-> *part-id-table* 2966 init-specs 0 initial-value) arg1) + (set! (-> *part-id-table* 2967 init-specs 0 initial-value) arg2) + (set! (-> *part-id-table* 2968 init-specs 0 initial-value) arg3) + (set! + (-> self part 0) + (create-launch-control (the-as sparticle-launch-group s3-0) self) + ) + (go-virtual idle arg0 arg4 arg5) + ) + ) + 0 + (none) + ) + +;; definition for function static-screen-spawn +;; Used lq/sq +(defun + static-screen-spawn + ((arg0 int) + (arg1 int) + (arg2 int) + (arg3 int) + (arg4 int) + (arg5 symbol) + (arg6 target) + ) + (local-vars (sv-16 process)) + (set! sv-16 (get-process *default-dead-pool* static-screen #x4000)) + (when sv-16 + (let ((t9-1 (method-of-type static-screen activate))) + (t9-1 + (the-as static-screen sv-16) + arg6 + 'static-screen + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + sv-16 + static-screen-init-by-other + arg0 + arg1 + arg2 + arg3 + arg4 + arg5 + ) + (-> sv-16 ppointer) + ) + ) diff --git a/goal_src/levels/finalboss/final-door.gc b/goal_src/levels/finalboss/final-door.gc index 5370cd7895..74bcb5bd09 100644 --- a/goal_src/levels/finalboss/final-door.gc +++ b/goal_src/levels/finalboss/final-door.gc @@ -5,3 +5,762 @@ ;; name in dgo: final-door ;; dgos: FIN, L1 +(declare-type final-door process-drawable) +(declare-type power-left final-door) + +(define-extern *powercellalt-sg* skeleton-group) +(define-extern *power-right-sg* skeleton-group) +(define-extern *power-left-sg* skeleton-group) + +;; definition of type fin-door +(deftype fin-door (process-hidden) + () + :method-count-assert 15 + :size-assert #x70 + :flag-assert #xf00000070 + ) + +;; definition of type final-door +(deftype final-door (process-drawable) + () + :heap-base #x40 + :method-count-assert 23 + :size-assert #xb0 + :flag-assert #x17004000b0 + (:methods + (idle () _type_ :state 20) + (dummy-21 (_type_) none 21) + (open () _type_ :state 22) + ) + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "power-left" + :bounds + (new 'static 'vector :y 45056.0 :w 49152.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! *power-left-sg* v1-2) + ) + +;; failed to figure out what this is: +(let + ((v1-3 + (new 'static 'skeleton-group + :art-group-name "power-right" + :bounds + (new 'static 'vector :y 45056.0 :w 49152.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! *power-right-sg* v1-3) + ) + +;; failed to figure out what this is: +(let + ((v1-4 + (new 'static 'skeleton-group + :art-group-name "powercellalt" + :bounds (new 'static 'vector :w 8192.0) + :version #x6 + ) + ) + ) + (set! (-> v1-4 jgeo) 0) + (set! (-> v1-4 janim) 2) + (set! (-> v1-4 mgeo 0) (the-as uint 1)) + (set! (-> v1-4 lod-dist 0) 4095996000.0) + (set! *powercellalt-sg* v1-4) + ) + +;; failed to figure out what this is: +(defstate idle (final-door) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'open) + enter-state + (go-virtual open) + ) + ) + ) + ) + :code + (behavior () + (transform-post) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + ) + +;; failed to figure out what this is: +(defstate open (final-door) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'brightness) + (let ((f0-0 (the-as float (-> arg3 param 0))) + (f1-0 (the-as float (-> arg3 param 1))) + ) + (set-vector! (-> self draw color-mult) f0-0 f0-0 f0-0 f0-0) + (let ((v0-0 (-> self draw color-emissive))) + (set! (-> v0-0 x) f1-0) + (set! (-> v0-0 y) f1-0) + (set! (-> v0-0 z) f1-0) + (set! (-> v0-0 w) f1-0) + v0-0 + ) + ) + ) + ) + ) + ) + :code + (behavior () + (case (-> self type) + ((power-left) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 0.353) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (transform-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) 0.353) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-4 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 0.353) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (transform-post) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 0.353) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (transform-post) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + ) + +;; definition for method 11 of type final-door +(defmethod copy-defaults! final-door ((obj final-door) (arg0 res-lump)) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let + ((s3-0 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 45056.0 0.0 49152.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) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-21 obj) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type power-left +(deftype power-left (final-door) + () + :heap-base #x40 + :method-count-assert 23 + :size-assert #xb0 + :flag-assert #x17004000b0 + ) + +;; definition of type power-right +(deftype power-right (final-door) + () + :heap-base #x40 + :method-count-assert 23 + :size-assert #xb0 + :flag-assert #x17004000b0 + ) + +;; failed to figure out what this is: +(defstate idle (power-left) + :virtual #t + :code + (behavior () + (ja-post) + (while #t + (if + (and + (and + *target* + (>= + 61440.0 + (vector-vector-distance + (-> self root trans) + (-> *target* control trans) + ) + ) + ) + (and + (zero? (logand (-> *target* state-flags) 256)) + (and + (>= (-> *game-info* fuel) 100.0) + (not + (and + (-> self entity) + (logtest? + (-> self entity extra perm status) + (entity-perm-status complete) + ) + ) + ) + (= + (get-task-status (game-task finalboss-movies)) + (task-status need-reward-speech) + ) + (let ((gp-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> gp-0 from) self) + (set! (-> gp-0 num-params) 3) + (set! (-> gp-0 message) 'change-mode) + (set! (-> gp-0 param 0) (the-as uint 'final-door)) + (set! + (-> gp-0 param 1) + (the-as + uint + (search-process-tree *active-pool* (lambda ((arg0 final-door)) + (= (-> arg0 type) power-right) + ) + ) + ) + ) + (set! + (-> gp-0 param 2) + (the-as + uint + (search-process-tree *active-pool* (lambda ((arg0 final-door)) + (= (-> arg0 type) power-left) + ) + ) + ) + ) + (send-event-function *target* gp-0) + ) + ) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + ) + (suspend) + ) + (none) + ) + ) + +;; definition for method 21 of type power-left +;; INFO: Return type mismatch int vs none. +(defmethod dummy-21 power-left ((obj power-left)) + (dummy-14 obj *power-left-sg* '()) + 0 + (none) + ) + +;; definition for method 21 of type power-right +;; INFO: Return type mismatch int vs none. +(defmethod dummy-21 power-right ((obj power-right)) + (dummy-14 obj *power-right-sg* '()) + 0 + (none) + ) + +;; definition of type powercellalt +(deftype powercellalt (process-drawable) + ((root-override collide-shape-moving :offset 112) + (jump-pos vector :inline :offset-assert 176) + (base vector :inline :offset-assert 192) + (index int32 :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 23 + :size-assert #xd4 + :flag-assert #x17007000d4 + (:methods + (dummy-20 () none 20) + (jump () _type_ :state 21) + (idle () _type_ :state 22) + ) + ) + +;; failed to figure out what this is: +(defstate jump (powercellalt) + :virtual #t + :code + (behavior () + (sound-play-by-name + (static-sound-name "cell-prize") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((gp-1 (new 'stack 'trajectory))) + (set! (-> self base y) (-> self jump-pos y)) + (setup-from-to-duration! + gp-1 + (-> self root-override trans) + (-> self jump-pos) + 300.0 + -2.2755556 + ) + (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-2 + (the + float + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + ) + ) + ) + (eval-position! gp-1 f0-2 (-> self root-override trans)) + ) + (transform-post) + (dummy-11 + (-> self part) + (the-as vector (-> self root-override root-prim prim-core)) + ) + (suspend) + (when (nonzero? (-> self skel)) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) 0.5) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + ) + (set! (-> self root-override trans quad) (-> self jump-pos quad)) + (set! (-> self base quad) (-> self root-override trans quad)) + (transform-post) + (sound-play-by-name + (static-sound-name "land-pcmetal") + (new-sound-id) + 1024 + 3048 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((gp-3 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-3 + (let ((t9-12 (method-of-type part-tracker activate))) + (t9-12 + (the-as part-tracker gp-3) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-3 + part-tracker-init + (-> *part-group-id-table* 4) + -1 + #f + #f + #f + (-> self root-override root-prim prim-core) + ) + (-> gp-3 ppointer) + ) + ) + (go-virtual idle) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (powercellalt) + :virtual #t + :code + (behavior () + (while #t + (vector<-cspace! + (-> self root-override trans) + (-> + (the-as process-drawable (-> self parent 0)) + node-list + data + (-> self index) + ) + ) + (transform-post) + (suspend) + ) + (none) + ) + ) + +;; definition for function powercellalt-init-by-other +;; Used lq/sq +(defbehavior + powercellalt-init-by-other powercellalt + ((arg0 entity) (arg1 vector) (arg2 vector) (arg3 int)) + (set! (-> self entity) arg0) + (let + ((s3-0 + (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s3-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s3-0 reaction) default-collision-reaction) + (set! (-> s3-0 no-reaction) nothing) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s3-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 64)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4915.2) + ) + (dummy-46 s3-0) + (set! (-> s3-0 nav-radius) (* 0.75 (-> s3-0 root-prim local-sphere w))) + (dummy-50 s3-0) + (set! (-> self root-override) s3-0) + ) + (set! (-> self root-override trans quad) (-> arg1 quad)) + (set! (-> self jump-pos quad) (-> arg2 quad)) + (set-vector! (-> self root-override scale) 0.5 0.5 0.5 1.0) + (set! (-> self index) arg3) + (dummy-14 self *powercellalt-sg* '()) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 63) self) + ) + enter-state + (-> self root-override trans) + (-> self jump-pos) + (go-virtual jump) + (none) + ) + +;; failed to figure out what this is: +(defstate target-final-door (target) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + ((-> target-grab event) arg0 arg1 arg2 arg3) + ) + :enter + (behavior ((arg0 basic) (arg1 handle)) + (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) 'change-to-entity-by-name) + (set! (-> a1-1 param 0) (the-as uint "camera-403")) + (send-event-function *camera* a1-1) + ) + (set! (-> self control unknown-surface00) *empty-mods*) + (logior! (-> self state-flags) 272) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (none) + ) + :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 60)) + (send-event-function *camera* a1-0) + ) + (set! (-> self state-flags) (logand -273 (-> self state-flags))) + (target-exit) + (clear-pending-settings-from-process *setting-control* self 'allow-progress) + (none) + ) + :trans + (behavior () + (set-letterbox-frames 5) + (none) + ) + :code + (behavior ((arg0 basic) (arg1 handle)) + (local-vars + (sv-144 process) + (sv-160 vector) + (sv-176 process) + (sv-192 vector) + ) + (let ((a0-2 (get-task-control (game-task finalboss-movies)))) + (save-reminder a0-2 (logior (get-reminder a0-2 0) 2) 0) + ) + (TODO-RENAME-30 + (-> self control) + (new 'static 'vector :x 11368946.0 :y 2215900.2 :z -19405602.0 :w 1.0) + ) + (set-quaternion! + (-> self control) + (the-as quaternion (new 'static 'vector :y -0.8472 :w 0.5312)) + ) + (rot->dir-targ! (-> self control)) + (transform-post) + (ja-channel-push! 1 60) + (let ((s4-1 (-> self skel root-channel 0))) + (set! + (-> s4-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 88)) + ) + (set! (-> s4-1 param 0) (ja-aframe 18.0 0)) + (set! (-> s4-1 param 1) 1.0) + (set! (-> s4-1 frame-num) 0.0) + (joint-control-channel-group! + s4-1 + (the-as art-joint-anim (-> self draw art-group data 88)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((s4-2 (-> self skel root-channel 0))) + (set! (-> s4-2 param 0) (ja-aframe 18.0 0)) + (set! (-> s4-2 param 1) 1.0) + (joint-control-channel-group-eval! + s4-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((s4-3 (-> (handle->process (the-as handle arg0)) entity)) + (s3-1 + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> self node-list data 7) + ) + ) + ) + (dotimes (s2-0 50) + (when (handle->process (the-as handle arg0)) + (let ((s1-0 (handle->process (the-as handle arg0))) + (s0-0 (+ s2-0 4)) + ) + (set! + sv-160 + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> (the-as process-drawable s1-0) node-list data s0-0) + ) + ) + (set! sv-144 (get-process *default-dead-pool* powercellalt #x4000)) + (when sv-144 + (let ((t9-16 (method-of-type powercellalt activate))) + (t9-16 + (the-as powercellalt sv-144) + s1-0 + 'powercellalt + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + sv-144 + powercellalt-init-by-other + s4-3 + s3-1 + sv-160 + s0-0 + ) + (-> sv-144 ppointer) + ) + ) + ) + (let ((s1-1 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s1-1) 30) + (suspend) + ) + ) + (when (handle->process arg1) + (let ((s1-2 (handle->process arg1)) + (s0-1 (+ s2-0 4)) + ) + (set! + sv-192 + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> (the-as process-drawable s1-2) node-list data s0-1) + ) + ) + (set! sv-176 (get-process *default-dead-pool* powercellalt #x4000)) + (when sv-176 + (let ((t9-20 (method-of-type powercellalt activate))) + (t9-20 + (the-as powercellalt sv-176) + s1-2 + 'powercellalt + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + sv-176 + powercellalt-init-by-other + s4-3 + s3-1 + sv-192 + s0-1 + ) + (-> sv-176 ppointer) + ) + ) + ) + (let ((s1-3 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s1-3) 30) + (suspend) + ) + ) + ) + ) + (let ((gp-1 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-1) 600) + (suspend) + ) + ) + (let ((v0-22 (entity-by-name "sage-finalboss-1")) + (a1-26 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-26 from) self) + (set! (-> a1-26 num-params) 0) + (set! (-> a1-26 message) 'play-anim) + (let ((v1-70 v0-22)) + (send-event-function (if v1-70 + (-> v1-70 extra process) + ) + a1-26 + ) + ) + ) + (go target-stance) + (none) + ) + :post + target-no-stick-post + ) diff --git a/goal_src/levels/finalboss/robotboss-h.gc b/goal_src/levels/finalboss/robotboss-h.gc index 40e8488a72..e9298bc3bf 100644 --- a/goal_src/levels/finalboss/robotboss-h.gc +++ b/goal_src/levels/finalboss/robotboss-h.gc @@ -5,3 +5,145 @@ ;; name in dgo: robotboss-h ;; dgos: FIN, L1 +(define-extern *robotboss-sg* skeleton-group) + +;; definition of type robotboss-dda +(deftype robotboss-dda (structure) + ((blue-bomb-time float :offset-assert 0) + (num-blobs int32 :offset-assert 4) + (green-bomb-time float :offset-assert 8) + (red-shots-min int32 :offset-assert 12) + (red-shots-rnd int32 :offset-assert 16) + (red-shot-time-min float :offset-assert 20) + (red-shot-time-rnd float :offset-assert 24) + (red-bomb-time float :offset-assert 28) + (yellow-shot-time-min float :offset-assert 32) + (yellow-shot-time-rnd float :offset-assert 36) + (yellow-gun-hits int32 :offset-assert 40) + (yellow-bomb-time float :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +;; definition of type robotboss +(deftype robotboss (process-drawable) + ((alts entity-actor 13 :offset-assert 176) + (desired-loc vector :inline :offset-assert 240) + (old-loc vector :inline :offset-assert 256) + (loc-t float :offset-assert 272) + (loc-t-start seconds :offset-assert 280) + (loc-t-duration seconds :offset-assert 288) + (hits-to-go int32 :offset-assert 296) + (took-hit symbol :offset-assert 300) + (children-spawned int32 :offset-assert 304) + (vulnerable seconds :offset-assert 312) + (till-next-shot seconds :offset-assert 320) + (shot-attractor uint64 :offset-assert 328) + (desired-pool-y float :offset-assert 336) + (particle sparticle-launch-control 7 :offset-assert 340) + (blue-smoke basic :offset-assert 368) + (red-smoke basic :offset-assert 372) + (yellow-smoke basic :offset-assert 376) + (white-eco handle :offset-assert 384) + (des-cam-entity basic :offset-assert 392) + (use-interesting symbol :offset-assert 396) + (ignore-camera symbol :offset-assert 400) + (ambient ambient-control :offset 408) + (yellow-gun joint-mod :offset 424) + (palette-val float :offset 428) + (looping-sound ambient-sound 4 :offset 432) + (dda robotboss-dda :offset 448) + (valid-frames int32 :offset 452) + (skip-cut symbol :offset 456) + (keep-charging symbol :offset 460) + ) + :heap-base #x16 + :method-count-assert 21 + :size-assert #x1d0 + :flag-assert #x15001601d0 + (:methods + (dummy-20 () none 20) + ) + ) + +;; definition for method 7 of type robotboss +;; INFO: Return type mismatch process-drawable vs robotboss. +(defmethod relocate robotboss ((obj robotboss) (arg0 int)) + (dotimes (v1-0 7) + (if (nonzero? (-> obj particle v1-0)) + (&+! (-> obj particle v1-0) arg0) + ) + ) + (dotimes (v1-3 4) + (if (nonzero? (-> obj looping-sound v1-3)) + (&+! (-> obj looping-sound v1-3) arg0) + ) + ) + (if (nonzero? (-> obj yellow-gun)) + (&+! (-> obj yellow-gun) arg0) + ) + (the-as robotboss ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; definition for method 10 of type robotboss +(defmethod deactivate robotboss ((obj robotboss)) + (dotimes (s5-0 7) + (let ((a0-1 (-> obj particle s5-0))) + (if (nonzero? a0-1) + (deactivate a0-1) + ) + ) + ) + (dotimes (s5-1 4) + (let ((a0-2 (-> obj looping-sound s5-1))) + (if (nonzero? a0-2) + (stop! a0-2) + ) + ) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for function target-has-all-the-cells? +;; INFO: Return type mismatch basic vs symbol. +(defun target-has-all-the-cells? () + (with-pp + (the-as + symbol + (and *target* (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) pp) + (set! (-> a1-0 num-params) 2) + (set! (-> a1-0 message) 'query) + (set! (-> a1-0 param 0) (the-as uint 'pickup)) + (set! (-> a1-0 param 1) (the-as uint 6)) + (>= + (the int (the-as float (send-event-function *target* a1-0))) + 100 + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(let + ((v0-6 + (new 'static 'skeleton-group + :art-group-name "robotboss" + :bounds + (new 'static 'vector :y -40960.0 :w 327680.0) + :longest-edge (meters 19.9) + :version #x6 + ) + ) + ) + (set! (-> v0-6 jgeo) 0) + (set! (-> v0-6 janim) 2) + (set! (-> v0-6 mgeo 0) (the-as uint 1)) + (set! (-> v0-6 lod-dist 0) 4095996000.0) + (set! *robotboss-sg* v0-6) + ) diff --git a/goal_src/levels/jungle/junglefish.gc b/goal_src/levels/jungle/junglefish.gc index 0d2eceb2f3..dc3b28d2c5 100644 --- a/goal_src/levels/jungle/junglefish.gc +++ b/goal_src/levels/jungle/junglefish.gc @@ -45,7 +45,7 @@ nav-enemy-default-event-handler ;; definition for method 39 of type junglefish ;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-39 junglefish ((obj junglefish)) - ((method-of-object (-> obj water) dummy-10)) + (dummy-10 (-> obj water)) ((the-as (function nav-enemy none) (find-parent-method junglefish 39)) obj) 0 (none) diff --git a/goal_src/levels/jungleb/aphid.gc b/goal_src/levels/jungleb/aphid.gc index 8cf6d81a4f..acf3782daf 100644 --- a/goal_src/levels/jungleb/aphid.gc +++ b/goal_src/levels/jungleb/aphid.gc @@ -5,3 +5,679 @@ ;; name in dgo: aphid ;; dgos: JUB, L1 +(define-extern *aphid-sg* skeleton-group) + +;; definition of type aphid +(deftype aphid (nav-enemy) + ((try int32 :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x194 + :flag-assert #x4c01300194 + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "aphid-lurker" + :bounds + (new 'static 'vector :y 8192.0 :w 8192.0) + :version #x6 + :shadow 2 + ) + ) + ) + (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! *aphid-sg* v1-1) + ) + +;; definition for function aphid-invulnerable +(defbehavior aphid-invulnerable aphid () + (set! (-> self nav-enemy-flags) (logand -33 (-> self nav-enemy-flags))) + (dummy-54 (-> self collide-info) 2 4) + (none) + ) + +;; definition for function aphid-vulnerable +(defbehavior aphid-vulnerable aphid () + (logior! (-> self nav-enemy-flags) 32) + (dummy-54 (-> self collide-info) 2 1) + (none) + ) + +;; definition for method 43 of type aphid +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defmethod dummy-43 aphid ((obj aphid) (arg0 process) (arg1 event-message-block)) + (with-pp + (the-as object (cond + ((or + (logtest? (-> obj nav-enemy-flags) 32) + (= arg0 (ppointer->process (-> obj parent))) + ) + (let ((v1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-5 from) pp) + (set! (-> v1-5 num-params) 1) + (set! (-> v1-5 message) 'get-attack-count) + (set! (-> v1-5 param 0) (the-as uint 1)) + (send-event-function arg0 v1-5) + ) + (logclear! + (-> obj mask) + (process-mask actor-pause attackable) + ) + (go (method-of-object obj nav-enemy-die)) + ) + (else + (dummy-44 obj arg0 arg1) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (aphid) + :virtual #t + :exit + aphid-vulnerable + :code + (behavior () + (let ((gp-0 (cond + ((>= (-> self try) 15) + 450 + ) + ((>= (-> self try) 10) + 300 + ) + ((>= (-> self try) 5) + 150 + ) + (else + 0 + ) + ) + ) + ) + (while #t + (ja-channel-push! 1 15) + (sound-play-by-name + (static-sound-name "aphid-spike-out") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (aphid-invulnerable) + (ja-channel-push! 1 30) + (let ((v1-28 (-> self skel root-channel 0))) + (set! + (-> v1-28 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + ) + (let ((v1-31 (-> self skel root-channel 0))) + (set! (-> v1-31 num-func) num-func-identity) + (set! (-> v1-31 frame-num) 0.0) + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1)) + (s5-1 (-> *display* base-frame-counter)) + (s4-1 (- (the int (nav-enemy-rnd-float-range 900.0 1440.0)) gp-0)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-1) s4-1) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) f30-0) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (aphid-vulnerable) + (ja-channel-push! 1 15) + (sound-play-by-name + (static-sound-name "aphid-spike-in") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((a0-17 (-> self skel root-channel 0))) + (set! + (-> a0-17 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! (-> a0-17 param 0) 0.0) + (set! (-> a0-17 param 1) 1.0) + (set! + (-> a0-17 frame-num) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (joint-control-channel-group! + a0-17 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! (-> a0-18 param 0) 0.0) + (set! (-> a0-18 param 1) 1.0) + (joint-control-channel-group-eval! + a0-18 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-63 (-> self skel root-channel 0))) + (set! + (-> v1-63 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-66 (-> self skel root-channel 0))) + (set! (-> v1-66 num-func) num-func-identity) + (set! (-> v1-66 frame-num) 0.0) + ) + (let ((f30-1 (nav-enemy-rnd-float-range 0.9 1.1)) + (s5-3 (-> *display* base-frame-counter)) + (s4-3 (+ (the int (nav-enemy-rnd-float-range 660.0 900.0)) gp-0)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-3) s4-3) + (suspend) + (let ((a0-29 (-> self skel root-channel 0))) + (set! (-> a0-29 param 0) f30-1) + (joint-control-channel-group-eval! + a0-29 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (aphid) + :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 ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) f30-0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) f30-0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (while #t + (when (not (nav-enemy-facing-player? 2730.6667)) + (logior! (-> self nav-enemy-flags) 16) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) 1.0) + (joint-control-channel-group! + a0-7 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 60) + (let ((v1-35 (-> self skel root-channel 0))) + (set! + (-> v1-35 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + ) + (let ((v1-38 (-> self skel root-channel 0))) + (set! (-> v1-38 num-func) num-func-identity) + (set! (-> v1-38 frame-num) 0.0) + ) + (until (nav-enemy-facing-player? 1820.4445) + (ja-blend-eval) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) 0.75) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + ) + (when (nav-enemy-rnd-percent? 0.3) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 10) + ) + ) + (ja-channel-push! 1 30) + ) + (let ((a0-22 (-> self skel root-channel 0))) + (set! + (-> a0-22 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-22 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + 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 10)) + 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! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-give-up (aphid) + :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 7)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + 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 7)) + 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 8)) + ) + (set! + (-> a0-12 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + 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 8)) + 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) + ) + ) + +;; definition for symbol *aphid-nav-enemy-info*, type nav-enemy-info +(define + *aphid-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 3 + :walk-anim 4 + :turn-anim 9 + :notice-anim 3 + :run-anim 4 + :jump-anim -1 + :jump-land-anim -1 + :victory-anim 10 + :taunt-anim 10 + :die-anim 11 + :neck-joint 10 + :player-look-at-joint 5 + :run-travel-speed (meters 5.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 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.25) + :shadow-min-y (meters -0.25) + :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 #t + :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 aphid +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-47 aphid ((obj aphid)) + (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) 1) + (set-vector! (-> s4-0 local-sphere) 0.0 4096.0 0.0 4096.0) + ) + (dummy-46 s5-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 aphid +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-48 aphid ((obj aphid)) + (dummy-14 obj *aphid-sg* '()) + (TODO-RENAME-45 obj *aphid-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 function aphid-init-by-other +;; Used lq/sq +(defbehavior + aphid-init-by-other aphid + ((arg0 nav-enemy) (arg1 vector) (arg2 vector)) + (TODO-RENAME-47 self) + (logior! (-> self mask) (process-mask actor-pause)) + (set! (-> self collide-info trans quad) (-> arg1 quad)) + (set! (-> self event-param-point quad) (-> arg2 quad)) + (let ((s3-1 (vector-! (new 'stack-no-clear 'vector) arg2 arg1))) + (set! (-> s3-1 y) 0.0) + (vector-normalize! s3-1 1.0) + (forward-up->quaternion (-> self collide-info quat) s3-1 *up-vector*) + ) + (vector-identity! (-> self collide-info scale)) + (set! (-> self entity) (-> arg0 entity)) + (TODO-RENAME-48 self) + (set! (-> self nav-enemy-flags) (logand -4097 (-> self nav-enemy-flags))) + (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) 'try) + (set! + (-> self try) + (the-as int (send-event-function (ppointer->process (-> self parent)) a1-3)) + ) + ) + (go-virtual nav-enemy-chase) + (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 e53d395f5b..f0419d2e90 100644 --- a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc @@ -242,7 +242,7 @@ (:methods (new (symbol type basic uint int) _type_ 0) (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-10 (_type_ uint) collide-shape-prim 10) (dummy-11 () none 11) (dummy-12 () none 12) (dummy-13 () none 13) @@ -412,7 +412,7 @@ (dummy-31 () none 31) (dummy-32 () none 32) (dummy-33 (_type_ vector uint) none 33) - (dummy-34 () none 34) + (dummy-34 (_type_ uint) collide-shape-prim 34) (dummy-35 (_type_) none 35) (dummy-36 () none 36) (dummy-37 () none 37) @@ -433,7 +433,7 @@ (dummy-52 () none 52) (dummy-53 (_type_ int int int) none 53) (dummy-54 (_type_ int int) none 54) - (dummy-55 () none 55) + (dummy-55 (_type_ process uint float float float) none 55) ) ) diff --git a/test/decompiler/reference/engine/gfx/water/water-h_REF.gc b/test/decompiler/reference/engine/gfx/water/water-h_REF.gc index 160077d1b7..fdf468a29f 100644 --- a/test/decompiler/reference/engine/gfx/water/water-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/water/water-h_REF.gc @@ -44,10 +44,10 @@ (:methods (new (symbol type process int float float float) _type_ 0) (dummy-9 () none 9) - (dummy-10 () none 10) + (dummy-10 (_type_) none 10) (dummy-11 () none 11) (distance-from-surface (_type_) float 12) - (dummy-13 () none 13) + (dummy-13 (_type_ float vector int vector) none 13) (display-water-marks? (_type_) symbol 14) (dummy-15 () none 15) (dummy-16 () none 16) diff --git a/test/decompiler/reference/engine/nav/navigate-h_REF.gc b/test/decompiler/reference/engine/nav/navigate-h_REF.gc index 9712a401d8..e4fc45f710 100644 --- a/test/decompiler/reference/engine/nav/navigate-h_REF.gc +++ b/test/decompiler/reference/engine/nav/navigate-h_REF.gc @@ -386,7 +386,7 @@ (dummy-13 () none 13) (dummy-14 (_type_) none 14) (set-target-pos! (_type_ vector) none 15) - (dummy-16 (_type_ vector) symbol 16) + (dummy-16 (_type_ vector) nav-poly 16) (dummy-17 () none 17) (dummy-18 () none 18) (dummy-19 (_type_ vector collide-shape-moving vector float) none 19) diff --git a/test/decompiler/reference/levels/beach/lurkercrab_REF.gc b/test/decompiler/reference/levels/beach/lurkercrab_REF.gc new file mode 100644 index 0000000000..fdb1e2563f --- /dev/null +++ b/test/decompiler/reference/levels/beach/lurkercrab_REF.gc @@ -0,0 +1,1441 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 159) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :name "group-lurkercrab-slide" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (new 'static 'sparticle-group-item + :launcher #x297 + :fade-after (meters 40.0) + :falloff-to (meters 40.0) + ) + (new 'static 'sparticle-group-item + :launcher #x298 + :fade-after (meters 40.0) + :falloff-to (meters 40.0) + ) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 663) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3e99999a + :random-range #x3e99999a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -973078528 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x46000000 + :random-range #x46000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41f00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42a00000 + :random-range #x41a00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x41f00000 + :random-range #x41f00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x41800000 + :random-range #x42400000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x415a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value #x43088889 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1101368306 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1106522267 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x12c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x1004 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 664) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200f00) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3dcccccd + :random-range #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -973078528 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x444ccccd + :random-range #x444ccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42960000 + :random-range #x42700000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42700000 + :random-range #x41a00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x41b80000 + :random-range #x41f00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x42da740e + :random-range #x42da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1092979698 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1059425266 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x12c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x1004 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :initial-value #x45aaaaab + :random-range #x45aaaaab + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3e + :flags #x1 + :initial-value #x444ccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; definition of type lurkercrab +(deftype lurkercrab (nav-enemy) + ((orient basic :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x194 + :flag-assert #x4c01300194 + ) + +;; definition for method 3 of type lurkercrab +(defmethod inspect lurkercrab ((obj lurkercrab)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~T~Torient: ~A~%" (-> obj orient)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-4 + (new 'static 'skeleton-group + :art-group-name "lurkercrab" + :bounds (new 'static 'vector :w 10240.0) + :max-lod 2 + :version #x6 + ) + ) + ) + (set! (-> v1-4 jgeo) 0) + (set! (-> v1-4 janim) 4) + (set! (-> v1-4 mgeo 0) (the-as uint 1)) + (set! (-> v1-4 lod-dist 0) 81920.0) + (set! (-> v1-4 mgeo 1) (the-as uint 2)) + (set! (-> v1-4 lod-dist 1) 163840.0) + (set! (-> v1-4 mgeo 2) (the-as uint 3)) + (set! (-> v1-4 lod-dist 2) 4095996000.0) + (set! *lurkercrab-sg* v1-4) + ) + +;; definition for method 44 of type lurkercrab +;; INFO: Return type mismatch none vs object. +(defmethod + dummy-44 + lurkercrab + ((obj lurkercrab) (arg0 process) (arg1 event-message-block)) + (if + (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) + ) + ) + (nav-enemy-send-attack + arg0 + (the-as touching-shapes-entry (-> arg1 param 0)) + 'generic + ) + ) + (dummy-55 (-> obj collide-info) arg0 (-> arg1 param 0) 0.7 6144.0 16384.0) + (the-as object (if (zero? (logand (-> obj nav-enemy-flags) 256)) + (dummy-45 (-> obj collide-info)) + ) + ) + ) + +;; definition for method 43 of type lurkercrab +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +;; Used lq/sq +(defmethod + dummy-43 + lurkercrab + ((obj lurkercrab) (arg0 process) (arg1 event-message-block)) + (let ((s5-0 (-> obj incomming-attack-id))) + (set! (-> obj incomming-attack-id) (the-as handle (-> arg1 param 2))) + (let ((v1-1 (-> arg1 param 1))) + (the-as object (cond + ((or (= v1-1 'flop) (= v1-1 'explode) (= v1-1 'darkeco)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go (method-of-object obj nav-enemy-die)) + ) + ((= v1-1 'punch) + (the-as none (cond + ((logtest? (-> obj nav-enemy-flags) 32) + (logclear! + (-> obj mask) + (process-mask actor-pause) + ) + (go (method-of-object obj nav-enemy-die)) + ) + ((begin + (let ((s4-0 (new 'stack-no-clear 'vector))) + (let + ((f30-0 + (quaternion-xz-angle (target-rot)) + ) + ) + (set-vector! + s4-0 + (* 24576.0 (sin f30-0)) + 0.0 + (* 24576.0 (cos f30-0)) + 1.0 + ) + ) + (vector+! + s4-0 + (-> obj collide-info trans) + s4-0 + ) + (set! + (-> obj nav target-pos quad) + (-> s4-0 quad) + ) + ) + (go lurkercrab-pushed) + (= s5-0 (-> obj incomming-attack-id)) + ) + 'push + ) + (else + #t + ) + ) + ) + ) + (else + (the-as none (cond + ((logtest? (-> obj nav-enemy-flags) 32) + (logclear! + (-> obj mask) + (process-mask actor-pause) + ) + (go (method-of-object obj nav-enemy-die)) + ) + ((begin + (let ((s4-1 (new 'stack-no-clear 'vector))) + (vector-! + s4-1 + (-> obj collide-info trans) + (target-pos 0) + ) + (vector-normalize! s4-1 24576.0) + (vector+! + s4-1 + (-> obj collide-info trans) + s4-1 + ) + (set! + (-> obj nav target-pos quad) + (-> s4-1 quad) + ) + ) + (go lurkercrab-pushed) + (= s5-0 (-> obj incomming-attack-id)) + ) + 'push + ) + (else + #t + ) + ) + ) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +nav-enemy-default-event-handler + +;; definition for method 37 of type lurkercrab +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-37 lurkercrab ((obj lurkercrab)) + (when (-> obj orient) + (if (logtest? (nav-control-flags bit19) (-> obj nav flags)) + (seek-to-point-toward-point! + (-> obj collide-info) + (-> obj nav target-pos) + (-> obj rotate-speed) + (-> obj turn-time) + ) + (seek-toward-heading-vec! + (-> obj collide-info) + (-> obj nav travel) + (-> obj rotate-speed) + (-> obj turn-time) + ) + ) + ) + (if (not (-> obj orient)) + (quaternion-rotate-y! + (-> obj collide-info quat) + (-> obj collide-info quat) + (* 163840.0 (-> *display* seconds-per-frame)) + ) + ) + 0 + (none) + ) + +;; definition for method 38 of type lurkercrab +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-38 lurkercrab ((obj lurkercrab)) + (dummy-59 + (-> obj collide-info) + (-> obj collide-info transv) + (the-as uint 1) + 8192.0 + #f + #f + #f + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-idle (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (set! (-> self draw force-lod) -1) + (none) + ) + :code + (behavior () + (set! (-> self target-speed) 0.0) + (set! (-> self draw force-lod) 2) + (ja-channel-push! 1 22) + (while #t + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-identity + ) + (set! (-> gp-0 frame-num) (ja-aframe 1.0 0)) + ) + (let ((gp-1 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-1) 900) + (suspend) + ) + ) + (let ((gp-2 (-> self skel root-channel 0))) + (set! + (-> gp-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! (-> gp-2 param 0) (ja-aframe 19.0 0)) + (set! (-> gp-2 param 1) 1.0) + (set! (-> gp-2 frame-num) (ja-aframe 1.0 0)) + (joint-control-channel-group! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 19.0 0)) + (set! (-> gp-3 param 1) 1.0) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((gp-4 (-> self skel root-channel 0))) + (set! (-> gp-4 num-func) num-func-identity) + (set! (-> gp-4 frame-num) (ja-aframe 19.0 0)) + ) + (let ((gp-5 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-5) 300) + (suspend) + ) + ) + (let ((gp-6 (-> self skel root-channel 0))) + (set! + (-> gp-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! (-> gp-6 param 0) (ja-aframe 1.0 0)) + (set! (-> gp-6 param 1) 1.0) + (set! (-> gp-6 frame-num) (ja-aframe 19.0 0)) + (joint-control-channel-group! + gp-6 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-7 (-> self skel root-channel 0))) + (set! (-> gp-7 param 0) (ja-aframe 1.0 0)) + (set! (-> gp-7 param 1) 1.0) + (joint-control-channel-group-eval! + gp-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + ) + +;; definition for function lurkercrab-invulnerable +(defbehavior lurkercrab-invulnerable lurkercrab () + (set! (-> self nav-enemy-flags) (logand -33 (-> self nav-enemy-flags))) + (let ((v1-3 (dummy-34 (-> self collide-info) (the-as uint 2)))) + (when v1-3 + (let ((v0-1 4)) + (set! (-> v1-3 prim-core offense) v0-1) + v0-1 + ) + ) + ) + ) + +;; definition for function lurkercrab-vulnerable +(defbehavior lurkercrab-vulnerable lurkercrab () + (logior! (-> self nav-enemy-flags) 32) + (let ((v1-3 (dummy-34 (-> self collide-info) (the-as uint 2)))) + (when v1-3 + (let ((v0-1 1)) + (set! (-> v1-3 prim-core offense) v0-1) + v0-1 + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (lurkercrab-invulnerable) + (set! (-> self nav-enemy-flags) (logand -65 (-> self nav-enemy-flags))) + (logior! (-> self nav-enemy-flags) 8) + (none) + ) + :code + (behavior () + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 4) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-4 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (ja-channel-push! 1 22) + (while #t + (dotimes (gp-0 6) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-8 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + 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 6)) + 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! + ) + ) + ) + ) + (when (nav-enemy-rnd-go-idle? 0.2) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) 1.0) + (joint-control-channel-group! + a0-12 + (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))) + (nav-enemy-rnd-int-range 2 6) + (until (not (nav-enemy-rnd-go-idle? 0.2)) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-identity + ) + (set! (-> gp-1 frame-num) (ja-aframe 1.0 0)) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-2) 600) + (suspend) + ) + ) + ) + (logior! (-> self nav-enemy-flags) 8) + (let ((a0-19 (-> self skel root-channel 0))) + (set! + (-> a0-19 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + (set! + (-> a0-19 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + 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 5)) + 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 ((gp-3 (-> self skel root-channel 0))) + (set! + (-> gp-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! (-> gp-3 param 0) (ja-aframe 30.0 0)) + (set! (-> gp-3 param 1) 1.0) + (set! (-> gp-3 frame-num) (ja-aframe 1.0 0)) + (joint-control-channel-group! + gp-3 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-4 (-> self skel root-channel 0))) + (set! (-> gp-4 param 0) (ja-aframe 30.0 0)) + (set! (-> gp-4 param 1) 1.0) + (joint-control-channel-group-eval! + gp-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (lurkercrab-vulnerable) + (logior! (-> self nav-enemy-flags) 64) + (dotimes (gp-5 2) + (let ((s5-0 (-> self skel root-channel 0))) + (set! + (-> s5-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! (-> s5-0 param 0) (ja-aframe 60.0 0)) + (set! (-> s5-0 param 1) 1.0) + (set! (-> s5-0 frame-num) (ja-aframe 30.0 0)) + (joint-control-channel-group! + s5-0 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((s5-1 (-> self skel root-channel 0))) + (set! (-> s5-1 param 0) (ja-aframe 60.0 0)) + (set! (-> s5-1 param 1) 1.0) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (lurkercrab-invulnerable) + (set! (-> self nav-enemy-flags) (logand -65 (-> self nav-enemy-flags))) + (let ((gp-6 (-> self skel root-channel 0))) + (set! + (-> gp-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! (-> gp-6 param 0) (ja-aframe 90.0 0)) + (set! (-> gp-6 param 1) 1.0) + (set! (-> gp-6 frame-num) (ja-aframe 60.0 0)) + (joint-control-channel-group! + gp-6 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-7 (-> self skel root-channel 0))) + (set! (-> gp-7 param 0) (ja-aframe 90.0 0)) + (set! (-> gp-7 param 1) 1.0) + (joint-control-channel-group-eval! + gp-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-notice (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :code + (behavior () + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (lurkercrab-invulnerable) + (set! (-> self nav-enemy-flags) (logand -65 (-> self nav-enemy-flags))) + (none) + ) + :trans + (behavior () + (if (logtest? (-> *target* state-flags) #x80f8) + (go-virtual nav-enemy-victory) + ) + (if (< (ja-aframe-num 0) 2.0) + ((-> (method-of-type nav-enemy nav-enemy-chase) trans)) + ) + (none) + ) + :code + (behavior () + (logior! (-> self nav-enemy-flags) 8) + (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 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! + ) + ) + ) + (lurkercrab-vulnerable) + (logior! (-> self nav-enemy-flags) 64) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! (-> gp-0 param 0) (ja-aframe 30.0 0)) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 1.0 0)) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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 ((gp-2 (-> self skel root-channel 0))) + (set! + (-> gp-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 9)) + ) + (set! (-> gp-2 param 0) (ja-aframe 120.0 0)) + (set! (-> gp-2 param 1) 1.0) + (set! (-> gp-2 frame-num) (ja-aframe 30.0 0)) + (joint-control-channel-group! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 9)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 120.0 0)) + (set! (-> gp-3 param 1) 1.0) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((gp-4 (-> self skel root-channel 0))) + (set! + (-> gp-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! (-> gp-4 param 0) (ja-aframe 60.0 0)) + (set! (-> gp-4 param 1) 1.0) + (set! (-> gp-4 frame-num) (ja-aframe 30.0 0)) + (joint-control-channel-group! + gp-4 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-5 (-> self skel root-channel 0))) + (set! (-> gp-5 param 0) (ja-aframe 60.0 0)) + (set! (-> gp-5 param 1) 1.0) + (joint-control-channel-group-eval! + gp-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((gp-6 (-> self skel root-channel 0))) + (set! + (-> gp-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! (-> gp-6 param 0) (ja-aframe 60.0 0)) + (set! (-> gp-6 param 1) 1.0) + (set! (-> gp-6 frame-num) (ja-aframe 30.0 0)) + (joint-control-channel-group! + gp-6 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-7 (-> self skel root-channel 0))) + (set! (-> gp-7 param 0) (ja-aframe 60.0 0)) + (set! (-> gp-7 param 1) 1.0) + (joint-control-channel-group-eval! + gp-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (lurkercrab-invulnerable) + (set! (-> self nav-enemy-flags) (logand -65 (-> self nav-enemy-flags))) + (let ((gp-8 (-> self skel root-channel 0))) + (set! + (-> gp-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! (-> gp-8 param 0) (ja-aframe 90.0 0)) + (set! (-> gp-8 param 1) 1.0) + (set! (-> gp-8 frame-num) (ja-aframe 60.0 0)) + (joint-control-channel-group! + gp-8 + (the-as art-joint-anim (-> self draw art-group data 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-9 (-> self skel root-channel 0))) + (set! (-> gp-9 param 0) (ja-aframe 90.0 0)) + (set! (-> gp-9 param 1) 1.0) + (joint-control-channel-group-eval! + gp-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-35 (-> self skel root-channel 0))) + (set! + (-> a0-35 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-35 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-35 param 1) 1.0) + (set! (-> a0-35 frame-num) 0.0) + (joint-control-channel-group! + a0-35 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-36 (-> self skel root-channel 0))) + (set! + (-> a0-36 param 0) + (the float (+ (-> a0-36 frame-group data 0 length) -1)) + ) + (set! (-> a0-36 param 1) 1.0) + (joint-control-channel-group-eval! + a0-36 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((a0-38 (-> self skel root-channel 0))) + (set! + (-> a0-38 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-38 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-38 param 1) 1.0) + (set! (-> a0-38 frame-num) 0.0) + (joint-control-channel-group! + a0-38 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-39 (-> self skel root-channel 0))) + (set! + (-> a0-39 param 0) + (the float (+ (-> a0-39 frame-group data 0 length) -1)) + ) + (set! (-> a0-39 param 1) 1.0) + (joint-control-channel-group-eval! + a0-39 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stop-chase (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :code + (behavior () + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :code + (behavior () + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-victory (lurkercrab) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :code + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (ja-channel-push! 1 22) + (let ((v1-4 (-> self skel root-channel 0))) + (set! + (-> v1-4 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + ) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 300 + ) + (let ((v1-7 (-> self skel root-channel 0))) + (set! (-> v1-7 num-func) num-func-identity) + (set! (-> v1-7 frame-num) 0.0) + ) + (suspend) + ) + (go-virtual nav-enemy-patrol) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate lurkercrab-pushed (lurkercrab) + :event + (the-as + (function process int symbol event-message-block object :behavior lurkercrab) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (set! (-> self orient) #t) + (none) + ) + :code + (behavior () + (set! (-> self momentum-speed) 57344.0) + (set! (-> self target-speed) 0.0) + (set! (-> self orient) #f) + (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) (ja-aframe 18.0 0)) + (set! (-> gp-0 param 1) 0.75) + (set! (-> gp-0 frame-num) (ja-aframe 1.0 0)) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 18.0 0)) + (set! (-> gp-1 param 1) 0.75) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-2) 75) + (suspend) + ) + ) + (let ((gp-3 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-3) 30) + (suspend) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + :post + (behavior () + (let ((a0-0 (-> self part)) + (a1-0 (-> self collide-info root-prim prim-core)) + ) + (dummy-11 a0-0 (the-as vector a1-0)) + ) + (nav-enemy-travel-post) + (none) + ) + ) + +;; definition for symbol *lurkercrab-nav-enemy-info*, type nav-enemy-info +(define + *lurkercrab-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 4 + :walk-anim 6 + :turn-anim -1 + :notice-anim 4 + :run-anim 6 + :jump-anim 6 + :jump-land-anim 6 + :victory-anim 4 + :taunt-anim 4 + :die-anim 11 + :neck-joint -1 + :player-look-at-joint 5 + :run-travel-speed (meters 5.0) + :run-rotate-speed (degrees 999.99994) + :run-acceleration (meters 12.0) + :run-turn-time #x1e + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 999.99994) + :walk-acceleration (meters 12.0) + :walk-turn-time #x1e + :attack-shove-back (meters 1.2) + :attack-shove-up (meters 1.5) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 25.0) + :stop-chase-distance (meters 35.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 4.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 #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #t + :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 lurkercrab +(defmethod copy-defaults! lurkercrab ((obj lurkercrab) (arg0 res-lump)) + (let + ((s4-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 10240.0 0.0 12288.0) + (dummy-46 s4-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set-vector! (-> s2-0 local-sphere) 0.0 4915.2 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core offense) 2) + (set! (-> s2-1 transform-index) 16) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 1638.4) + ) + (dummy-28 s3-0) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 2) + (set! (-> s2-2 transform-index) 21) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 1638.4) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) 4096.0) + (dummy-50 s4-0) + (set! (-> obj collide-info) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-14 obj *lurkercrab-sg* '()) + (TODO-RENAME-45 obj *lurkercrab-nav-enemy-info*) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 159) obj) + ) + (set! (-> obj orient) #t) + (set! (-> obj nav-enemy-flags) (logand -97 (-> obj nav-enemy-flags))) + (set! (-> obj target-speed) 0.0) + (set! (-> obj momentum-speed) 0.0) + (set! (-> obj draw force-lod) 2) + (go (method-of-object obj nav-enemy-idle)) + (none) + ) + + + + diff --git a/test/decompiler/reference/levels/beach/lurkerpuppy_REF.gc b/test/decompiler/reference/levels/beach/lurkerpuppy_REF.gc new file mode 100644 index 0000000000..6fe2cd681e --- /dev/null +++ b/test/decompiler/reference/levels/beach/lurkerpuppy_REF.gc @@ -0,0 +1,652 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type lurkerpuppy +(deftype lurkerpuppy (nav-enemy) + () + :heap-base #x120 + :method-count-assert 76 + :size-assert #x190 + :flag-assert #x4c01200190 + ) + +;; definition for method 3 of type lurkerpuppy +(defmethod inspect lurkerpuppy ((obj lurkerpuppy)) + (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 "lurkerpuppy" + :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! *lurkerpuppy-sg* v1-1) + ) + +;; failed to figure out what this is: +nav-enemy-default-event-handler + +;; failed to figure out what this is: +(defstate nav-enemy-notice (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-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 ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + 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 8)) + 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! + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-default-event-handler + ) + :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 51) + (let ((gp-0 (-> self skel root-channel 0))) + (set! + (-> gp-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> gp-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) (ja-aframe 4.0 0)) + (joint-control-channel-group! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 7)) + 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 51) + ) + ) + (let ((f30-0 (rand-vu-float-range 0.9 1.1))) + (while #t + (if (rand-vu-percent? 0.25) + (sound-play-by-name + (static-sound-name "puppy-bark") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (let ((a0-14 (-> self skel root-channel 0))) + (set! + (-> a0-14 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> a0-14 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-14 param 1) f30-0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! + a0-14 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (logtest? (-> self nav-enemy-flags) 256) + (go-virtual nav-enemy-attack) + ) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! + (-> a0-15 param 0) + (the float (+ (-> a0-15 frame-group data 0 length) -1)) + ) + (set! (-> a0-15 param 1) f30-0) + (joint-control-channel-group-eval! + a0-15 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-default-event-handler + ) + :code + (behavior () + (set! (-> self rotate-speed) 1456355.5) + (set! (-> self turn-time) 30) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (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 ((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 12.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) + (let ((f0-3 (ja-aframe-num 0))) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (if (and (>= f0-3 2.5) (>= 7.5 f0-3)) + (logior! (-> self nav-enemy-flags) 16) + ) + ) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 12.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! + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) 1.0) + (joint-control-channel-group! + a0-11 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 30) + (let ((v1-31 (-> self skel root-channel 0))) + (set! + (-> v1-31 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + ) + (let ((v1-34 (-> self skel root-channel 0))) + (set! (-> v1-34 num-func) num-func-identity) + (set! (-> v1-34 frame-num) 0.0) + ) + (let ((gp-2 (rand-vu-int-range 750 900)) + (s5-0 (-> *display* base-frame-counter)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-0) gp-2) + (let ((a0-18 (-> self skel root-channel 0))) + (set! (-> a0-18 param 0) 1.0) + (joint-control-channel-group-eval! + a0-18 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-blend-eval) + (suspend) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-give-up (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-default-event-handler + ) + :code + (behavior () + (set! (-> self rotate-speed) 218453.33) + (set! (-> self turn-time) 150) + (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 5)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (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 5)) + ) + (set! + (-> a0-7 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-7 param 1) 1.4) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! + a0-7 + (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-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.4) + (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 (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-default-event-handler + ) + :code + (behavior () + (sound-play-by-name + (static-sound-name "head-butt") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (go-virtual nav-enemy-victory) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-victory (lurkerpuppy) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerpuppy) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (logior! (-> self nav-enemy-flags) 16) + (none) + ) + :code + (behavior () + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (ja-channel-push! 1 22) + (dotimes (gp-0 4) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 8)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + 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 8)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (let ((f0-4 (ja-aframe-num 0))) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (if (and (>= f0-4 2.5) (>= 7.5 f0-4)) + (logior! (-> self nav-enemy-flags) 16) + ) + ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + :post + (the-as (function none :behavior lurkerpuppy) nav-enemy-face-player-post) + ) + +;; definition for symbol *lurkerpuppy-nav-enemy-info*, type nav-enemy-info +(define + *lurkerpuppy-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 5 + :walk-anim 6 + :turn-anim 6 + :notice-anim 8 + :run-anim 7 + :jump-anim 9 + :jump-land-anim 10 + :victory-anim 8 + :taunt-anim 8 + :die-anim 11 + :neck-joint -1 + :player-look-at-joint 5 + :run-travel-speed (meters 5.0) + :run-rotate-speed (degrees 3999.9998) + :run-acceleration (meters 1.0) + :run-turn-time #x2d + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 1999.9999) + :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 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 6.0 + :jump-anim-start-frame 3.5 + :jump-land-anim-end-frame 14.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.5) + :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 47 of type lurkerpuppy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-47 lurkerpuppy ((obj lurkerpuppy)) + (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 4915.2) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) 2048.0) + (dummy-50 s5-0) + (set! (-> obj collide-info) s5-0) + ) + 0 + (none) + ) + +;; definition for method 48 of type lurkerpuppy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-48 lurkerpuppy ((obj lurkerpuppy)) + (dummy-14 obj *lurkerpuppy-sg* '()) + (TODO-RENAME-45 obj *lurkerpuppy-nav-enemy-info*) + (when (nonzero? (-> obj neck)) + (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/citadel/assistant-citadel_REF.gc b/test/decompiler/reference/levels/citadel/assistant-citadel_REF.gc new file mode 100644 index 0000000000..c3431086bf --- /dev/null +++ b/test/decompiler/reference/levels/citadel/assistant-citadel_REF.gc @@ -0,0 +1,280 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type assistant-lavatube-end +(deftype assistant-lavatube-end (process-taskable) + () + :heap-base #x110 + :method-count-assert 53 + :size-assert #x17c + :flag-assert #x350110017c + ) + +;; definition for method 3 of type assistant-lavatube-end +(defmethod inspect assistant-lavatube-end ((obj assistant-lavatube-end)) + (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-end" + :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-end-sg* v1-1) + ) + +;; definition for method 32 of type assistant-lavatube-end +(defmethod + play-anim! + assistant-lavatube-end + ((obj assistant-lavatube-end) (arg0 symbol)) + (case (current-status (-> obj tasks)) + ((1 2) + (new 'static 'spool-anim + :name "assistant-lavatube-end-resolution" + :index 4 + :parts 11 + :command-list '() + ) + ) + ((6) + (if arg0 + (close-current! (-> obj tasks)) + ) + (new 'static 'spool-anim + :name "assistant-lavatube-end-resolution" + :index 4 + :parts 11 + :command-list + '( + ((the binteger 61) + joint + "cameraB" + ) + ((the binteger 151) + joint + "camera" + ) + ((the binteger 226) + joint + "cameraB" + ) + ((the binteger 273) + joint + "camera" + ) + ((the binteger 316) + joint + "cameraB" + ) + ((the binteger 451) + joint + "camera" + ) + ((the binteger 651) + joint + "cameraB" + ) + ((the binteger 786) + joint + "camera" + ) + ((the binteger 888) + joint + "cameraB" + ) + ((the binteger 1011) + joint + "camera" + ) + ((the binteger 1011) + shadow + target + #f + ) + ((the binteger 1140) + shadow + target + #t + ) + ((the binteger 1191) joint "cameraB") + ) + ) + ) + (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-end +(defmethod get-art-elem assistant-lavatube-end ((obj assistant-lavatube-end)) + (-> obj draw art-group data 3) + ) + +;; failed to figure out what this is: +(defstate hidden (assistant-lavatube-end) + :virtual #t + :trans + (behavior () + (dummy-33 self) + ((-> (method-of-type process-taskable hidden) trans)) + (when + (and + (and + *target* + (>= + 61440.0 + (vector-vector-distance (-> self root trans) (-> *target* control trans)) + ) + ) + (not + (closed? + (-> self tasks) + (game-task village4-button) + (task-status need-reward-speech) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (assistant-lavatube-end) + :virtual #t + :enter + (behavior () + ((-> (method-of-type process-taskable idle) enter)) + (case (get-task-status (game-task village4-button)) + (((task-status need-reward-speech)) + (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) + ) + ) + ) + (none) + ) + :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 ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-10 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-10 param 1) 1.0) + (set! (-> a0-10 frame-num) 0.0) + (joint-control-channel-group! + a0-10 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (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! + ) + ) + ) + ) + (none) + ) + ) + +;; definition for method 39 of type assistant-lavatube-end +(defmethod should-display? assistant-lavatube-end ((obj assistant-lavatube-end)) + (first-any (-> obj tasks) #t) + (let ((v1-3 (current-status (-> obj tasks)))) + (and + (or (= v1-3 6) (= v1-3 0)) + (not (task-closed? (game-task citadel-sage-green) (task-status need-hint))) + ) + ) + ) + +;; definition for method 11 of type assistant-lavatube-end +(defmethod + copy-defaults! + assistant-lavatube-end + ((obj assistant-lavatube-end) (arg0 res-lump)) + (dummy-40 + obj + arg0 + *assistant-lavatube-end-sg* + 3 + 29 + (new 'static 'vector :w 4096.0) + 5 + ) + (set! (-> obj tasks) (get-task-control (game-task village4-button))) + (first-any (-> obj tasks) #t) + (dummy-42 obj) + (none) + ) + + + + diff --git a/test/decompiler/reference/levels/common/nav-enemy_REF.gc b/test/decompiler/reference/levels/common/nav-enemy_REF.gc index de69fbf7fb..b99986e387 100644 --- a/test/decompiler/reference/levels/common/nav-enemy_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy_REF.gc @@ -767,17 +767,22 @@ nav-enemy-default-event-handler ) ;; 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)) - (dummy-16 (-> self nav) arg0) + (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)) - (and - (dummy-16 (-> self nav) arg0) - (< - (-> arg0 y) - (+ (-> self collide-info trans y) (-> self enemy-info notice-top)) + (the-as + symbol + (and + (dummy-16 (-> self nav) arg0) + (< + (-> arg0 y) + (+ (-> self collide-info trans y) (-> self enemy-info notice-top)) + ) ) ) ) @@ -2771,8 +2776,8 @@ nav-enemy-default-event-handler :code (behavior () (nav-enemy-execute-jump) - (let ((a1-0 (the-as structure (-> self nav user-poly)))) - (if (not (the-as nav-poly a1-0)) + (let ((a1-0 (-> self nav user-poly))) + (if (not a1-0) (set! a1-0 (dummy-16 (-> self nav) (-> self jump-dest))) ) (if a1-0 diff --git a/test/decompiler/reference/levels/common/sharkey_REF.gc b/test/decompiler/reference/levels/common/sharkey_REF.gc new file mode 100644 index 0000000000..de522baa00 --- /dev/null +++ b/test/decompiler/reference/levels/common/sharkey_REF.gc @@ -0,0 +1,1384 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 106) + (new 'static 'sparticle-launch-group + :length 16 + :duration #x78 + :linger-duration #x30c + :flags #x1 + :name "group-sharkey-splash" + :launcher + (new 'static 'inline-array sparticle-group-item 16 + (new 'static 'sparticle-group-item + :launcher #x7c + :flags #x1 + :period #x384 + :length #x3f + ) + (new 'static 'sparticle-group-item :launcher #x7d :period #x384 :length #xf) + (new 'static 'sparticle-group-item + :launcher #x7e + :flags #x1 + :period #x384 + :length #xf + ) + (new 'static 'sparticle-group-item + :launcher #x7f + :flags #x1 + :period #x384 + :length #xf + ) + (new 'static 'sparticle-group-item + :launcher #x80 + :period #x384 + :length #xa + :binding #x81 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + (new 'static 'sparticle-group-item + :launcher #x81 + :flags #x4 + :period #x384 + :length #x78 + ) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +;; definition of type sharkey +(deftype sharkey (nav-enemy) + ((dir vector :inline :offset-assert 400) + (spawn-point vector :inline :offset-assert 416) + (scale float :offset-assert 432) + (anim-speed float :offset-assert 436) + (y-max meters :offset-assert 440) + (y-min meters :offset-assert 444) + (attack-time float :offset-assert 448) + (player-water-time uint64 :offset-assert 456) + (player-in-water basic :offset-assert 464) + (last-y float :offset-assert 468) + (spawn-distance meters :offset-assert 472) + (chase-speed meters :offset-assert 476) + (y-speed meters :offset-assert 480) + (sound-id sound-id :offset-assert 484) + (enable-patrol basic :offset-assert 488) + ) + :heap-base #x180 + :method-count-assert 76 + :size-assert #x1ec + :flag-assert #x4c018001ec + ) + +;; definition for method 3 of type sharkey +(defmethod inspect sharkey ((obj sharkey)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~T~Tdir: #~%" (-> obj dir)) + (format #t "~T~Tspawn-point: #~%" (-> obj spawn-point)) + (format #t "~T~Tscale: ~f~%" (-> obj scale)) + (format #t "~T~Tanim-speed: ~f~%" (-> obj anim-speed)) + (format #t "~T~Ty-max: (meters ~m)~%" (-> obj y-max)) + (format #t "~T~Ty-min: (meters ~m)~%" (-> obj y-min)) + (format #t "~T~Tattack-time: ~f~%" (-> obj attack-time)) + (format #t "~T~Tplayer-water-time: ~D~%" (-> obj player-water-time)) + (format #t "~T~Tplayer-in-water: ~A~%" (-> obj player-in-water)) + (format #t "~T~Tlast-y: ~f~%" (-> obj last-y)) + (format #t "~T~Tspawn-distance: (meters ~m)~%" (-> obj spawn-distance)) + (format #t "~T~Tchase-speed: (meters ~m)~%" (-> obj chase-speed)) + (format #t "~T~Ty-speed: (meters ~m)~%" (-> obj y-speed)) + (format #t "~T~Tsound-id: ~D~%" (-> obj sound-id)) + (format #t "~T~Tenable-patrol: ~A~%" (-> obj enable-patrol)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "sharkey" + :bounds (new 'static 'vector :w 24576.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! *sharkey-sg* v1-2) + ) + +;; definition for method 44 of type sharkey +;; INFO: Return type mismatch symbol vs object. +(defmethod + dummy-44 + sharkey + ((obj sharkey) (arg0 process) (arg1 event-message-block)) + (the-as object #t) + ) + +;; definition for method 43 of type sharkey +;; INFO: Return type mismatch symbol vs object. +(defmethod + dummy-43 + sharkey + ((obj sharkey) (arg0 process) (arg1 event-message-block)) + (the-as object #t) + ) + +;; failed to figure out what this is: +nav-enemy-default-event-handler + +;; definition for method 12 of type sharkey +(defmethod run-logic? sharkey ((obj sharkey)) + (or + (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or + (>= + (+ + (-> *ACTOR-bank* pause-dist) + (-> obj collide-info pause-adjust-distance) + ) + (vector-vector-distance (-> obj collide-info trans) (math-camera-pos)) + ) + (and + (nonzero? (-> obj skel)) + (!= (-> obj skel root-channel 0) (-> obj skel channel)) + ) + (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) + ) + ) + ) + +;; definition for method 40 of type sharkey +;; INFO: Return type mismatch int vs none. +(defmethod dummy-40 sharkey ((obj sharkey)) + (dummy-11 (-> obj nav) (-> obj nav target-pos)) + (let* + ((f0-0 + (vector-vector-xz-distance + (-> obj collide-info trans) + (-> obj nav target-pos) + ) + ) + (f30-0 + (/ + (- + (fmin (-> obj y-max) (-> obj nav target-pos y)) + (-> obj collide-info trans y) + ) + f0-0 + ) + ) + ) + (set! + (-> obj nav travel y) + (* 4.0 (vector-length (-> obj nav travel)) f30-0) + ) + ) + 0 + (none) + ) + +;; definition for method 37 of type sharkey +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-37 sharkey ((obj sharkey)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (when (< 8192.0 (vector-length (-> obj nav travel))) + (vector-normalize-copy! s5-0 (-> obj nav travel) 1.0) + (vector-deg-seek + (-> obj dir) + (-> obj dir) + s5-0 + (* 65536.0 (-> *display* seconds-per-frame)) + ) + (vector-normalize! (-> obj dir) 1.0) + (forward-up->quaternion (-> obj collide-info quat) (-> obj dir) *up-vector*) + ) + ) + 0 + (none) + ) + +;; definition for method 41 of type sharkey +;; INFO: Return type mismatch int vs none. +(defmethod dummy-41 sharkey ((obj sharkey)) + (let* ((f0-1 (- (-> obj target-speed) (-> obj momentum-speed))) + (f1-3 + (fmin + (* (-> obj acceleration) (-> *display* seconds-per-frame)) + (fabs f0-1) + ) + ) + ) + (if (< f0-1 0.0) + (set! (-> obj momentum-speed) (- (-> obj momentum-speed) f1-3)) + (+! (-> obj momentum-speed) f1-3) + ) + ) + (let + ((f0-9 + (fmin + (* (-> obj speed-scale) (-> obj momentum-speed)) + (* (vector-length (-> obj nav travel)) (-> *display* frames-per-second)) + ) + ) + ) + (vector-normalize-copy! + (-> obj collide-info transv) + (-> obj nav travel) + f0-9 + ) + ) + 0 + (none) + ) + +;; definition for method 39 of type sharkey +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod TODO-RENAME-39 sharkey ((obj sharkey)) + (let ((f30-0 (-> obj water height)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (let* ((f3-0 (- -36864.0 (-> obj collide-info trans y))) + (f0-2 (fmax 0.0 (fmin 1.0 (- 1.0 (* 0.00008138021 f3-0))))) + ) + (set-vector! (-> obj draw color-mult) f0-2 f0-2 f0-2 1.0) + ) + (dummy-10 (-> obj water)) + (let ((f28-0 (-> obj collide-info trans y))) + (when + (or + (and (< f30-0 f28-0) (>= f30-0 (-> obj last-y))) + (and (>= f30-0 f28-0) (< f30-0 (-> obj last-y))) + ) + (set! (-> s5-0 quad) (-> obj collide-info trans quad)) + (set! (-> s5-0 y) f30-0) + (dummy-13 (-> obj water) 1.0 s5-0 1 (-> obj collide-info transv)) + ) + (set! (-> obj last-y) f28-0) + ) + ) + ((the-as (function nav-enemy none) (find-parent-method sharkey 39)) obj) + 0 + (none) + ) + +;; definition for function sharkey-notice-player? +(defbehavior sharkey-notice-player? sharkey () + (if *target* + (and + (< (- (-> *target* control trans y) (-> self y-max)) 0.0) + (let ((gp-0 'racer) + (a1-0 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'query) + (set! (-> a1-0 param 0) (the-as uint 'mode)) + (!= gp-0 (send-event-function *target* a1-0)) + ) + (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) + ) + ) + ) + +;; definition for function sharkey-get-player-position +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun sharkey-get-player-position ((arg0 vector)) + (set! (-> arg0 quad) (-> (target-pos 5) quad)) + 0 + (none) + ) + +;; definition for function sharkey-reset-position +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior sharkey-reset-position sharkey () + (set! (-> self collide-info trans quad) (-> self entity extra trans quad)) + 0 + (none) + ) + +;; definition for function sharkey-move-to-attack-position +;; Used lq/sq +(defbehavior sharkey-move-to-attack-position sharkey () + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (let ((s4-0 (-> *target* control trans))) + (let ((f30-0 4096000.0)) + (set! (-> s3-0 quad) (-> self entity extra trans quad)) + (set! (-> s5-0 quad) (-> self collide-info trans quad)) + (dotimes (s2-0 (-> self path curve num-cverts)) + (eval-path-curve-div! (-> self path) s3-0 (the float s2-0) 'interp) + (let ((f0-2 (vector-vector-xz-distance s4-0 s3-0))) + (when (< f0-2 f30-0) + (set! f30-0 f0-2) + (set! (-> s5-0 quad) (-> s3-0 quad)) + ) + ) + ) + ) + (vector-! (-> self dir) s4-0 s5-0) + (vector-normalize! (-> self dir) 1.0) + (vector+*! gp-0 s4-0 (-> self dir) (- (-> self spawn-distance))) + ) + ((method-of-object (-> self nav) dummy-17)) + (set! (-> gp-0 y) (-> self y-min)) + (set! (-> self spawn-point quad) (-> gp-0 quad)) + ) + (set! (-> self collide-info trans quad) (-> self spawn-point quad)) + (forward-up->quaternion (-> self collide-info quat) (-> self dir) *up-vector*) + (let ((f0-6 0.0)) + (set! (-> self momentum-speed) f0-6) + f0-6 + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-idle (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) + (none) + ) + :exit + (behavior () + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) + :trans + (behavior () + (cond + ((-> self enable-patrol) + (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) + ) + ) + ((sharkey-notice-player?) + (when (zero? (logand (-> self nav-enemy-flags) 1)) + (logior! (-> self nav-enemy-flags) 1) + (set! (-> self notice-time) (-> *display* base-frame-counter)) + ) + (let ((a0-4 (dummy-16 (-> self nav) (-> *target* control trans)))) + (when + (or + (and a0-4 (logtest? (-> a0-4 pat) 2)) + (and + (logtest? (-> self draw status) 2) + (>= + (- (-> *display* base-frame-counter) (-> self notice-time)) + (-> self reaction-time) + ) + ) + ) + (sharkey-move-to-attack-position) + (set! (-> self player-in-water) #t) + (go-virtual nav-enemy-chase) + ) + ) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (-> self notice-time)) 3000) + (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) + ) + ) + ) + (none) + ) + :code + (behavior () + (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 (-> self nav-info idle-anim)) + ) + ) + ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) + ) + (until (= (-> self collide-info trans y) (-> self y-min)) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (set! + (-> self collide-info trans y) + (seek + (-> self collide-info trans y) + (-> self y-min) + (* (-> self y-speed) (-> *display* seconds-per-frame)) + ) + ) + (dummy-10 (-> self water)) + (ja-post) + (suspend) + ) + (logior! (-> self draw status) 2) + (anim-loop) + (none) + ) + :post + (the-as (function none :behavior sharkey) #f) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :trans + (behavior () + (if (sharkey-notice-player?) + (go-virtual nav-enemy-chase) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 22) + (set! (-> self nav target-pos quad) (-> self spawn-point quad)) + (while #t + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + (set! + (-> a0-3 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-3 param 1) (-> self anim-speed)) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (cond + ((-> self enable-patrol) + (set! + (-> self collide-info trans y) + (seek + (-> self collide-info trans y) + (-> self y-max) + (* (-> self y-speed) (-> *display* seconds-per-frame)) + ) + ) + ) + (else + (if (< (- (-> self collide-info trans y) (-> self y-min)) 409.6) + (go-virtual nav-enemy-idle) + ) + ) + ) + (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) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-6 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (behavior () + (nav-enemy-travel-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-notice (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :enter + (behavior () + (go-virtual nav-enemy-chase) + (none) + ) + :code + (behavior () + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; definition for function sharkey-follow-trajectory +(defbehavior sharkey-follow-trajectory sharkey ((arg0 float)) + (let ((gp-0 (-> self jump-trajectory))) + (eval-position! gp-0 arg0 (-> self collide-info trans)) + (eval-velocity! gp-0 arg0 (-> self collide-info transv)) + ) + (vector-normalize-copy! (-> self dir) (-> self collide-info transv) 1.0) + (forward-up->quaternion (-> self collide-info quat) (-> self dir) *up-vector*) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-attack (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :code + (behavior () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (-> *display* base-frame-counter) + (sound-play-by-name + (static-sound-name "bigshark-bite") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (set! (-> gp-0 quad) (-> self collide-info trans quad)) + (ja-channel-push! 1 30) + (let ((s4-1 (-> self skel root-channel 0))) + (set! + (-> s4-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! (-> s4-1 param 0) (ja-aframe 3.0 0)) + (set! (-> s4-1 param 1) 2.0) + (set! (-> s4-1 frame-num) 0.0) + (joint-control-channel-group! + s4-1 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (sharkey-get-player-position s5-0) + (setup-from-to-duration! + (-> self jump-trajectory) + gp-0 + s5-0 + 3.0 + -291.27112 + ) + (set! (-> self attack-time) (ja-aframe-num 0)) + (sharkey-follow-trajectory (-> self attack-time)) + (suspend) + (let ((s4-2 (-> self skel root-channel 0))) + (set! (-> s4-2 param 0) (ja-aframe 3.0 0)) + (set! (-> s4-2 param 1) 2.0) + (joint-control-channel-group-eval! + s4-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 2) + (set! (-> a1-7 message) 'attack-invinc) + (set! (-> a1-7 param 0) (the-as uint #f)) + (let ((a0-15 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-15 mode) 'sharkey) + (set! (-> a1-7 param 1) (the-as uint a0-15)) + ) + (when (send-event-function *target* a1-7) + (logclear! (-> self mask) (process-mask enemy)) + (vector-float*! + (-> self collide-info transv) + (-> self collide-info transv) + 8.0 + ) + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (let ((f30-0 -409600.0) + (f28-0 (-> self collide-info transv y)) + (f26-0 (-> self collide-info trans y)) + ) + (until + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 900 + ) + (let ((gp-1 (-> self skel root-channel 0))) + (set! + (-> gp-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> gp-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> gp-1 param 1) 1.0) + (set! (-> gp-1 frame-num) (ja-aframe 3.0 0)) + (joint-control-channel-group! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (+! f28-0 (* f30-0 (-> *display* seconds-per-frame))) + (+! f26-0 (* f28-0 (-> *display* seconds-per-frame))) + (set! (-> self collide-info transv y) f28-0) + (when (< (-> self collide-info trans y) (-> self water height)) + (set! f28-0 (* 0.9 f28-0)) + (vector-float*! + (-> self collide-info transv) + (-> self collide-info transv) + 0.9 + ) + ) + (vector-normalize-copy! (-> self dir) (-> self collide-info transv) 1.0) + (forward-up->quaternion + (-> self collide-info quat) + (-> self dir) + *up-vector* + ) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (the-as uint 1) + 8192.0 + #t + #f + #f + ) + (set! (-> self collide-info trans y) f26-0) + (suspend) + (let ((a0-27 (-> self skel root-channel 0))) + (set! + (-> a0-27 param 0) + (the float (+ (-> a0-27 frame-group data 0 length) -1)) + ) + (set! (-> a0-27 param 1) 1.0) + (joint-control-channel-group-eval! + a0-27 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (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) 'end-mode) + (send-event-function *target* a1-14) + ) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + ) + ) + (sharkey-reset-position) + (logior! (-> self draw status) 2) + (go-virtual nav-enemy-idle) + (none) + ) + :post + (behavior () + (nav-enemy-simple-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :exit + (behavior () + (sound-stop (-> self sound-id)) + (none) + ) + :trans + (behavior () + (if (not *target*) + (go-virtual nav-enemy-patrol) + ) + (let ((gp-0 (-> *target* control trans))) + (let + ((s5-0 + (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) + ) + (s4-0 'racer) + (a1-0 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'query) + (set! (-> a1-0 param 0) (the-as uint 'mode)) + (if (or (= s4-0 (send-event-function *target* a1-0)) (not s5-0)) + (go-virtual nav-enemy-patrol) + ) + ) + (when (logtest? (-> *target* control status) 2) + (set! + (-> self player-in-water) + (logtest? (-> *target* control status) 1024) + ) + (if (-> self player-in-water) + (set! + (-> self player-water-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + (if + (and + *target* + (>= + 8192.0 + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (go-virtual nav-enemy-attack) + ) + (cond + ((-> self player-in-water) + (set! (-> self free-time) (-> *display* base-frame-counter)) + (if + (and + (< (fabs (- (-> gp-0 y) (-> self collide-info trans y))) 40960.0) + (< + (vector-vector-xz-distance gp-0 (-> self collide-info trans)) + 24576.0 + ) + ) + (go-virtual nav-enemy-attack) + ) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (-> self free-time)) 900) + (go-virtual nav-enemy-patrol) + ) + ) + ) + ) + (let ((a0-10 (-> self nav target-poly))) + (if (and a0-10 (logtest? (-> a0-10 pat) 2)) + (set! (-> self target-speed) (* 2.0 (-> self chase-speed))) + (set! (-> self target-speed) (-> self chase-speed)) + ) + ) + (none) + ) + :code + (behavior () + (set! + (-> self player-water-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (ja-channel-push! 1 51) + (sound-play-by-name + (static-sound-name "bigshark-idle") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (while #t + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + (set! + (-> a0-3 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-3 param 1) (-> self anim-speed)) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (set! + (-> self anim-speed) + (seek (-> self anim-speed) 1.0 (* 3.0 (-> *display* seconds-per-frame))) + ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + :post + (behavior () + (sharkey-get-player-position (-> self nav target-pos)) + (nav-enemy-travel-post) + (let* + ((f3-0 + (vector-vector-distance + (-> self collide-info trans) + (-> self nav target-pos) + ) + ) + (f1-2 + (fmax + 0.0 + (fmin + 1.0 + (- 1.0 (/ (+ -24576.0 f3-0) (+ -24576.0 (-> self spawn-distance)))) + ) + ) + ) + (f0-2 (+ 0.5 (* 1.5 f1-2))) + ) + (sound-play-by-name + (static-sound-name "bigshark-alert") + (-> self sound-id) + 1024 + (the int (* 1524.0 f0-2)) + 0 + (the-as uint 1) + (-> self collide-info trans) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stop-chase (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :code + (behavior () + (ja-channel-push! 1 51) + (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) (-> self anim-speed)) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (set! + (-> self collide-info trans y) + (seek + (-> self collide-info trans y) + (-> self y-max) + (* (-> self y-speed) (-> *display* seconds-per-frame)) + ) + ) + (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) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :trans + (behavior () + (if (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + ) + (if + (>= + (- (-> *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 51) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) + ) + (while #t + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (set! + (-> self collide-info trans y) + (seek + (-> self collide-info trans y) + (-> self y-max) + (* (-> self y-speed) (-> *display* seconds-per-frame)) + ) + ) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-victory (sharkey) + :virtual #t + :event + (the-as + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) + :code + (behavior () + (ja-channel-push! 1 22) + (dotimes (gp-0 3) + (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 victory-anim)) + ) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) (-> self anim-speed)) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-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) (-> self anim-speed)) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (go-virtual nav-enemy-stare) + (none) + ) + ) + +;; definition for symbol *sharkey-nav-enemy-info*, type nav-enemy-info +(define + *sharkey-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 2 + :walk-anim 2 + :turn-anim -1 + :notice-anim 2 + :run-anim 2 + :jump-anim -1 + :jump-land-anim -1 + :victory-anim 2 + :taunt-anim 2 + :die-anim 2 + :neck-joint -1 + :player-look-at-joint 5 + :run-travel-speed (meters 12.0) + :run-rotate-speed (degrees 1999.9999) + :run-acceleration (meters 6.0) + :run-turn-time #x96 + :walk-travel-speed (meters 6.0) + :walk-rotate-speed (degrees 1999.9999) + :walk-acceleration (meters 6.0) + :walk-turn-time #x96 + :attack-shove-back (meters 1.0) + :attack-shove-up (meters 0.5) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 3.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 500.0) + :stop-chase-distance (meters 510.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 10000000000.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 #f + :hover-if-no-ground #f + :use-momentum #t + :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 sharkey +;; Used lq/sq +(defmethod copy-defaults! sharkey ((obj sharkey) (arg0 res-lump)) + (set! (-> obj scale) (res-lump-float arg0 'scale :default 1.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) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core offense) 2) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 (* 6144.0 (-> obj scale))) + ) + (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 *sharkey-sg* '()) + (TODO-RENAME-45 obj *sharkey-nav-enemy-info*) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! + (-> obj water) + (new 'process 'water-control obj 3 12288.0 8192.0 2048.0) + ) + (set! (-> obj water flags) (the-as uint #xc00002)) + (set! (-> obj water height) (res-lump-float (-> obj entity) 'water-height)) + (set! (-> obj water ripple-size) 20480.0) + (set! (-> obj spawn-point quad) (-> obj collide-info trans quad)) + (set! (-> obj collide-info nav-radius) 8192.0) + (set! (-> obj nav nearest-y-threshold) 4096000.0) + (set! (-> obj y-max) (- (-> obj water height) (* 2048.0 (-> obj scale)))) + (set! (-> obj y-min) (+ -49152.0 (-> obj y-max))) + (set! (-> obj collide-info trans y) (-> obj y-min)) + (set! (-> obj anim-speed) 1.0) + (set-vector! + (-> obj collide-info scale) + (-> obj scale) + (-> obj scale) + (-> obj scale) + 1.0 + ) + (set! + (-> obj reaction-time) + (the int (* 300.0 (res-lump-float (-> obj entity) 'delay :default 1.0))) + ) + (set! + (-> obj spawn-distance) + (res-lump-float (-> obj entity) 'distance :default 122880.0) + ) + (set! + (-> obj chase-speed) + (res-lump-float (-> obj entity) 'speed :default 49152.0) + ) + (set! (-> obj y-speed) (-> obj chase-speed)) + (set! (-> obj enable-patrol) #f) + (set! (-> obj sound-id) (new-sound-id)) + (set! (-> obj enemy-info cam-vert) 49152.0) + (go (method-of-object obj nav-enemy-idle)) + (none) + ) + + + + diff --git a/test/decompiler/reference/levels/common/static-screen_REF.gc b/test/decompiler/reference/levels/common/static-screen_REF.gc new file mode 100644 index 0000000000..4942be8d9f --- /dev/null +++ b/test/decompiler/reference/levels/common/static-screen_REF.gc @@ -0,0 +1,422 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type static-screen +(deftype static-screen (process) + ((part sparticle-launch-control 1 :offset-assert 112) + (state-time uint64 :offset-assert 120) + ) + :heap-base #x10 + :method-count-assert 15 + :size-assert #x80 + :flag-assert #xf00100080 + (:methods + (idle (int int symbol) _type_ :state 14) + ) + ) + +;; definition for method 3 of type static-screen +(defmethod inspect static-screen ((obj static-screen)) + (let ((t9-0 (method-of-type process inspect))) + (t9-0 obj) + ) + (format #t "~T~Tpart[1] @ #x~X~%" (-> obj stack)) + (format #t "~T~Tstate-time: ~D~%" (-> obj state-time)) + obj + ) + +;; definition for method 7 of type static-screen +;; INFO: Return type mismatch process vs static-screen. +(defmethod relocate static-screen ((obj static-screen) (arg0 int)) + (let ((v1-0 *kernel-context*)) + (set! (-> v1-0 relocating-process) obj) + (set! (-> v1-0 relocating-min) (the-as int (&-> obj type))) + (set! + (-> v1-0 relocating-max) + (the-as + int + (+ (+ (-> obj allocated-length) -4 (-> process size)) (the-as int obj)) + ) + ) + (set! (-> v1-0 relocating-offset) arg0) + ) + (dotimes (v1-2 1) + (if (nonzero? (-> obj part v1-2)) + (&+! (-> obj part v1-2) arg0) + ) + ) + (the-as static-screen ((method-of-type process relocate) obj arg0)) + ) + +;; definition for method 10 of type static-screen +(defmethod deactivate static-screen ((obj static-screen)) + (dotimes (s5-0 1) + (if (nonzero? (-> obj part s5-0)) + (deactivate (-> obj part s5-0)) + ) + ) + ((method-of-type process deactivate) obj) + (none) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2966) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x5c600000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value #x45970a3d + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x47700000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x1 + :initial-value #x46d00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value -1 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x2204 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2967) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x5c600100) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -979252543 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x47700000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x1 + :initial-value #x46500000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value -1 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x2204 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2968) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x5c600200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -971056873 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x47700000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x1 + :initial-value #x45d00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value -1 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x2204 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 707) + (new 'static 'sparticle-launch-group + :length 3 + :duration #xbb8 + :linger-duration #x5dc + :flags #x4 + :name "group-part-screen1" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (new 'static 'sparticle-group-item :launcher #xb96 :flags #x8) + (new 'static 'sparticle-group-item :launcher #xb97 :flags #x8) + (new 'static 'sparticle-group-item :launcher #xb98 :flags #x8) + ) + :bounds (new 'static 'sphere :w 4096.0) + ) + ) + +;; failed to figure out what this is: +(defstate idle (static-screen) + :virtual #t + :enter + (behavior ((arg0 int) (arg1 int) (arg2 symbol)) + (set! (-> *setting-control* current bg-a) 1.0) + (set! (-> *setting-control* default bg-a) 0.0) + (push-setting! + *setting-control* + self + (the-as (function object object object object object) 'common-page) + 'set + 0.0 + (ash 1 (+ arg0 1)) + ) + (none) + ) + :trans + (behavior () + (hide-hud-quick) + (dummy-11 (-> self part 0) *zero-vector*) + 0 + (none) + ) + :code + (behavior ((arg0 int) (arg1 int) (arg2 symbol)) + (local-vars (v1-6 symbol)) + (set! (-> self state-time) (the-as uint (-> *display* base-frame-counter))) + (until v1-6 + (suspend) + (set! + v1-6 + (or + (and + (> arg1 0) + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + arg1 + ) + ) + (and + arg2 + (>= + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + 300 + ) + (logtest? + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons select start triangle circle x square) + ) + ) + ) + ) + ) + (set! (-> *setting-control* default bg-a) 1.0) + (while + (!= (-> *setting-control* current bg-a) (-> *setting-control* default bg-a)) + (suspend) + ) + (clear-pending-settings-from-process *setting-control* self 'common-page) + (suspend) + 0 + (none) + ) + ) + +;; definition for function static-screen-init-by-other +;; INFO: Return type mismatch int vs none. +(defbehavior + static-screen-init-by-other static-screen + ((arg0 int) (arg1 int) (arg2 int) (arg3 int) (arg4 int) (arg5 symbol)) + (let ((s3-0 (lookup-part-group-by-name "group-part-screen1"))) + (when + (and + s3-0 + (nonzero? s3-0) + (type-type? (-> s3-0 type) sparticle-launch-group) + ) + (set! (-> *part-id-table* 2966 init-specs 0 initial-value) arg1) + (set! (-> *part-id-table* 2967 init-specs 0 initial-value) arg2) + (set! (-> *part-id-table* 2968 init-specs 0 initial-value) arg3) + (set! + (-> self part 0) + (create-launch-control (the-as sparticle-launch-group s3-0) self) + ) + (go-virtual idle arg0 arg4 arg5) + ) + ) + 0 + (none) + ) + +;; definition for function static-screen-spawn +;; Used lq/sq +(defun + static-screen-spawn + ((arg0 int) + (arg1 int) + (arg2 int) + (arg3 int) + (arg4 int) + (arg5 symbol) + (arg6 target) + ) + (local-vars (sv-16 process)) + (set! sv-16 (get-process *default-dead-pool* static-screen #x4000)) + (when sv-16 + (let ((t9-1 (method-of-type static-screen activate))) + (t9-1 + (the-as static-screen sv-16) + arg6 + 'static-screen + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + sv-16 + static-screen-init-by-other + arg0 + arg1 + arg2 + arg3 + arg4 + arg5 + ) + (-> sv-16 ppointer) + ) + ) + + + + diff --git a/test/decompiler/reference/levels/finalboss/final-door_REF.gc b/test/decompiler/reference/levels/finalboss/final-door_REF.gc new file mode 100644 index 0000000000..60258de387 --- /dev/null +++ b/test/decompiler/reference/levels/finalboss/final-door_REF.gc @@ -0,0 +1,826 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type fin-door +(deftype fin-door (process-hidden) + () + :method-count-assert 15 + :size-assert #x70 + :flag-assert #xf00000070 + ) + +;; definition for method 3 of type fin-door +(defmethod inspect fin-door ((obj fin-door)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tname: ~A~%" (-> obj name)) + (format #t "~Tmask: ~D~%" (-> obj mask)) + (format #t "~Tparent: #x~X~%" (-> obj parent)) + (format #t "~Tbrother: #x~X~%" (-> obj brother)) + (format #t "~Tchild: #x~X~%" (-> obj child)) + (format #t "~Tppointer: #x~X~%" (-> obj ppointer)) + (format #t "~Tself: ~A~%" (-> obj self)) + (format #t "~Tpool: ~A~%" (-> obj pool)) + (format #t "~Tstatus: ~A~%" (-> obj status)) + (format #t "~Tpid: ~D~%" (-> obj pid)) + (format #t "~Tmain-thread: ~A~%" (-> obj main-thread)) + (format #t "~Ttop-thread: ~A~%" (-> obj top-thread)) + (format #t "~Tentity: ~A~%" (-> obj entity)) + (format #t "~Tstate: ~A~%" (-> obj state)) + (format #t "~Ttrans-hook: ~A~%" (-> obj trans-hook)) + (format #t "~Tpost-hook: ~A~%" (-> obj post-hook)) + (format #t "~Tevent-hook: ~A~%" (-> obj event-hook)) + (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~Tnext-state: ~A~%" (-> obj next-state)) + (format #t "~Theap-base: #x~X~%" (-> obj heap-base)) + (format #t "~Theap-top: #x~X~%" (-> obj heap-top)) + (format #t "~Theap-cur: #x~X~%" (-> obj heap-cur)) + (format #t "~Tstack-frame-top: ~A~%" (-> obj stack-frame-top)) + (format #t "~Theap: #~%" (&-> obj heap-base)) + (format #t "~Tconnection-list: ~`'connectable`P~%" (-> obj connection-list)) + (format #t "~Tstack[0] @ #x~X~%" (-> obj stack)) + obj + ) + +;; definition of type final-door +(deftype final-door (process-drawable) + () + :heap-base #x40 + :method-count-assert 23 + :size-assert #xb0 + :flag-assert #x17004000b0 + (:methods + (idle () _type_ :state 20) + (dummy-21 (_type_) none 21) + (open () _type_ :state 22) + ) + ) + +;; definition for method 3 of type final-door +(defmethod inspect final-door ((obj final-door)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-2 + (new 'static 'skeleton-group + :art-group-name "power-left" + :bounds + (new 'static 'vector :y 45056.0 :w 49152.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! *power-left-sg* v1-2) + ) + +;; failed to figure out what this is: +(let + ((v1-3 + (new 'static 'skeleton-group + :art-group-name "power-right" + :bounds + (new 'static 'vector :y 45056.0 :w 49152.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! *power-right-sg* v1-3) + ) + +;; failed to figure out what this is: +(let + ((v1-4 + (new 'static 'skeleton-group + :art-group-name "powercellalt" + :bounds (new 'static 'vector :w 8192.0) + :version #x6 + ) + ) + ) + (set! (-> v1-4 jgeo) 0) + (set! (-> v1-4 janim) 2) + (set! (-> v1-4 mgeo 0) (the-as uint 1)) + (set! (-> v1-4 lod-dist 0) 4095996000.0) + (set! *powercellalt-sg* v1-4) + ) + +;; failed to figure out what this is: +(defstate idle (final-door) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'open) + enter-state + (go-virtual open) + ) + ) + ) + ) + :code + (behavior () + (transform-post) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + ) + +;; failed to figure out what this is: +(defstate open (final-door) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'brightness) + (let ((f0-0 (the-as float (-> arg3 param 0))) + (f1-0 (the-as float (-> arg3 param 1))) + ) + (set-vector! (-> self draw color-mult) f0-0 f0-0 f0-0 f0-0) + (let ((v0-0 (-> self draw color-emissive))) + (set! (-> v0-0 x) f1-0) + (set! (-> v0-0 y) f1-0) + (set! (-> v0-0 z) f1-0) + (set! (-> v0-0 w) f1-0) + v0-0 + ) + ) + ) + ) + ) + ) + :code + (behavior () + (case (-> self type) + ((power-left) + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 0.353) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (transform-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) 0.353) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (else + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 frame-group) + (the-as art-joint-anim (-> self draw art-group data 2)) + ) + (set! + (-> a0-4 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 2)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-4 param 1) 0.353) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! + a0-4 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (transform-post) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! + (-> a0-5 param 0) + (the float (+ (-> a0-5 frame-group data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 0.353) + (joint-control-channel-group-eval! + a0-5 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (transform-post) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + ) + +;; definition for method 11 of type final-door +(defmethod copy-defaults! final-door ((obj final-door) (arg0 res-lump)) + (let + ((s4-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let + ((s3-0 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 45056.0 0.0 49152.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) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (dummy-21 obj) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type power-left +(deftype power-left (final-door) + () + :heap-base #x40 + :method-count-assert 23 + :size-assert #xb0 + :flag-assert #x17004000b0 + ) + +;; definition for method 3 of type power-left +(defmethod inspect power-left ((obj power-left)) + (let ((t9-0 (method-of-type final-door inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition of type power-right +(deftype power-right (final-door) + () + :heap-base #x40 + :method-count-assert 23 + :size-assert #xb0 + :flag-assert #x17004000b0 + ) + +;; definition for method 3 of type power-right +(defmethod inspect power-right ((obj power-right)) + (let ((t9-0 (method-of-type final-door inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defstate idle (power-left) + :virtual #t + :code + (behavior () + (ja-post) + (while #t + (if + (and + (and + *target* + (>= + 61440.0 + (vector-vector-distance + (-> self root trans) + (-> *target* control trans) + ) + ) + ) + (and + (zero? (logand (-> *target* state-flags) 256)) + (and + (>= (-> *game-info* fuel) 100.0) + (not + (and + (-> self entity) + (logtest? + (-> self entity extra perm status) + (entity-perm-status complete) + ) + ) + ) + (= + (get-task-status (game-task finalboss-movies)) + (task-status need-reward-speech) + ) + (let ((gp-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> gp-0 from) self) + (set! (-> gp-0 num-params) 3) + (set! (-> gp-0 message) 'change-mode) + (set! (-> gp-0 param 0) (the-as uint 'final-door)) + (set! + (-> gp-0 param 1) + (the-as + uint + (search-process-tree *active-pool* (lambda ((arg0 final-door)) + (= (-> arg0 type) power-right) + ) + ) + ) + ) + (set! + (-> gp-0 param 2) + (the-as + uint + (search-process-tree *active-pool* (lambda ((arg0 final-door)) + (= (-> arg0 type) power-left) + ) + ) + ) + ) + (send-event-function *target* gp-0) + ) + ) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + ) + (suspend) + ) + (none) + ) + ) + +;; definition for method 21 of type power-left +;; INFO: Return type mismatch int vs none. +(defmethod dummy-21 power-left ((obj power-left)) + (dummy-14 obj *power-left-sg* '()) + 0 + (none) + ) + +;; definition for method 21 of type power-right +;; INFO: Return type mismatch int vs none. +(defmethod dummy-21 power-right ((obj power-right)) + (dummy-14 obj *power-right-sg* '()) + 0 + (none) + ) + +;; definition of type powercellalt +(deftype powercellalt (process-drawable) + ((root-override collide-shape-moving :offset 112) + (jump-pos vector :inline :offset-assert 176) + (base vector :inline :offset-assert 192) + (index int32 :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 23 + :size-assert #xd4 + :flag-assert #x17007000d4 + (:methods + (dummy-20 () none 20) + (jump () _type_ :state 21) + (idle () _type_ :state 22) + ) + ) + +;; definition for method 3 of type powercellalt +(defmethod inspect powercellalt ((obj powercellalt)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tjump-pos: ~`vector`P~%" (-> obj jump-pos)) + (format #t "~T~Tbase: ~`vector`P~%" (-> obj base)) + (format #t "~T~Tindex: ~D~%" (-> obj index)) + obj + ) + +;; failed to figure out what this is: +(defstate jump (powercellalt) + :virtual #t + :code + (behavior () + (sound-play-by-name + (static-sound-name "cell-prize") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((gp-1 (new 'stack 'trajectory))) + (set! (-> self base y) (-> self jump-pos y)) + (setup-from-to-duration! + gp-1 + (-> self root-override trans) + (-> self jump-pos) + 300.0 + -2.2755556 + ) + (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-2 + (the + float + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + ) + ) + ) + (eval-position! gp-1 f0-2 (-> self root-override trans)) + ) + (transform-post) + (dummy-11 + (-> self part) + (the-as vector (-> self root-override root-prim prim-core)) + ) + (suspend) + (when (nonzero? (-> self skel)) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) 0.5) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + ) + (set! (-> self root-override trans quad) (-> self jump-pos quad)) + (set! (-> self base quad) (-> self root-override trans quad)) + (transform-post) + (sound-play-by-name + (static-sound-name "land-pcmetal") + (new-sound-id) + 1024 + 3048 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((gp-3 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-3 + (let ((t9-12 (method-of-type part-tracker activate))) + (t9-12 + (the-as part-tracker gp-3) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-3 + part-tracker-init + (-> *part-group-id-table* 4) + -1 + #f + #f + #f + (-> self root-override root-prim prim-core) + ) + (-> gp-3 ppointer) + ) + ) + (go-virtual idle) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (powercellalt) + :virtual #t + :code + (behavior () + (while #t + (vector<-cspace! + (-> self root-override trans) + (-> + (the-as process-drawable (-> self parent 0)) + node-list + data + (-> self index) + ) + ) + (transform-post) + (suspend) + ) + (none) + ) + ) + +;; definition for function powercellalt-init-by-other +;; Used lq/sq +(defbehavior + powercellalt-init-by-other powercellalt + ((arg0 entity) (arg1 vector) (arg2 vector) (arg3 int)) + (set! (-> self entity) arg0) + (let + ((s3-0 + (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s3-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s3-0 reaction) default-collision-reaction) + (set! (-> s3-0 no-reaction) nothing) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s3-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 64)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4915.2) + ) + (dummy-46 s3-0) + (set! (-> s3-0 nav-radius) (* 0.75 (-> s3-0 root-prim local-sphere w))) + (dummy-50 s3-0) + (set! (-> self root-override) s3-0) + ) + (set! (-> self root-override trans quad) (-> arg1 quad)) + (set! (-> self jump-pos quad) (-> arg2 quad)) + (set-vector! (-> self root-override scale) 0.5 0.5 0.5 1.0) + (set! (-> self index) arg3) + (dummy-14 self *powercellalt-sg* '()) + (set! + (-> self part) + (create-launch-control (-> *part-group-id-table* 63) self) + ) + enter-state + (-> self root-override trans) + (-> self jump-pos) + (go-virtual jump) + (none) + ) + +;; failed to figure out what this is: +(defstate target-final-door (target) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + ((-> target-grab event) arg0 arg1 arg2 arg3) + ) + :enter + (behavior ((arg0 basic) (arg1 handle)) + (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) 'change-to-entity-by-name) + (set! (-> a1-1 param 0) (the-as uint "camera-403")) + (send-event-function *camera* a1-1) + ) + (set! (-> self control unknown-surface00) *empty-mods*) + (logior! (-> self state-flags) 272) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (none) + ) + :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 60)) + (send-event-function *camera* a1-0) + ) + (set! (-> self state-flags) (logand -273 (-> self state-flags))) + (target-exit) + (clear-pending-settings-from-process *setting-control* self 'allow-progress) + (none) + ) + :trans + (behavior () + (set-letterbox-frames 5) + (none) + ) + :code + (behavior ((arg0 basic) (arg1 handle)) + (local-vars + (sv-144 process) + (sv-160 vector) + (sv-176 process) + (sv-192 vector) + ) + (let ((a0-2 (get-task-control (game-task finalboss-movies)))) + (save-reminder a0-2 (logior (get-reminder a0-2 0) 2) 0) + ) + (TODO-RENAME-30 + (-> self control) + (new 'static 'vector :x 11368946.0 :y 2215900.2 :z -19405602.0 :w 1.0) + ) + (set-quaternion! + (-> self control) + (the-as quaternion (new 'static 'vector :y -0.8472 :w 0.5312)) + ) + (rot->dir-targ! (-> self control)) + (transform-post) + (ja-channel-push! 1 60) + (let ((s4-1 (-> self skel root-channel 0))) + (set! + (-> s4-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 88)) + ) + (set! (-> s4-1 param 0) (ja-aframe 18.0 0)) + (set! (-> s4-1 param 1) 1.0) + (set! (-> s4-1 frame-num) 0.0) + (joint-control-channel-group! + s4-1 + (the-as art-joint-anim (-> self draw art-group data 88)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((s4-2 (-> self skel root-channel 0))) + (set! (-> s4-2 param 0) (ja-aframe 18.0 0)) + (set! (-> s4-2 param 1) 1.0) + (joint-control-channel-group-eval! + s4-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (let ((s4-3 (-> (handle->process (the-as handle arg0)) entity)) + (s3-1 + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> self node-list data 7) + ) + ) + ) + (dotimes (s2-0 50) + (when (handle->process (the-as handle arg0)) + (let ((s1-0 (handle->process (the-as handle arg0))) + (s0-0 (+ s2-0 4)) + ) + (set! + sv-160 + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> (the-as process-drawable s1-0) node-list data s0-0) + ) + ) + (set! sv-144 (get-process *default-dead-pool* powercellalt #x4000)) + (when sv-144 + (let ((t9-16 (method-of-type powercellalt activate))) + (t9-16 + (the-as powercellalt sv-144) + s1-0 + 'powercellalt + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + sv-144 + powercellalt-init-by-other + s4-3 + s3-1 + sv-160 + s0-0 + ) + (-> sv-144 ppointer) + ) + ) + ) + (let ((s1-1 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s1-1) 30) + (suspend) + ) + ) + (when (handle->process arg1) + (let ((s1-2 (handle->process arg1)) + (s0-1 (+ s2-0 4)) + ) + (set! + sv-192 + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> (the-as process-drawable s1-2) node-list data s0-1) + ) + ) + (set! sv-176 (get-process *default-dead-pool* powercellalt #x4000)) + (when sv-176 + (let ((t9-20 (method-of-type powercellalt activate))) + (t9-20 + (the-as powercellalt sv-176) + s1-2 + 'powercellalt + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + sv-176 + powercellalt-init-by-other + s4-3 + s3-1 + sv-192 + s0-1 + ) + (-> sv-176 ppointer) + ) + ) + ) + (let ((s1-3 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s1-3) 30) + (suspend) + ) + ) + ) + ) + (let ((gp-1 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-1) 600) + (suspend) + ) + ) + (let ((v0-22 (entity-by-name "sage-finalboss-1")) + (a1-26 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-26 from) self) + (set! (-> a1-26 num-params) 0) + (set! (-> a1-26 message) 'play-anim) + (let ((v1-70 v0-22)) + (send-event-function (if v1-70 + (-> v1-70 extra process) + ) + a1-26 + ) + ) + ) + (go target-stance) + (none) + ) + :post + target-no-stick-post + ) + + + + diff --git a/test/decompiler/reference/levels/finalboss/robotboss-h_REF.gc b/test/decompiler/reference/levels/finalboss/robotboss-h_REF.gc new file mode 100644 index 0000000000..e5b1636187 --- /dev/null +++ b/test/decompiler/reference/levels/finalboss/robotboss-h_REF.gc @@ -0,0 +1,202 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type robotboss-dda +(deftype robotboss-dda (structure) + ((blue-bomb-time float :offset-assert 0) + (num-blobs int32 :offset-assert 4) + (green-bomb-time float :offset-assert 8) + (red-shots-min int32 :offset-assert 12) + (red-shots-rnd int32 :offset-assert 16) + (red-shot-time-min float :offset-assert 20) + (red-shot-time-rnd float :offset-assert 24) + (red-bomb-time float :offset-assert 28) + (yellow-shot-time-min float :offset-assert 32) + (yellow-shot-time-rnd float :offset-assert 36) + (yellow-gun-hits int32 :offset-assert 40) + (yellow-bomb-time float :offset-assert 44) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) + +;; definition for method 3 of type robotboss-dda +(defmethod inspect robotboss-dda ((obj robotboss-dda)) + (format #t "[~8x] ~A~%" obj 'robotboss-dda) + (format #t "~Tblue-bomb-time: ~f~%" (-> obj blue-bomb-time)) + (format #t "~Tnum-blobs: ~D~%" (-> obj num-blobs)) + (format #t "~Tgreen-bomb-time: ~f~%" (-> obj green-bomb-time)) + (format #t "~Tred-shots-min: ~D~%" (-> obj red-shots-min)) + (format #t "~Tred-shots-rnd: ~D~%" (-> obj red-shots-rnd)) + (format #t "~Tred-shot-time-min: ~f~%" (-> obj red-shot-time-min)) + (format #t "~Tred-shot-time-rnd: ~f~%" (-> obj red-shot-time-rnd)) + (format #t "~Tred-bomb-time: ~f~%" (-> obj red-bomb-time)) + (format #t "~Tyellow-shot-time-min: ~f~%" (-> obj yellow-shot-time-min)) + (format #t "~Tyellow-shot-time-rnd: ~f~%" (-> obj yellow-shot-time-rnd)) + (format #t "~Tyellow-gun-hits: ~D~%" (-> obj yellow-gun-hits)) + (format #t "~Tyellow-bomb-time: ~f~%" (-> obj yellow-bomb-time)) + obj + ) + +;; definition of type robotboss +(deftype robotboss (process-drawable) + ((alts entity-actor 13 :offset-assert 176) + (desired-loc vector :inline :offset-assert 240) + (old-loc vector :inline :offset-assert 256) + (loc-t float :offset-assert 272) + (loc-t-start seconds :offset-assert 280) + (loc-t-duration seconds :offset-assert 288) + (hits-to-go int32 :offset-assert 296) + (took-hit symbol :offset-assert 300) + (children-spawned int32 :offset-assert 304) + (vulnerable seconds :offset-assert 312) + (till-next-shot seconds :offset-assert 320) + (shot-attractor uint64 :offset-assert 328) + (desired-pool-y float :offset-assert 336) + (particle sparticle-launch-control 7 :offset-assert 340) + (blue-smoke basic :offset-assert 368) + (red-smoke basic :offset-assert 372) + (yellow-smoke basic :offset-assert 376) + (white-eco handle :offset-assert 384) + (des-cam-entity basic :offset-assert 392) + (use-interesting symbol :offset-assert 396) + (ignore-camera symbol :offset-assert 400) + (ambient ambient-control :offset 408) + (yellow-gun joint-mod :offset 424) + (palette-val float :offset 428) + (looping-sound ambient-sound 4 :offset 432) + (dda robotboss-dda :offset 448) + (valid-frames int32 :offset 452) + (skip-cut symbol :offset 456) + (keep-charging symbol :offset 460) + ) + :heap-base #x16 + :method-count-assert 21 + :size-assert #x1d0 + :flag-assert #x15001601d0 + (:methods + (dummy-20 () none 20) + ) + ) + +;; definition for method 3 of type robotboss +(defmethod inspect robotboss ((obj robotboss)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Talts[13] @ #x~X~%" (-> obj alts)) + (format #t "~T~Tdesired-loc: #~%" (-> obj desired-loc)) + (format #t "~T~Told-loc: #~%" (-> obj old-loc)) + (format #t "~T~Tloc-t: ~f~%" (-> obj loc-t)) + (format #t "~T~Tloc-t-start: ~D~%" (-> obj loc-t-start)) + (format #t "~T~Tloc-t-duration: ~D~%" (-> obj loc-t-duration)) + (format #t "~T~Thits-to-go: ~D~%" (-> obj hits-to-go)) + (format #t "~T~Ttook-hit: ~A~%" (-> obj took-hit)) + (format #t "~T~Tchildren-spawned: ~D~%" (-> obj children-spawned)) + (format #t "~T~Tvulnerable: ~D~%" (-> obj vulnerable)) + (format #t "~T~Ttill-next-shot: ~D~%" (-> obj till-next-shot)) + (format #t "~T~Tshot-attractor: ~D~%" (-> obj shot-attractor)) + (format #t "~T~Tdesired-pool-y: ~f~%" (-> obj desired-pool-y)) + (format #t "~T~Tparticle[7] @ #x~X~%" (-> obj particle)) + (format #t "~T~Tblue-smoke: ~A~%" (-> obj blue-smoke)) + (format #t "~T~Tred-smoke: ~A~%" (-> obj red-smoke)) + (format #t "~T~Tyellow-smoke: ~A~%" (-> obj yellow-smoke)) + (format #t "~T~Twhite-eco: ~D~%" (-> obj white-eco)) + (format #t "~T~Tdes-cam-entity: ~A~%" (-> obj des-cam-entity)) + (format #t "~T~Tuse-interesting: ~A~%" (-> obj use-interesting)) + (format #t "~T~Tignore-camera: ~A~%" (-> obj ignore-camera)) + (format #t "~T~Tambient: #~%" (&-> obj ambient)) + (format #t "~T~Tyellow-gun: ~A~%" (-> obj yellow-gun)) + (format #t "~T~Tpalette-val: ~f~%" (-> obj palette-val)) + (format #t "~T~Tlooping-sound[4] @ #x~X~%" (-> obj looping-sound)) + (format #t "~T~Tdda: #~%" (-> obj dda)) + (format #t "~T~Tvalid-frames: ~D~%" (-> obj valid-frames)) + (format #t "~T~Tskip-cut: ~A~%" (-> obj skip-cut)) + (format #t "~T~Tkeep-charging: ~A~%" (-> obj keep-charging)) + obj + ) + +;; definition for method 7 of type robotboss +;; INFO: Return type mismatch process-drawable vs robotboss. +(defmethod relocate robotboss ((obj robotboss) (arg0 int)) + (dotimes (v1-0 7) + (if (nonzero? (-> obj particle v1-0)) + (&+! (-> obj particle v1-0) arg0) + ) + ) + (dotimes (v1-3 4) + (if (nonzero? (-> obj looping-sound v1-3)) + (&+! (-> obj looping-sound v1-3) arg0) + ) + ) + (if (nonzero? (-> obj yellow-gun)) + (&+! (-> obj yellow-gun) arg0) + ) + (the-as robotboss ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; definition for method 10 of type robotboss +(defmethod deactivate robotboss ((obj robotboss)) + (dotimes (s5-0 7) + (let ((a0-1 (-> obj particle s5-0))) + (if (nonzero? a0-1) + (deactivate a0-1) + ) + ) + ) + (dotimes (s5-1 4) + (let ((a0-2 (-> obj looping-sound s5-1))) + (if (nonzero? a0-2) + (stop! a0-2) + ) + ) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for function target-has-all-the-cells? +;; INFO: Return type mismatch basic vs symbol. +(defun target-has-all-the-cells? () + (with-pp + (the-as + symbol + (and *target* (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) pp) + (set! (-> a1-0 num-params) 2) + (set! (-> a1-0 message) 'query) + (set! (-> a1-0 param 0) (the-as uint 'pickup)) + (set! (-> a1-0 param 1) (the-as uint 6)) + (>= + (the int (the-as float (send-event-function *target* a1-0))) + 100 + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(let + ((v0-6 + (new 'static 'skeleton-group + :art-group-name "robotboss" + :bounds + (new 'static 'vector :y -40960.0 :w 327680.0) + :longest-edge (meters 19.9) + :version #x6 + ) + ) + ) + (set! (-> v0-6 jgeo) 0) + (set! (-> v0-6 janim) 2) + (set! (-> v0-6 mgeo 0) (the-as uint 1)) + (set! (-> v0-6 lod-dist 0) 4095996000.0) + (set! *robotboss-sg* v0-6) + ) + + + + diff --git a/test/decompiler/reference/levels/jungle/junglefish_REF.gc b/test/decompiler/reference/levels/jungle/junglefish_REF.gc index 50e5dff933..1bda779a12 100644 --- a/test/decompiler/reference/levels/jungle/junglefish_REF.gc +++ b/test/decompiler/reference/levels/jungle/junglefish_REF.gc @@ -47,7 +47,7 @@ nav-enemy-default-event-handler ;; definition for method 39 of type junglefish ;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-39 junglefish ((obj junglefish)) - ((method-of-object (-> obj water) dummy-10)) + (dummy-10 (-> obj water)) ((the-as (function nav-enemy none) (find-parent-method junglefish 39)) obj) 0 (none) @@ -651,7 +651,3 @@ nav-enemy-default-event-handler (go (method-of-object obj nav-enemy-idle)) (none) ) - - - - diff --git a/test/decompiler/reference/levels/jungleb/aphid_REF.gc b/test/decompiler/reference/levels/jungleb/aphid_REF.gc new file mode 100644 index 0000000000..5f635abf2d --- /dev/null +++ b/test/decompiler/reference/levels/jungleb/aphid_REF.gc @@ -0,0 +1,690 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type aphid +(deftype aphid (nav-enemy) + ((try int32 :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x194 + :flag-assert #x4c01300194 + ) + +;; definition for method 3 of type aphid +(defmethod inspect aphid ((obj aphid)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttry: ~D~%" (-> obj try)) + obj + ) + +;; failed to figure out what this is: +(let + ((v1-1 + (new 'static 'skeleton-group + :art-group-name "aphid-lurker" + :bounds + (new 'static 'vector :y 8192.0 :w 8192.0) + :version #x6 + :shadow 2 + ) + ) + ) + (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! *aphid-sg* v1-1) + ) + +;; definition for function aphid-invulnerable +(defbehavior aphid-invulnerable aphid () + (set! (-> self nav-enemy-flags) (logand -33 (-> self nav-enemy-flags))) + (dummy-54 (-> self collide-info) 2 4) + (none) + ) + +;; definition for function aphid-vulnerable +(defbehavior aphid-vulnerable aphid () + (logior! (-> self nav-enemy-flags) 32) + (dummy-54 (-> self collide-info) 2 1) + (none) + ) + +;; definition for method 43 of type aphid +;; INFO: Return type mismatch none vs object. +;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? +(defmethod dummy-43 aphid ((obj aphid) (arg0 process) (arg1 event-message-block)) + (with-pp + (the-as object (cond + ((or + (logtest? (-> obj nav-enemy-flags) 32) + (= arg0 (ppointer->process (-> obj parent))) + ) + (let ((v1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-5 from) pp) + (set! (-> v1-5 num-params) 1) + (set! (-> v1-5 message) 'get-attack-count) + (set! (-> v1-5 param 0) (the-as uint 1)) + (send-event-function arg0 v1-5) + ) + (logclear! + (-> obj mask) + (process-mask actor-pause attackable) + ) + (go (method-of-object obj nav-enemy-die)) + ) + (else + (dummy-44 obj arg0 arg1) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (aphid) + :virtual #t + :exit + aphid-vulnerable + :code + (behavior () + (let ((gp-0 (cond + ((>= (-> self try) 15) + 450 + ) + ((>= (-> self try) 10) + 300 + ) + ((>= (-> self try) 5) + 150 + ) + (else + 0 + ) + ) + ) + ) + (while #t + (ja-channel-push! 1 15) + (sound-play-by-name + (static-sound-name "aphid-spike-out") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (aphid-invulnerable) + (ja-channel-push! 1 30) + (let ((v1-28 (-> self skel root-channel 0))) + (set! + (-> v1-28 frame-group) + (the-as art-joint-anim (-> self draw art-group data 5)) + ) + ) + (let ((v1-31 (-> self skel root-channel 0))) + (set! (-> v1-31 num-func) num-func-identity) + (set! (-> v1-31 frame-num) 0.0) + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1)) + (s5-1 (-> *display* base-frame-counter)) + (s4-1 (- (the int (nav-enemy-rnd-float-range 900.0 1440.0)) gp-0)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-1) s4-1) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) f30-0) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (aphid-vulnerable) + (ja-channel-push! 1 15) + (sound-play-by-name + (static-sound-name "aphid-spike-in") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (let ((a0-17 (-> self skel root-channel 0))) + (set! + (-> a0-17 frame-group) + (the-as art-joint-anim (-> self draw art-group data 6)) + ) + (set! (-> a0-17 param 0) 0.0) + (set! (-> a0-17 param 1) 1.0) + (set! + (-> a0-17 frame-num) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 6)) + data + 0 + length + ) + -1 + ) + ) + ) + (joint-control-channel-group! + a0-17 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! (-> a0-18 param 0) 0.0) + (set! (-> a0-18 param 1) 1.0) + (joint-control-channel-group-eval! + a0-18 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (ja-channel-push! 1 30) + (let ((v1-63 (-> self skel root-channel 0))) + (set! + (-> v1-63 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-66 (-> self skel root-channel 0))) + (set! (-> v1-66 num-func) num-func-identity) + (set! (-> v1-66 frame-num) 0.0) + ) + (let ((f30-1 (nav-enemy-rnd-float-range 0.9 1.1)) + (s5-3 (-> *display* base-frame-counter)) + (s4-3 (+ (the int (nav-enemy-rnd-float-range 660.0 900.0)) gp-0)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-3) s4-3) + (suspend) + (let ((a0-29 (-> self skel root-channel 0))) + (set! (-> a0-29 param 0) f30-1) + (joint-control-channel-group-eval! + a0-29 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (aphid) + :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 ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) f30-0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data 10)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! + (-> a0-4 param 0) + (the float (+ (-> a0-4 frame-group data 0 length) -1)) + ) + (set! (-> a0-4 param 1) f30-0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + (while #t + (when (not (nav-enemy-facing-player? 2730.6667)) + (logior! (-> self nav-enemy-flags) 16) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) 1.0) + (joint-control-channel-group! + a0-7 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 60) + (let ((v1-35 (-> self skel root-channel 0))) + (set! + (-> v1-35 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + ) + (let ((v1-38 (-> self skel root-channel 0))) + (set! (-> v1-38 num-func) num-func-identity) + (set! (-> v1-38 frame-num) 0.0) + ) + (until (nav-enemy-facing-player? 1820.4445) + (ja-blend-eval) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) 0.75) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + ) + (when (nav-enemy-rnd-percent? 0.3) + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 10) + ) + ) + (ja-channel-push! 1 30) + ) + (let ((a0-22 (-> self skel root-channel 0))) + (set! + (-> a0-22 frame-group) + (the-as art-joint-anim (-> self draw art-group data 10)) + ) + (set! + (-> a0-22 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 10)) + 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 10)) + 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! + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-give-up (aphid) + :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 7)) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + 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 7)) + 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 8)) + ) + (set! + (-> a0-12 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 8)) + 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 8)) + 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) + ) + ) + +;; definition for symbol *aphid-nav-enemy-info*, type nav-enemy-info +(define + *aphid-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 3 + :walk-anim 4 + :turn-anim 9 + :notice-anim 3 + :run-anim 4 + :jump-anim -1 + :jump-land-anim -1 + :victory-anim 10 + :taunt-anim 10 + :die-anim 11 + :neck-joint 10 + :player-look-at-joint 5 + :run-travel-speed (meters 5.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 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.25) + :shadow-min-y (meters -0.25) + :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 #t + :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 aphid +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-47 aphid ((obj aphid)) + (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) 1) + (set-vector! (-> s4-0 local-sphere) 0.0 4096.0 0.0 4096.0) + ) + (dummy-46 s5-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 aphid +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-48 aphid ((obj aphid)) + (dummy-14 obj *aphid-sg* '()) + (TODO-RENAME-45 obj *aphid-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 function aphid-init-by-other +;; Used lq/sq +(defbehavior + aphid-init-by-other aphid + ((arg0 nav-enemy) (arg1 vector) (arg2 vector)) + (TODO-RENAME-47 self) + (logior! (-> self mask) (process-mask actor-pause)) + (set! (-> self collide-info trans quad) (-> arg1 quad)) + (set! (-> self event-param-point quad) (-> arg2 quad)) + (let ((s3-1 (vector-! (new 'stack-no-clear 'vector) arg2 arg1))) + (set! (-> s3-1 y) 0.0) + (vector-normalize! s3-1 1.0) + (forward-up->quaternion (-> self collide-info quat) s3-1 *up-vector*) + ) + (vector-identity! (-> self collide-info scale)) + (set! (-> self entity) (-> arg0 entity)) + (TODO-RENAME-48 self) + (set! (-> self nav-enemy-flags) (logand -4097 (-> self nav-enemy-flags))) + (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) 'try) + (set! + (-> self try) + (the-as int (send-event-function (ppointer->process (-> self parent)) a1-3)) + ) + ) + (go-virtual nav-enemy-chase) + (none) + ) + + + + diff --git a/test/offline/offline_test_main.cpp b/test/offline/offline_test_main.cpp index f1a7791413..76e7ab7b54 100644 --- a/test/offline/offline_test_main.cpp +++ b/test/offline/offline_test_main.cpp @@ -289,7 +289,7 @@ class OfflineDecompilation : public ::testing::Test { std::vector dgos = {"CGO/KERNEL.CGO", "CGO/ENGINE.CGO", "CGO/GAME.CGO", "DGO/BEA.DGO", "CGO/L1.CGO", "DGO/INT.DGO", - "DGO/VI1.DGO"}; + "DGO/VI1.DGO", "DGO/DEM.DGO"}; std::vector dgo_paths; if (g_iso_data_path.empty()) { for (auto& x : dgos) {