diff --git a/Taskfile.yml b/Taskfile.yml index 0deed05a77..15c5f9d8b5 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -56,4 +56,8 @@ tasks: ignore_error: true - python ./scripts/update_decomp_reference.py ./failures ./test/decompiler/reference/ - task: offline-tests - + find-label-types: + cmds: + - python ./scripts/next-decomp-file.py --file "{{.FILE}}" + - task: decomp + - python ./scripts/find-label-types.py --file "{{.FILE}}" diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 16c174f8b8..5521e41dc8 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -640,15 +640,18 @@ :bitfield #t :type uint32 (display-marks 0) + (bit0 0) ;; TODO - nav-enemy::45 (bit1 1) (bit2 2) - (bit3 3) + (bit3 3) ;; TODO - nav-enemy::45 (bit4 4) - (bit5 5) - (bit6 6) - (bit7 7) + (bit5 5) ;; TODO - nav-enemy::45 + (bit6 6) ;; TODO - nav-enemy::45 + (bit7 7) ;; TODO - nav-enemy::45 (bit8 8) + (bit10 10) ;; TODO - nav-enemy::nav-enemy-patrol-post (bit13 13) + (bit19 19) ;; TODO - nav-enemy::lambda::17 ) (defenum task-status @@ -9707,7 +9710,7 @@ :flag-assert #xc00000028 (:methods (new (symbol type process pickup-type float) _type_ 0) - (dummy-9 () none 9) + (TODO-RENAME-9 (_type_ symbol process-tree fact-info int) uint 9) ;; See nav-enemy::process-drawable-death-event-handler (reset! (_type_ symbol) none 10) (dummy-11 (_type_) float 11) ) @@ -10797,30 +10800,11 @@ :flag-assert #x1c0000004c (:methods (new (symbol type basic uint) _type_ 0) - (dummy-9 () none 9) - (dummy-10 () none 10) - (dummy-11 () none 11) - (dummy-12 () none 12) - (dummy-13 () none 13) - (dummy-14 () none 14) - (dummy-15 () none 15) - (dummy-16 () none 16) - (dummy-17 () none 17) - (dummy-18 () none 18) - (dummy-19 () none 19) - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) - (dummy-23 () none 23) - (dummy-24 () none 24) - (dummy-25 () none 25) - (dummy-26 () none 26) - (dummy-27 () none 27) ) ) (deftype collide-shape-prim-mesh (collide-shape-prim) - ((mesh basic :offset-assert 72) + ((mesh collide-mesh :offset-assert 72) (mesh-id int32 :offset-assert 76) (mesh-cache-id uint64 :offset-assert 80) (mesh-cache-tris uint32 :offset-assert 88) @@ -10830,25 +10814,6 @@ :flag-assert #x1d0000005c (:methods (new (symbol type basic uint uint) _type_ 0) - (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) ) ) @@ -10863,25 +10828,6 @@ :flag-assert #x1e00000054 (:methods (new (symbol type basic uint int) _type_ 0) - (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) ) @@ -10895,8 +10841,8 @@ (pat-ignore-mask pat-surface :offset-assert 148) (event-self basic :offset-assert 152) (event-other basic :offset-assert 156) - (root-prim collide-shape-prim :offset-assert 160) - (riders basic :offset-assert 164) + (root-prim collide-shape-prim :offset-assert 160) + (riders collide-sticky-rider-group :offset-assert 164) (backup-collide-as uint64 :offset-assert 168) (backup-collide-with uint64 :offset-assert 176) ) @@ -10910,7 +10856,7 @@ (dummy-30 () none 30) (dummy-31 () none 31) (dummy-32 () none 32) - (dummy-33 () none 33) + (dummy-33 (_type_ vector uint) none 33) (dummy-34 () none 34) (dummy-35 (_type_) none 35) (dummy-36 () none 36) @@ -10931,7 +10877,7 @@ (dummy-51 () none 51) (dummy-52 () none 52) (dummy-53 () none 53) - (dummy-54 () none 54) + (dummy-54 (_type_ int int) none 54) (dummy-55 () none 55) ) ) @@ -10968,12 +10914,12 @@ :flag-assert #x41000001bc (:methods (dummy-56 () none 56) - (dummy-57 () none 57) - (dummy-58 () none 58) - (dummy-59 () none 59) - (dummy-60 () none 60) + (dummy-57 (_type_ vector) none 57) + (dummy-58 (_type_ vector) none 58) + (dummy-59 (_type_ vector uint float symbol symbol symbol) none 59) + (dummy-60 (_type_ float float symbol uint) none 60) (dummy-61 () none 61) - (dummy-62 () none 62) + (dummy-62 (_type_ vector float) vector 62) (dummy-63 () none 63) (dummy-64 () none 64) ) @@ -11048,8 +10994,8 @@ ;; - Types (deftype touching-prim (structure) - ((cprim basic :offset-assert 0) - (has-tri? basic :offset-assert 4) + ((cprim collide-shape-prim :offset-assert 0) ;; a big guess, there's a few that meet this name + (has-tri? symbol :offset-assert 4) (tri collide-tri-result :inline :offset-assert 16) ) :method-count-assert 9 @@ -11060,7 +11006,7 @@ (deftype touching-prims-entry (structure) ((next touching-prims-entry :offset-assert 0) (prev touching-prims-entry :offset-assert 4) - (allocated? basic :offset-assert 8) + (allocated? symbol :offset-assert 8) (u float :offset-assert 12) (prim1 touching-prim :inline :offset-assert 16) (prim2 touching-prim :inline :offset-assert 128) @@ -11093,8 +11039,8 @@ ) (deftype touching-shapes-entry (structure) - ((cshape1 basic :offset-assert 0) - (cshape2 basic :offset-assert 4) + ((cshape1 collide-shape :offset-assert 0) + (cshape2 collide-shape :offset-assert 4) (resolve-u int8 :offset-assert 8) (head touching-prims-entry :offset-assert 12) ) @@ -11106,7 +11052,7 @@ (dummy-9 () none 9) (dummy-10 () none 10) (dummy-11 () none 11) - (dummy-12 () none 12) + (prims-touching? (_type_ collide-shape-moving uint) touching-prims-entry 12) ; this one! (dummy-13 () none 13) (dummy-14 () none 14) (dummy-15 () none 15) @@ -14466,24 +14412,24 @@ (new (symbol type collide-shape int float) _type_) (dummy-9 () none 9) (point-in-bounds? (_type_ vector) symbol 10) - (dummy-11 () none 11) + (dummy-11 (_type_ vector) none 11) (dummy-12 () none 12) (dummy-13 () none 13) (dummy-14 () none 14) (set-target-pos! (_type_ vector) none 15) - (dummy-16 () none 16) + (dummy-16 (_type_ vector) symbol 16) ; see - nav-enemy-test-point-in-nav-mesh? (dummy-17 () none 17) (dummy-18 () none 18) - (dummy-19 () none 19) + (dummy-19 (_type_ vector collide-shape-moving vector float) 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-24 (_type_ float symbol) none 24) + (dummy-25 (_type_ vector float) symbol 25) ; see - nav-enemy-test-point-near-nav-mesh? + (dummy-26 (_type_) none 26) (dummy-27 () none 27) - (dummy-28 () none 28) + (dummy-28 (_type_ int) none 28) (should-display? (_type_) symbol 29) (dummy-30 () none 30) (dummy-31 () none 31) @@ -20133,7 +20079,7 @@ (define-extern vent-standard-event-handler function) (define-extern ecovalve-init-by-other function) -(define-extern birth-pickup-at-point function) +(define-extern birth-pickup-at-point (function vector int float symbol process symbol basic)) ;; TODO - not confirmed at all! (the symbols are wrong) (define-extern fuel-cell-pick-anim function) (define-extern othercam-init-by-other function) (define-extern fuel-cell-animate function) @@ -20244,7 +20190,7 @@ ;; - Functions (define-extern eco-blue-glow function) -(define-extern cloud-track function) +(define-extern cloud-track (function none)) ;; ---------------------- @@ -20255,15 +20201,15 @@ ;; - Types -; (deftype crate-bank (basic) -; ((COLLIDE_YOFF float :offset-assert 4) -; (COLLIDE_RADIUS float :offset-assert 8) -; (DARKECO_EXPLODE_RADIUS float :offset-assert 12) -; ) -; :method-count-assert 9 -; :size-assert #x10 -; :flag-assert #x900000010 -; ) +(deftype crate-bank (basic) + ((COLLIDE_YOFF float :offset-assert 4) + (COLLIDE_RADIUS float :offset-assert 8) + (DARKECO_EXPLODE_RADIUS float :offset-assert 12) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) (deftype crate (process-drawable) ((smush smush-control :inline :offset-assert 176) @@ -20294,134 +20240,38 @@ ) ) -; (deftype barrel (crate) -; () -; :method-count-assert 30 -; :size-assert #x100 -; :heap-base #x90 -; :flag-assert #x1e00900100 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; ) -; ) +(deftype barrel (crate) + () + :method-count-assert 30 + :heap-base #x90 + :size-assert #x100 + :flag-assert #x1e00900100 + ) -; (deftype bucket (crate) -; () -; :method-count-assert 30 -; :size-assert #x100 -; :heap-base #x90 -; :flag-assert #x1e00900100 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; ) -; ) +(deftype bucket (crate) + () + :method-count-assert 30 + :heap-base #x90 + :size-assert #x100 + :flag-assert #x1e00900100 + ) -; (deftype crate-buzzer (crate) -; () -; :method-count-assert 30 -; :size-assert #x100 -; :heap-base #x90 -; :flag-assert #x1e00900100 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; ) -; ) +(deftype crate-buzzer (crate) + () + :method-count-assert 30 + :heap-base #x90 + :size-assert #x100 + :flag-assert #x1e00900100 + ) -; (deftype pickup-spawner (crate) -; ((blocker basic :offset-assert 256) -; ) -; :method-count-assert 30 -; :size-assert #x104 -; :heap-base #xa0 -; :flag-assert #x1e00a00104 -; ;; inherited inspect of crate -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; ) -; ) +(deftype pickup-spawner (crate) + ((blocker basic :offset-assert 256) + ) + :method-count-assert 30 + :heap-base #xa0 + :size-assert #x104 + :flag-assert #x1e00a00104 + ) ;; - Functions @@ -22136,18 +21986,18 @@ (shadow-max-y meters :offset-assert 168) (shadow-min-y meters :offset-assert 172) (shadow-locus-dist meters :offset-assert 176) - (use-align basic :offset-assert 180) - (draw-shadow basic :offset-assert 184) - (move-to-ground basic :offset-assert 188) - (hover-if-no-ground basic :offset-assert 192) - (use-momentum basic :offset-assert 196) - (use-flee basic :offset-assert 200) - (use-proximity-notice basic :offset-assert 204) - (use-jump-blocked basic :offset-assert 208) - (use-jump-patrol basic :offset-assert 212) + (use-align symbol :offset-assert 180) + (draw-shadow symbol :offset-assert 184) + (move-to-ground symbol :offset-assert 188) + (hover-if-no-ground symbol :offset-assert 192) + (use-momentum symbol :offset-assert 196) + (use-flee symbol :offset-assert 200) + (use-proximity-notice symbol :offset-assert 204) + (use-jump-blocked symbol :offset-assert 208) + (use-jump-patrol symbol :offset-assert 212) (gnd-collide-with uint64 :offset-assert 216) - (debug-draw-neck basic :offset-assert 224) - (debug-draw-jump basic :offset-assert 228) + (debug-draw-neck symbol :offset-assert 224) + (debug-draw-jump symbol :offset-assert 228) ) :method-count-assert 9 :size-assert #xe8 @@ -22155,7 +22005,9 @@ ) (deftype nav-enemy (process-drawable) - ((hit-from-dir vector :inline :offset-assert 176) + ((collide-info collide-shape-moving :score 100 :offset 112) + (enemy-info fact-info-enemy :score 100 :offset 144) + (hit-from-dir vector :inline :offset-assert 176) (event-param-point vector :inline :offset-assert 192) (frustration-point vector :inline :offset-assert 208) (jump-dest vector :inline :offset-assert 224) @@ -22169,7 +22021,7 @@ (turn-time uint64 :offset-assert 312) (frustration-time uint64 :offset-assert 320) (speed-scale float :offset-assert 328) - (neck basic :offset-assert 332) + (neck joint-mod :offset-assert 332) ; this is what `neck` is on the pelican (reaction-time uint64 :offset-assert 336) (notice-time uint64 :offset-assert 344) (state-timeout uint64 :offset-assert 352) @@ -22178,7 +22030,7 @@ (nav-enemy-flags uint32 :offset-assert 376) (incomming-attack-id uint64 :offset-assert 384) (jump-return-state basic :offset-assert 392) - (rand-gen basic :offset-assert 396) + (rand-gen random-generator :offset-assert 396) ) :heap-base #x120 :method-count-assert 76 @@ -22200,48 +22052,48 @@ (nav-enemy-stare () none 31) ;; state (nav-enemy-stop-chase () none 32) ;; state (nav-enemy-victory () none 33) ;; state - (dummy-34 () none 34) - (dummy-35 () none 35) - (dummy-36 () none 36) - (dummy-37 () none 37) - (dummy-38 () none 38) - (dummy-39 () none 39) - (dummy-40 () none 40) - (dummy-41 () none 41) - (dummy-42 () none 42) - (dummy-43 () none 43) - (dummy-44 () none 44) - (dummy-45 () none 45) - (dummy-46 () none 46) - (dummy-47 () none 47) - (dummy-48 () none 48) - (dummy-49 () none 49) - (dummy-50 () none 50) - (dummy-51 () none 51) - (dummy-52 () none 52) - (dummy-53 () none 53) - (dummy-54 () none 54) - (dummy-55 () none 55) - (dummy-56 () none 56) - (dummy-57 () none 57) - (dummy-58 () none 58) - (dummy-59 () none 59) - (dummy-60 () none 60) - (dummy-61 () none 61) - (dummy-62 () none 62) - (dummy-63 () none 63) - (dummy-64 () none 64) - (dummy-65 () none 65) - (dummy-66 () none 66) - (dummy-67 () none 67) - (dummy-68 () none 68) - (dummy-69 () none 69) - (dummy-70 () none 70) - (dummy-71 () none 71) - (dummy-72 () none 72) - (dummy-73 () none 73) - (dummy-74 () none 74) - (dummy-75 () none 75) + (dummy-34 (_type_) none 34) + (dummy-35 (_type_) none 35) + (dummy-36 (_type_) none 36) + (TODO-RENAME-37 (_type_) none 37) + (TODO-RENAME-38 (_type_) none 38) + (TODO-RENAME-39 (_type_) none 39) + (dummy-40 (_type_) none 40) + (dummy-41 (_type_) none 41) + (TODO-RENAME-42 (_type_) int 42) + (dummy-43 (_type_ process event-message-block) object 43) + (dummy-44 (_type_ process event-message-block) object 44) + (TODO-RENAME-45 (_type_ nav-enemy-info) none 45) + (TODO-RENAME-46 (_type_ float) basic 46) + (TODO-RENAME-47 (_type_) none 47) ;; - Stubbed + (TODO-RENAME-48 (_type_) none 48) ;; - Stubbed + (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) + (TODO-RENAME-50 (_type_ vector) symbol 50) + (dummy-51 (_type_) none 51) + (dummy-52 (_type_) none 52) + (dummy-53 (_type_) none 53) + (dummy-54 (_type_) none 54) + (dummy-55 (_type_) none 55) + (dummy-56 (_type_) none 56) + (dummy-57 (_type_) none 57) + (dummy-58 (_type_) none 58) + (TODO-RENAME-59 (_type_) none 59) + (dummy-60 (_type_) none 60) + (dummy-61 (_type_) none 61) + (dummy-62 (_type_) none 62) + (dummy-63 (_type_) none 63) + (dummy-64 (_type_) none 64) + (dummy-65 (_type_) none 65) + (dummy-66 (_type_) none 66) + (dummy-67 (_type_) symbol 67) + (dummy-68 (_type_) none 68) + (dummy-69 (_type_) none 69) + (dummy-70 (_type_) none 70) + (dummy-71 (_type_) none 71) + (dummy-72 (_type_ process event-message-block) object 72) ;; TODO - args unknown, 3rd arg contains a touching-shapes-entry offset 16/20 + (TODO-RENAME-73 (_type_ process) symbol 73) + (dummy-74 (_type_) none 74) + (dummy-75 (_type_) none 75) ) ) @@ -22254,57 +22106,57 @@ ;; - Functions -(define-extern nav-enemy-rnd-int-range function) -(define-extern nav-enemy-initialize-jump function) -(define-extern nav-enemy-neck-control-look-at function) -(define-extern nav-enemy-facing-point? function) -(define-extern nav-enemy-turn-to-face-point function) -(define-extern nav-enemy-execute-jump function) -(define-extern nav-enemy-jump-land-anim function) -(define-extern nav-enemy-rnd-float-range function) -(define-extern nav-enemy-common-post function) -(define-extern nav-enemy-execute-custom-jump function) -(define-extern nav-enemy-initialize-custom-jump function) -(define-extern nav-enemy-simple-post function) -(define-extern nav-enemy-fall-and-play-death-anim function) -(define-extern nav-enemy-neck-control-inactive function) -(define-extern nav-enemy-frustrated? function) -(define-extern nav-enemy-player-at-frustration-point? function) -(define-extern nav-enemy-reset-frustration function) -(define-extern nav-enemy-rnd-go-idle? function) -(define-extern nav-enemy-notice-player? function) -(define-extern nav-enemy-turn-to-face-dir function) -(define-extern nav-enemy-facing-direction? function) -(define-extern nav-enemy-test-point-near-nav-mesh? function) -(define-extern nav-enemy-travel-post function) -(define-extern nav-enemy-get-new-patrol-point function) -(define-extern nav-enemy-set-hit-from-direction function) -(define-extern nav-enemy-send-attack function) -(define-extern nav-enemy-rnd-int-count function) -(define-extern nav-enemy-rnd-float function) -(define-extern nav-enemy-rnd-percent? function) -(define-extern nav-enemy-default-event-handler function) -(define-extern nav-enemy-jump-event-handler function) -(define-extern process-drawable-death-event-handler function) -(define-extern nav-enemy-patrol-post function) -(define-extern nav-enemy-chase-post function) -(define-extern nav-enemy-flee-post function) -(define-extern nav-enemy-face-player-post function) -(define-extern nav-enemy-falling-post function) -(define-extern nav-enemy-death-post function) -(define-extern nav-enemy-player-vulnerable? function) -(define-extern nav-enemy-facing-player? function) -(define-extern nav-enemy-test-nav-mesh-intersection-xz? function) -(define-extern nav-enemy-test-point-in-nav-mesh? function) -(define-extern nav-enemy-set-base-collide-sphere-collide-with function) -(define-extern ja-group-index? function) -(define-extern nav-enemy-jump-post function) -(define-extern nav-enemy-jump-land-post function) -(define-extern nav-enemy-init-by-other function) +(define-extern nav-enemy-rnd-int-range (function int int int)) +(define-extern nav-enemy-initialize-jump (function vector none :behavior nav-enemy)) +(define-extern nav-enemy-neck-control-look-at (function none :behavior nav-enemy)) +(define-extern nav-enemy-facing-point? (function vector float symbol :behavior nav-enemy)) +(define-extern nav-enemy-turn-to-face-point (function vector float none :behavior nav-enemy)) +(define-extern nav-enemy-execute-jump (function none :behavior nav-enemy)) +(define-extern nav-enemy-jump-land-anim (function none :behavior nav-enemy)) ;; TODO +(define-extern nav-enemy-rnd-float-range (function float float float :behavior nav-enemy)) +(define-extern nav-enemy-common-post (function none :behavior nav-enemy)) ;; TODO not confirmed +(define-extern nav-enemy-execute-custom-jump (function int float float none :behavior nav-enemy)) +(define-extern nav-enemy-initialize-custom-jump (function vector symbol float float float none :behavior nav-enemy)) +(define-extern nav-enemy-simple-post (function none :behavior nav-enemy)) ;; TODO not confirmed +(define-extern nav-enemy-fall-and-play-death-anim (function art-joint-anim float float float int none :behavior nav-enemy)) ;; second arg is whatever is passed to align-control::11 +(define-extern nav-enemy-neck-control-inactive (function none :behavior nav-enemy)) +(define-extern nav-enemy-frustrated? (function symbol :behavior nav-enemy)) +(define-extern nav-enemy-player-at-frustration-point? (function symbol :behavior nav-enemy)) +(define-extern nav-enemy-reset-frustration (function none :behavior nav-enemy)) +(define-extern nav-enemy-rnd-go-idle? (function float symbol)) +(define-extern nav-enemy-notice-player? (function symbol :behavior nav-enemy)) +(define-extern nav-enemy-turn-to-face-dir (function vector float none :behavior nav-enemy)) +(define-extern nav-enemy-facing-direction? (function vector float symbol :behavior nav-enemy)) +(define-extern nav-enemy-test-point-near-nav-mesh? (function vector symbol :behavior nav-enemy)) +(define-extern nav-enemy-travel-post (function none :behavior nav-enemy)) +(define-extern nav-enemy-get-new-patrol-point (function int :behavior nav-enemy)) +(define-extern nav-enemy-set-hit-from-direction (function process none :behavior nav-enemy)) +(define-extern nav-enemy-send-attack (function process touching-shapes-entry symbol object :behavior nav-enemy)) +(define-extern nav-enemy-rnd-int-count (function int int)) +(define-extern nav-enemy-rnd-float (function float)) +(define-extern nav-enemy-rnd-percent? (function float symbol)) +(define-extern nav-enemy-default-event-handler (function process int symbol event-message-block object :behavior nav-enemy)) ;; TODO - last arg is definitely a vector...but also not? +(define-extern nav-enemy-jump-event-handler (function process int symbol event-message-block object :behavior nav-enemy)) +(define-extern process-drawable-death-event-handler (function process int symbol event-message-block uint :behavior process-drawable)) ;; First two args are unused +(define-extern nav-enemy-patrol-post (function none :behavior nav-enemy)) +(define-extern nav-enemy-chase-post (function none :behavior nav-enemy)) +(define-extern nav-enemy-flee-post (function none :behavior nav-enemy)) +(define-extern nav-enemy-face-player-post (function none :behavior nav-enemy)) +(define-extern nav-enemy-falling-post (function none :behavior nav-enemy)) +(define-extern nav-enemy-death-post (function none :behavior nav-enemy)) +(define-extern nav-enemy-player-vulnerable? (function symbol)) +(define-extern nav-enemy-facing-player? (function float symbol)) +(define-extern nav-enemy-test-nav-mesh-intersection-xz? (function vector symbol :behavior nav-enemy)) ;; TODO - vector is a guess, check nav-control::16 +(define-extern nav-enemy-test-point-in-nav-mesh? (function vector symbol :behavior nav-enemy)) ;; TODO - vector is a guess, check nav-control::16 +(define-extern nav-enemy-set-base-collide-sphere-collide-with (function uint none :behavior nav-enemy)) ;; unused +(define-extern ja-group-index? (function int symbol :behavior nav-enemy)) +(define-extern nav-enemy-jump-post (function none :behavior nav-enemy)) +(define-extern nav-enemy-jump-land-post (function none :behavior nav-enemy)) +(define-extern nav-enemy-init-by-other (function nav-enemy vector vector nav-enemy :behavior nav-enemy)) ;; - Unknowns -;;(define-extern *nav-enemy-dummy-shadow-control* object) ;; unknown type +(define-extern *nav-enemy-dummy-shadow-control* shadow-control) ;; unknown type ;; ---------------------- @@ -23938,50 +23790,36 @@ ; :flag-assert #x900000050 ; ) -; (deftype pelican (process-drawable) -; ((query gui-query :inline :offset-assert 176) -; (fuel-cell uint64 :offset-assert 208) -; (cam-tracker uint64 :offset-assert 216) -; (path-data UNKNOWN 8 :offset-assert 224) -; (path-circle basic :offset-assert 224) -; (path-dive0 basic :offset-assert 228) -; (path-to-nest0 basic :offset-assert 232) -; (path-from-nest0 basic :offset-assert 236) -; (path-spit0 basic :offset-assert 240) -; (path-dive1 basic :offset-assert 244) -; (path-to-nest1 basic :offset-assert 248) -; (path-to-nest2 basic :offset-assert 252) -; (path-cache basic :offset-assert 256) -; (time-cache uint64 :offset-assert 264) -; (path-pos float :offset-assert 272) -; (path-speed float :offset-assert 276) -; (path-max float :offset-assert 280) -; (path-vector vector :inline :offset-assert 288) -; (state-vector vector :inline :offset-assert 304) -; (state-vector1 vector :inline :offset-assert 320) -; (state-float UNKNOWN 2 :offset-assert 336) -; (state-object basic :offset-assert 344) -; (neck basic :offset-assert 348) -; ) -; :method-count-assert 20 -; :size-assert #x160 -; :heap-base #xf0 -; :flag-assert #x1400f00160 -; ;; inherited inspect of process-drawablefield ~Tstate-object is a basic loaded with a signed load -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype pelican (process-drawable) + ((query gui-query :inline :offset-assert 176) + (fuel-cell uint64 :offset-assert 208) + (cam-tracker uint64 :offset-assert 216) + (path-data curve-control 8 :offset-assert 224) + (path-circle curve-control :offset 224) + (path-dive0 curve-control :offset 228) + (path-to-nest0 curve-control :offset 232) + (path-from-nest0 curve-control :offset 236) + (path-spit0 curve-control :offset 240) + (path-dive1 curve-control :offset 244) + (path-to-nest1 curve-control :offset 248) + (path-to-nest2 curve-control :offset 252) + (path-cache basic :offset-assert 256) + (time-cache uint64 :offset-assert 264) + (path-pos float :offset-assert 272) + (path-speed float :offset-assert 276) + (path-max float :offset-assert 280) + (path-vector vector :inline :offset-assert 288) + (state-vector vector :inline :offset-assert 304) + (state-vector1 vector :inline :offset-assert 320) + (state-float float 2 :offset-assert 336) + (state-object basic :offset-assert 344) + (neck joint-mod :offset-assert 348) + ) + :method-count-assert 20 + :heap-base #xf0 + :size-assert #x160 + :flag-assert #x1400f00160 + ) ;; - Functions @@ -24013,35 +23851,24 @@ ;; - Types -; (deftype lurkerworm (process-drawable) -; ((twister basic :offset-assert 176) -; (head-tilt float :offset-assert 180) -; (strike-count int32 :offset-assert 184) -; (angle float :offset-assert 188) -; (vulnerable basic :offset-assert 192) -; (part2 basic :offset-assert 196) -; ) -; :method-count-assert 22 -; :size-assert #xc8 -; :heap-base #x60 -; :flag-assert #x16006000c8 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype lurkerworm (process-drawable) + ((twister basic :offset-assert 176) + (head-tilt float :offset-assert 180) + (strike-count int32 :offset-assert 184) + (angle float :offset-assert 188) + (vulnerable basic :offset-assert 192) + (part2 basic :offset-assert 196) + ) + :method-count-assert 22 + :heap-base #x60 + :size-assert #xc8 + :flag-assert #x16006000c8 + ;; inherited inspect of process-drawable + (:methods + (dummy-20 () none 20) + (dummy-21 () none 21) + ) + ) ;; - Functions @@ -24070,84 +23897,14 @@ ;; - Types -; (deftype lurkercrab (nav-enemy) -; ((orient basic :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 lurkercrab (nav-enemy) + ((orient basic :offset-assert 400) + ) + :method-count-assert 76 + :heap-base #x130 + :size-assert #x194 + :flag-assert #x4c01300194 + ) ;; - Functions @@ -24169,83 +23926,13 @@ ;; - Types -; (deftype lurkerpuppy (nav-enemy) -; () -; :method-count-assert 76 -; :size-assert #x190 -; :heap-base #x120 -; :flag-assert #x4c01200190 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype lurkerpuppy (nav-enemy) + () + :method-count-assert 76 + :heap-base #x120 + :size-assert #x190 + :flag-assert #x4c01200190 + ) ;; - Unknowns diff --git a/decompiler/config/jak1_ntsc_black_label.jsonc b/decompiler/config/jak1_ntsc_black_label.jsonc index b157978891..b346771a87 100644 --- a/decompiler/config/jak1_ntsc_black_label.jsonc +++ b/decompiler/config/jak1_ntsc_black_label.jsonc @@ -3,7 +3,7 @@ // if you want to filter to only some object names. // it will make the decompiler much faster. - "allowed_objects": [], + "allowed_objects": ["nav-enemy"], //////////////////////////// // CODE ANALYSIS OPTIONS 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 56fbd67f5b..1023acf237 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -628,5 +628,52 @@ [6, "(function int :behavior sunken-elevator)"] ], + "nav-enemy": [ + [8, "(function none :behavior nav-enemy)"], + [9, "(function none)"], // stubbed + [10, "(function uint :behavior nav-enemy)"], + [11, "(function object :behavior nav-enemy)"], + [12, "(function none :behavior nav-enemy)"], + [13, "(function object :behavior nav-enemy)"], + [14, "(function uint :behavior nav-enemy)"], + [15, "(function object :behavior nav-enemy)"], + [16, "(function object :behavior nav-enemy)"], + [17, "(function vector :behavior nav-enemy)"], + [19, "(function object :behavior nav-enemy)"], + [20, "(function uint :behavior nav-enemy)"], + [21, "(function none :behavior nav-enemy)"], + [28, "(function symbol :behavior nav-enemy)"], + [29, "(function symbol :behavior nav-enemy)"], + [30, "(function object :behavior nav-enemy)"], + [31, "(function object :behavior nav-enemy)"], + [32, "(function vector :behavior nav-enemy)"], + [33, "(function object :behavior nav-enemy)"], + [34, "(function object :behavior nav-enemy)"], + [35, "(function object :behavior nav-enemy)"], + [36, "(function uint :behavior nav-enemy)"], + [37, "(function object :behavior nav-enemy)"], + [38, "(function object :behavior nav-enemy)"], + [39, "(function uint :behavior nav-enemy)"], + [40, "(function vector :behavior nav-enemy)"], + [41, "(function none :behavior nav-enemy)"], + [42, "(function object :behavior nav-enemy)"], + [43, "(function uint :behavior nav-enemy)"], + [44, "(function none :behavior nav-enemy)"], + [45, "(function object :behavior nav-enemy)"], + [46, "(function none :behavior nav-enemy)"], + [50, "(function none :behavior nav-enemy)"], + [51, "(function object :behavior nav-enemy)"], + [52, "(function uint :behavior nav-enemy)"], + [54, "(function object :behavior nav-enemy)"], + [55, "(function uint :behavior nav-enemy)"], + [56, "(function none :behavior nav-enemy)"], + [57, "(function object :behavior nav-enemy)"], + [58, "(function uint :behavior nav-enemy)"], + [59, "(function uint :behavior nav-enemy)"], + [60, "(function none :behavior nav-enemy)"], + [61, "(function object :behavior nav-enemy)"], + [62, "(function int :behavior nav-enemy)"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc index cf6444bcf0..85378e8650 100644 --- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc @@ -359,7 +359,6 @@ "(method 32 nav-control)", // collectables BUG - "birth-pickup-at-point", "add-blue-motion", // ocean @@ -370,7 +369,7 @@ "ocean-interp-wave", // nav-enemy BUG - "(anon-function 28 nav-enemy)", + // "(anon-function 28 nav-enemy)", // orb-cache BUG "(method 27 orb-cache-top)", @@ -392,7 +391,6 @@ "(anon-function 8 game-save)", "(anon-function 9 game-save)", "(anon-function 10 game-save)", - "(anon-function 28 nav-enemy)", "mistycannon-find-best-solution", "target-flut-falling-anim-trans", "kermit-check-to-hit-player?", diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index 6cde4c1c04..745ca97576 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -1585,6 +1585,105 @@ ["L191", "uint64", true], ["L186", "uint64", true] ], + + "nav-enemy": [ + ["L16", "_lambda_", true], + ["L18", "_lambda_", true], + ["L19", "_lambda_", true], + ["L20", "_lambda_", true], + ["L24", "_lambda_", true], + ["L29", "_lambda_", true], + ["L31", "_lambda_", true], + ["L32", "_lambda_", true], + ["L33", "_lambda_", true], + ["L36", "_lambda_", true], + ["L41", "_lambda_", true], + ["L44", "_lambda_", true], + ["L45", "_lambda_", true], + ["L76", "_lambda_", true], + ["L82", "_lambda_", true], + ["L86", "_lambda_", true], + ["L88", "_lambda_", true], + ["L90", "_lambda_", true], + ["L91", "_lambda_", true], + ["L92", "_lambda_", true], + ["L93", "_lambda_", true], + ["L95", "_lambda_", true], + ["L96", "_lambda_", true], + ["L97", "_lambda_", true], + ["L109", "_lambda_", true], + ["L110", "_lambda_", true], + ["L111", "_lambda_", true], + ["L113", "_lambda_", true], + ["L120", "_lambda_", true], + ["L122", "_lambda_", true], + ["L124", "_lambda_", true], + ["L135", "_lambda_", true], + ["L142", "_lambda_", true], + ["L146", "_lambda_", true], + ["L150", "_lambda_", true], + ["L153", "_lambda_", true], + ["L155", "_lambda_", true], + ["L157", "_lambda_", true], + ["L165", "_lambda_", true], + ["L175", "_lambda_", true], + ["L176", "_lambda_", true], + ["L177", "_lambda_", true], + ["L179", "_lambda_", true], + ["L183", "_lambda_", true], + ["L331", "shadow-control", true], + ["L332", "state", true], + ["L333", "state", true], + ["L334", "state", true], + ["L335", "state", true], + ["L336", "state", true], + ["L337", "state", true], + ["L338", "state", true], + ["L339", "state", true], + ["L340", "state", true], + ["L341", "state", true], + ["L342", "state", true], + ["L343", "state", true], + ["L344", "state", true], + ["L345", "state", true], + ["L346", "state", true], + ["L347", "state", true], + ["L348", "state", true], + ["L349", "attack-info", true], + ["L353", "float", true], + ["L354", "float", true], + ["L355", "float", true], + ["L356", "float", true], + ["L357", "float", true], + ["L358", "float", true], + ["L360", "float", true], + ["L361", "float", true], + ["L362", "float", true], + ["L365", "float", true], + ["L367", "float", true], + ["L369", "float", true], + ["L370", "float", true], + ["L371", "float", true], + ["L372", "float", true], + ["L373", "float", true], + ["L374", "float", true], + ["L375", "float", true], + ["L376", "float", true], + ["L377", "float", true], + ["L379", "float", true], + ["L380", "float", true], + ["L381", "float", true], + ["L382", "float", true], + ["L383", "float", true], + ["L385", "float", true], + ["L386", "float", true], + ["L387", "float", true], + ["L391", "float", true], + ["L389", "float", true], + ["L392", "rgba", true], + ["L393", "rgba", true] + ], + // 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 8b65232772..ca587ed0c5 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -937,5 +937,91 @@ "draw-string-xy": [ [16, "font-context"] ], + + "(method 50 nav-enemy)": [ + [16, "vector"] + ], + + "nav-enemy-init-by-other": [ + [16, "vector"] + ], + + "nav-enemy-turn-to-face-point": [ + [16, "vector"] + ], + + "nav-enemy-facing-point?": [ + [16, "vector"] + ], + + "nav-enemy-jump-post": [ + [16, "vector"] + ], + + "(method 41 nav-enemy)": [ + [16, "vector"], + [32, "vector"] + ], + + "nav-enemy-falling-post": [ + [16, "vector"] // TODO - check collide-shape-moving::62(type, vector, float) + ], + + "nav-enemy-death-post": [ + [16, "vector"] // TODO - check collide-shape-moving::62(type, vector, float) + ], + + "nav-enemy-jump-land-post": [ + [16, "vector"], + [32, "vector"] + ], + + "nav-enemy-facing-direction?": [ + [16, "vector"], + [32, "vector"] + ], + + "nav-enemy-initialize-custom-jump": [ + [16, "vector"], + [32, "vector"] + ], + + "nav-enemy-flee-post": [ + [16, "vector"], + [32, "vector"] + ], + + "(anon-function 17 nav-enemy)": [ + [16, "vector"] + ], + "(anon-function 29 nav-enemy)": [ + [16, "event-message-block"] + ], + "(anon-function 30 nav-enemy)": [ + [16, "event-message-block"] + ], + "(anon-function 51 nav-enemy)": [ + [16, "event-message-block"] + ], + "(anon-function 57 nav-enemy)": [ + [16, "event-message-block"] + ], + + "(method 73 nav-enemy)": [ + [16, "event-message-block"] + ], + + "(method 43 nav-enemy)": [ + [16, "event-message-block"] + ], + + "nav-enemy-send-attack": [ + [16, "event-message-block"] + ], + + "birth-pickup-at-point": [ + [16, "vector"] + ], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 740bdf899f..cbc865b79e 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -1991,5 +1991,160 @@ [37, "v1", "art-joint-anim"] ], + "nav-enemy-set-base-collide-sphere-collide-with": [ + [19, "v1", "collide-shape-prim-group"], + [23, "s2", "collide-shape-prim"], + [32, "v1", "collide-shape-prim-sphere"], + [33, "s5", "collide-shape-prim-group"], + [37, "v1", "collide-shape-prim-sphere"], + [38, "s5", "collide-shape-prim-group"], + [42, "v1", "collide-shape-prim-sphere"], + [43, "s5", "collide-shape-prim-group"], + [50, "s4", "collide-shape-prim-group"], + [54, "s5", "collide-shape-prim"], + [55, "s5", "collide-shape-prim"] + ], + + "nav-enemy-jump-land-anim": [ + [39, "v1", "art-joint-anim"] + ], + + "(anon-function 8 nav-enemy)": [ + [[42, 46], "t9", "(function object)"] + ], + "(anon-function 31 nav-enemy)": [ + [27, "v1", "art-joint-anim"], + [[70, 74], "t9", "(function object)"] + ], + "(anon-function 51 nav-enemy)": [ + [[39, 43], "t9", "(function object)"] + ], + "(anon-function 54 nav-enemy)": [ + [27, "v1", "art-joint-anim"], + [[80, 84], "t9", "(function object)"] + ], + "(anon-function 55 nav-enemy)": [ + [[9, 13], "t9", "(function object)"] + ], + "(anon-function 56 nav-enemy)": [ + [23, "v1", "art-joint-anim"], + [105, "v1", "art-joint-anim"], + [167, "v1", "art-joint-anim"], + [249, "v1", "art-joint-anim"] + ], + "(anon-function 61 nav-enemy)": [ + [[35, 39], "t9", "(function object)"] + ], + "(anon-function 57 nav-enemy)": [ + [[47, 51], "t9", "(function object)"], + [[89, 93], "t9", "(function object)"], + [[98, 102], "t9", "(function object)"] + ], + "(anon-function 42 nav-enemy)": [ + [[10, 14], "t9", "(function object)"], + [[31, 35], "t9", "(function object)"], + [[67, 71], "t9", "(function object)"] + ], + "(anon-function 43 nav-enemy)": [ + [[33, 37], "t9", "(function object)"] + ], + "(anon-function 50 nav-enemy)": [ + [27, "v1", "art-joint-anim"], + [91, "v1", "art-joint-anim"] + ], + "(anon-function 45 nav-enemy)": [ + [[5, 9], "t9", "(function object)"], + [[14, 18], "t9", "(function object)"], + [[75, 79], "t9", "(function object)"], + [[91, 95], "t9", "(function object)"] + ], + "(anon-function 37 nav-enemy)": [ + [[1, 5], "t9", "(function object)"] + ], + "(anon-function 38 nav-enemy)": [ + [[10, 14], "t9", "(function object)"], + [[38, 42], "t9", "(function object)"], + [[94, 98], "t9", "(function object)"], + [[124, 128], "t9", "(function object)"] + ], + "(anon-function 33 nav-enemy)": [ + [[1, 5], "t9", "(function object)"] + ], + "(anon-function 34 nav-enemy)": [ + [[1, 5], "t9", "(function object)"] + ], + "(anon-function 35 nav-enemy)": [ + [[15, 20], "t9", "(function object)"] + ], + "(anon-function 29 nav-enemy)": [ + [[36, 40], "t9", "(function object)"] + ], + "(anon-function 21 nav-enemy)": [ + [[15, 19], "t9", "(function object)"] + ], + "(anon-function 19 nav-enemy)": [ + [[19, 23], "t9", "(function object)"] + ], + "(anon-function 16 nav-enemy)": [ + [[15, 19], "t9", "(function object)"] + ], + "(anon-function 15 nav-enemy)": [ + [[3, 6], "t9", "(function object)"] + ], + "(anon-function 13 nav-enemy)": [ + [[6, 9], "t9", "(function object)"] + ], + "(anon-function 11 nav-enemy)": [ + [[80, 84], "t9", "(function object)"] + ], + + "nav-enemy-init-by-other": [ + [[54, 58], "t9", "(function object object)"] + ], + + "nav-enemy-set-hit-from-direction": [ + [19, "v1", "process-drawable"] + ], + + "(method 59 nav-enemy)": [ + [[1, 5], "t9", "(function object)"] + ], + + "(method 73 nav-enemy)": [ + [[19, 23], "t9", "(function object)"] + ], + + "(method 43 nav-enemy)": [ + [[22, 26], "t9", "(function object)"] + ], + + "(method 45 nav-enemy)": [ + [14, "v1", "process-mask"] + ], + + "nav-enemy-default-event-handler": [ + [62, "a0", "vector"], + [82, "a0", "vector"], + [[49, 53], "t9", "(function object)"], + [[70, 74], "t9", "(function object)"], + [[92, 96], "t9", "(function object)"], + [[100, 104], "t9", "(function object)"], + [[108, 112], "t9", "(function object)"] + ], + + "(method 7 nav-enemy)": [ + [5, "v1", "int"], + [10, "v1", "int"], + [19, "t9", "(function process-drawable int none)"] + ], + + "(anon-function 59 nav-enemy)": [ + [8, "v1", "int"] + ], + + "(anon-function 28 nav-enemy)": [ + [31, "v1", "int"] + ], + "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 64a9519b0b..5dc98c35ef 100644 --- a/goal_src/engine/collide/collide-shape-h.gc +++ b/goal_src/engine/collide/collide-shape-h.gc @@ -185,33 +185,14 @@ :size-assert #x4c :flag-assert #x1c0000004c (:methods - (new (symbol type basic uint) _type_ 0) - (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) - ) + (new (symbol type basic uint) _type_ 0) + ) ) ;; mesh collision ;; the pats are stored per tri in the mesh. (deftype collide-shape-prim-mesh (collide-shape-prim) - ((mesh basic :offset-assert 72) + ((mesh collide-mesh :offset-assert 72) (mesh-id int32 :offset-assert 76) (mesh-cache-id uint64 :offset-assert 80) (mesh-cache-tris uint32 :offset-assert 88) @@ -220,63 +201,25 @@ :size-assert #x5c :flag-assert #x1d0000005c (:methods - (new (symbol type basic uint uint) _type_ 0) - (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) - ) + (new (symbol type basic uint uint) _type_ 0) + (dummy-28 () none 28) + ) ) ;; A group of collide-shape-prim's (deftype collide-shape-prim-group (collide-shape-prim) ((num-prims int32 :offset-assert 72) (allocated-prims int32 :offset-assert 76) - (prim uint32 1 :offset-assert 80) ;; array of references. + (prim uint32 1 :offset-assert 80) ; array of references ) :method-count-assert 30 :size-assert #x54 :flag-assert #x1e00000054 (:methods - (new (symbol type basic uint int) _type_ 0) - (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) - ) + (new (symbol type basic uint int) _type_ 0) + (dummy-28 () none 28) + (dummy-29 () none 29) + ) ) (defenum collide-list-enum @@ -295,8 +238,8 @@ (pat-ignore-mask pat-surface :offset-assert 148) (event-self basic :offset-assert 152) (event-other basic :offset-assert 156) - (root-prim collide-shape-prim :offset-assert 160) - (riders basic :offset-assert 164) + (root-prim collide-shape-prim :offset-assert 160) + (riders collide-sticky-rider-group :offset-assert 164) (backup-collide-as uint64 :offset-assert 168) (backup-collide-with uint64 :offset-assert 176) ) @@ -310,7 +253,7 @@ (dummy-30 () none 30) (dummy-31 () none 31) (dummy-32 () none 32) - (dummy-33 () none 33) + (dummy-33 (_type_ vector uint) none 33) (dummy-34 () none 34) (dummy-35 (_type_) none 35) (dummy-36 () none 36) @@ -331,7 +274,7 @@ (dummy-51 () none 51) (dummy-52 () none 52) (dummy-53 () none 53) - (dummy-54 () none 54) + (dummy-54 (_type_ int int) none 54) (dummy-55 () none 55) ) ) @@ -369,12 +312,12 @@ :flag-assert #x41000001bc (:methods (dummy-56 () none 56) - (dummy-57 () none 57) - (dummy-58 () none 58) - (dummy-59 () none 59) - (dummy-60 () none 60) + (dummy-57 (_type_ vector) none 57) + (dummy-58 (_type_ vector) none 58) + (dummy-59 (_type_ vector uint float symbol symbol symbol) none 59) + (dummy-60 (_type_ float float symbol uint) none 60) (dummy-61 () none 61) - (dummy-62 () none 62) + (dummy-62 (_type_ vector float) vector 62) (dummy-63 () none 63) (dummy-64 () none 64) ) diff --git a/goal_src/engine/collide/collide-touch-h.gc b/goal_src/engine/collide/collide-touch-h.gc index 2854368bfc..373d6e5f7f 100644 --- a/goal_src/engine/collide/collide-touch-h.gc +++ b/goal_src/engine/collide/collide-touch-h.gc @@ -6,8 +6,8 @@ ;; dgos: GAME, ENGINE (deftype touching-prim (structure) - ((cprim basic :offset-assert 0) - (has-tri? basic :offset-assert 4) + ((cprim collide-shape-prim :offset-assert 0) ;; a big guess, there's a few that meet this name + (has-tri? symbol :offset-assert 4) (tri collide-tri-result :inline :offset-assert 16) ) :method-count-assert 9 @@ -18,7 +18,7 @@ (deftype touching-prims-entry (structure) ((next touching-prims-entry :offset-assert 0) (prev touching-prims-entry :offset-assert 4) - (allocated? basic :offset-assert 8) + (allocated? symbol :offset-assert 8) (u float :offset-assert 12) (prim1 touching-prim :inline :offset-assert 16) (prim2 touching-prim :inline :offset-assert 128) @@ -27,11 +27,11 @@ :size-assert #xe4 :flag-assert #xd000000e4 (:methods - (dummy-9 () none 9) - (dummy-10 () none 10) - (dummy-11 () none 11) - (dummy-12 () none 12) - ) + (dummy-9 () none 9) + (dummy-10 () none 10) + (dummy-11 () none 11) + (dummy-12 () none 12) + ) ) (deftype touching-prims-entry-pool (structure) @@ -88,8 +88,8 @@ ) (deftype touching-shapes-entry (structure) - ((cshape1 basic :offset-assert 0) - (cshape2 basic :offset-assert 4) + ((cshape1 collide-shape :offset-assert 0) + (cshape2 collide-shape :offset-assert 4) (resolve-u int8 :offset-assert 8) (head touching-prims-entry :offset-assert 12) ) @@ -98,16 +98,16 @@ :size-assert #x10 :flag-assert #x1200000010 (: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) - (get-head (_type_) touching-prims-entry 16) - (unknown1 (_type_ (pointer uint32)) uint 17) - ) + (dummy-9 () none 9) + (dummy-10 () none 10) + (dummy-11 () none 11) + (prims-touching? (_type_ collide-shape-moving uint) touching-prims-entry 12) ; this one! + (dummy-13 () none 13) + (dummy-14 () none 14) + (dummy-15 () none 15) + (get-head (_type_) touching-prims-entry 16) + (unknown1 (_type_ (pointer uint32)) uint 17) + ) ) (deftype touching-list (structure) diff --git a/goal_src/engine/draw/process-drawable.gc b/goal_src/engine/draw/process-drawable.gc index 560bad54c6..1700296cb1 100644 --- a/goal_src/engine/draw/process-drawable.gc +++ b/goal_src/engine/draw/process-drawable.gc @@ -15,3 +15,8 @@ (define-extern ja-done? (function int symbol)) ;; TODO - for misty-warehouse (define-extern rider-trans (function int)) +;; TODO - for nav-enemy +(define-extern ja-blend-eval (function int)) +(define-extern process-drawable-fuel-cell-handler (function process-drawable object symbol (pointer int64) symbol)) +(define-extern ja-aframe-num (function int float)) +(define-extern ja-aframe (function float int float)) diff --git a/goal_src/engine/game/collectables.gc b/goal_src/engine/game/collectables.gc index 646e29eceb..e1cbcfa7c6 100644 --- a/goal_src/engine/game/collectables.gc +++ b/goal_src/engine/game/collectables.gc @@ -5,3 +5,5 @@ ;; name in dgo: collectables ;; dgos: GAME, ENGINE +;; TODO - for nav-enemy +(define-extern birth-pickup-at-point (function vector int float symbol process symbol basic)) ;; TODO - not confirmed at all! (the symbols are wrong) diff --git a/goal_src/engine/game/fact-h.gc b/goal_src/engine/game/fact-h.gc index dde05b17ab..291c42786f 100644 --- a/goal_src/engine/game/fact-h.gc +++ b/goal_src/engine/game/fact-h.gc @@ -82,7 +82,7 @@ :flag-assert #xc00000028 (:methods (new (symbol type process pickup-type float) _type_ 0) - (dummy-9 () none 9) + (TODO-RENAME-9 (_type_ symbol process-tree fact-info int) uint 9) ;; See nav-enemy::process-drawable-death-event-handler (reset! (_type_ symbol) none 10) (dummy-11 (_type_) float 11) ) diff --git a/goal_src/engine/nav/navigate-h.gc b/goal_src/engine/nav/navigate-h.gc index 582b2348d3..b84e8b7cbc 100644 --- a/goal_src/engine/nav/navigate-h.gc +++ b/goal_src/engine/nav/navigate-h.gc @@ -9,15 +9,18 @@ :bitfield #t :type uint32 (display-marks 0) + (bit0 0) ;; TODO - nav-enemy::45 (bit1 1) (bit2 2) - (bit3 3) + (bit3 3) ;; TODO - nav-enemy::45 (bit4 4) - (bit5 5) - (bit6 6) - (bit7 7) + (bit5 5) ;; TODO - nav-enemy::45 + (bit6 6) ;; TODO - nav-enemy::45 + (bit7 7) ;; TODO - nav-enemy::45 (bit8 8) + (bit10 10) ;; TODO - nav-enemy::nav-enemy-patrol-post (bit13 13) + (bit19 19) ;; TODO - nav-enemy::lambda::17 ) (deftype nav-poly (structure) @@ -201,58 +204,58 @@ ) (deftype nav-control (basic) - ((flags nav-control-flags :offset-assert 4) - (process basic :offset-assert 8) - (shape collide-shape :offset-assert 12) - (mesh nav-mesh :offset-assert 16) - (gap-event basic :offset-assert 20) - (block-event basic :offset-assert 24) - (current-poly nav-poly :offset-assert 28) - (next-poly nav-poly :offset-assert 32) - (target-poly nav-poly :offset-assert 36) - (portal nav-route-portal 2 :offset-assert 40) - (nearest-y-threshold meters :offset-assert 48) - (event-temp vector :inline :offset-assert 64) - (old-travel vector :inline :offset-assert 80) - (blocked-travel vector :inline :offset-assert 96) - (prev-pos vector :inline :offset-assert 112) - (extra-nav-sphere vector :inline :offset-assert 128) - (travel vector :inline :offset-assert 144) - (target-pos vector :inline :offset-assert 160) - (destination-pos vector :inline :offset-assert 176) - (block-time uint64 :offset-assert 192) - (block-count float :offset-assert 200) - (user-poly nav-poly :offset-assert 204) - (nav-cull-radius float :offset-assert 208) - (num-spheres int16 :offset-assert 212) - (max-spheres int16 :offset-assert 214) - (sphere sphere :inline :dynamic :offset-assert 224) + ((flags nav-control-flags :offset-assert 4) + (process basic :offset-assert 8) + (shape collide-shape :offset-assert 12) + (mesh nav-mesh :offset-assert 16) + (gap-event basic :offset-assert 20) + (block-event basic :offset-assert 24) + (current-poly nav-poly :offset-assert 28) + (next-poly nav-poly :offset-assert 32) + (target-poly nav-poly :offset-assert 36) + (portal nav-route-portal 2 :offset-assert 40) ;; guess + (nearest-y-threshold meters :offset-assert 48) + (event-temp vector :inline :offset-assert 64) + (old-travel vector :inline :offset-assert 80) + (blocked-travel vector :inline :offset-assert 96) + (prev-pos vector :inline :offset-assert 112) + (extra-nav-sphere vector :inline :offset-assert 128) + (travel vector :inline :offset-assert 144) + (target-pos vector :inline :offset-assert 160) + (destination-pos vector :inline :offset-assert 176) + (block-time uint64 :offset-assert 192) + (block-count float :offset-assert 200) + (user-poly nav-poly :offset-assert 204) + (nav-cull-radius float :offset-assert 208) + (num-spheres int16 :offset-assert 212) + (max-spheres int16 :offset-assert 214) + (sphere sphere :inline :dynamic :offset-assert 224) ;; guess ) :method-count-assert 36 :size-assert #xe0 :flag-assert #x24000000e0 (:methods - (new (symbol type collide-shape int float) _type_ 0) + (new (symbol type collide-shape int float) _type_) (dummy-9 () none 9) (point-in-bounds? (_type_ vector) symbol 10) - (dummy-11 () none 11) + (dummy-11 (_type_ vector) none 11) (dummy-12 () none 12) (dummy-13 () none 13) (dummy-14 () none 14) (set-target-pos! (_type_ vector) none 15) - (dummy-16 () none 16) + (dummy-16 (_type_ vector) symbol 16) ; see - nav-enemy-test-point-in-nav-mesh? (dummy-17 () none 17) (dummy-18 () none 18) - (dummy-19 () none 19) + (dummy-19 (_type_ vector collide-shape-moving vector float) 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-24 (_type_ float symbol) none 24) + (dummy-25 (_type_ vector float) symbol 25) ; see - nav-enemy-test-point-near-nav-mesh? + (dummy-26 (_type_) none 26) (dummy-27 () none 27) - (dummy-28 () none 28) + (dummy-28 (_type_ int) none 28) (should-display? (_type_) symbol 29) (dummy-30 () none 30) (dummy-31 () none 31) diff --git a/goal_src/levels/common/nav-enemy-h.gc b/goal_src/levels/common/nav-enemy-h.gc index 7193b4c41a..b7c806eefe 100644 --- a/goal_src/levels/common/nav-enemy-h.gc +++ b/goal_src/levels/common/nav-enemy-h.gc @@ -45,18 +45,18 @@ (shadow-max-y meters :offset-assert 168) (shadow-min-y meters :offset-assert 172) (shadow-locus-dist meters :offset-assert 176) - (use-align basic :offset-assert 180) - (draw-shadow basic :offset-assert 184) - (move-to-ground basic :offset-assert 188) - (hover-if-no-ground basic :offset-assert 192) - (use-momentum basic :offset-assert 196) - (use-flee basic :offset-assert 200) - (use-proximity-notice basic :offset-assert 204) - (use-jump-blocked basic :offset-assert 208) - (use-jump-patrol basic :offset-assert 212) + (use-align symbol :offset-assert 180) + (draw-shadow symbol :offset-assert 184) + (move-to-ground symbol :offset-assert 188) + (hover-if-no-ground symbol :offset-assert 192) + (use-momentum symbol :offset-assert 196) + (use-flee symbol :offset-assert 200) + (use-proximity-notice symbol :offset-assert 204) + (use-jump-blocked symbol :offset-assert 208) + (use-jump-patrol symbol :offset-assert 212) (gnd-collide-with uint64 :offset-assert 216) - (debug-draw-neck basic :offset-assert 224) - (debug-draw-jump basic :offset-assert 228) + (debug-draw-neck symbol :offset-assert 224) + (debug-draw-jump symbol :offset-assert 228) ) :method-count-assert 9 :size-assert #xe8 @@ -64,7 +64,9 @@ ) (deftype nav-enemy (process-drawable) - ((hit-from-dir vector :inline :offset-assert 176) + ((collide-info collide-shape-moving :score 100 :offset 112) + (enemy-info fact-info-enemy :score 100 :offset 144) + (hit-from-dir vector :inline :offset-assert 176) (event-param-point vector :inline :offset-assert 192) (frustration-point vector :inline :offset-assert 208) (jump-dest vector :inline :offset-assert 224) @@ -78,7 +80,7 @@ (turn-time uint64 :offset-assert 312) (frustration-time uint64 :offset-assert 320) (speed-scale float :offset-assert 328) - (neck basic :offset-assert 332) + (neck joint-mod :offset-assert 332) ; this is what `neck` is on the pelican (reaction-time uint64 :offset-assert 336) (notice-time uint64 :offset-assert 344) (state-timeout uint64 :offset-assert 352) @@ -87,12 +89,13 @@ (nav-enemy-flags uint32 :offset-assert 376) (incomming-attack-id uint64 :offset-assert 384) (jump-return-state basic :offset-assert 392) - (rand-gen basic :offset-assert 396) + (rand-gen random-generator :offset-assert 396) ) :heap-base #x120 :method-count-assert 76 :size-assert #x190 :flag-assert #x4c01200190 + ;; inherited inspect of process-drawable (:methods (nav-enemy-attack () none 20) ;; state (nav-enemy-chase () none 21) ;; state @@ -108,47 +111,53 @@ (nav-enemy-stare () none 31) ;; state (nav-enemy-stop-chase () none 32) ;; state (nav-enemy-victory () none 33) ;; state - (dummy-34 () none 34) - (dummy-35 () none 35) - (dummy-36 () none 36) - (dummy-37 () none 37) - (dummy-38 () none 38) - (dummy-39 () none 39) - (dummy-40 () none 40) - (dummy-41 () none 41) - (dummy-42 () none 42) - (dummy-43 () none 43) - (dummy-44 () none 44) - (dummy-45 () none 45) - (dummy-46 () none 46) - (dummy-47 () none 47) - (dummy-48 () none 48) - (dummy-49 () none 49) - (dummy-50 () none 50) - (dummy-51 () none 51) - (dummy-52 () none 52) - (dummy-53 () none 53) - (dummy-54 () none 54) - (dummy-55 () none 55) - (dummy-56 () none 56) - (dummy-57 () none 57) - (dummy-58 () none 58) - (dummy-59 () none 59) - (dummy-60 () none 60) - (dummy-61 () none 61) - (dummy-62 () none 62) - (dummy-63 () none 63) - (dummy-64 () none 64) - (dummy-65 () none 65) - (dummy-66 () none 66) - (dummy-67 () none 67) - (dummy-68 () none 68) - (dummy-69 () none 69) - (dummy-70 () none 70) - (dummy-71 () none 71) - (dummy-72 () none 72) - (dummy-73 () none 73) - (dummy-74 () none 74) - (dummy-75 () none 75) + (dummy-34 (_type_) none 34) + (dummy-35 (_type_) none 35) + (dummy-36 (_type_) none 36) + (TODO-RENAME-37 (_type_) none 37) + (TODO-RENAME-38 (_type_) none 38) + (TODO-RENAME-39 (_type_) none 39) + (dummy-40 (_type_) none 40) + (dummy-41 (_type_) none 41) + (TODO-RENAME-42 (_type_) int 42) + (dummy-43 (_type_ process event-message-block) object 43) + (dummy-44 (_type_ process event-message-block) object 44) + (TODO-RENAME-45 (_type_ nav-enemy-info) none 45) + (TODO-RENAME-46 (_type_ float) basic 46) + (TODO-RENAME-47 (_type_) none 47) ;; - Stubbed + (TODO-RENAME-48 (_type_) none 48) ;; - Stubbed + (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) + (TODO-RENAME-50 (_type_ vector) symbol 50) + (dummy-51 (_type_) none 51) + (dummy-52 (_type_) none 52) + (dummy-53 (_type_) none 53) + (dummy-54 (_type_) none 54) + (dummy-55 (_type_) none 55) + (dummy-56 (_type_) none 56) + (dummy-57 (_type_) none 57) + (dummy-58 (_type_) none 58) + (TODO-RENAME-59 (_type_) none 59) + (dummy-60 (_type_) none 60) + (dummy-61 (_type_) none 61) + (dummy-62 (_type_) none 62) + (dummy-63 (_type_) none 63) + (dummy-64 (_type_) none 64) + (dummy-65 (_type_) none 65) + (dummy-66 (_type_) none 66) + (dummy-67 (_type_) symbol 67) + (dummy-68 (_type_) none 68) + (dummy-69 (_type_) none 69) + (dummy-70 (_type_) none 70) + (dummy-71 (_type_) none 71) + (dummy-72 (_type_ process event-message-block) object 72) ;; TODO - args unknown, 3rd arg contains a touching-shapes-entry offset 16/20 + (TODO-RENAME-73 (_type_ process) symbol 73) + (dummy-74 (_type_) none 74) + (dummy-75 (_type_) none 75) ) ) + +;; NOTE - some forward declarations +(define-extern nav-enemy-send-attack (function process touching-shapes-entry symbol object :behavior nav-enemy)) +(define-extern nav-enemy-set-hit-from-direction (function process none :behavior nav-enemy)) +(define-extern nav-enemy-get-new-patrol-point (function int :behavior nav-enemy)) +(define-extern nav-enemy-test-point-near-nav-mesh? (function vector symbol :behavior nav-enemy)) diff --git a/goal_src/levels/common/nav-enemy.gc b/goal_src/levels/common/nav-enemy.gc index f6a6af9d1d..9461aa5140 100644 --- a/goal_src/levels/common/nav-enemy.gc +++ b/goal_src/levels/common/nav-enemy.gc @@ -5,3 +5,3915 @@ ;; name in dgo: nav-enemy ;; dgos: GAME, COMMON, L1 +;; definition for function nav-enemy-rnd-float +(defun nav-enemy-rnd-float () + (rand-vu) + ) + +;; definition for function nav-enemy-rnd-percent? +(defun nav-enemy-rnd-percent? ((arg0 float)) + (>= arg0 (rand-vu)) + ) + +;; definition for function nav-enemy-rnd-float-range +(defbehavior nav-enemy-rnd-float-range nav-enemy ((arg0 float) (arg1 float)) + (+ arg0 (* (rand-vu) (- arg1 arg0))) + ) + +;; definition for function nav-enemy-rnd-int-count +(defun nav-enemy-rnd-int-count ((arg0 int)) + (the int (* (rand-vu) (the float arg0))) + ) + +;; definition for function nav-enemy-rnd-int-range +(defun nav-enemy-rnd-int-range ((arg0 int) (arg1 int)) + (+ arg0 (the int (* (rand-vu) (the float (+ (- 1 arg0) arg1))))) + ) + +;; definition for function nav-enemy-rnd-go-idle? +(defun nav-enemy-rnd-go-idle? ((arg0 float)) + (let* ((v1-3 (-> *display* frames (-> *display* last-screen) frame run-time)) + (f1-2 (fmax 0.0 (fmin 1.0 (* 0.001 (+ -7000.0 (the float v1-3)))))) + ) + (>= (+ arg0 (* f1-2 (- 1.0 arg0))) (rand-vu)) + ) + ) + +;; definition for method 9 of type trajectory +;; INFO: this function exists in multiple non-identical object files +(defmethod + eval-position! + trajectory + ((obj trajectory) (time float) (result vector)) + (vector+float*! + result + (-> obj initial-position) + (-> obj initial-velocity) + time + ) + (+! (-> result y) (* (* (* 0.5 time) time) (-> obj gravity))) + result + ) + +;; definition for method 7 of type nav-enemy +;; INFO: Return type mismatch none vs nav-enemy. +(defmethod relocate nav-enemy ((obj nav-enemy) (arg0 int)) + (if (nonzero? (-> obj neck)) + (set! (-> obj neck) (the-as joint-mod (+ (the-as int (-> obj neck)) arg0))) + ) + (if (nonzero? (-> obj rand-gen)) + (set! + (-> obj rand-gen) + (the-as random-generator (+ (the-as int (-> obj rand-gen)) arg0)) + ) + ) + (the-as + nav-enemy + ((the-as + (function process-drawable int none) + (find-parent-method nav-enemy 7) + ) + obj + arg0 + ) + ) + ) + +;; definition for method 42 of type nav-enemy +(defmethod TODO-RENAME-42 nav-enemy ((obj nav-enemy)) + (local-vars (v1-11 symbol)) + (if (<= (-> obj path curve num-cverts) 0) + (go process-drawable-art-error "no path") + ) + (let ((s5-0 3)) + 0 + (let ((s4-0 (-> obj nav destination-pos))) + (until (or v1-11 (<= s5-0 0)) + (let ((v1-8 (nav-enemy-rnd-int-count (-> obj path curve num-cverts)))) + (eval-path-curve-div! (-> obj path) s4-0 (the float v1-8) 'interp) + ) + (+! s5-0 -1) + (set! + v1-11 + (< 4096.0 (vector-vector-xz-distance s4-0 (-> obj collide-info trans))) + ) + ) + ) + ) + 0 + ) + +;; definition for method 39 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-39 nav-enemy ((obj nav-enemy)) + (when + (and + (logtest? (-> obj nav-enemy-flags) 256) + (or + (not *target*) + (and + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= + (the-as int (- (-> *display* base-frame-counter) (-> obj touch-time))) + 15 + ) + ) + ) + ) + (dummy-54 (-> obj collide-info) 2 1) + (set! (-> obj nav-enemy-flags) (logand -257 (-> obj nav-enemy-flags))) + ) + ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> obj collide-info root-prim prim-core)) + (if (logtest? (-> obj nav-enemy-flags) 4) + 'attacking + ) + obj + ) + ) + (if + (and + (nonzero? (-> obj neck)) + (nonzero? (logand (-> obj nav-enemy-flags) #x4000)) + ) + (set-target! + (-> obj neck) + (target-pos (-> obj nav-info player-look-at-joint)) + ) + ) + ) + (when (-> obj nav-info debug-draw-neck) + (if (nonzero? (-> obj neck)) + (joint-mod-debug-draw (-> obj neck)) + ) + ) + (ja-post) + 0 + (none) + ) + +;; definition for method 44 of type nav-enemy +(defmethod + dummy-44 + nav-enemy + ((obj nav-enemy) (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 + ) + ) + ) + +;; definition for method 72 of type nav-enemy +(defmethod + dummy-72 + nav-enemy + ((obj nav-enemy) (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 + ) + ) + ) + +;; definition for method 73 of type nav-enemy +(defmethod TODO-RENAME-73 nav-enemy ((obj nav-enemy) (arg0 process)) + (with-pp + (let ((v1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-0 from) pp) + (set! (-> v1-0 num-params) 1) + (set! (-> v1-0 message) 'get-attack-count) + (set! (-> v1-0 param 0) (the-as uint 1)) + (send-event-function arg0 v1-0) + ) + (logclear! (-> obj mask) (process-mask actor-pause attackable)) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> pp next-state) + (the-as state (method-of-object obj nav-enemy-die)) + ) + (t9-1) + ) + 'die + ) + ) + +;; definition for method 43 of type nav-enemy +(defmethod + dummy-43 + nav-enemy + ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) + (with-pp + (cond + ((logtest? (-> obj nav-enemy-flags) 32) + (let ((v1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-2 from) pp) + (set! (-> v1-2 num-params) 1) + (set! (-> v1-2 message) 'get-attack-count) + (set! (-> v1-2 param 0) (the-as uint 1)) + (send-event-function arg0 v1-2) + ) + (logclear! (-> obj mask) (process-mask actor-pause attackable)) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> pp next-state) + (the-as state (method-of-object obj nav-enemy-die)) + ) + (t9-1) + ) + ) + (else + (dummy-44 obj arg0 arg1) + ) + ) + ) + ) + +;; definition for function nav-enemy-send-attack +;; INFO: Return type mismatch symbol vs object. +(defbehavior + nav-enemy-send-attack nav-enemy + ((arg0 process) (arg1 touching-shapes-entry) (arg2 symbol)) + (let ((v1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-0 from) self) + (set! (-> v1-0 num-params) 2) + (set! (-> v1-0 message) 'attack) + (set! (-> v1-0 param 0) (the-as uint arg1)) + (let ((a1-1 (new 'static 'attack-info :mask #xe0))) + (set! (-> a1-1 shove-back) (-> self nav-info attack-shove-back)) + (set! (-> a1-1 shove-up) (-> self nav-info attack-shove-up)) + (set! (-> a1-1 mode) arg2) + (set! (-> v1-0 param 1) (the-as uint a1-1)) + ) + (when (send-event-function arg0 v1-0) + (dummy-54 (-> self collide-info) 2 0) + (logior! (-> self nav-enemy-flags) 256) + #t + ) + ) + ) + +;; definition for function nav-enemy-default-event-handler +;; Used lq/sq +(defbehavior + nav-enemy-default-event-handler nav-enemy + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (set! (-> self touch-time) (-> *display* base-frame-counter)) + (dummy-44 self arg0 arg3) + ) + (('attack) + (nav-enemy-set-hit-from-direction arg0) + (dummy-43 self arg0 arg3) + ) + (('instant-death) + (let ((gp-1 (-> self hit-from-dir))) + (vector-z-quaternion! gp-1 (-> self collide-info quat)) + (vector-float*! gp-1 gp-1 -1.0) + (vector-normalize! gp-1 1.0) + ) + (logclear! (-> self mask) (process-mask actor-pause attackable)) + (let ((t9-5 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-die)) + ) + (t9-5) + ) + ) + (('jump) + (when (!= (-> self next-state name) 'nav-enemy-jump-land) + (set! + (-> self event-param-point quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (set! (-> self nav user-poly) (the-as nav-poly (-> arg3 param 1))) + (set! (-> self jump-return-state) (-> self state)) + (let ((t9-6 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-jump)) + ) + (t9-6) + ) + ) + ) + (('cue-jump-to-point) + (when (logtest? (-> self nav-enemy-flags) 2048) + (set! + (-> self event-param-point quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (let ((v0-0 (the-as object (logand -2049 (-> self nav-enemy-flags))))) + (set! (-> self nav-enemy-flags) (the-as uint v0-0)) + v0-0 + ) + ) + ) + (('cue-chase) + (let ((t9-7 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-7) + ) + ) + (('cue-patrol) + (let ((t9-8 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-8) + ) + ) + (('go-wait-for-cue) + (let ((t9-9 (the-as (function object) enter-state))) + (set! (-> self next-state) (the-as state (method-of-object self dummy-35))) + (t9-9) + ) + ) + ) + ) + +;; definition for function nav-enemy-jump-event-handler +(defbehavior + nav-enemy-jump-event-handler nav-enemy + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (set! (-> self touch-time) (-> *display* base-frame-counter)) + (dummy-72 self arg0 arg3) + ) + (('attack) + (nav-enemy-set-hit-from-direction arg0) + (TODO-RENAME-73 self arg0) + ) + ) + ) + +;; definition for function process-drawable-death-event-handler +(defbehavior + process-drawable-death-event-handler process-drawable + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('death-start) + (TODO-RENAME-9 (-> self fact) #t *entity-pool* (-> self fact) 0) + ) + (('death-end) + (let ((v0-0 (logior (-> self draw status) 2))) + (set! (-> self draw status) v0-0) + v0-0 + ) + ) + ) + ) + +;; failed to figure out what this is: +nav-enemy-default-event-handler + +;; definition for function nav-enemy-common-post +(defbehavior nav-enemy-common-post nav-enemy () + (TODO-RENAME-39 self) + (none) + ) + +;; definition for function nav-enemy-simple-post +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-simple-post nav-enemy () + (TODO-RENAME-9 (-> self align)) + (nav-enemy-common-post) + (dummy-47 (-> self collide-info)) + 0 + (none) + ) + +;; definition for method 40 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod dummy-40 nav-enemy ((obj nav-enemy)) + (dummy-11 (-> obj nav) (-> obj nav target-pos)) + 0 + (none) + ) + +;; definition for method 41 of type nav-enemy +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-41 nav-enemy ((obj nav-enemy)) + (cond + ((-> obj nav-info use-align) + (TODO-RENAME-11 + (-> obj align) + 4 + (-> obj nav travel) + (the-as int 1.0) + 1.0 + (* (-> obj enemy-info speed) (-> obj speed-scale)) + ) + ) + (else + (cond + ((-> obj nav-info use-momentum) + (let* ((f0-3 (- (-> obj target-speed) (-> obj momentum-speed))) + (f1-4 + (fmin + (* (-> obj acceleration) (-> *display* seconds-per-frame)) + (fabs f0-3) + ) + ) + ) + (if (< f0-3 0.0) + (set! (-> obj momentum-speed) (- (-> obj momentum-speed) f1-4)) + (+! (-> obj momentum-speed) f1-4) + ) + ) + ) + (else + (set! (-> obj momentum-speed) (-> obj target-speed)) + ) + ) + (let* + ((f0-12 + (fmin + (* (-> obj speed-scale) (-> obj momentum-speed)) + (* (vector-length (-> obj nav travel)) (-> *display* frames-per-second)) + ) + ) + (v1-15 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> obj nav travel) + f0-12 + ) + ) + ) + (set! (-> obj collide-info transv x) (-> v1-15 x)) + (set! (-> obj collide-info transv z) (-> v1-15 z)) + ) + ) + ) + (if (-> obj nav-info move-to-ground) + (vector-v++! + (-> obj collide-info transv) + (dummy-62 (-> obj collide-info) (new-stack-vector0) 0.0) + ) + ) + 0 + (none) + ) + +;; definition for method 37 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-37 nav-enemy ((obj nav-enemy)) + (when (logtest? (-> obj nav-enemy-flags) 16) + (if + (or + (logtest? (-> obj nav-enemy-flags) 128) + (nonzero? (logand #x80000 (-> obj nav flags))) + ) + (seek-to-point-toward-point! + (-> obj collide-info) + (-> obj nav target-pos) + (-> obj rotate-speed) + (the-as int (-> obj turn-time)) + ) + (seek-toward-heading-vec! + (-> obj collide-info) + (-> obj nav travel) + (-> obj rotate-speed) + (the-as int (-> obj turn-time)) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 38 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-38 nav-enemy ((obj nav-enemy)) + (if (-> obj nav-info move-to-ground) + (dummy-59 + (-> obj collide-info) + (-> obj collide-info transv) + (-> obj nav-info gnd-collide-with) + 8192.0 + #f + (-> obj nav-info hover-if-no-ground) + (nonzero? (logand (-> obj nav-enemy-flags) #x8000)) + ) + (dummy-58 (-> obj collide-info) (-> obj collide-info transv)) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-travel-post +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-travel-post nav-enemy () + (cond + ((logtest? (-> self nav-enemy-flags) 8) + (TODO-RENAME-9 (-> self align)) + (dummy-40 self) + (dummy-41 self) + (TODO-RENAME-37 self) + (TODO-RENAME-38 self) + (nav-enemy-common-post) + ) + (else + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x40 :b #x40 :a #x80) + ) + ) + (nav-enemy-simple-post) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #xff :b #xff :a #x80) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-patrol-post +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-patrol-post nav-enemy () + (when + (or (logtest? #x80000 (-> self nav flags)) (< 2.0 (-> self nav block-count))) + (set! (-> self nav block-count) 2.0) + (logior! (-> self nav flags) (nav-control-flags bit10)) + (nav-enemy-get-new-patrol-point) + ) + (dummy-19 + (-> self nav) + (-> self nav target-pos) + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + ) + (if (logtest? #x200000 (-> self nav flags)) + (logclear! (-> self nav flags) (nav-control-flags bit10)) + ) + (nav-enemy-travel-post) + 0 + (none) + ) + +;; definition for function nav-enemy-chase-post +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-chase-post nav-enemy () + (set! (-> self nav target-pos quad) (-> (target-pos 0) quad)) + (nav-enemy-travel-post) + 0 + (none) + ) + +;; definition for function nav-enemy-flee-post +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-flee-post nav-enemy () + (let + ((gp-1 + (vector-! + (new 'stack-no-clear 'vector) + (-> self collide-info trans) + (target-pos 0) + ) + ) + ) + (vector-z-quaternion! + (new 'stack-no-clear 'vector) + (-> self collide-info quat) + ) + 0.0 + 0.0 + (set! (-> gp-1 y) 0.0) + (set! (-> self nav travel quad) (-> gp-1 quad)) + ) + (vector-normalize! (-> self nav travel) 409600.0) + (dummy-24 (-> self nav) 204.8 #f) + (vector+! + (-> self nav target-pos) + (-> self collide-info trans) + (-> self nav travel) + ) + (nav-enemy-travel-post) + 0 + (none) + ) + +;; definition for function nav-enemy-face-player-post +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-face-player-post nav-enemy () + (if (and *target* (nonzero? (logand (-> self nav-enemy-flags) 16))) + (seek-to-point-toward-point! + (-> self collide-info) + (target-pos 0) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + ) + (nav-enemy-simple-post) + 0 + (none) + ) + +;; definition for function nav-enemy-falling-post +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-falling-post nav-enemy () + (vector-v++! + (-> self collide-info transv) + (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0) + ) + (dummy-33 + (-> self collide-info) + (-> self collide-info transv) + (-> self collide-info root-prim collide-with) + ) + (nav-enemy-common-post) + 0 + (none) + ) + +;; definition for function nav-enemy-death-post +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-death-post nav-enemy () + (vector-v++! + (-> self collide-info transv) + (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0) + ) + (dummy-57 (-> self collide-info) (-> self collide-info transv)) + (nav-enemy-common-post) + 0 + (none) + ) + +;; definition for function nav-enemy-neck-control-look-at +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-neck-control-look-at nav-enemy () + (logior! (-> self nav-enemy-flags) #x4000) + (if (nonzero? (-> self neck)) + (set-mode! (-> self neck) (joint-mod-handler-mode look-at)) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-neck-control-inactive +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-neck-control-inactive nav-enemy () + (when + (and + (nonzero? (-> self neck)) + (nonzero? (logand (-> self nav-enemy-flags) #x4000)) + ) + (set! (-> self nav-enemy-flags) (logand -16385 (-> self nav-enemy-flags))) + (shut-down! (-> self neck)) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-player-vulnerable? +;; INFO: Return type mismatch basic vs symbol. +(defun nav-enemy-player-vulnerable? () + (the-as + symbol + (and *target* (zero? (logand (-> *target* state-flags) #x80f8))) + ) + ) + +;; definition for method 46 of type nav-enemy +(defmethod TODO-RENAME-46 nav-enemy ((obj nav-enemy) (arg0 float)) + (and + *target* + (zero? (logand (-> *target* state-flags) #x80f8)) + (and + (or + (zero? (logand (-> obj nav-enemy-flags) 4096)) + (< + (vector-vector-distance (target-pos 0) (-> obj collide-info trans)) + arg0 + ) + ) + (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) + ) + ) + ) + +;; definition for function nav-enemy-notice-player? +(defbehavior nav-enemy-notice-player? nav-enemy () + (let ((gp-0 #f)) + (cond + ((logtest? (-> self nav-enemy-flags) 1) + (when + (>= + (the-as int (- (-> *display* base-frame-counter) (-> self notice-time))) + (the-as int (-> self reaction-time)) + ) + (set! gp-0 #t) + (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) + ) + ) + (else + (when + (or + (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (and + (-> self nav-info use-proximity-notice) + *target* + (>= + (-> self nav-info proximity-notice-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + ) + (logior! (-> self nav-enemy-flags) 1) + (set! (-> self notice-time) (-> *display* base-frame-counter)) + ) + ) + ) + gp-0 + ) + ) + +;; definition for function nav-enemy-facing-direction? +;; Used lq/sq +(defbehavior nav-enemy-facing-direction? nav-enemy ((arg0 vector) (arg1 float)) + (let + ((s4-0 + (vector-z-quaternion! + (new 'stack-no-clear 'vector) + (-> self collide-info quat) + ) + ) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> arg0 quad)) + (set! (-> s5-0 y) 0.0) + (vector-normalize! s5-0 1.0) + (>= (vector-dot s4-0 s5-0) (cos arg1)) + ) + ) + +;; definition for function nav-enemy-facing-point? +(defbehavior nav-enemy-facing-point? nav-enemy ((arg0 vector) (arg1 float)) + (let + ((v1-1 + (vector-! (new 'stack-no-clear 'vector) arg0 (-> self collide-info trans)) + ) + ) + (nav-enemy-facing-direction? v1-1 arg1) + ) + ) + +;; definition for function nav-enemy-facing-player? +(defun nav-enemy-facing-player? ((arg0 float)) + (nav-enemy-facing-point? (target-pos 0) arg0) + ) + +;; definition for function nav-enemy-test-nav-mesh-intersection-xz? +(defbehavior nav-enemy-test-nav-mesh-intersection-xz? nav-enemy ((arg0 vector)) + (dummy-16 (-> self nav) arg0) + ) + +;; definition for function nav-enemy-test-point-in-nav-mesh? +(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)) + ) + ) + ) + +;; definition for function nav-enemy-test-point-near-nav-mesh? +(defbehavior nav-enemy-test-point-near-nav-mesh? nav-enemy ((arg0 vector)) + (and + (dummy-25 (-> self nav) arg0 (-> self nav-info notice-nav-radius)) + (< + (-> arg0 y) + (+ (-> self collide-info trans y) (-> self enemy-info notice-top)) + ) + ) + ) + +;; definition for function nav-enemy-get-new-patrol-point +(defbehavior nav-enemy-get-new-patrol-point nav-enemy () + (TODO-RENAME-42 self) + 0 + ) + +;; definition for function nav-enemy-set-base-collide-sphere-collide-with +;; INFO: Return type mismatch int vs none. +(defbehavior + nav-enemy-set-base-collide-sphere-collide-with nav-enemy + ((arg0 uint)) + (let ((s5-0 (-> self collide-info root-prim))) + (set! (-> s5-0 collide-with) arg0) + (let + ((s4-0 + (if + (and + (nonzero? s5-0) + (type-type? (-> s5-0 type) collide-shape-prim-group) + ) + s5-0 + ) + ) + (s5-1 (the-as object #f)) + ) + (when s4-0 + (dotimes (s3-0 (-> (the-as collide-shape-prim-group s4-0) num-prims)) + (let* + ((s2-0 + (the-as + object + (-> + (the-as collide-shape-prim-group (+ (* s3-0 4) (the-as int s4-0))) + prim + 0 + ) + ) + ) + (v1-6 + (if + (and + (nonzero? (the-as uint s2-0)) + (type-type? + (-> (the-as collide-shape-prim s2-0) type) + collide-shape-prim-sphere + ) + ) + (the-as uint s2-0) + ) + ) + ) + (when (the-as uint v1-6) + (if + (or + (not (the-as uint s5-1)) + (< + (-> (the-as collide-shape-prim-sphere v1-6) transform-index) + (-> (the-as collide-shape-prim-group s5-1) transform-index) + ) + (and + (= + (-> (the-as collide-shape-prim-sphere v1-6) transform-index) + (-> (the-as collide-shape-prim-group s5-1) transform-index) + ) + (< + (-> (the-as collide-shape-prim-sphere v1-6) local-sphere y) + (-> (the-as collide-shape-prim-group s5-1) local-sphere y) + ) + ) + ) + (set! s5-1 (the-as uint v1-6)) + ) + ) + ) + ) + (if (the-as collide-shape-prim s5-1) + (set! (-> (the-as collide-shape-prim s5-1) collide-with) arg0) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-set-hit-from-direction +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-set-hit-from-direction nav-enemy ((arg0 process)) + (let* ((gp-0 (-> self hit-from-dir)) + (s5-0 arg0) + (v1-1 + (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) + s5-0 + ) + ) + ) + (set! (-> gp-0 quad) (-> *null-vector* quad)) + (when v1-1 + (vector-! + gp-0 + (-> self collide-info trans) + (-> (the-as process-drawable v1-1) root trans) + ) + (set! (-> gp-0 y) 0.0) + (vector-xz-normalize! gp-0 1.0) + ) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-fall-and-play-death-anim +;; INFO: Return type mismatch int vs none. +(defbehavior + nav-enemy-fall-and-play-death-anim nav-enemy + ((arg0 art-joint-anim) (arg1 float) (arg2 float) (arg3 float) (arg4 int)) + (nav-enemy-neck-control-inactive) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self skel root-channel 0 frame-group) arg0) + (let ((s4-1 #f) + (s3-0 (-> self collide-info)) + ) + (when + (if (and (nonzero? s3-0) (type-type? (-> s3-0 type) collide-shape-moving)) + s3-0 + ) + (when (= (vector-xz-length-squared (-> self hit-from-dir)) 0.0) + (vector-z-quaternion! (-> self hit-from-dir) (-> self collide-info quat)) + (vector-negate-in-place! (-> self hit-from-dir)) + (set! (-> self hit-from-dir y) 0.0) + (vector-xz-normalize! (-> self hit-from-dir) 1.0) + ) + (set! (-> self collide-info transv y) 65502.96) + (let ((v1-14 (-> self skel root-channel 0))) + (set! (-> v1-14 num-func) num-func-identity) + (set! (-> v1-14 frame-num) 0.0) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! + (-> self collide-info status) + (logand -8 (-> self collide-info status)) + ) + (until (begin + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! + (-> a0-13 param 0) + (the float (+ (-> a0-13 frame-group data 0 length) -1)) + ) + (set! (-> a0-13 param 1) arg2) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (cond + ((nonzero? (-> self align)) + (when (not s4-1) + (TODO-RENAME-9 (-> self align)) + (TODO-RENAME-10 (-> self align) 4098 1.0 arg1 1.0) + (when (zero? (logand (-> self align flags) 1)) + (let + ((f0-6 + (* + (- (-> self align delta trans z)) + (-> *display* frames-per-second) + ) + ) + ) + (set! + (-> self collide-info transv x) + (* (-> self hit-from-dir x) f0-6) + ) + (set! + (-> self collide-info transv z) + (* (-> self hit-from-dir z) f0-6) + ) + ) + ) + ) + ) + (else + (let ((f0-8 20480.0)) + (set! (-> self collide-info transv x) (* (-> self hit-from-dir x) f0-8)) + (set! (-> self collide-info transv z) (* (-> self hit-from-dir z) f0-8)) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-turn-to-face-dir +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-turn-to-face-dir nav-enemy ((arg0 vector) (arg1 float)) + (local-vars (v1-16 symbol)) + (let ((s4-0 (-> *display* base-frame-counter))) + (let ((v1-3 (-> self skel root-channel 0))) + (set! + (-> v1-3 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info turn-anim)) + ) + ) + ) + (let ((v1-6 (-> self skel root-channel 0))) + (set! (-> v1-6 num-func) num-func-identity) + (set! (-> v1-6 frame-num) 0.0) + ) + (until v1-16 + (seek-toward-heading-vec! + (-> self collide-info) + arg0 + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) 0.75) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (set! + v1-16 + (or + (>= (the-as int (- (-> *display* base-frame-counter) s4-0)) 3000) + (nav-enemy-facing-direction? arg0 arg1) + ) + ) + ) + ) + (forward-up->quaternion (-> self collide-info quat) arg0 *y-vector*) + 0 + (none) + ) + +;; definition for function nav-enemy-turn-to-face-point +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-turn-to-face-point nav-enemy ((arg0 vector) (arg1 float)) + (let + ((gp-1 + (vector-! (new 'stack-no-clear 'vector) arg0 (-> self collide-info trans)) + ) + ) + (set! (-> gp-1 y) 0.0) + (when (< 0.0 (vector-length gp-1)) + (vector-normalize! gp-1 1.0) + (nav-enemy-turn-to-face-dir gp-1 arg1) + ) + ) + 0 + (none) + ) + +;; definition for method 12 of type nav-enemy +(defmethod run-logic? nav-enemy ((obj nav-enemy)) + (or + (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or + (and + (nonzero? (-> obj draw)) + (and + (>= + (+ + (-> *ACTOR-bank* pause-dist) + (-> obj collide-info pause-adjust-distance) + ) + (vector-vector-distance (-> obj collide-info trans) (camera-pos)) + ) + (or + (logtest? (-> obj draw status) 8) + (!= (-> obj next-state name) 'nav-enemy-idle) + ) + ) + ) + (and + (nonzero? (-> obj skel)) + (!= (-> obj skel root-channel 0) (-> obj skel channel)) + ) + (and (nonzero? (-> obj draw)) (nonzero? (logand (-> obj draw status) 16))) + ) + ) + ) + +;; failed to figure out what this is: +(let + ((gp-0 + (new 'static 'state + :name 'nav-enemy-idle + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 28 (the-as function gp-0)) + (set! (-> gp-0 event) nav-enemy-default-event-handler) + (set! + (-> gp-0 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (nav-enemy-neck-control-inactive) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if (-> self nav-info move-to-ground) + (dummy-60 + (-> self collide-info) + 40960.0 + 40960.0 + #t + (-> self nav-info gnd-collide-with) + ) + ) + (set! (-> self nav-enemy-flags) (logand -7 (-> self nav-enemy-flags))) + (let ((v0-2 300)) + (set! (-> self state-timeout) (the-as uint v0-2)) + v0-2 + ) + ) + ) + ) + (set! + (-> gp-0 trans) + (lambda :behavior nav-enemy + () + (when + (and + (and + *target* + (>= + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + (the-as int (-> self state-timeout)) + ) + (nonzero? (-> self draw)) + (nonzero? (logand (-> self draw status) 8)) + ) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-1) + ) + ) + ) + ) + (set! + (-> gp-0 code) + (lambda :behavior nav-enemy + () + (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) + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.75 1.25))) + (while #t + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-0 post) ja-post) + ) + +;; failed to figure out what this is: +(let + ((gp-1 + (new 'static 'state + :name 'nav-enemy-patrol + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 30 (the-as function gp-1)) + (set! (-> gp-1 event) nav-enemy-default-event-handler) + (set! + (-> gp-1 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! + (-> self nav flags) + (the-as + nav-control-flags + (the-as int (logior #x80000 (-> self nav flags))) + ) + ) + (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) + (logior! (-> self nav-enemy-flags) 8) + (set! (-> self state-timeout) (the-as uint 300)) + (set! (-> self target-speed) (-> self nav-info walk-travel-speed)) + (set! (-> self acceleration) (-> self nav-info walk-acceleration)) + (set! (-> self rotate-speed) (-> self nav-info walk-rotate-speed)) + (let ((v0-0 (-> self nav-info walk-turn-time))) + (set! (-> self turn-time) (the-as uint v0-0)) + (the-as uint v0-0) + ) + ) + ) + ) + (set! + (-> gp-1 exit) + (lambda :behavior nav-enemy + () + (let ((v0-0 (logior (-> self nav-enemy-flags) 8))) + (set! (-> self nav-enemy-flags) v0-0) + v0-0 + ) + ) + ) + (set! + (-> gp-1 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 30 + ) + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + (the-as int (-> self state-timeout)) + ) + (if + (and + (nonzero? (-> self draw)) + (nonzero? (logand (-> self draw status) 8)) + ) + (set! (-> self free-time) (-> *display* base-frame-counter)) + ) + (when + (or + (or + (not *target*) + (< + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (>= + (the-as int (- (-> *display* base-frame-counter) (-> self free-time))) + 600 + ) + ) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-idle)) + ) + (t9-1) + ) + ) + ) + (when + (and + (-> self nav-info use-flee) + (and + (and + *target* + (>= + (-> self nav-info notice-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (let ((gp-0 'racer) + (a1-2 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'query) + (set! (-> a1-2 param 0) (the-as uint 'mode)) + (= gp-0 (send-event-function *target* a1-2)) + ) + ) + ) + (let ((t9-4 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self dummy-22)) + ) + (t9-4) + ) + ) + (when (nav-enemy-notice-player?) + (let ((t9-6 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-notice)) + ) + (t9-6) + ) + ) + ) + ) + ) + (set! + (-> gp-1 code) + (lambda :behavior nav-enemy + () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) f30-0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) f30-0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + (when (nav-enemy-rnd-go-idle? 0.2) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 180) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + (set! + (-> a0-8 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-8 param 1) f30-0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! + a0-8 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (ja-blend-eval) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) f30-0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + (until (begin + (not (nav-enemy-rnd-go-idle? 0.2)) + ) + (let ((a0-11 (-> self skel root-channel 0))) + (set! + (-> a0-11 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + (set! + (-> a0-11 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-11 param 1) f30-0) + (set! (-> a0-11 frame-num) 0.0) + (joint-control-channel-group! + a0-11 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 param 0) + (the float (+ (-> a0-12 frame-group data 0 length) -1)) + ) + (set! (-> a0-12 param 1) f30-0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + (logior! (-> self nav-enemy-flags) 8) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) 1.0) + (joint-control-channel-group! + a0-15 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 180) + (let ((a0-17 (-> self skel root-channel 0))) + (set! + (-> a0-17 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + (set! + (-> a0-17 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-17 param 1) f30-0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! + a0-17 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (ja-blend-eval) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 param 0) + (the float (+ (-> a0-18 frame-group data 0 length) -1)) + ) + (set! (-> a0-18 param 1) f30-0) + (joint-control-channel-group-eval! + a0-18 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-1 post) nav-enemy-patrol-post) + ) + +;; failed to figure out what this is: +(let + ((gp-2 + (new 'static 'state + :name 'nav-enemy-notice + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 29 (the-as function gp-2)) + (set! (-> gp-2 event) nav-enemy-default-event-handler) + (set! + (-> gp-2 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (logior! (-> self nav-enemy-flags) 4) + (nav-enemy-neck-control-look-at) + (when (logtest? (-> self nav-enemy-flags) 2) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-1) + ) + ) + (logior! (-> self nav-enemy-flags) 2) + (let ((gp-0 (-> self nav)) + (v1-10 (target-pos 0)) + ) + (set! (-> gp-0 target-pos quad) (-> v1-10 quad)) + ) + (dummy-11 (-> self nav) (-> self nav target-pos)) + (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) + (let ((v0-4 (-> self nav-info run-turn-time))) + (set! (-> self turn-time) (the-as uint v0-4)) + (the-as uint v0-4) + ) + ) + ) + ) + (set! + (-> gp-2 code) + (lambda :behavior nav-enemy + () + (ja-channel-push! 1 22) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (seek-toward-heading-vec! + (-> self collide-info) + (-> self nav travel) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + (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! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + (let ((t9-6 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-6) + ) + ) + ) + (set! (-> gp-2 post) nav-enemy-simple-post) + ) + +;; definition for function ja-group-index? +(defbehavior ja-group-index? nav-enemy ((arg0 int)) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data arg0) + ) + ) + +;; failed to figure out what this is: +(let + ((gp-3 + (new 'static 'state + :name 'nav-enemy-flee + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 22 (the-as function gp-3)) + (set! (-> gp-3 event) nav-enemy-default-event-handler) + (set! + (-> gp-3 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (let ((v0-0 (-> *display* base-frame-counter))) + (set! (-> self state-time) v0-0) + v0-0 + ) + ) + ) + ) + (set! + (-> gp-3 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + (the-as int (-> self reaction-time)) + ) + (when + (or + (or + (not *target*) + (< + (-> self nav-info stop-chase-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (let ((gp-0 'racer) + (a1-1 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'query) + (set! (-> a1-1 param 0) (the-as uint 'mode)) + (!= gp-0 (send-event-function *target* a1-1)) + ) + ) + (let ((t9-2 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-2) + ) + ) + ) + ) + ) + (set! + (-> gp-3 code) + (lambda :behavior nav-enemy + () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (ja-channel-push! 1 60) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) f30-0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + (ja-channel-push! 1 60) + (while #t + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) f30-0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) f30-0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-3 post) nav-enemy-face-player-post) + ) + +;; definition for function nav-enemy-reset-frustration +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-reset-frustration nav-enemy () + (set! (-> self nav-enemy-flags) (logand -8193 (-> self nav-enemy-flags))) + (if *target* + (set! (-> self frustration-point quad) (-> *target* control shadow-pos quad)) + ) + (set! (-> self frustration-time) (-> *display* base-frame-counter)) + 0 + (none) + ) + +;; definition for function nav-enemy-player-at-frustration-point? +(defbehavior nav-enemy-player-at-frustration-point? nav-enemy () + (if *target* + (< + (vector-vector-distance + (-> *target* control shadow-pos) + (-> self frustration-point) + ) + 6144.0 + ) + ) + ) + +;; definition for function nav-enemy-frustrated? +(defbehavior nav-enemy-frustrated? nav-enemy () + (and + (logtest? (-> self nav-enemy-flags) 8192) + (nav-enemy-player-at-frustration-point?) + ) + ) + +;; failed to figure out what this is: +(let + ((gp-4 + (new 'static 'state + :name 'nav-enemy-chase + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 21 (the-as function gp-4)) + (set! (-> gp-4 event) nav-enemy-default-event-handler) + (set! + (-> gp-4 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (nav-enemy-neck-control-look-at) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self free-time) (-> *display* base-frame-counter)) + (logior! (-> self nav-enemy-flags) 4) + (set! (-> self target-speed) (-> self nav-info run-travel-speed)) + (set! (-> self acceleration) (-> self nav-info run-acceleration)) + (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) + (set! (-> self turn-time) (the-as uint (-> self nav-info run-turn-time))) + (nav-enemy-reset-frustration) + (none) + ) + ) + ) + (set! + (-> gp-4 trans) + (lambda :behavior nav-enemy () (when (logtest? (-> *target* state-flags) 128) + (let + ((t9-0 + (the-as (function object) enter-state) + ) + ) + (set! + (-> self next-state) + (the-as + state + (method-of-object self nav-enemy-patrol) + ) + ) + (t9-0) + ) + ) + (when (logtest? (-> self nav-enemy-flags) 256) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-victory)) + ) + (t9-1) + ) + ) + (if + (or + (not (nav-enemy-player-at-frustration-point?)) + (< + (-> self nav-info frustration-distance) + (vector-vector-xz-distance (target-pos 0) (-> self collide-info trans)) + ) + ) + (nav-enemy-reset-frustration) + ) + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + (the-as int (-> self reaction-time)) + ) + (if + (>= + (the-as + int + (- (-> *display* base-frame-counter) (-> self frustration-time)) + ) + (the-as + int + (+ (-> self reaction-time) (-> self nav-info frustration-time)) + ) + ) + (logior! (-> self nav-enemy-flags) 8192) + ) + (when + (or + (not (TODO-RENAME-46 self (-> self nav-info stop-chase-distance))) + (nonzero? (logand (-> self nav-enemy-flags) 8192)) + ) + (let ((t9-7 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-stop-chase)) + ) + (t9-7) + ) + ) + (cond + ((logtest? #x20000 (-> self nav flags)) + (when + (>= + (the-as int (- (-> *display* base-frame-counter) (-> self free-time))) + 300 + ) + (let ((t9-8 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-8) + ) + ) + ) + (else + (let ((v0-6 (the-as object (-> *display* base-frame-counter)))) + (set! (-> self free-time) (the-as uint v0-6)) + v0-6 + ) + ) + ) + ) + ) + ) + (set! + (-> gp-4 code) + (lambda :behavior nav-enemy + () + (ja-channel-push! 1 60) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (while #t + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-4 post) nav-enemy-chase-post) + ) + +;; failed to figure out what this is: +(let + ((gp-5 + (new 'static 'state + :name 'nav-enemy-stop-chase + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 32 (the-as function gp-5)) + (set! (-> gp-5 event) nav-enemy-default-event-handler) + (set! + (-> gp-5 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let* + ((f30-0 + (vector-vector-distance (-> self collide-info trans) (target-pos 0)) + ) + (gp-1 + (the + int + (+ + (lerp-scale 600.0 1800.0 f30-0 32768.0 122880.0) + (nav-enemy-rnd-float-range 0.0 30.0) + ) + ) + ) + ) + (when (< f30-0 40960.0) + (let ((t9-4 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-stare)) + ) + (t9-4) + ) + ) + (set! (-> self state-timeout) (the-as uint gp-1)) + ) + (set! (-> self target-speed) (-> self nav-info walk-travel-speed)) + (set! (-> self acceleration) (-> self nav-info walk-acceleration)) + (set! (-> self rotate-speed) (-> self nav-info walk-rotate-speed)) + (let ((v0-5 (-> self nav-info walk-turn-time))) + (set! (-> self turn-time) (the-as uint v0-5)) + (the-as uint v0-5) + ) + ) + ) + ) + (set! + (-> gp-5 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 30 + ) + (when (logtest? (-> *target* state-flags) 128) + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-0) + ) + ) + (when + (and + (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (not (nav-enemy-frustrated?)) + ) + (let ((t9-3 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-3) + ) + ) + (when + (or + (or + (not *target*) + (< + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (logtest? #x20000 (-> self nav flags)) + (>= + (the-as + int + (- + (-> *display* base-frame-counter) + (the-as uint (-> self state-time)) + ) + ) + (the-as int (-> self state-timeout)) + ) + ) + (let ((t9-5 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-stare)) + ) + (t9-5) + ) + ) + ) + ) + ) + (set! + (-> gp-5 code) + (lambda :behavior nav-enemy + () + (ja-channel-push! 1 30) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (while #t + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-5 post) nav-enemy-chase-post) + ) + +;; failed to figure out what this is: +(let + ((gp-6 + (new 'static 'state + :name 'nav-enemy-stare + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 31 (the-as function gp-6)) + (set! (-> gp-6 event) nav-enemy-default-event-handler) + (set! + (-> gp-6 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (let + ((f0-0 + (vector-vector-distance (-> self collide-info trans) (target-pos 0)) + ) + ) + (set! + (-> self state-timeout) + (the-as + uint + (the + int + (+ + (lerp-scale 3000.0 0.0 f0-0 12288.0 122880.0) + (nav-enemy-rnd-float-range 0.0 900.0) + ) + ) + ) + ) + ) + (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) + (set! (-> self turn-time) (the-as uint (-> self nav-info run-turn-time))) + (let ((v0-4 (-> self collide-info transv))) + (set! (-> v0-4 quad) (-> *null-vector* quad)) + v0-4 + ) + ) + ) + ) + (set! + (-> gp-6 exit) + (lambda :behavior nav-enemy + () + (let ((v0-0 (logior (-> self nav-enemy-flags) 16))) + (set! (-> self nav-enemy-flags) v0-0) + v0-0 + ) + ) + ) + (set! + (-> gp-6 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 30 + ) + (when (logtest? (-> *target* state-flags) 128) + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-0) + ) + ) + (cond + ((TODO-RENAME-46 self (-> self nav-info notice-distance)) + (when + (and + (>= + (the-as + int + (- (-> *display* base-frame-counter) (-> self notice-time)) + ) + (the-as int (-> self reaction-time)) + ) + (not (nav-enemy-frustrated?)) + ) + (let ((t9-3 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-3) + ) + ) + ) + (else + (set! (-> self notice-time) (-> *display* base-frame-counter)) + ) + ) + (when + (not + (or + (and + *target* + (>= + 40960.0 + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (and + (-> self nav-info use-proximity-notice) + *target* + (>= + (-> self nav-info proximity-notice-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) + (when + (>= + (the-as + int + (- + (-> *display* base-frame-counter) + (the-as uint (-> self state-time)) + ) + ) + (the-as int (-> self state-timeout)) + ) + (let ((t9-6 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-give-up)) + ) + (t9-6) + ) + ) + ) + (when + (or + (or + (not *target*) + (< + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (nonzero? (logand #x20000 (-> self nav flags))) + ) + (let ((t9-8 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-give-up)) + ) + (t9-8) + ) + ) + ) + ) + ) + (set! + (-> gp-6 code) + (lambda :behavior nav-enemy + () + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-give-up)) + ) + (t9-0) + ) + ) + ) + (set! (-> gp-6 post) nav-enemy-face-player-post) + ) + +;; failed to figure out what this is: +(let + ((gp-7 + (new 'static 'state + :name 'nav-enemy-give-up + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 25 (the-as function gp-7)) + (set! (-> gp-7 event) nav-enemy-default-event-handler) + (set! + (-> gp-7 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (nav-enemy-neck-control-inactive) + (let ((v0-1 (logand -5 (-> self nav-enemy-flags)))) + (set! (-> self nav-enemy-flags) v0-1) + v0-1 + ) + ) + ) + ) + (set! + (-> gp-7 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 30 + ) + (when (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-1) + ) + ) + ) + ) + ) + (set! + (-> gp-7 code) + (lambda :behavior nav-enemy + () + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-0) + ) + ) + ) + (set! (-> gp-7 post) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(let + ((gp-8 + (new 'static 'state + :name 'nav-enemy-attack + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 20 (the-as function gp-8)) + (set! (-> gp-8 event) nav-enemy-default-event-handler) + (set! + (-> gp-8 code) + (lambda :behavior nav-enemy + () + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-victory)) + ) + (t9-0) + ) + ) + ) + (set! (-> gp-8 post) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(let + ((gp-9 + (new 'static 'state + :name 'nav-enemy-victory + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 33 (the-as function gp-9)) + (set! (-> gp-9 event) nav-enemy-default-event-handler) + (set! + (-> gp-9 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy () (let ((v0-0 (-> self collide-info transv))) + (set! + (-> v0-0 quad) + (-> *null-vector* quad) + ) + v0-0 + ) + ) + ) + ) + (set! + (-> gp-9 code) + (lambda :behavior nav-enemy + () + (ja-channel-push! 1 22) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + ) + (set! + (-> a0-2 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-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) f30-0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + (let ((t9-5 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-stare)) + ) + (t9-5) + ) + ) + ) + (set! (-> gp-9 post) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(let + ((gp-10 + (new 'static 'state + :name 'nav-enemy-die + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 23 (the-as function gp-10)) + (set! (-> gp-10 event) process-drawable-death-event-handler) + (set! + (-> gp-10 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (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) 'child-die) + (let ((t9-0 send-event-function) + (v1-1 (-> self parent)) + ) + (t9-0 (the-as process (if v1-1 + (-> v1-1 0 self) + ) + ) + a1-0 + ) + ) + ) + ) + ) + ) + (set! + (-> gp-10 code) + (lambda :behavior nav-enemy + () + (ja-channel-push! 1 22) + (dummy-48 (-> self collide-info)) + (nav-enemy-fall-and-play-death-anim + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info die-anim)) + ) + 1.0 + 1.0 + 1000000000000000.0 + 600 + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'death-end) + (send-event-function self a1-2) + ) + (when (logtest? (-> self enemy-info options) 2) + (let ((t9-4 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-fuel-cell)) + ) + (t9-4) + ) + ) + (while (-> self child) + (suspend) + ) + (dummy-18 self) + ) + ) + (set! (-> gp-10 post) nav-enemy-death-post) + ) + +;; failed to figure out what this is: +(let + ((gp-11 + (new 'static 'state + :name 'nav-enemy-fuel-cell + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 24 (the-as function gp-11)) + (set! + (-> gp-11 event) + (the-as + (function process int symbol event-message-block object) + process-drawable-fuel-cell-handler + ) + ) + (set! + (-> gp-11 code) + (lambda :behavior nav-enemy + () + (ja-channel-set! 0) + (dummy-48 (-> self collide-info)) + (ja-post) + (process-entity-status! self (entity-perm-status complete) #t) + (when (not (task-complete? *game-info* (-> self entity extra perm task))) + (label cfg-1) + (let ((t9-5 birth-pickup-at-point) + (a0-4 (-> self collide-info trans)) + (a1-2 6) + (a2-1 (the float (the-as int (-> self entity extra perm task)))) + (a3-0 #f) + (t1-0 #f) + ) + (t9-5 a0-4 a1-2 a2-1 a3-0 self t1-0) + ) + (when (not (-> self child)) + (suspend) + (goto cfg-1) + ) + (while (-> self child) + (suspend) + ) + ) + (dummy-18 self) + ) + ) + ) + +;; definition for function nav-enemy-jump-post +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-jump-post nav-enemy () + (if (logtest? (-> self nav-enemy-flags) 16) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self jump-dest) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + ) + (when (logtest? (-> self nav-enemy-flags) 8) + (let + ((f30-0 + (the float (- (-> *display* base-frame-counter) (-> self jump-time))) + ) + ) + (let + ((v1-12 + (eval-position! + (-> self jump-trajectory) + f30-0 + (new 'stack-no-clear 'vector) + ) + ) + ) + (set! (-> self collide-info trans quad) (-> v1-12 quad)) + ) + (eval-velocity! + (-> self jump-trajectory) + f30-0 + (-> self collide-info transv) + ) + ) + ) + (nav-enemy-simple-post) + 0 + (none) + ) + +;; definition for function nav-enemy-initialize-custom-jump +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior + nav-enemy-initialize-custom-jump nav-enemy + ((arg0 vector) (arg1 symbol) (arg2 float) (arg3 float) (arg4 float)) + (set! (-> self jump-dest quad) (-> arg0 quad)) + (let* ((s4-0 (-> self collide-info trans)) + (f28-0 (vector-vector-xz-distance s4-0 arg0)) + (f30-0 (fmax arg2 (* arg3 f28-0))) + ) + (let ((f26-0 (- (-> arg0 y) (-> s4-0 y)))) + (let ((f24-0 (vector-length (-> self collide-info transv))) + (s1-1 + (vector-z-quaternion! + (new 'stack-no-clear 'vector) + (-> self collide-info quat) + ) + ) + (s2-2 (vector-! (new 'stack-no-clear 'vector) arg0 s4-0)) + ) + (set! (-> s1-1 y) 0.0) + (set! (-> s2-2 y) 0.0) + (vector-xz-normalize! s1-1 1.0) + (vector-xz-normalize! s2-2 1.0) + (set! (-> self nav-enemy-flags) (logand -1537 (-> self nav-enemy-flags))) + (if + (or + (>= (* 0.5 (-> self nav-info run-travel-speed)) f24-0) + (>= (cos 3640.889) (vector-dot s1-1 s2-2)) + ) + (logior! (-> self nav-enemy-flags) 512) + ) + ) + (if + (or + (and (< f26-0 0.0) (< f28-0 (fabs f26-0))) + (and (< (fabs f26-0) 12288.0) (< f28-0 20480.0)) + ) + (logior! (-> self nav-enemy-flags) 1024) + ) + ) + (when (and arg1 (nonzero? (logand (-> self nav-enemy-flags) 1024))) + (set! (-> self nav-enemy-flags) (logand -513 (-> self nav-enemy-flags))) + (set! f30-0 2048.0) + ) + (setup-from-to-height! + (-> self jump-trajectory) + s4-0 + arg0 + f30-0 + (* 0.000011111111 arg4) + ) + ) + (set! (-> self nav extra-nav-sphere quad) (-> arg0 quad)) + (set! (-> self nav extra-nav-sphere w) (-> self collide-info nav-radius)) + (logior! (-> self collide-info nav-flags) 2) + 0 + (none) + ) + +;; definition for function nav-enemy-initialize-jump +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-initialize-jump nav-enemy ((arg0 vector)) + (nav-enemy-initialize-custom-jump + arg0 + #t + (-> self nav-info jump-height-min) + (-> self nav-info jump-height-factor) + -409600.0 + ) + 0 + (none) + ) + +;; definition for function nav-enemy-execute-custom-jump +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior + nav-enemy-execute-custom-jump nav-enemy + ((arg0 int) (arg1 float) (arg2 float)) + (when (logtest? (-> self nav-enemy-flags) 512) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) 1.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 30) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (let ((s3-0 (-> self skel root-channel 0))) + (set! + (-> s3-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data arg0)) + ) + (set! (-> s3-0 param 0) (ja-aframe arg1 0)) + (set! (-> s3-0 param 1) arg2) + (set! (-> s3-0 frame-num) 0.0) + (joint-control-channel-group! + s3-0 + (the-as art-joint-anim (-> self draw art-group data arg0)) + num-func-seek! + ) + ) + (until (begin + (ja-blend-eval) + (suspend) + (let ((s3-1 (-> self skel root-channel 0))) + (set! (-> s3-1 param 0) (ja-aframe arg1 0)) + (set! (-> s3-1 param 1) arg2) + (joint-control-channel-group-eval! + s3-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + (set! (-> self collide-info status) (logand -8 (-> self collide-info status))) + (set! (-> self jump-time) (-> *display* base-frame-counter)) + (logior! (-> self nav-enemy-flags) 8) + (cond + ((logtest? (-> self nav-enemy-flags) 1024) + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + (else + (let ((a0-22 (-> self skel root-channel 0))) + (set! (-> a0-22 param 0) 1.0) + (joint-control-channel-group! + a0-22 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 30) + (let ((v1-39 (-> self skel root-channel 0))) + (set! + (-> v1-39 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-42 (-> self skel root-channel 0))) + (set! (-> v1-42 num-func) num-func-identity) + (set! (-> v1-42 frame-num) 0.0) + ) + ) + ) + ) + (else + (let ((a0-30 (-> self skel root-channel 0))) + (set! (-> a0-30 param 0) 1.0) + (joint-control-channel-group! + a0-30 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 30) + (let ((v1-49 (-> self skel root-channel 0))) + (set! + (-> v1-49 frame-group) + (the-as art-joint-anim (-> self draw art-group data arg0)) + ) + ) + (let ((s5-1 (-> self skel root-channel 0))) + (set! (-> s5-1 num-func) num-func-identity) + (set! (-> s5-1 frame-num) (ja-aframe arg1 0)) + ) + ) + ) + (while + (< + (the float (- (-> *display* base-frame-counter) (-> self jump-time))) + (-> self jump-trajectory time) + ) + (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! + ) + ) + (ja-blend-eval) + ) + (set! (-> self collide-info trans quad) (-> self jump-dest quad)) + (set! (-> self collide-info transv y) 0.0) + (set! + (-> self collide-info nav-flags) + (logand -3 (-> self collide-info nav-flags)) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-execute-jump +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-execute-jump nav-enemy () + (nav-enemy-execute-custom-jump + (-> self nav-info jump-anim) + (-> self nav-info jump-anim-start-frame) + (-> self nav-info jump-start-anim-speed) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-jump-land-anim +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-jump-land-anim nav-enemy () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) + ) + (ja-channel-push! 1 22) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + 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 (-> self nav-info jump-land-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (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! + ) + ) + (ja-done? 0) + ) + (empty) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(let + ((gp-12 + (new 'static 'state + :name 'nav-enemy-jump + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 26 (the-as function gp-12)) + (set! (-> gp-12 event) nav-enemy-jump-event-handler) + (set! + (-> gp-12 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (when + (and + (-> self nav-info use-jump-blocked) + (TODO-RENAME-50 self (-> self event-param-point)) + ) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self dummy-74)) + ) + (t9-1) + ) + ) + (nav-enemy-initialize-jump (-> self event-param-point)) + (none) + ) + ) + ) + (set! + (-> gp-12 exit) + (lambda :behavior nav-enemy + () + (let ((v0-0 (logior (-> self nav-enemy-flags) 24))) + (set! (-> self nav-enemy-flags) v0-0) + v0-0 + ) + ) + ) + (set! + (-> gp-12 code) + (lambda :behavior nav-enemy + () + (nav-enemy-execute-jump) + (let ((a1-0 (the-as structure (-> self nav user-poly)))) + (if (not (the-as nav-poly a1-0)) + (set! a1-0 (dummy-16 (-> self nav) (-> self jump-dest))) + ) + (if a1-0 + ((method-of-object (-> self nav) dummy-14)) + ) + ) + (let ((t9-3 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-jump-land)) + ) + (t9-3) + ) + ) + ) + (set! (-> gp-12 post) nav-enemy-jump-post) + ) + +;; definition for function nav-enemy-jump-land-post +;; Used lq/sq +(defbehavior nav-enemy-jump-land-post nav-enemy () + (TODO-RENAME-9 (-> self align)) + (dummy-11 (-> self nav) (-> self nav target-pos)) + (set! + (-> self target-speed) + (seek (-> self target-speed) (-> self nav-info run-travel-speed) 2048.0) + ) + (set! (-> self momentum-speed) (-> self target-speed)) + (let* + ((f0-7 + (fmin + (* (-> self speed-scale) (-> self momentum-speed)) + (* (vector-length (-> self nav travel)) (-> *display* frames-per-second)) + ) + ) + (v1-9 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> self nav travel) + f0-7 + ) + ) + ) + (set! (-> self collide-info transv x) (-> v1-9 x)) + (set! (-> self collide-info transv z) (-> v1-9 z)) + ) + (if + (or + (logtest? (-> self nav-enemy-flags) 128) + (nonzero? (logand #x80000 (-> self nav flags))) + ) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav target-pos) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + (seek-toward-heading-vec! + (-> self collide-info) + (-> self nav travel) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + ) + (vector-v++! + (-> self collide-info transv) + (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0) + ) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (-> self nav-info gnd-collide-with) + 8192.0 + #f + (-> self nav-info hover-if-no-ground) + #f + ) + (nav-enemy-common-post) + (none) + ) + +;; failed to figure out what this is: +(let + ((gp-13 + (new 'static 'state + :name 'nav-enemy-jump-land + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 27 (the-as function gp-13)) + (set! (-> gp-13 event) nav-enemy-default-event-handler) + (set! + (-> gp-13 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (logclear! (-> self nav flags) (nav-control-flags bit19)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self collide-info transv quad)) + (set! (-> gp-0 y) 0.0) + (set! (-> self target-speed) (vector-length gp-0)) + (set! (-> self momentum-speed) (-> self target-speed)) + (vector-xz-normalize! gp-0 16384.0) + (vector+! (-> self nav target-pos) (-> self collide-info trans) gp-0) + ) + ) + ) + ) + (set! + (-> gp-13 trans) + (lambda :behavior nav-enemy + () + (when + (or + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 150 + ) + (nonzero? (logand #x80000 (-> self nav flags))) + ) + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-0) + ) + ) + ) + ) + (set! + (-> gp-13 code) + (lambda :behavior nav-enemy + () + (nav-enemy-jump-land-anim) + (let ((t9-1 (the-as (function object) enter-state))) + (set! (-> self next-state) (the-as state (-> self jump-return-state))) + (t9-1) + ) + ) + ) + (set! (-> gp-13 post) nav-enemy-jump-land-post) + ) + +;; failed to figure out what this is: +(let + ((gp-14 + (new 'static 'state + :name 'nav-enemy-jump-blocked + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 74 (the-as function gp-14)) + (set! (-> gp-14 event) nav-enemy-default-event-handler) + (set! + (-> gp-14 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (let ((v0-0 (-> *display* base-frame-counter))) + (set! (-> self state-time) v0-0) + v0-0 + ) + ) + ) + ) + (set! + (-> gp-14 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 150 + ) + (let ((t9-0 (the-as (function object) enter-state))) + (set! (-> self next-state) (the-as state (-> self jump-return-state))) + (t9-0) + ) + ) + ) + ) + (set! + (-> gp-14 code) + (lambda :behavior nav-enemy + () + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + (ja-channel-push! 1 60) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + num-func-identity + ) + (set! + (-> gp-0 frame-num) + (rand-vu-float-range + 0.0 + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.75 1.25))) + (while #t + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 param 0) f30-0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-14 post) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(let + ((gp-15 + (new 'static 'state + :name 'nav-enemy-wait-for-cue + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 35 (the-as function gp-15)) + (set! (-> gp-15 event) nav-enemy-default-event-handler) + (set! + (-> gp-15 code) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (logior! (-> self nav-enemy-flags) 2048) + (ja-channel-push! 1 30) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (let ((v1-6 (-> self skel root-channel 0))) + (set! + (-> v1-6 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + ) + (let ((v1-9 (-> self skel root-channel 0))) + (set! (-> v1-9 num-func) num-func-identity) + (set! (-> v1-9 frame-num) 0.0) + ) + (while (logtest? (-> self nav-enemy-flags) 2048) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (ja-channel-push! 1 30) + (nav-enemy-turn-to-face-point (-> self event-param-point) 910.2222) + (let ((gp-0 (nav-enemy-rnd-int-range 0 150)) + (s5-0 (-> *display* base-frame-counter)) + ) + (until (begin + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) f30-0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + (>= (the-as int (- (-> *display* base-frame-counter) s5-0)) gp-0) + ) + (empty) + ) + ) + ) + (let ((t9-7 (the-as (function object) enter-state))) + (set! (-> self next-state) (the-as state (method-of-object self dummy-36))) + (t9-7) + ) + ) + ) + (set! (-> gp-15 post) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(let + ((gp-16 + (new 'static 'state + :name 'nav-enemy-jump-to-point + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 36 (the-as function gp-16)) + (set! (-> gp-16 event) nav-enemy-jump-event-handler) + (set! + (-> gp-16 exit) + (lambda :behavior nav-enemy + () + (let ((v0-0 (logior (-> self nav-enemy-flags) 24))) + (set! (-> self nav-enemy-flags) v0-0) + v0-0 + ) + ) + ) + (set! (-> gp-16 trans) (the-as (function object) (lambda () + 0 + (none) + ) + ) + ) + (set! + (-> gp-16 code) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (nav-enemy-initialize-jump (-> self event-param-point)) + (nav-enemy-neck-control-look-at) + (logior! (-> self nav-enemy-flags) 16) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (when (not (nav-enemy-facing-point? (-> self jump-dest) 5461.3335)) + (ja-channel-push! 1 60) + (nav-enemy-turn-to-face-point (-> self jump-dest) 1820.4445) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (nav-enemy-execute-jump) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (nav-enemy-jump-land-anim) + (let ((t9-7 (the-as (function object) enter-state))) + (set! (-> self next-state) (the-as state (method-of-object self dummy-35))) + (t9-7) + ) + (none) + ) + ) + (set! (-> gp-16 post) nav-enemy-jump-post) + ) + +;; definition for symbol *nav-enemy-dummy-shadow-control*, type shadow-control +(define + *nav-enemy-dummy-shadow-control* + (new 'static 'shadow-control + :settings + (new 'static 'shadow-settings + :center + (new 'static 'vector :w 0.000000000000000000000000000000000000000000056) + :shadow-dir + (new 'static 'vector :y -1.0 :w 614400.0) + :bot-plane (new 'static 'plane :y 1.0 :w 4096.0) + :top-plane (new 'static 'plane :y 1.0 :w -4096.0) + ) + ) + ) + +;; definition for method 45 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-45 nav-enemy ((obj nav-enemy) (arg0 nav-enemy-info)) + (set! (-> obj rand-gen) (new 'process 'random-generator)) + (set! (-> obj rand-gen seed) (the-as uint #x666edd1e)) + (set! (-> obj mask) (the-as process-mask (logior #x20000 (-> obj mask)))) + (TODO-RENAME-49 obj arg0) + (if (-> obj draw shadow) + (set! + (-> obj draw shadow-ctrl) + (new + 'process + 'shadow-control + (-> obj nav-info shadow-min-y) + (-> obj nav-info shadow-max-y) + (-> obj nav-info shadow-locus-dist) + (the-as float 17) + 245760.0 + ) + ) + (set! (-> obj draw shadow-ctrl) *nav-enemy-dummy-shadow-control*) + ) + (set! (-> obj align) (new 'process 'align-control obj)) + (set! + (-> obj nav) + (new + 'process + 'nav-control + (-> obj collide-info) + 16 + (-> arg0 nav-nearest-y-threshold) + ) + ) + (logior! + (-> obj nav flags) + (nav-control-flags display-marks bit0 bit3 bit5 bit6 bit7) + ) + (set! (-> obj nav gap-event) 'jump) + (dummy-26 (-> obj nav)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! + (-> obj path flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (set! + (-> obj enemy-info) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! (-> obj reaction-time) (the-as uint (nav-enemy-rnd-int-range 30 240))) + (set! (-> obj speed-scale) 1.0) + (logior! (-> obj nav-enemy-flags) 4216) + 0 + (none) + ) + +;; definition for method 49 of type nav-enemy +(defmethod TODO-RENAME-49 nav-enemy ((obj nav-enemy) (arg0 nav-enemy-info)) + (set! (-> obj nav-info) arg0) + (set! (-> obj rotate-speed) (-> obj nav-info walk-rotate-speed)) + (set! (-> obj turn-time) (the-as uint (-> obj nav-info walk-turn-time))) + (when (and (!= (-> obj nav-info neck-joint) -1) (zero? (-> obj neck))) + (set! + (-> obj neck) + (new + 'process + 'joint-mod + (joint-mod-handler-mode flex-blend) + obj + (-> obj nav-info neck-joint) + ) + ) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> obj neck up) (the-as uint 1)) + (set! (-> obj neck nose) (the-as uint 2)) + (set! (-> obj neck ear) (the-as uint 0)) + (set! (-> obj neck max-dist) 102400.0) + (let ((f0-6 16384.0)) + (set! (-> obj neck ignore-angle) f0-6) + f0-6 + ) + ) + ) + +;; definition for function nav-enemy-init-by-other +;; INFO: Return type mismatch object vs nav-enemy. +;; Used lq/sq +(defbehavior + nav-enemy-init-by-other nav-enemy + ((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) + (let ((v1-13 -4097) + (a0-10 (-> self nav-enemy-flags)) + ) + (set! (-> self nav-enemy-flags) (logand v1-13 a0-10)) + (logior! (-> self nav-enemy-flags) 2) + (let ((t9-5 (the-as (function object object) enter-state))) + (set! (-> self next-state) (the-as state (method-of-object self dummy-35))) + (the-as nav-enemy (t9-5 a0-10)) + ) + ) + ) + +;; definition for method 47 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-47 nav-enemy ((obj nav-enemy)) + 0 + (none) + ) + +;; definition for method 48 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-48 nav-enemy ((obj nav-enemy)) + 0 + (none) + ) + +;; definition for method 59 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-59 nav-enemy ((obj nav-enemy)) + (with-pp + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> pp next-state) + (the-as state (method-of-object obj nav-enemy-idle)) + ) + (t9-0) + ) + 0 + (none) + ) + ) + +;; definition for method 11 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod copy-defaults! nav-enemy ((obj nav-enemy) (arg0 res-lump)) + (TODO-RENAME-47 obj) + (process-drawable-from-entity! obj arg0) + (TODO-RENAME-48 obj) + (TODO-RENAME-59 obj) + 0 + (none) + ) + +;; definition for method 50 of type nav-enemy +;; Used lq/sq +(defmethod TODO-RENAME-50 nav-enemy ((obj nav-enemy) (arg0 vector)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set! (-> s4-0 quad) (-> obj collide-info trans quad)) + (set! (-> obj collide-info trans quad) (-> arg0 quad)) + (let ((gp-0 (-> obj nav))) + (dummy-28 gp-0 -1) + (set! (-> obj collide-info trans quad) (-> s4-0 quad)) + (let* ((v1-8 (-> gp-0 mesh origin)) + (f0-1 (- (-> arg0 x) (-> v1-8 x))) + (f1-2 (- (-> arg0 z) (-> v1-8 z))) + ) + (countdown (v1-9 (-> gp-0 num-spheres)) + (let* ((a0-10 (-> gp-0 sphere v1-9)) + (f2-2 (- (-> a0-10 x) f0-1)) + (f3-1 (- (-> a0-10 z) f1-2)) + (f4-0 (-> a0-10 w)) + ) + (if (>= (* f4-0 f4-0) (+ (* f2-2 f2-2) (* f3-1 f3-1))) + (return #t) + ) + ) + ) + ) + ) + ) + #f + ) diff --git a/goal_src/levels/misty/misty-teetertotter.gc b/goal_src/levels/misty/misty-teetertotter.gc index c131706d88..36cef3972a 100644 --- a/goal_src/levels/misty/misty-teetertotter.gc +++ b/goal_src/levels/misty/misty-teetertotter.gc @@ -164,52 +164,54 @@ (lambda :behavior teetertotter ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (when (= arg2 'touch) - (-> arg3 param 0) - (let ((t9-0 (method-of-type touching-shapes-entry dummy-12))) - (-> self root) - 1 - (when (and (t9-0) (-> self rock-is-dangerous)) - (let ((a1-2 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 2) - (set! (-> a1-2 message) 'attack) - (set! (-> a1-2 param 0) (-> arg3 param 0)) - (let ((a0-2 (new 'static 'attack-info :mask #x20))) - (set! (-> a0-2 mode) 'deadly) - (set! (-> a1-2 param 1) (the-as uint a0-2)) - ) - (send-event-function arg0 a1-2) + (when + (and + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root)) + (the-as uint 1) ) + (-> self rock-is-dangerous) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (let ((a0-2 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-2 mode) 'deadly) + (set! (-> a1-2 param 1) (the-as uint a0-2)) + ) + (send-event-function arg0 a1-2) ) ) - (-> arg3 param 0) - (let ((t9-2 (method-of-type touching-shapes-entry dummy-12))) - (-> self root) - 2 - (when - (and - (t9-2) - (target-on-end-of-teetertotter? self) - (not (-> self launched-player)) - (-> self in-launch-window) + (when + (and + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root)) + (the-as uint 2) ) - (let ((a1-4 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-4 from) self) - (set! (-> a1-4 num-params) 2) - (set! (-> a1-4 message) 'shove) - (set! (-> a1-4 param 0) (the-as uint #f)) - (let ((v1-16 (new 'static 'attack-info :mask #xcc0))) - (set! (-> v1-16 shove-back) 0.0) - (set! (-> v1-16 shove-up) 53248.0) - (set! (-> v1-16 angle) 'jump) - (set! (-> v1-16 control) 1.0) - (set! (-> a1-4 param 1) (the-as uint v1-16)) - ) - (when (send-event-function arg0 a1-4) - (let ((v0-0 #t)) - (set! (-> self launched-player) v0-0) - v0-0 - ) + (target-on-end-of-teetertotter? self) + (not (-> self launched-player)) + (-> self in-launch-window) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'shove) + (set! (-> a1-4 param 0) (the-as uint #f)) + (let ((v1-16 (new 'static 'attack-info :mask #xcc0))) + (set! (-> v1-16 shove-back) 0.0) + (set! (-> v1-16 shove-up) 53248.0) + (set! (-> v1-16 angle) 'jump) + (set! (-> v1-16 control) 1.0) + (set! (-> a1-4 param 1) (the-as uint v1-16)) + ) + (when (send-event-function arg0 a1-4) + (let ((v0-0 #t)) + (set! (-> self launched-player) v0-0) + v0-0 ) ) ) diff --git a/scripts/find-label-types.py b/scripts/find-label-types.py new file mode 100644 index 0000000000..38f7f65db7 --- /dev/null +++ b/scripts/find-label-types.py @@ -0,0 +1,55 @@ +import argparse +parser = argparse.ArgumentParser() +parser.add_argument("--file") +args = parser.parse_args() + +import re +labels_with_no_type = [] + +file_path = "decompiler_out/jak1/{}_disasm.gc".format(args.file) +with open(file_path) as f: + # Find all + content = f.readlines() + for line in content: + labels_with_no_type = labels_with_no_type + re.findall(r'L\d+', line) + +# dedup list +labels_with_no_type = list(dict.fromkeys(labels_with_no_type)) + +# let's go try to identify the types from the IR2 file if we can +label_lines = [] +file_path = "decompiler_out/jak1/{}_ir2.asm".format(args.file) +with open(file_path) as f: + # Find all + content = f.readlines() + prev_line = "" + for i, line in enumerate(content): + if line.startswith("L"): + for label in labels_with_no_type: + if line.startswith("{}:".format(label)): + # Check if the previous line has a `.type` + prev_line = content[i-1] + if ".type" in prev_line: + the_type = prev_line.split(".type ")[1].strip() + label_lines.append("[\"{}\", \"{}\", true]".format(label, the_type)) + labels_with_no_type.remove(label) + break + # Otherwise, lets see if it's a lambda, check the last 10 lines (hopefully this is enough) + found_it = False + for j in range(20): + temp_line = content[i-j] + if "anon-function" in temp_line: + label_lines.append("[\"{}\", \"_lambda_\", true]".format(label)) + labels_with_no_type.remove(label) + found_it = True + break + if found_it: + break + +# Print out the labels +print("Here are the labels I couldn't find a type for:") +for label in labels_with_no_type: + print("- {}".format(label)) +print("And here are the ones I could:") +print(",\n".join(label_lines)) + 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 446e16bbe4..4c04fafe39 100644 --- a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc @@ -314,10 +314,10 @@ ;; definition of type collide-shape-prim-mesh (deftype collide-shape-prim-mesh (collide-shape-prim) - ((mesh basic :offset-assert 72) - (mesh-id int32 :offset-assert 76) - (mesh-cache-id uint64 :offset-assert 80) - (mesh-cache-tris uint32 :offset-assert 88) + ((mesh collide-mesh :offset-assert 72) + (mesh-id int32 :offset-assert 76) + (mesh-cache-id uint64 :offset-assert 80) + (mesh-cache-tris uint32 :offset-assert 88) ) :method-count-assert 29 :size-assert #x5c @@ -389,17 +389,17 @@ ;; definition of type collide-shape (deftype collide-shape (trsqv) - ((process process :offset-assert 140) - (max-iteration-count uint8 :offset-assert 144) - (nav-flags uint8 :offset-assert 145) - (pad-byte uint8 2 :offset-assert 146) - (pat-ignore-mask pat-surface :offset-assert 148) - (event-self basic :offset-assert 152) - (event-other basic :offset-assert 156) - (root-prim collide-shape-prim :offset-assert 160) - (riders basic :offset-assert 164) - (backup-collide-as uint64 :offset-assert 168) - (backup-collide-with uint64 :offset-assert 176) + ((process process :offset-assert 140) + (max-iteration-count uint8 :offset-assert 144) + (nav-flags uint8 :offset-assert 145) + (pad-byte uint8 2 :offset-assert 146) + (pat-ignore-mask pat-surface :offset-assert 148) + (event-self basic :offset-assert 152) + (event-other basic :offset-assert 156) + (root-prim collide-shape-prim :offset-assert 160) + (riders collide-sticky-rider-group :offset-assert 164) + (backup-collide-as uint64 :offset-assert 168) + (backup-collide-with uint64 :offset-assert 176) ) :method-count-assert 56 :size-assert #xb8 @@ -411,7 +411,7 @@ (dummy-30 () none 30) (dummy-31 () none 31) (dummy-32 () none 32) - (dummy-33 () none 33) + (dummy-33 (_type_ vector uint) none 33) (dummy-34 () none 34) (dummy-35 (_type_) none 35) (dummy-36 () none 36) @@ -432,7 +432,7 @@ (dummy-51 () none 51) (dummy-52 () none 52) (dummy-53 () none 53) - (dummy-54 () none 54) + (dummy-54 (_type_ int int) none 54) (dummy-55 () none 55) ) ) @@ -503,12 +503,12 @@ :flag-assert #x41000001bc (:methods (dummy-56 () none 56) - (dummy-57 () none 57) - (dummy-58 () none 58) - (dummy-59 () none 59) - (dummy-60 () none 60) + (dummy-57 (_type_ vector) none 57) + (dummy-58 (_type_ vector) none 58) + (dummy-59 (_type_ vector uint float symbol symbol symbol) none 59) + (dummy-60 (_type_ float float symbol uint) none 60) (dummy-61 () none 61) - (dummy-62 () none 62) + (dummy-62 (_type_ vector float) vector 62) (dummy-63 () none 63) (dummy-64 () none 64) ) diff --git a/test/decompiler/reference/engine/collide/collide-touch-h_REF.gc b/test/decompiler/reference/engine/collide/collide-touch-h_REF.gc index 3374682df8..dc3fe52982 100644 --- a/test/decompiler/reference/engine/collide/collide-touch-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-touch-h_REF.gc @@ -3,8 +3,8 @@ ;; definition of type touching-prim (deftype touching-prim (structure) - ((cprim basic :offset-assert 0) - (has-tri? basic :offset-assert 4) + ((cprim collide-shape-prim :offset-assert 0) + (has-tri? symbol :offset-assert 4) (tri collide-tri-result :inline :offset-assert 16) ) :method-count-assert 9 @@ -25,7 +25,7 @@ (deftype touching-prims-entry (structure) ((next touching-prims-entry :offset-assert 0) (prev touching-prims-entry :offset-assert 4) - (allocated? basic :offset-assert 8) + (allocated? symbol :offset-assert 8) (u float :offset-assert 12) (prim1 touching-prim :inline :offset-assert 16) (prim2 touching-prim :inline :offset-assert 128) @@ -120,8 +120,8 @@ ;; definition of type touching-shapes-entry (deftype touching-shapes-entry (structure) - ((cshape1 basic :offset-assert 0) - (cshape2 basic :offset-assert 4) + ((cshape1 collide-shape :offset-assert 0) + (cshape2 collide-shape :offset-assert 4) (resolve-u int8 :offset-assert 8) (head touching-prims-entry :offset-assert 12) ) @@ -132,7 +132,7 @@ (dummy-9 () none 9) (dummy-10 () none 10) (dummy-11 () none 11) - (dummy-12 () none 12) + (prims-touching? (_type_ collide-shape-moving uint) touching-prims-entry 12) (dummy-13 () none 13) (dummy-14 () none 14) (dummy-15 () none 15) diff --git a/test/decompiler/reference/engine/game/fact-h_REF.gc b/test/decompiler/reference/engine/game/fact-h_REF.gc index a7ee1d8fcf..7bf5d72900 100644 --- a/test/decompiler/reference/engine/game/fact-h_REF.gc +++ b/test/decompiler/reference/engine/game/fact-h_REF.gc @@ -119,7 +119,7 @@ :flag-assert #xc00000028 (:methods (new (symbol type process pickup-type float) _type_ 0) - (dummy-9 () none 9) + (TODO-RENAME-9 (_type_ symbol process-tree fact-info int) uint 9) (reset! (_type_ symbol) none 10) (dummy-11 (_type_) float 11) ) diff --git a/test/decompiler/reference/engine/nav/navigate-h_REF.gc b/test/decompiler/reference/engine/nav/navigate-h_REF.gc index e298ccdbcf..e75a2bad6f 100644 --- a/test/decompiler/reference/engine/nav/navigate-h_REF.gc +++ b/test/decompiler/reference/engine/nav/navigate-h_REF.gc @@ -381,24 +381,24 @@ (new (symbol type collide-shape int float) _type_ 0) (dummy-9 () none 9) (point-in-bounds? (_type_ vector) symbol 10) - (dummy-11 () none 11) + (dummy-11 (_type_ vector) none 11) (dummy-12 () none 12) (dummy-13 () none 13) (dummy-14 () none 14) (set-target-pos! (_type_ vector) none 15) - (dummy-16 () none 16) + (dummy-16 (_type_ vector) symbol 16) (dummy-17 () none 17) (dummy-18 () none 18) - (dummy-19 () none 19) + (dummy-19 (_type_ vector collide-shape-moving vector float) 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-24 (_type_ float symbol) none 24) + (dummy-25 (_type_ vector float) symbol 25) + (dummy-26 (_type_) none 26) (dummy-27 () none 27) - (dummy-28 () none 28) + (dummy-28 (_type_ int) none 28) (should-display? (_type_) symbol 29) (dummy-30 () none 30) (dummy-31 () none 31) @@ -591,7 +591,7 @@ (defmethod should-display? nav-control ((obj nav-control)) (and *display-nav-marks* - (nonzero? (logand (-> obj flags) (nav-control-flags display-marks))) + (nonzero? (logand (-> obj flags) (nav-control-flags display-marks bit0))) ) ) diff --git a/test/decompiler/reference/engine/physics/trajectory_REF.gc b/test/decompiler/reference/engine/physics/trajectory_REF.gc index 029177a5a3..3338ce60d1 100644 --- a/test/decompiler/reference/engine/physics/trajectory_REF.gc +++ b/test/decompiler/reference/engine/physics/trajectory_REF.gc @@ -2,6 +2,7 @@ (in-package goal) ;; definition for method 9 of type trajectory +;; INFO: this function exists in multiple non-identical object files ;; Used lq/sq (defmethod eval-position! @@ -136,7 +137,3 @@ 0 (none) ) - - - - diff --git a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc index 3589ec77c4..2eb6e32acf 100644 --- a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc @@ -42,18 +42,18 @@ (shadow-max-y meters :offset-assert 168) (shadow-min-y meters :offset-assert 172) (shadow-locus-dist meters :offset-assert 176) - (use-align basic :offset-assert 180) - (draw-shadow basic :offset-assert 184) - (move-to-ground basic :offset-assert 188) - (hover-if-no-ground basic :offset-assert 192) - (use-momentum basic :offset-assert 196) - (use-flee basic :offset-assert 200) - (use-proximity-notice basic :offset-assert 204) - (use-jump-blocked basic :offset-assert 208) - (use-jump-patrol basic :offset-assert 212) + (use-align symbol :offset-assert 180) + (draw-shadow symbol :offset-assert 184) + (move-to-ground symbol :offset-assert 188) + (hover-if-no-ground symbol :offset-assert 192) + (use-momentum symbol :offset-assert 196) + (use-flee symbol :offset-assert 200) + (use-proximity-notice symbol :offset-assert 204) + (use-jump-blocked symbol :offset-assert 208) + (use-jump-patrol symbol :offset-assert 212) (gnd-collide-with uint64 :offset-assert 216) - (debug-draw-neck basic :offset-assert 224) - (debug-draw-jump basic :offset-assert 228) + (debug-draw-neck symbol :offset-assert 224) + (debug-draw-jump symbol :offset-assert 228) ) :method-count-assert 9 :size-assert #xe8 @@ -139,30 +139,32 @@ ;; definition of type nav-enemy (deftype nav-enemy (process-drawable) - ((hit-from-dir vector :inline :offset-assert 176) - (event-param-point vector :inline :offset-assert 192) - (frustration-point vector :inline :offset-assert 208) - (jump-dest vector :inline :offset-assert 224) - (jump-trajectory trajectory :inline :offset-assert 240) - (jump-time uint64 :offset-assert 280) - (nav-info nav-enemy-info :offset-assert 288) - (target-speed float :offset-assert 292) - (momentum-speed float :offset-assert 296) - (acceleration float :offset-assert 300) - (rotate-speed float :offset-assert 304) - (turn-time uint64 :offset-assert 312) - (frustration-time uint64 :offset-assert 320) - (speed-scale float :offset-assert 328) - (neck basic :offset-assert 332) - (reaction-time uint64 :offset-assert 336) - (notice-time uint64 :offset-assert 344) - (state-timeout uint64 :offset-assert 352) - (free-time uint64 :offset-assert 360) - (touch-time uint64 :offset-assert 368) - (nav-enemy-flags uint32 :offset-assert 376) - (incomming-attack-id uint64 :offset-assert 384) - (jump-return-state basic :offset-assert 392) - (rand-gen basic :offset-assert 396) + ((collide-info collide-shape-moving :offset 112) + (enemy-info fact-info-enemy :offset 144) + (hit-from-dir vector :inline :offset-assert 176) + (event-param-point vector :inline :offset-assert 192) + (frustration-point vector :inline :offset-assert 208) + (jump-dest vector :inline :offset-assert 224) + (jump-trajectory trajectory :inline :offset-assert 240) + (jump-time uint64 :offset-assert 280) + (nav-info nav-enemy-info :offset-assert 288) + (target-speed float :offset-assert 292) + (momentum-speed float :offset-assert 296) + (acceleration float :offset-assert 300) + (rotate-speed float :offset-assert 304) + (turn-time uint64 :offset-assert 312) + (frustration-time uint64 :offset-assert 320) + (speed-scale float :offset-assert 328) + (neck joint-mod :offset-assert 332) + (reaction-time uint64 :offset-assert 336) + (notice-time uint64 :offset-assert 344) + (state-timeout uint64 :offset-assert 352) + (free-time uint64 :offset-assert 360) + (touch-time uint64 :offset-assert 368) + (nav-enemy-flags uint32 :offset-assert 376) + (incomming-attack-id uint64 :offset-assert 384) + (jump-return-state basic :offset-assert 392) + (rand-gen random-generator :offset-assert 396) ) :heap-base #x120 :method-count-assert 76 @@ -183,48 +185,48 @@ (nav-enemy-stare () none 31) (nav-enemy-stop-chase () none 32) (nav-enemy-victory () none 33) - (dummy-34 () none 34) - (dummy-35 () none 35) - (dummy-36 () none 36) - (dummy-37 () none 37) - (dummy-38 () none 38) - (dummy-39 () none 39) - (dummy-40 () none 40) - (dummy-41 () none 41) - (dummy-42 () none 42) - (dummy-43 () none 43) - (dummy-44 () none 44) - (dummy-45 () none 45) - (dummy-46 () none 46) - (dummy-47 () none 47) - (dummy-48 () none 48) - (dummy-49 () none 49) - (dummy-50 () none 50) - (dummy-51 () none 51) - (dummy-52 () none 52) - (dummy-53 () none 53) - (dummy-54 () none 54) - (dummy-55 () none 55) - (dummy-56 () none 56) - (dummy-57 () none 57) - (dummy-58 () none 58) - (dummy-59 () none 59) - (dummy-60 () none 60) - (dummy-61 () none 61) - (dummy-62 () none 62) - (dummy-63 () none 63) - (dummy-64 () none 64) - (dummy-65 () none 65) - (dummy-66 () none 66) - (dummy-67 () none 67) - (dummy-68 () none 68) - (dummy-69 () none 69) - (dummy-70 () none 70) - (dummy-71 () none 71) - (dummy-72 () none 72) - (dummy-73 () none 73) - (dummy-74 () none 74) - (dummy-75 () none 75) + (dummy-34 (_type_) none 34) + (dummy-35 (_type_) none 35) + (dummy-36 (_type_) none 36) + (TODO-RENAME-37 (_type_) none 37) + (TODO-RENAME-38 (_type_) none 38) + (TODO-RENAME-39 (_type_) none 39) + (dummy-40 (_type_) none 40) + (dummy-41 (_type_) none 41) + (TODO-RENAME-42 (_type_) int 42) + (dummy-43 (_type_ process event-message-block) object 43) + (dummy-44 (_type_ process event-message-block) object 44) + (TODO-RENAME-45 (_type_ nav-enemy-info) none 45) + (TODO-RENAME-46 (_type_ float) basic 46) + (TODO-RENAME-47 (_type_) none 47) + (TODO-RENAME-48 (_type_) none 48) + (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) + (TODO-RENAME-50 (_type_ vector) symbol 50) + (dummy-51 (_type_) none 51) + (dummy-52 (_type_) none 52) + (dummy-53 (_type_) none 53) + (dummy-54 (_type_) none 54) + (dummy-55 (_type_) none 55) + (dummy-56 (_type_) none 56) + (dummy-57 (_type_) none 57) + (dummy-58 (_type_) none 58) + (TODO-RENAME-59 (_type_) none 59) + (dummy-60 (_type_) none 60) + (dummy-61 (_type_) none 61) + (dummy-62 (_type_) none 62) + (dummy-63 (_type_) none 63) + (dummy-64 (_type_) none 64) + (dummy-65 (_type_) none 65) + (dummy-66 (_type_) none 66) + (dummy-67 (_type_) symbol 67) + (dummy-68 (_type_) none 68) + (dummy-69 (_type_) none 69) + (dummy-70 (_type_) none 70) + (dummy-71 (_type_) none 71) + (dummy-72 (_type_ process event-message-block) object 72) + (TODO-RENAME-73 (_type_ process) symbol 73) + (dummy-74 (_type_) none 74) + (dummy-75 (_type_) none 75) ) ) diff --git a/test/decompiler/reference/levels/common/nav-enemy_REF.gc b/test/decompiler/reference/levels/common/nav-enemy_REF.gc new file mode 100644 index 0000000000..40f53811d2 --- /dev/null +++ b/test/decompiler/reference/levels/common/nav-enemy_REF.gc @@ -0,0 +1,3915 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for function nav-enemy-rnd-float +(defun nav-enemy-rnd-float () + (rand-vu) + ) + +;; definition for function nav-enemy-rnd-percent? +(defun nav-enemy-rnd-percent? ((arg0 float)) + (>= arg0 (rand-vu)) + ) + +;; definition for function nav-enemy-rnd-float-range +(defbehavior nav-enemy-rnd-float-range nav-enemy ((arg0 float) (arg1 float)) + (+ arg0 (* (rand-vu) (- arg1 arg0))) + ) + +;; definition for function nav-enemy-rnd-int-count +(defun nav-enemy-rnd-int-count ((arg0 int)) + (the int (* (rand-vu) (the float arg0))) + ) + +;; definition for function nav-enemy-rnd-int-range +(defun nav-enemy-rnd-int-range ((arg0 int) (arg1 int)) + (+ arg0 (the int (* (rand-vu) (the float (+ (- 1 arg0) arg1))))) + ) + +;; definition for function nav-enemy-rnd-go-idle? +(defun nav-enemy-rnd-go-idle? ((arg0 float)) + (let* ((v1-3 (-> *display* frames (-> *display* last-screen) frame run-time)) + (f1-2 (fmax 0.0 (fmin 1.0 (* 0.001 (+ -7000.0 (the float v1-3)))))) + ) + (>= (+ arg0 (* f1-2 (- 1.0 arg0))) (rand-vu)) + ) + ) + +;; definition for method 9 of type trajectory +;; INFO: this function exists in multiple non-identical object files +(defmethod + eval-position! + trajectory + ((obj trajectory) (time float) (result vector)) + (vector+float*! + result + (-> obj initial-position) + (-> obj initial-velocity) + time + ) + (+! (-> result y) (* (* (* 0.5 time) time) (-> obj gravity))) + result + ) + +;; definition for method 7 of type nav-enemy +;; INFO: Return type mismatch none vs nav-enemy. +(defmethod relocate nav-enemy ((obj nav-enemy) (arg0 int)) + (if (nonzero? (-> obj neck)) + (set! (-> obj neck) (the-as joint-mod (+ (the-as int (-> obj neck)) arg0))) + ) + (if (nonzero? (-> obj rand-gen)) + (set! + (-> obj rand-gen) + (the-as random-generator (+ (the-as int (-> obj rand-gen)) arg0)) + ) + ) + (the-as + nav-enemy + ((the-as + (function process-drawable int none) + (find-parent-method nav-enemy 7) + ) + obj + arg0 + ) + ) + ) + +;; definition for method 42 of type nav-enemy +(defmethod TODO-RENAME-42 nav-enemy ((obj nav-enemy)) + (local-vars (v1-11 symbol)) + (if (<= (-> obj path curve num-cverts) 0) + (go process-drawable-art-error "no path") + ) + (let ((s5-0 3)) + 0 + (let ((s4-0 (-> obj nav destination-pos))) + (until (or v1-11 (<= s5-0 0)) + (let ((v1-8 (nav-enemy-rnd-int-count (-> obj path curve num-cverts)))) + (eval-path-curve-div! (-> obj path) s4-0 (the float v1-8) 'interp) + ) + (+! s5-0 -1) + (set! + v1-11 + (< 4096.0 (vector-vector-xz-distance s4-0 (-> obj collide-info trans))) + ) + ) + ) + ) + 0 + ) + +;; definition for method 39 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-39 nav-enemy ((obj nav-enemy)) + (when + (and + (logtest? (-> obj nav-enemy-flags) 256) + (or + (not *target*) + (and + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= + (the-as int (- (-> *display* base-frame-counter) (-> obj touch-time))) + 15 + ) + ) + ) + ) + (dummy-54 (-> obj collide-info) 2 1) + (set! (-> obj nav-enemy-flags) (logand -257 (-> obj nav-enemy-flags))) + ) + ((method-of-object (-> obj draw shadow-ctrl) dummy-14)) + (when *target* + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> obj collide-info root-prim prim-core)) + (if (logtest? (-> obj nav-enemy-flags) 4) + 'attacking + ) + obj + ) + ) + (if + (and + (nonzero? (-> obj neck)) + (nonzero? (logand (-> obj nav-enemy-flags) #x4000)) + ) + (set-target! + (-> obj neck) + (target-pos (-> obj nav-info player-look-at-joint)) + ) + ) + ) + (when (-> obj nav-info debug-draw-neck) + (if (nonzero? (-> obj neck)) + (joint-mod-debug-draw (-> obj neck)) + ) + ) + (ja-post) + 0 + (none) + ) + +;; definition for method 44 of type nav-enemy +(defmethod + dummy-44 + nav-enemy + ((obj nav-enemy) (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 + ) + ) + ) + +;; definition for method 72 of type nav-enemy +(defmethod + dummy-72 + nav-enemy + ((obj nav-enemy) (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 + ) + ) + ) + +;; definition for method 73 of type nav-enemy +(defmethod TODO-RENAME-73 nav-enemy ((obj nav-enemy) (arg0 process)) + (with-pp + (let ((v1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-0 from) pp) + (set! (-> v1-0 num-params) 1) + (set! (-> v1-0 message) 'get-attack-count) + (set! (-> v1-0 param 0) (the-as uint 1)) + (send-event-function arg0 v1-0) + ) + (logclear! (-> obj mask) (process-mask actor-pause attackable)) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> pp next-state) + (the-as state (method-of-object obj nav-enemy-die)) + ) + (t9-1) + ) + 'die + ) + ) + +;; definition for method 43 of type nav-enemy +(defmethod + dummy-43 + nav-enemy + ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) + (with-pp + (cond + ((logtest? (-> obj nav-enemy-flags) 32) + (let ((v1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-2 from) pp) + (set! (-> v1-2 num-params) 1) + (set! (-> v1-2 message) 'get-attack-count) + (set! (-> v1-2 param 0) (the-as uint 1)) + (send-event-function arg0 v1-2) + ) + (logclear! (-> obj mask) (process-mask actor-pause attackable)) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> pp next-state) + (the-as state (method-of-object obj nav-enemy-die)) + ) + (t9-1) + ) + ) + (else + (dummy-44 obj arg0 arg1) + ) + ) + ) + ) + +;; definition for function nav-enemy-send-attack +;; INFO: Return type mismatch symbol vs object. +(defbehavior + nav-enemy-send-attack nav-enemy + ((arg0 process) (arg1 touching-shapes-entry) (arg2 symbol)) + (let ((v1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> v1-0 from) self) + (set! (-> v1-0 num-params) 2) + (set! (-> v1-0 message) 'attack) + (set! (-> v1-0 param 0) (the-as uint arg1)) + (let ((a1-1 (new 'static 'attack-info :mask #xe0))) + (set! (-> a1-1 shove-back) (-> self nav-info attack-shove-back)) + (set! (-> a1-1 shove-up) (-> self nav-info attack-shove-up)) + (set! (-> a1-1 mode) arg2) + (set! (-> v1-0 param 1) (the-as uint a1-1)) + ) + (when (send-event-function arg0 v1-0) + (dummy-54 (-> self collide-info) 2 0) + (logior! (-> self nav-enemy-flags) 256) + #t + ) + ) + ) + +;; definition for function nav-enemy-default-event-handler +;; Used lq/sq +(defbehavior + nav-enemy-default-event-handler nav-enemy + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (set! (-> self touch-time) (-> *display* base-frame-counter)) + (dummy-44 self arg0 arg3) + ) + (('attack) + (nav-enemy-set-hit-from-direction arg0) + (dummy-43 self arg0 arg3) + ) + (('instant-death) + (let ((gp-1 (-> self hit-from-dir))) + (vector-z-quaternion! gp-1 (-> self collide-info quat)) + (vector-float*! gp-1 gp-1 -1.0) + (vector-normalize! gp-1 1.0) + ) + (logclear! (-> self mask) (process-mask actor-pause attackable)) + (let ((t9-5 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-die)) + ) + (t9-5) + ) + ) + (('jump) + (when (!= (-> self next-state name) 'nav-enemy-jump-land) + (set! + (-> self event-param-point quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (set! (-> self nav user-poly) (the-as nav-poly (-> arg3 param 1))) + (set! (-> self jump-return-state) (-> self state)) + (let ((t9-6 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-jump)) + ) + (t9-6) + ) + ) + ) + (('cue-jump-to-point) + (when (logtest? (-> self nav-enemy-flags) 2048) + (set! + (-> self event-param-point quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (let ((v0-0 (the-as object (logand -2049 (-> self nav-enemy-flags))))) + (set! (-> self nav-enemy-flags) (the-as uint v0-0)) + v0-0 + ) + ) + ) + (('cue-chase) + (let ((t9-7 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-7) + ) + ) + (('cue-patrol) + (let ((t9-8 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-8) + ) + ) + (('go-wait-for-cue) + (let ((t9-9 (the-as (function object) enter-state))) + (set! (-> self next-state) (the-as state (method-of-object self dummy-35))) + (t9-9) + ) + ) + ) + ) + +;; definition for function nav-enemy-jump-event-handler +(defbehavior + nav-enemy-jump-event-handler nav-enemy + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (set! (-> self touch-time) (-> *display* base-frame-counter)) + (dummy-72 self arg0 arg3) + ) + (('attack) + (nav-enemy-set-hit-from-direction arg0) + (TODO-RENAME-73 self arg0) + ) + ) + ) + +;; definition for function process-drawable-death-event-handler +(defbehavior + process-drawable-death-event-handler process-drawable + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('death-start) + (TODO-RENAME-9 (-> self fact) #t *entity-pool* (-> self fact) 0) + ) + (('death-end) + (let ((v0-0 (logior (-> self draw status) 2))) + (set! (-> self draw status) v0-0) + v0-0 + ) + ) + ) + ) + +;; failed to figure out what this is: +nav-enemy-default-event-handler + +;; definition for function nav-enemy-common-post +(defbehavior nav-enemy-common-post nav-enemy () + (TODO-RENAME-39 self) + (none) + ) + +;; definition for function nav-enemy-simple-post +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-simple-post nav-enemy () + (TODO-RENAME-9 (-> self align)) + (nav-enemy-common-post) + (dummy-47 (-> self collide-info)) + 0 + (none) + ) + +;; definition for method 40 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod dummy-40 nav-enemy ((obj nav-enemy)) + (dummy-11 (-> obj nav) (-> obj nav target-pos)) + 0 + (none) + ) + +;; definition for method 41 of type nav-enemy +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-41 nav-enemy ((obj nav-enemy)) + (cond + ((-> obj nav-info use-align) + (TODO-RENAME-11 + (-> obj align) + 4 + (-> obj nav travel) + (the-as int 1.0) + 1.0 + (* (-> obj enemy-info speed) (-> obj speed-scale)) + ) + ) + (else + (cond + ((-> obj nav-info use-momentum) + (let* ((f0-3 (- (-> obj target-speed) (-> obj momentum-speed))) + (f1-4 + (fmin + (* (-> obj acceleration) (-> *display* seconds-per-frame)) + (fabs f0-3) + ) + ) + ) + (if (< f0-3 0.0) + (set! (-> obj momentum-speed) (- (-> obj momentum-speed) f1-4)) + (+! (-> obj momentum-speed) f1-4) + ) + ) + ) + (else + (set! (-> obj momentum-speed) (-> obj target-speed)) + ) + ) + (let* + ((f0-12 + (fmin + (* (-> obj speed-scale) (-> obj momentum-speed)) + (* (vector-length (-> obj nav travel)) (-> *display* frames-per-second)) + ) + ) + (v1-15 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> obj nav travel) + f0-12 + ) + ) + ) + (set! (-> obj collide-info transv x) (-> v1-15 x)) + (set! (-> obj collide-info transv z) (-> v1-15 z)) + ) + ) + ) + (if (-> obj nav-info move-to-ground) + (vector-v++! + (-> obj collide-info transv) + (dummy-62 (-> obj collide-info) (new-stack-vector0) 0.0) + ) + ) + 0 + (none) + ) + +;; definition for method 37 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-37 nav-enemy ((obj nav-enemy)) + (when (logtest? (-> obj nav-enemy-flags) 16) + (if + (or + (logtest? (-> obj nav-enemy-flags) 128) + (nonzero? (logand #x80000 (-> obj nav flags))) + ) + (seek-to-point-toward-point! + (-> obj collide-info) + (-> obj nav target-pos) + (-> obj rotate-speed) + (the-as int (-> obj turn-time)) + ) + (seek-toward-heading-vec! + (-> obj collide-info) + (-> obj nav travel) + (-> obj rotate-speed) + (the-as int (-> obj turn-time)) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 38 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-38 nav-enemy ((obj nav-enemy)) + (if (-> obj nav-info move-to-ground) + (dummy-59 + (-> obj collide-info) + (-> obj collide-info transv) + (-> obj nav-info gnd-collide-with) + 8192.0 + #f + (-> obj nav-info hover-if-no-ground) + (nonzero? (logand (-> obj nav-enemy-flags) #x8000)) + ) + (dummy-58 (-> obj collide-info) (-> obj collide-info transv)) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-travel-post +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-travel-post nav-enemy () + (cond + ((logtest? (-> self nav-enemy-flags) 8) + (TODO-RENAME-9 (-> self align)) + (dummy-40 self) + (dummy-41 self) + (TODO-RENAME-37 self) + (TODO-RENAME-38 self) + (nav-enemy-common-post) + ) + (else + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x40 :b #x40 :a #x80) + ) + ) + (nav-enemy-simple-post) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #xff :b #xff :a #x80) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-patrol-post +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-patrol-post nav-enemy () + (when + (or (logtest? #x80000 (-> self nav flags)) (< 2.0 (-> self nav block-count))) + (set! (-> self nav block-count) 2.0) + (logior! (-> self nav flags) (nav-control-flags bit10)) + (nav-enemy-get-new-patrol-point) + ) + (dummy-19 + (-> self nav) + (-> self nav target-pos) + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + ) + (if (logtest? #x200000 (-> self nav flags)) + (logclear! (-> self nav flags) (nav-control-flags bit10)) + ) + (nav-enemy-travel-post) + 0 + (none) + ) + +;; definition for function nav-enemy-chase-post +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-chase-post nav-enemy () + (set! (-> self nav target-pos quad) (-> (target-pos 0) quad)) + (nav-enemy-travel-post) + 0 + (none) + ) + +;; definition for function nav-enemy-flee-post +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-flee-post nav-enemy () + (let + ((gp-1 + (vector-! + (new 'stack-no-clear 'vector) + (-> self collide-info trans) + (target-pos 0) + ) + ) + ) + (vector-z-quaternion! + (new 'stack-no-clear 'vector) + (-> self collide-info quat) + ) + 0.0 + 0.0 + (set! (-> gp-1 y) 0.0) + (set! (-> self nav travel quad) (-> gp-1 quad)) + ) + (vector-normalize! (-> self nav travel) 409600.0) + (dummy-24 (-> self nav) 204.8 #f) + (vector+! + (-> self nav target-pos) + (-> self collide-info trans) + (-> self nav travel) + ) + (nav-enemy-travel-post) + 0 + (none) + ) + +;; definition for function nav-enemy-face-player-post +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-face-player-post nav-enemy () + (if (and *target* (nonzero? (logand (-> self nav-enemy-flags) 16))) + (seek-to-point-toward-point! + (-> self collide-info) + (target-pos 0) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + ) + (nav-enemy-simple-post) + 0 + (none) + ) + +;; definition for function nav-enemy-falling-post +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-falling-post nav-enemy () + (vector-v++! + (-> self collide-info transv) + (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0) + ) + (dummy-33 + (-> self collide-info) + (-> self collide-info transv) + (-> self collide-info root-prim collide-with) + ) + (nav-enemy-common-post) + 0 + (none) + ) + +;; definition for function nav-enemy-death-post +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-death-post nav-enemy () + (vector-v++! + (-> self collide-info transv) + (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0) + ) + (dummy-57 (-> self collide-info) (-> self collide-info transv)) + (nav-enemy-common-post) + 0 + (none) + ) + +;; definition for function nav-enemy-neck-control-look-at +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-neck-control-look-at nav-enemy () + (logior! (-> self nav-enemy-flags) #x4000) + (if (nonzero? (-> self neck)) + (set-mode! (-> self neck) (joint-mod-handler-mode look-at)) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-neck-control-inactive +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-neck-control-inactive nav-enemy () + (when + (and + (nonzero? (-> self neck)) + (nonzero? (logand (-> self nav-enemy-flags) #x4000)) + ) + (set! (-> self nav-enemy-flags) (logand -16385 (-> self nav-enemy-flags))) + (shut-down! (-> self neck)) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-player-vulnerable? +;; INFO: Return type mismatch basic vs symbol. +(defun nav-enemy-player-vulnerable? () + (the-as + symbol + (and *target* (zero? (logand (-> *target* state-flags) #x80f8))) + ) + ) + +;; definition for method 46 of type nav-enemy +(defmethod TODO-RENAME-46 nav-enemy ((obj nav-enemy) (arg0 float)) + (and + *target* + (zero? (logand (-> *target* state-flags) #x80f8)) + (and + (or + (zero? (logand (-> obj nav-enemy-flags) 4096)) + (< + (vector-vector-distance (target-pos 0) (-> obj collide-info trans)) + arg0 + ) + ) + (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) + ) + ) + ) + +;; definition for function nav-enemy-notice-player? +(defbehavior nav-enemy-notice-player? nav-enemy () + (let ((gp-0 #f)) + (cond + ((logtest? (-> self nav-enemy-flags) 1) + (when + (>= + (the-as int (- (-> *display* base-frame-counter) (-> self notice-time))) + (the-as int (-> self reaction-time)) + ) + (set! gp-0 #t) + (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) + ) + ) + (else + (when + (or + (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (and + (-> self nav-info use-proximity-notice) + *target* + (>= + (-> self nav-info proximity-notice-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + ) + (logior! (-> self nav-enemy-flags) 1) + (set! (-> self notice-time) (-> *display* base-frame-counter)) + ) + ) + ) + gp-0 + ) + ) + +;; definition for function nav-enemy-facing-direction? +;; Used lq/sq +(defbehavior nav-enemy-facing-direction? nav-enemy ((arg0 vector) (arg1 float)) + (let + ((s4-0 + (vector-z-quaternion! + (new 'stack-no-clear 'vector) + (-> self collide-info quat) + ) + ) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> arg0 quad)) + (set! (-> s5-0 y) 0.0) + (vector-normalize! s5-0 1.0) + (>= (vector-dot s4-0 s5-0) (cos arg1)) + ) + ) + +;; definition for function nav-enemy-facing-point? +(defbehavior nav-enemy-facing-point? nav-enemy ((arg0 vector) (arg1 float)) + (let + ((v1-1 + (vector-! (new 'stack-no-clear 'vector) arg0 (-> self collide-info trans)) + ) + ) + (nav-enemy-facing-direction? v1-1 arg1) + ) + ) + +;; definition for function nav-enemy-facing-player? +(defun nav-enemy-facing-player? ((arg0 float)) + (nav-enemy-facing-point? (target-pos 0) arg0) + ) + +;; definition for function nav-enemy-test-nav-mesh-intersection-xz? +(defbehavior nav-enemy-test-nav-mesh-intersection-xz? nav-enemy ((arg0 vector)) + (dummy-16 (-> self nav) arg0) + ) + +;; definition for function nav-enemy-test-point-in-nav-mesh? +(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)) + ) + ) + ) + +;; definition for function nav-enemy-test-point-near-nav-mesh? +(defbehavior nav-enemy-test-point-near-nav-mesh? nav-enemy ((arg0 vector)) + (and + (dummy-25 (-> self nav) arg0 (-> self nav-info notice-nav-radius)) + (< + (-> arg0 y) + (+ (-> self collide-info trans y) (-> self enemy-info notice-top)) + ) + ) + ) + +;; definition for function nav-enemy-get-new-patrol-point +(defbehavior nav-enemy-get-new-patrol-point nav-enemy () + (TODO-RENAME-42 self) + 0 + ) + +;; definition for function nav-enemy-set-base-collide-sphere-collide-with +;; INFO: Return type mismatch int vs none. +(defbehavior + nav-enemy-set-base-collide-sphere-collide-with nav-enemy + ((arg0 uint)) + (let ((s5-0 (-> self collide-info root-prim))) + (set! (-> s5-0 collide-with) arg0) + (let + ((s4-0 + (if + (and + (nonzero? s5-0) + (type-type? (-> s5-0 type) collide-shape-prim-group) + ) + s5-0 + ) + ) + (s5-1 (the-as object #f)) + ) + (when s4-0 + (dotimes (s3-0 (-> (the-as collide-shape-prim-group s4-0) num-prims)) + (let* + ((s2-0 + (the-as + object + (-> + (the-as collide-shape-prim-group (+ (* s3-0 4) (the-as int s4-0))) + prim + 0 + ) + ) + ) + (v1-6 + (if + (and + (nonzero? (the-as uint s2-0)) + (type-type? + (-> (the-as collide-shape-prim s2-0) type) + collide-shape-prim-sphere + ) + ) + (the-as uint s2-0) + ) + ) + ) + (when (the-as uint v1-6) + (if + (or + (not (the-as uint s5-1)) + (< + (-> (the-as collide-shape-prim-sphere v1-6) transform-index) + (-> (the-as collide-shape-prim-group s5-1) transform-index) + ) + (and + (= + (-> (the-as collide-shape-prim-sphere v1-6) transform-index) + (-> (the-as collide-shape-prim-group s5-1) transform-index) + ) + (< + (-> (the-as collide-shape-prim-sphere v1-6) local-sphere y) + (-> (the-as collide-shape-prim-group s5-1) local-sphere y) + ) + ) + ) + (set! s5-1 (the-as uint v1-6)) + ) + ) + ) + ) + (if (the-as collide-shape-prim s5-1) + (set! (-> (the-as collide-shape-prim s5-1) collide-with) arg0) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-set-hit-from-direction +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-set-hit-from-direction nav-enemy ((arg0 process)) + (let* ((gp-0 (-> self hit-from-dir)) + (s5-0 arg0) + (v1-1 + (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) + s5-0 + ) + ) + ) + (set! (-> gp-0 quad) (-> *null-vector* quad)) + (when v1-1 + (vector-! + gp-0 + (-> self collide-info trans) + (-> (the-as process-drawable v1-1) root trans) + ) + (set! (-> gp-0 y) 0.0) + (vector-xz-normalize! gp-0 1.0) + ) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-fall-and-play-death-anim +;; INFO: Return type mismatch int vs none. +(defbehavior + nav-enemy-fall-and-play-death-anim nav-enemy + ((arg0 art-joint-anim) (arg1 float) (arg2 float) (arg3 float) (arg4 int)) + (nav-enemy-neck-control-inactive) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self skel root-channel 0 frame-group) arg0) + (let ((s4-1 #f) + (s3-0 (-> self collide-info)) + ) + (when + (if (and (nonzero? s3-0) (type-type? (-> s3-0 type) collide-shape-moving)) + s3-0 + ) + (when (= (vector-xz-length-squared (-> self hit-from-dir)) 0.0) + (vector-z-quaternion! (-> self hit-from-dir) (-> self collide-info quat)) + (vector-negate-in-place! (-> self hit-from-dir)) + (set! (-> self hit-from-dir y) 0.0) + (vector-xz-normalize! (-> self hit-from-dir) 1.0) + ) + (set! (-> self collide-info transv y) 65502.96) + (let ((v1-14 (-> self skel root-channel 0))) + (set! (-> v1-14 num-func) num-func-identity) + (set! (-> v1-14 frame-num) 0.0) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! + (-> self collide-info status) + (logand -8 (-> self collide-info status)) + ) + (until (begin + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! + (-> a0-13 param 0) + (the float (+ (-> a0-13 frame-group data 0 length) -1)) + ) + (set! (-> a0-13 param 1) arg2) + (joint-control-channel-group-eval! + a0-13 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (cond + ((nonzero? (-> self align)) + (when (not s4-1) + (TODO-RENAME-9 (-> self align)) + (TODO-RENAME-10 (-> self align) 4098 1.0 arg1 1.0) + (when (zero? (logand (-> self align flags) 1)) + (let + ((f0-6 + (* + (- (-> self align delta trans z)) + (-> *display* frames-per-second) + ) + ) + ) + (set! + (-> self collide-info transv x) + (* (-> self hit-from-dir x) f0-6) + ) + (set! + (-> self collide-info transv z) + (* (-> self hit-from-dir z) f0-6) + ) + ) + ) + ) + ) + (else + (let ((f0-8 20480.0)) + (set! (-> self collide-info transv x) (* (-> self hit-from-dir x) f0-8)) + (set! (-> self collide-info transv z) (* (-> self hit-from-dir z) f0-8)) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-turn-to-face-dir +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-turn-to-face-dir nav-enemy ((arg0 vector) (arg1 float)) + (local-vars (v1-16 symbol)) + (let ((s4-0 (-> *display* base-frame-counter))) + (let ((v1-3 (-> self skel root-channel 0))) + (set! + (-> v1-3 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info turn-anim)) + ) + ) + ) + (let ((v1-6 (-> self skel root-channel 0))) + (set! (-> v1-6 num-func) num-func-identity) + (set! (-> v1-6 frame-num) 0.0) + ) + (until v1-16 + (seek-toward-heading-vec! + (-> self collide-info) + arg0 + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) 0.75) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (set! + v1-16 + (or + (>= (the-as int (- (-> *display* base-frame-counter) s4-0)) 3000) + (nav-enemy-facing-direction? arg0 arg1) + ) + ) + ) + ) + (forward-up->quaternion (-> self collide-info quat) arg0 *y-vector*) + 0 + (none) + ) + +;; definition for function nav-enemy-turn-to-face-point +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-turn-to-face-point nav-enemy ((arg0 vector) (arg1 float)) + (let + ((gp-1 + (vector-! (new 'stack-no-clear 'vector) arg0 (-> self collide-info trans)) + ) + ) + (set! (-> gp-1 y) 0.0) + (when (< 0.0 (vector-length gp-1)) + (vector-normalize! gp-1 1.0) + (nav-enemy-turn-to-face-dir gp-1 arg1) + ) + ) + 0 + (none) + ) + +;; definition for method 12 of type nav-enemy +(defmethod run-logic? nav-enemy ((obj nav-enemy)) + (or + (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or + (and + (nonzero? (-> obj draw)) + (and + (>= + (+ + (-> *ACTOR-bank* pause-dist) + (-> obj collide-info pause-adjust-distance) + ) + (vector-vector-distance (-> obj collide-info trans) (camera-pos)) + ) + (or + (logtest? (-> obj draw status) 8) + (!= (-> obj next-state name) 'nav-enemy-idle) + ) + ) + ) + (and + (nonzero? (-> obj skel)) + (!= (-> obj skel root-channel 0) (-> obj skel channel)) + ) + (and (nonzero? (-> obj draw)) (nonzero? (logand (-> obj draw status) 16))) + ) + ) + ) + +;; failed to figure out what this is: +(let + ((gp-0 + (new 'static 'state + :name 'nav-enemy-idle + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 28 (the-as function gp-0)) + (set! (-> gp-0 event) nav-enemy-default-event-handler) + (set! + (-> gp-0 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (nav-enemy-neck-control-inactive) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if (-> self nav-info move-to-ground) + (dummy-60 + (-> self collide-info) + 40960.0 + 40960.0 + #t + (-> self nav-info gnd-collide-with) + ) + ) + (set! (-> self nav-enemy-flags) (logand -7 (-> self nav-enemy-flags))) + (let ((v0-2 300)) + (set! (-> self state-timeout) (the-as uint v0-2)) + v0-2 + ) + ) + ) + ) + (set! + (-> gp-0 trans) + (lambda :behavior nav-enemy + () + (when + (and + (and + *target* + (>= + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + (the-as int (-> self state-timeout)) + ) + (nonzero? (-> self draw)) + (nonzero? (logand (-> self draw status) 8)) + ) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-1) + ) + ) + ) + ) + (set! + (-> gp-0 code) + (lambda :behavior nav-enemy + () + (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) + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.75 1.25))) + (while #t + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-0 post) ja-post) + ) + +;; failed to figure out what this is: +(let + ((gp-1 + (new 'static 'state + :name 'nav-enemy-patrol + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 30 (the-as function gp-1)) + (set! (-> gp-1 event) nav-enemy-default-event-handler) + (set! + (-> gp-1 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! + (-> self nav flags) + (the-as + nav-control-flags + (the-as int (logior #x80000 (-> self nav flags))) + ) + ) + (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) + (logior! (-> self nav-enemy-flags) 8) + (set! (-> self state-timeout) (the-as uint 300)) + (set! (-> self target-speed) (-> self nav-info walk-travel-speed)) + (set! (-> self acceleration) (-> self nav-info walk-acceleration)) + (set! (-> self rotate-speed) (-> self nav-info walk-rotate-speed)) + (let ((v0-0 (-> self nav-info walk-turn-time))) + (set! (-> self turn-time) (the-as uint v0-0)) + (the-as uint v0-0) + ) + ) + ) + ) + (set! + (-> gp-1 exit) + (lambda :behavior nav-enemy + () + (let ((v0-0 (logior (-> self nav-enemy-flags) 8))) + (set! (-> self nav-enemy-flags) v0-0) + v0-0 + ) + ) + ) + (set! + (-> gp-1 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 30 + ) + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + (the-as int (-> self state-timeout)) + ) + (if + (and + (nonzero? (-> self draw)) + (nonzero? (logand (-> self draw status) 8)) + ) + (set! (-> self free-time) (-> *display* base-frame-counter)) + ) + (when + (or + (or + (not *target*) + (< + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (>= + (the-as int (- (-> *display* base-frame-counter) (-> self free-time))) + 600 + ) + ) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-idle)) + ) + (t9-1) + ) + ) + ) + (when + (and + (-> self nav-info use-flee) + (and + (and + *target* + (>= + (-> self nav-info notice-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (let ((gp-0 'racer) + (a1-2 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'query) + (set! (-> a1-2 param 0) (the-as uint 'mode)) + (= gp-0 (send-event-function *target* a1-2)) + ) + ) + ) + (let ((t9-4 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self dummy-22)) + ) + (t9-4) + ) + ) + (when (nav-enemy-notice-player?) + (let ((t9-6 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-notice)) + ) + (t9-6) + ) + ) + ) + ) + ) + (set! + (-> gp-1 code) + (lambda :behavior nav-enemy + () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) f30-0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 param 0) + (the float (+ (-> a0-2 frame-group data 0 length) -1)) + ) + (set! (-> a0-2 param 1) f30-0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + (when (nav-enemy-rnd-go-idle? 0.2) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group! + a0-5 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 180) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + (set! + (-> a0-8 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-8 param 1) f30-0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! + a0-8 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (ja-blend-eval) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! + (-> a0-9 param 0) + (the float (+ (-> a0-9 frame-group data 0 length) -1)) + ) + (set! (-> a0-9 param 1) f30-0) + (joint-control-channel-group-eval! + a0-9 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + (until (begin + (not (nav-enemy-rnd-go-idle? 0.2)) + ) + (let ((a0-11 (-> self skel root-channel 0))) + (set! + (-> a0-11 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + (set! + (-> a0-11 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-11 param 1) f30-0) + (set! (-> a0-11 frame-num) 0.0) + (joint-control-channel-group! + a0-11 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 param 0) + (the float (+ (-> a0-12 frame-group data 0 length) -1)) + ) + (set! (-> a0-12 param 1) f30-0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + (logior! (-> self nav-enemy-flags) 8) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) 1.0) + (joint-control-channel-group! + a0-15 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 180) + (let ((a0-17 (-> self skel root-channel 0))) + (set! + (-> a0-17 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + (set! + (-> a0-17 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-17 param 1) f30-0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! + a0-17 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (ja-blend-eval) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! + (-> a0-18 param 0) + (the float (+ (-> a0-18 frame-group data 0 length) -1)) + ) + (set! (-> a0-18 param 1) f30-0) + (joint-control-channel-group-eval! + a0-18 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-1 post) nav-enemy-patrol-post) + ) + +;; failed to figure out what this is: +(let + ((gp-2 + (new 'static 'state + :name 'nav-enemy-notice + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 29 (the-as function gp-2)) + (set! (-> gp-2 event) nav-enemy-default-event-handler) + (set! + (-> gp-2 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (logior! (-> self nav-enemy-flags) 4) + (nav-enemy-neck-control-look-at) + (when (logtest? (-> self nav-enemy-flags) 2) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-1) + ) + ) + (logior! (-> self nav-enemy-flags) 2) + (let ((gp-0 (-> self nav)) + (v1-10 (target-pos 0)) + ) + (set! (-> gp-0 target-pos quad) (-> v1-10 quad)) + ) + (dummy-11 (-> self nav) (-> self nav target-pos)) + (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) + (let ((v0-4 (-> self nav-info run-turn-time))) + (set! (-> self turn-time) (the-as uint v0-4)) + (the-as uint v0-4) + ) + ) + ) + ) + (set! + (-> gp-2 code) + (lambda :behavior nav-enemy + () + (ja-channel-push! 1 22) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (seek-toward-heading-vec! + (-> self collide-info) + (-> self nav travel) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + (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! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + (let ((t9-6 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-6) + ) + ) + ) + (set! (-> gp-2 post) nav-enemy-simple-post) + ) + +;; definition for function ja-group-index? +(defbehavior ja-group-index? nav-enemy ((arg0 int)) + (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data arg0) + ) + ) + +;; failed to figure out what this is: +(let + ((gp-3 + (new 'static 'state + :name 'nav-enemy-flee + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 22 (the-as function gp-3)) + (set! (-> gp-3 event) nav-enemy-default-event-handler) + (set! + (-> gp-3 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (let ((v0-0 (-> *display* base-frame-counter))) + (set! (-> self state-time) v0-0) + v0-0 + ) + ) + ) + ) + (set! + (-> gp-3 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + (the-as int (-> self reaction-time)) + ) + (when + (or + (or + (not *target*) + (< + (-> self nav-info stop-chase-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (let ((gp-0 'racer) + (a1-1 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'query) + (set! (-> a1-1 param 0) (the-as uint 'mode)) + (!= gp-0 (send-event-function *target* a1-1)) + ) + ) + (let ((t9-2 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-2) + ) + ) + ) + ) + ) + (set! + (-> gp-3 code) + (lambda :behavior nav-enemy + () + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (ja-channel-push! 1 60) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info notice-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) f30-0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + (ja-channel-push! 1 60) + (while #t + (let ((a0-6 (-> self skel root-channel 0))) + (set! + (-> a0-6 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + (set! + (-> a0-6 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-6 param 1) f30-0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! + (-> a0-7 param 0) + (the float (+ (-> a0-7 frame-group data 0 length) -1)) + ) + (set! (-> a0-7 param 1) f30-0) + (joint-control-channel-group-eval! + a0-7 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-3 post) nav-enemy-face-player-post) + ) + +;; definition for function nav-enemy-reset-frustration +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-reset-frustration nav-enemy () + (set! (-> self nav-enemy-flags) (logand -8193 (-> self nav-enemy-flags))) + (if *target* + (set! (-> self frustration-point quad) (-> *target* control shadow-pos quad)) + ) + (set! (-> self frustration-time) (-> *display* base-frame-counter)) + 0 + (none) + ) + +;; definition for function nav-enemy-player-at-frustration-point? +(defbehavior nav-enemy-player-at-frustration-point? nav-enemy () + (if *target* + (< + (vector-vector-distance + (-> *target* control shadow-pos) + (-> self frustration-point) + ) + 6144.0 + ) + ) + ) + +;; definition for function nav-enemy-frustrated? +(defbehavior nav-enemy-frustrated? nav-enemy () + (and + (logtest? (-> self nav-enemy-flags) 8192) + (nav-enemy-player-at-frustration-point?) + ) + ) + +;; failed to figure out what this is: +(let + ((gp-4 + (new 'static 'state + :name 'nav-enemy-chase + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 21 (the-as function gp-4)) + (set! (-> gp-4 event) nav-enemy-default-event-handler) + (set! + (-> gp-4 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (nav-enemy-neck-control-look-at) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self free-time) (-> *display* base-frame-counter)) + (logior! (-> self nav-enemy-flags) 4) + (set! (-> self target-speed) (-> self nav-info run-travel-speed)) + (set! (-> self acceleration) (-> self nav-info run-acceleration)) + (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) + (set! (-> self turn-time) (the-as uint (-> self nav-info run-turn-time))) + (nav-enemy-reset-frustration) + (none) + ) + ) + ) + (set! + (-> gp-4 trans) + (lambda :behavior nav-enemy () (when (logtest? (-> *target* state-flags) 128) + (let + ((t9-0 + (the-as (function object) enter-state) + ) + ) + (set! + (-> self next-state) + (the-as + state + (method-of-object self nav-enemy-patrol) + ) + ) + (t9-0) + ) + ) + (when (logtest? (-> self nav-enemy-flags) 256) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-victory)) + ) + (t9-1) + ) + ) + (if + (or + (not (nav-enemy-player-at-frustration-point?)) + (< + (-> self nav-info frustration-distance) + (vector-vector-xz-distance (target-pos 0) (-> self collide-info trans)) + ) + ) + (nav-enemy-reset-frustration) + ) + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + (the-as int (-> self reaction-time)) + ) + (if + (>= + (the-as + int + (- (-> *display* base-frame-counter) (-> self frustration-time)) + ) + (the-as + int + (+ (-> self reaction-time) (-> self nav-info frustration-time)) + ) + ) + (logior! (-> self nav-enemy-flags) 8192) + ) + (when + (or + (not (TODO-RENAME-46 self (-> self nav-info stop-chase-distance))) + (nonzero? (logand (-> self nav-enemy-flags) 8192)) + ) + (let ((t9-7 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-stop-chase)) + ) + (t9-7) + ) + ) + (cond + ((logtest? #x20000 (-> self nav flags)) + (when + (>= + (the-as int (- (-> *display* base-frame-counter) (-> self free-time))) + 300 + ) + (let ((t9-8 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-8) + ) + ) + ) + (else + (let ((v0-6 (the-as object (-> *display* base-frame-counter)))) + (set! (-> self free-time) (the-as uint v0-6)) + v0-6 + ) + ) + ) + ) + ) + ) + (set! + (-> gp-4 code) + (lambda :behavior nav-enemy + () + (ja-channel-push! 1 60) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (while #t + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-4 post) nav-enemy-chase-post) + ) + +;; failed to figure out what this is: +(let + ((gp-5 + (new 'static 'state + :name 'nav-enemy-stop-chase + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 32 (the-as function gp-5)) + (set! (-> gp-5 event) nav-enemy-default-event-handler) + (set! + (-> gp-5 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let* + ((f30-0 + (vector-vector-distance (-> self collide-info trans) (target-pos 0)) + ) + (gp-1 + (the + int + (+ + (lerp-scale 600.0 1800.0 f30-0 32768.0 122880.0) + (nav-enemy-rnd-float-range 0.0 30.0) + ) + ) + ) + ) + (when (< f30-0 40960.0) + (let ((t9-4 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-stare)) + ) + (t9-4) + ) + ) + (set! (-> self state-timeout) (the-as uint gp-1)) + ) + (set! (-> self target-speed) (-> self nav-info walk-travel-speed)) + (set! (-> self acceleration) (-> self nav-info walk-acceleration)) + (set! (-> self rotate-speed) (-> self nav-info walk-rotate-speed)) + (let ((v0-5 (-> self nav-info walk-turn-time))) + (set! (-> self turn-time) (the-as uint v0-5)) + (the-as uint v0-5) + ) + ) + ) + ) + (set! + (-> gp-5 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 30 + ) + (when (logtest? (-> *target* state-flags) 128) + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-0) + ) + ) + (when + (and + (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (not (nav-enemy-frustrated?)) + ) + (let ((t9-3 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-3) + ) + ) + (when + (or + (or + (not *target*) + (< + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (logtest? #x20000 (-> self nav flags)) + (>= + (the-as + int + (- + (-> *display* base-frame-counter) + (the-as uint (-> self state-time)) + ) + ) + (the-as int (-> self state-timeout)) + ) + ) + (let ((t9-5 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-stare)) + ) + (t9-5) + ) + ) + ) + ) + ) + (set! + (-> gp-5 code) + (lambda :behavior nav-enemy + () + (ja-channel-push! 1 30) + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info walk-anim)) + ) + ) + ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (while #t + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-5 post) nav-enemy-chase-post) + ) + +;; failed to figure out what this is: +(let + ((gp-6 + (new 'static 'state + :name 'nav-enemy-stare + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 31 (the-as function gp-6)) + (set! (-> gp-6 event) nav-enemy-default-event-handler) + (set! + (-> gp-6 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (let + ((f0-0 + (vector-vector-distance (-> self collide-info trans) (target-pos 0)) + ) + ) + (set! + (-> self state-timeout) + (the-as + uint + (the + int + (+ + (lerp-scale 3000.0 0.0 f0-0 12288.0 122880.0) + (nav-enemy-rnd-float-range 0.0 900.0) + ) + ) + ) + ) + ) + (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) + (set! (-> self turn-time) (the-as uint (-> self nav-info run-turn-time))) + (let ((v0-4 (-> self collide-info transv))) + (set! (-> v0-4 quad) (-> *null-vector* quad)) + v0-4 + ) + ) + ) + ) + (set! + (-> gp-6 exit) + (lambda :behavior nav-enemy + () + (let ((v0-0 (logior (-> self nav-enemy-flags) 16))) + (set! (-> self nav-enemy-flags) v0-0) + v0-0 + ) + ) + ) + (set! + (-> gp-6 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 30 + ) + (when (logtest? (-> *target* state-flags) 128) + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-0) + ) + ) + (cond + ((TODO-RENAME-46 self (-> self nav-info notice-distance)) + (when + (and + (>= + (the-as + int + (- (-> *display* base-frame-counter) (-> self notice-time)) + ) + (the-as int (-> self reaction-time)) + ) + (not (nav-enemy-frustrated?)) + ) + (let ((t9-3 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-3) + ) + ) + ) + (else + (set! (-> self notice-time) (-> *display* base-frame-counter)) + ) + ) + (when + (not + (or + (and + *target* + (>= + 40960.0 + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (and + (-> self nav-info use-proximity-notice) + *target* + (>= + (-> self nav-info proximity-notice-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) + (when + (>= + (the-as + int + (- + (-> *display* base-frame-counter) + (the-as uint (-> self state-time)) + ) + ) + (the-as int (-> self state-timeout)) + ) + (let ((t9-6 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-give-up)) + ) + (t9-6) + ) + ) + ) + (when + (or + (or + (not *target*) + (< + (-> self enemy-info idle-distance) + (vector-vector-distance + (-> self collide-info trans) + (-> *target* control trans) + ) + ) + ) + (nonzero? (logand #x20000 (-> self nav flags))) + ) + (let ((t9-8 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-give-up)) + ) + (t9-8) + ) + ) + ) + ) + ) + (set! + (-> gp-6 code) + (lambda :behavior nav-enemy + () + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-give-up)) + ) + (t9-0) + ) + ) + ) + (set! (-> gp-6 post) nav-enemy-face-player-post) + ) + +;; failed to figure out what this is: +(let + ((gp-7 + (new 'static 'state + :name 'nav-enemy-give-up + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 25 (the-as function gp-7)) + (set! (-> gp-7 event) nav-enemy-default-event-handler) + (set! + (-> gp-7 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (nav-enemy-neck-control-inactive) + (let ((v0-1 (logand -5 (-> self nav-enemy-flags)))) + (set! (-> self nav-enemy-flags) v0-1) + v0-1 + ) + ) + ) + ) + (set! + (-> gp-7 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 30 + ) + (when (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-1) + ) + ) + ) + ) + ) + (set! + (-> gp-7 code) + (lambda :behavior nav-enemy + () + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-patrol)) + ) + (t9-0) + ) + ) + ) + (set! (-> gp-7 post) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(let + ((gp-8 + (new 'static 'state + :name 'nav-enemy-attack + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 20 (the-as function gp-8)) + (set! (-> gp-8 event) nav-enemy-default-event-handler) + (set! + (-> gp-8 code) + (lambda :behavior nav-enemy + () + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-victory)) + ) + (t9-0) + ) + ) + ) + (set! (-> gp-8 post) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(let + ((gp-9 + (new 'static 'state + :name 'nav-enemy-victory + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 33 (the-as function gp-9)) + (set! (-> gp-9 event) nav-enemy-default-event-handler) + (set! + (-> gp-9 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy () (let ((v0-0 (-> self collide-info transv))) + (set! + (-> v0-0 quad) + (-> *null-vector* quad) + ) + v0-0 + ) + ) + ) + ) + (set! + (-> gp-9 code) + (lambda :behavior nav-enemy + () + (ja-channel-push! 1 22) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + ) + (set! + (-> a0-2 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-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) f30-0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + (let ((t9-5 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-stare)) + ) + (t9-5) + ) + ) + ) + (set! (-> gp-9 post) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(let + ((gp-10 + (new 'static 'state + :name 'nav-enemy-die + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 23 (the-as function gp-10)) + (set! (-> gp-10 event) process-drawable-death-event-handler) + (set! + (-> gp-10 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (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) 'child-die) + (let ((t9-0 send-event-function) + (v1-1 (-> self parent)) + ) + (t9-0 (the-as process (if v1-1 + (-> v1-1 0 self) + ) + ) + a1-0 + ) + ) + ) + ) + ) + ) + (set! + (-> gp-10 code) + (lambda :behavior nav-enemy + () + (ja-channel-push! 1 22) + (dummy-48 (-> self collide-info)) + (nav-enemy-fall-and-play-death-anim + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info die-anim)) + ) + 1.0 + 1.0 + 1000000000000000.0 + 600 + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'death-end) + (send-event-function self a1-2) + ) + (when (logtest? (-> self enemy-info options) 2) + (let ((t9-4 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-fuel-cell)) + ) + (t9-4) + ) + ) + (while (-> self child) + (suspend) + ) + (dummy-18 self) + ) + ) + (set! (-> gp-10 post) nav-enemy-death-post) + ) + +;; failed to figure out what this is: +(let + ((gp-11 + (new 'static 'state + :name 'nav-enemy-fuel-cell + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 24 (the-as function gp-11)) + (set! + (-> gp-11 event) + (the-as + (function process int symbol event-message-block object) + process-drawable-fuel-cell-handler + ) + ) + (set! + (-> gp-11 code) + (lambda :behavior nav-enemy + () + (ja-channel-set! 0) + (dummy-48 (-> self collide-info)) + (ja-post) + (process-entity-status! self (entity-perm-status complete) #t) + (when (not (task-complete? *game-info* (-> self entity extra perm task))) + (label cfg-1) + (let ((t9-5 birth-pickup-at-point) + (a0-4 (-> self collide-info trans)) + (a1-2 6) + (a2-1 (the float (the-as int (-> self entity extra perm task)))) + (a3-0 #f) + (t1-0 #f) + ) + (t9-5 a0-4 a1-2 a2-1 a3-0 self t1-0) + ) + (when (not (-> self child)) + (suspend) + (goto cfg-1) + ) + (while (-> self child) + (suspend) + ) + ) + (dummy-18 self) + ) + ) + ) + +;; definition for function nav-enemy-jump-post +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior nav-enemy-jump-post nav-enemy () + (if (logtest? (-> self nav-enemy-flags) 16) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self jump-dest) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + ) + (when (logtest? (-> self nav-enemy-flags) 8) + (let + ((f30-0 + (the float (- (-> *display* base-frame-counter) (-> self jump-time))) + ) + ) + (let + ((v1-12 + (eval-position! + (-> self jump-trajectory) + f30-0 + (new 'stack-no-clear 'vector) + ) + ) + ) + (set! (-> self collide-info trans quad) (-> v1-12 quad)) + ) + (eval-velocity! + (-> self jump-trajectory) + f30-0 + (-> self collide-info transv) + ) + ) + ) + (nav-enemy-simple-post) + 0 + (none) + ) + +;; definition for function nav-enemy-initialize-custom-jump +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior + nav-enemy-initialize-custom-jump nav-enemy + ((arg0 vector) (arg1 symbol) (arg2 float) (arg3 float) (arg4 float)) + (set! (-> self jump-dest quad) (-> arg0 quad)) + (let* ((s4-0 (-> self collide-info trans)) + (f28-0 (vector-vector-xz-distance s4-0 arg0)) + (f30-0 (fmax arg2 (* arg3 f28-0))) + ) + (let ((f26-0 (- (-> arg0 y) (-> s4-0 y)))) + (let ((f24-0 (vector-length (-> self collide-info transv))) + (s1-1 + (vector-z-quaternion! + (new 'stack-no-clear 'vector) + (-> self collide-info quat) + ) + ) + (s2-2 (vector-! (new 'stack-no-clear 'vector) arg0 s4-0)) + ) + (set! (-> s1-1 y) 0.0) + (set! (-> s2-2 y) 0.0) + (vector-xz-normalize! s1-1 1.0) + (vector-xz-normalize! s2-2 1.0) + (set! (-> self nav-enemy-flags) (logand -1537 (-> self nav-enemy-flags))) + (if + (or + (>= (* 0.5 (-> self nav-info run-travel-speed)) f24-0) + (>= (cos 3640.889) (vector-dot s1-1 s2-2)) + ) + (logior! (-> self nav-enemy-flags) 512) + ) + ) + (if + (or + (and (< f26-0 0.0) (< f28-0 (fabs f26-0))) + (and (< (fabs f26-0) 12288.0) (< f28-0 20480.0)) + ) + (logior! (-> self nav-enemy-flags) 1024) + ) + ) + (when (and arg1 (nonzero? (logand (-> self nav-enemy-flags) 1024))) + (set! (-> self nav-enemy-flags) (logand -513 (-> self nav-enemy-flags))) + (set! f30-0 2048.0) + ) + (setup-from-to-height! + (-> self jump-trajectory) + s4-0 + arg0 + f30-0 + (* 0.000011111111 arg4) + ) + ) + (set! (-> self nav extra-nav-sphere quad) (-> arg0 quad)) + (set! (-> self nav extra-nav-sphere w) (-> self collide-info nav-radius)) + (logior! (-> self collide-info nav-flags) 2) + 0 + (none) + ) + +;; definition for function nav-enemy-initialize-jump +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-initialize-jump nav-enemy ((arg0 vector)) + (nav-enemy-initialize-custom-jump + arg0 + #t + (-> self nav-info jump-height-min) + (-> self nav-info jump-height-factor) + -409600.0 + ) + 0 + (none) + ) + +;; definition for function nav-enemy-execute-custom-jump +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior + nav-enemy-execute-custom-jump nav-enemy + ((arg0 int) (arg1 float) (arg2 float)) + (when (logtest? (-> self nav-enemy-flags) 512) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) 1.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 30) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (let ((s3-0 (-> self skel root-channel 0))) + (set! + (-> s3-0 frame-group) + (the-as art-joint-anim (-> self draw art-group data arg0)) + ) + (set! (-> s3-0 param 0) (ja-aframe arg1 0)) + (set! (-> s3-0 param 1) arg2) + (set! (-> s3-0 frame-num) 0.0) + (joint-control-channel-group! + s3-0 + (the-as art-joint-anim (-> self draw art-group data arg0)) + num-func-seek! + ) + ) + (until (begin + (ja-blend-eval) + (suspend) + (let ((s3-1 (-> self skel root-channel 0))) + (set! (-> s3-1 param 0) (ja-aframe arg1 0)) + (set! (-> s3-1 param 1) arg2) + (joint-control-channel-group-eval! + s3-1 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-done? 0) + ) + (empty) + ) + ) + (set! (-> self collide-info status) (logand -8 (-> self collide-info status))) + (set! (-> self jump-time) (-> *display* base-frame-counter)) + (logior! (-> self nav-enemy-flags) 8) + (cond + ((logtest? (-> self nav-enemy-flags) 1024) + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + (else + (let ((a0-22 (-> self skel root-channel 0))) + (set! (-> a0-22 param 0) 1.0) + (joint-control-channel-group! + a0-22 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 30) + (let ((v1-39 (-> self skel root-channel 0))) + (set! + (-> v1-39 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info run-anim)) + ) + ) + ) + (let ((v1-42 (-> self skel root-channel 0))) + (set! (-> v1-42 num-func) num-func-identity) + (set! (-> v1-42 frame-num) 0.0) + ) + ) + ) + ) + (else + (let ((a0-30 (-> self skel root-channel 0))) + (set! (-> a0-30 param 0) 1.0) + (joint-control-channel-group! + a0-30 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 30) + (let ((v1-49 (-> self skel root-channel 0))) + (set! + (-> v1-49 frame-group) + (the-as art-joint-anim (-> self draw art-group data arg0)) + ) + ) + (let ((s5-1 (-> self skel root-channel 0))) + (set! (-> s5-1 num-func) num-func-identity) + (set! (-> s5-1 frame-num) (ja-aframe arg1 0)) + ) + ) + ) + (while + (< + (the float (- (-> *display* base-frame-counter) (-> self jump-time))) + (-> self jump-trajectory time) + ) + (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! + ) + ) + (ja-blend-eval) + ) + (set! (-> self collide-info trans quad) (-> self jump-dest quad)) + (set! (-> self collide-info transv y) 0.0) + (set! + (-> self collide-info nav-flags) + (logand -3 (-> self collide-info nav-flags)) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-execute-jump +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-execute-jump nav-enemy () + (nav-enemy-execute-custom-jump + (-> self nav-info jump-anim) + (-> self nav-info jump-anim-start-frame) + (-> self nav-info jump-start-anim-speed) + ) + 0 + (none) + ) + +;; definition for function nav-enemy-jump-land-anim +;; INFO: Return type mismatch int vs none. +(defbehavior nav-enemy-jump-land-anim nav-enemy () + (let ((a0-0 (-> self skel root-channel 0))) + (set! + (-> a0-0 param 0) + (the float (+ (-> a0-0 frame-group data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) + ) + (ja-channel-push! 1 22) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info jump-land-anim)) + ) + 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 (-> self nav-info jump-land-anim)) + ) + num-func-seek! + ) + ) + (until (begin + (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! + ) + ) + (ja-done? 0) + ) + (empty) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(let + ((gp-12 + (new 'static 'state + :name 'nav-enemy-jump + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 26 (the-as function gp-12)) + (set! (-> gp-12 event) nav-enemy-jump-event-handler) + (set! + (-> gp-12 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (when + (and + (-> self nav-info use-jump-blocked) + (TODO-RENAME-50 self (-> self event-param-point)) + ) + (let ((t9-1 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self dummy-74)) + ) + (t9-1) + ) + ) + (nav-enemy-initialize-jump (-> self event-param-point)) + (none) + ) + ) + ) + (set! + (-> gp-12 exit) + (lambda :behavior nav-enemy + () + (let ((v0-0 (logior (-> self nav-enemy-flags) 24))) + (set! (-> self nav-enemy-flags) v0-0) + v0-0 + ) + ) + ) + (set! + (-> gp-12 code) + (lambda :behavior nav-enemy + () + (nav-enemy-execute-jump) + (let ((a1-0 (the-as structure (-> self nav user-poly)))) + (if (not (the-as nav-poly a1-0)) + (set! a1-0 (dummy-16 (-> self nav) (-> self jump-dest))) + ) + (if a1-0 + ((method-of-object (-> self nav) dummy-14)) + ) + ) + (let ((t9-3 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-jump-land)) + ) + (t9-3) + ) + ) + ) + (set! (-> gp-12 post) nav-enemy-jump-post) + ) + +;; definition for function nav-enemy-jump-land-post +;; Used lq/sq +(defbehavior nav-enemy-jump-land-post nav-enemy () + (TODO-RENAME-9 (-> self align)) + (dummy-11 (-> self nav) (-> self nav target-pos)) + (set! + (-> self target-speed) + (seek (-> self target-speed) (-> self nav-info run-travel-speed) 2048.0) + ) + (set! (-> self momentum-speed) (-> self target-speed)) + (let* + ((f0-7 + (fmin + (* (-> self speed-scale) (-> self momentum-speed)) + (* (vector-length (-> self nav travel)) (-> *display* frames-per-second)) + ) + ) + (v1-9 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> self nav travel) + f0-7 + ) + ) + ) + (set! (-> self collide-info transv x) (-> v1-9 x)) + (set! (-> self collide-info transv z) (-> v1-9 z)) + ) + (if + (or + (logtest? (-> self nav-enemy-flags) 128) + (nonzero? (logand #x80000 (-> self nav flags))) + ) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav target-pos) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + (seek-toward-heading-vec! + (-> self collide-info) + (-> self nav travel) + (-> self rotate-speed) + (the-as int (-> self turn-time)) + ) + ) + (vector-v++! + (-> self collide-info transv) + (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0) + ) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (-> self nav-info gnd-collide-with) + 8192.0 + #f + (-> self nav-info hover-if-no-ground) + #f + ) + (nav-enemy-common-post) + (none) + ) + +;; failed to figure out what this is: +(let + ((gp-13 + (new 'static 'state + :name 'nav-enemy-jump-land + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 27 (the-as function gp-13)) + (set! (-> gp-13 event) nav-enemy-default-event-handler) + (set! + (-> gp-13 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (logclear! (-> self nav flags) (nav-control-flags bit19)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self collide-info transv quad)) + (set! (-> gp-0 y) 0.0) + (set! (-> self target-speed) (vector-length gp-0)) + (set! (-> self momentum-speed) (-> self target-speed)) + (vector-xz-normalize! gp-0 16384.0) + (vector+! (-> self nav target-pos) (-> self collide-info trans) gp-0) + ) + ) + ) + ) + (set! + (-> gp-13 trans) + (lambda :behavior nav-enemy + () + (when + (or + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 150 + ) + (nonzero? (logand #x80000 (-> self nav flags))) + ) + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> self next-state) + (the-as state (method-of-object self nav-enemy-chase)) + ) + (t9-0) + ) + ) + ) + ) + (set! + (-> gp-13 code) + (lambda :behavior nav-enemy + () + (nav-enemy-jump-land-anim) + (let ((t9-1 (the-as (function object) enter-state))) + (set! (-> self next-state) (the-as state (-> self jump-return-state))) + (t9-1) + ) + ) + ) + (set! (-> gp-13 post) nav-enemy-jump-land-post) + ) + +;; failed to figure out what this is: +(let + ((gp-14 + (new 'static 'state + :name 'nav-enemy-jump-blocked + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 74 (the-as function gp-14)) + (set! (-> gp-14 event) nav-enemy-default-event-handler) + (set! + (-> gp-14 enter) + (the-as + (function object object object object object object object) + (lambda :behavior nav-enemy + () + (let ((v0-0 (-> *display* base-frame-counter))) + (set! (-> self state-time) v0-0) + v0-0 + ) + ) + ) + ) + (set! + (-> gp-14 trans) + (lambda :behavior nav-enemy + () + (when + (>= + (the-as + int + (- (-> *display* base-frame-counter) (the-as uint (-> self state-time))) + ) + 150 + ) + (let ((t9-0 (the-as (function object) enter-state))) + (set! (-> self next-state) (the-as state (-> self jump-return-state))) + (t9-0) + ) + ) + ) + ) + (set! + (-> gp-14 code) + (lambda :behavior nav-enemy + () + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + (ja-channel-push! 1 60) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + num-func-identity + ) + (set! + (-> gp-0 frame-num) + (rand-vu-float-range + 0.0 + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.75 1.25))) + (while #t + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 param 0) f30-0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (none) + ) + ) + (set! (-> gp-14 post) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(let + ((gp-15 + (new 'static 'state + :name 'nav-enemy-wait-for-cue + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 35 (the-as function gp-15)) + (set! (-> gp-15 event) nav-enemy-default-event-handler) + (set! + (-> gp-15 code) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (logior! (-> self nav-enemy-flags) 2048) + (ja-channel-push! 1 30) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (let ((v1-6 (-> self skel root-channel 0))) + (set! + (-> v1-6 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info idle-anim)) + ) + ) + ) + (let ((v1-9 (-> self skel root-channel 0))) + (set! (-> v1-9 num-func) num-func-identity) + (set! (-> v1-9 frame-num) 0.0) + ) + (while (logtest? (-> self nav-enemy-flags) 2048) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! + a0-8 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + (ja-channel-push! 1 30) + (nav-enemy-turn-to-face-point (-> self event-param-point) 910.2222) + (let ((gp-0 (nav-enemy-rnd-int-range 0 150)) + (s5-0 (-> *display* base-frame-counter)) + ) + (until (begin + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) f30-0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (suspend) + (>= (the-as int (- (-> *display* base-frame-counter) s5-0)) gp-0) + ) + (empty) + ) + ) + ) + (let ((t9-7 (the-as (function object) enter-state))) + (set! (-> self next-state) (the-as state (method-of-object self dummy-36))) + (t9-7) + ) + ) + ) + (set! (-> gp-15 post) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(let + ((gp-16 + (new 'static 'state + :name 'nav-enemy-jump-to-point + :next #f + :exit #f + :code #f + :trans #f + :post #f + :enter #f + :event #f + ) + ) + ) + (method-set! nav-enemy 36 (the-as function gp-16)) + (set! (-> gp-16 event) nav-enemy-jump-event-handler) + (set! + (-> gp-16 exit) + (lambda :behavior nav-enemy + () + (let ((v0-0 (logior (-> self nav-enemy-flags) 24))) + (set! (-> self nav-enemy-flags) v0-0) + v0-0 + ) + ) + ) + (set! (-> gp-16 trans) (the-as (function object) (lambda () + 0 + (none) + ) + ) + ) + (set! + (-> gp-16 code) + (lambda :behavior nav-enemy + () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (nav-enemy-initialize-jump (-> self event-param-point)) + (nav-enemy-neck-control-look-at) + (logior! (-> self nav-enemy-flags) 16) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (when (not (nav-enemy-facing-point? (-> self jump-dest) 5461.3335)) + (ja-channel-push! 1 60) + (nav-enemy-turn-to-face-point (-> self jump-dest) 1820.4445) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (nav-enemy-execute-jump) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (nav-enemy-jump-land-anim) + (let ((t9-7 (the-as (function object) enter-state))) + (set! (-> self next-state) (the-as state (method-of-object self dummy-35))) + (t9-7) + ) + (none) + ) + ) + (set! (-> gp-16 post) nav-enemy-jump-post) + ) + +;; definition for symbol *nav-enemy-dummy-shadow-control*, type shadow-control +(define + *nav-enemy-dummy-shadow-control* + (new 'static 'shadow-control + :settings + (new 'static 'shadow-settings + :center + (new 'static 'vector :w 0.000000000000000000000000000000000000000000056) + :shadow-dir + (new 'static 'vector :y -1.0 :w 614400.0) + :bot-plane (new 'static 'plane :y 1.0 :w 4096.0) + :top-plane (new 'static 'plane :y 1.0 :w -4096.0) + ) + ) + ) + +;; definition for method 45 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-45 nav-enemy ((obj nav-enemy) (arg0 nav-enemy-info)) + (set! (-> obj rand-gen) (new 'process 'random-generator)) + (set! (-> obj rand-gen seed) (the-as uint #x666edd1e)) + (set! (-> obj mask) (the-as process-mask (logior #x20000 (-> obj mask)))) + (TODO-RENAME-49 obj arg0) + (if (-> obj draw shadow) + (set! + (-> obj draw shadow-ctrl) + (new + 'process + 'shadow-control + (-> obj nav-info shadow-min-y) + (-> obj nav-info shadow-max-y) + (-> obj nav-info shadow-locus-dist) + (the-as float 17) + 245760.0 + ) + ) + (set! (-> obj draw shadow-ctrl) *nav-enemy-dummy-shadow-control*) + ) + (set! (-> obj align) (new 'process 'align-control obj)) + (set! + (-> obj nav) + (new + 'process + 'nav-control + (-> obj collide-info) + 16 + (-> arg0 nav-nearest-y-threshold) + ) + ) + (logior! + (-> obj nav flags) + (nav-control-flags display-marks bit0 bit3 bit5 bit6 bit7) + ) + (set! (-> obj nav gap-event) 'jump) + (dummy-26 (-> obj nav)) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! + (-> obj path flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (set! + (-> obj enemy-info) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! (-> obj reaction-time) (the-as uint (nav-enemy-rnd-int-range 30 240))) + (set! (-> obj speed-scale) 1.0) + (logior! (-> obj nav-enemy-flags) 4216) + 0 + (none) + ) + +;; definition for method 49 of type nav-enemy +(defmethod TODO-RENAME-49 nav-enemy ((obj nav-enemy) (arg0 nav-enemy-info)) + (set! (-> obj nav-info) arg0) + (set! (-> obj rotate-speed) (-> obj nav-info walk-rotate-speed)) + (set! (-> obj turn-time) (the-as uint (-> obj nav-info walk-turn-time))) + (when (and (!= (-> obj nav-info neck-joint) -1) (zero? (-> obj neck))) + (set! + (-> obj neck) + (new + 'process + 'joint-mod + (joint-mod-handler-mode flex-blend) + obj + (-> obj nav-info neck-joint) + ) + ) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> obj neck up) (the-as uint 1)) + (set! (-> obj neck nose) (the-as uint 2)) + (set! (-> obj neck ear) (the-as uint 0)) + (set! (-> obj neck max-dist) 102400.0) + (let ((f0-6 16384.0)) + (set! (-> obj neck ignore-angle) f0-6) + f0-6 + ) + ) + ) + +;; definition for function nav-enemy-init-by-other +;; INFO: Return type mismatch object vs nav-enemy. +;; Used lq/sq +(defbehavior + nav-enemy-init-by-other nav-enemy + ((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) + (let ((v1-13 -4097) + (a0-10 (-> self nav-enemy-flags)) + ) + (set! (-> self nav-enemy-flags) (logand v1-13 a0-10)) + (logior! (-> self nav-enemy-flags) 2) + (let ((t9-5 (the-as (function object object) enter-state))) + (set! (-> self next-state) (the-as state (method-of-object self dummy-35))) + (the-as nav-enemy (t9-5 a0-10)) + ) + ) + ) + +;; definition for method 47 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-47 nav-enemy ((obj nav-enemy)) + 0 + (none) + ) + +;; definition for method 48 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-48 nav-enemy ((obj nav-enemy)) + 0 + (none) + ) + +;; definition for method 59 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-59 nav-enemy ((obj nav-enemy)) + (with-pp + (let ((t9-0 (the-as (function object) enter-state))) + (set! + (-> pp next-state) + (the-as state (method-of-object obj nav-enemy-idle)) + ) + (t9-0) + ) + 0 + (none) + ) + ) + +;; definition for method 11 of type nav-enemy +;; INFO: Return type mismatch int vs none. +(defmethod copy-defaults! nav-enemy ((obj nav-enemy) (arg0 res-lump)) + (TODO-RENAME-47 obj) + (process-drawable-from-entity! obj arg0) + (TODO-RENAME-48 obj) + (TODO-RENAME-59 obj) + 0 + (none) + ) + +;; definition for method 50 of type nav-enemy +;; Used lq/sq +(defmethod TODO-RENAME-50 nav-enemy ((obj nav-enemy) (arg0 vector)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set! (-> s4-0 quad) (-> obj collide-info trans quad)) + (set! (-> obj collide-info trans quad) (-> arg0 quad)) + (let ((gp-0 (-> obj nav))) + (dummy-28 gp-0 -1) + (set! (-> obj collide-info trans quad) (-> s4-0 quad)) + (let* ((v1-8 (-> gp-0 mesh origin)) + (f0-1 (- (-> arg0 x) (-> v1-8 x))) + (f1-2 (- (-> arg0 z) (-> v1-8 z))) + ) + (countdown (v1-9 (-> gp-0 num-spheres)) + (let* ((a0-10 (-> gp-0 sphere v1-9)) + (f2-2 (- (-> a0-10 x) f0-1)) + (f3-1 (- (-> a0-10 z) f1-2)) + (f4-0 (-> a0-10 w)) + ) + (if (>= (* f4-0 f4-0) (+ (* f2-2 f2-2) (* f3-1 f3-1))) + (return #t) + ) + ) + ) + ) + ) + ) + #f + ) diff --git a/test/decompiler/reference/levels/misty/misty-teetertotter_REF.gc b/test/decompiler/reference/levels/misty/misty-teetertotter_REF.gc index c7d81e6dcd..40d17f66c2 100644 --- a/test/decompiler/reference/levels/misty/misty-teetertotter_REF.gc +++ b/test/decompiler/reference/levels/misty/misty-teetertotter_REF.gc @@ -166,52 +166,54 @@ (lambda :behavior teetertotter ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (when (= arg2 'touch) - (-> arg3 param 0) - (let ((t9-0 (method-of-type touching-shapes-entry dummy-12))) - (-> self root) - 1 - (when (and (t9-0) (-> self rock-is-dangerous)) - (let ((a1-2 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 2) - (set! (-> a1-2 message) 'attack) - (set! (-> a1-2 param 0) (-> arg3 param 0)) - (let ((a0-2 (new 'static 'attack-info :mask #x20))) - (set! (-> a0-2 mode) 'deadly) - (set! (-> a1-2 param 1) (the-as uint a0-2)) - ) - (send-event-function arg0 a1-2) + (when + (and + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root)) + (the-as uint 1) ) + (-> self rock-is-dangerous) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (let ((a0-2 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-2 mode) 'deadly) + (set! (-> a1-2 param 1) (the-as uint a0-2)) + ) + (send-event-function arg0 a1-2) ) ) - (-> arg3 param 0) - (let ((t9-2 (method-of-type touching-shapes-entry dummy-12))) - (-> self root) - 2 - (when - (and - (t9-2) - (target-on-end-of-teetertotter? self) - (not (-> self launched-player)) - (-> self in-launch-window) + (when + (and + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root)) + (the-as uint 2) ) - (let ((a1-4 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-4 from) self) - (set! (-> a1-4 num-params) 2) - (set! (-> a1-4 message) 'shove) - (set! (-> a1-4 param 0) (the-as uint #f)) - (let ((v1-16 (new 'static 'attack-info :mask #xcc0))) - (set! (-> v1-16 shove-back) 0.0) - (set! (-> v1-16 shove-up) 53248.0) - (set! (-> v1-16 angle) 'jump) - (set! (-> v1-16 control) 1.0) - (set! (-> a1-4 param 1) (the-as uint v1-16)) - ) - (when (send-event-function arg0 a1-4) - (let ((v0-0 #t)) - (set! (-> self launched-player) v0-0) - v0-0 - ) + (target-on-end-of-teetertotter? self) + (not (-> self launched-player)) + (-> self in-launch-window) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'shove) + (set! (-> a1-4 param 0) (the-as uint #f)) + (let ((v1-16 (new 'static 'attack-info :mask #xcc0))) + (set! (-> v1-16 shove-back) 0.0) + (set! (-> v1-16 shove-up) 53248.0) + (set! (-> v1-16 angle) 'jump) + (set! (-> v1-16 control) 1.0) + (set! (-> a1-4 param 1) (the-as uint v1-16)) + ) + (when (send-event-function arg0 a1-4) + (let ((v0-0 #t)) + (set! (-> self launched-player) v0-0) + v0-0 ) ) ) @@ -479,3 +481,7 @@ (go teetertotter-idle) (none) ) + + + +