mirror of
https://github.com/open-goal/jak-project
synced 2026-08-07 18:23:13 -04:00
122de4ecf5
After spending the last month staring at and comparing Jak 3 and Jak 1 versions of a bunch of `target` code for my jetboard mod, I figured this would be a good opportunity to revive this ancient PR #1714 along with some other small misc fixes/improvements. Instead of directly replacing the old fields, I decided to opt for using overlay fields to maintain backwards compatibility with existing manual patches, files without ref tests and mods that might use these fields.
445 lines
19 KiB
Common Lisp
Vendored
Generated
445 lines
19 KiB
Common Lisp
Vendored
Generated
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; definition for function collide-shape-moving-angle-set!
|
|
;; INFO: Used lq/sq
|
|
;; INFO: Return type mismatch int vs none.
|
|
(defun collide-shape-moving-angle-set! ((arg0 collide-shape-moving) (arg1 vector) (arg2 vector))
|
|
(set! (-> arg0 surface-normal quad) (-> arg1 quad))
|
|
(set! (-> arg0 surface-angle) (vector-dot arg1 (-> arg0 dynam gravity-normal)))
|
|
(set! (-> arg0 poly-angle) (vector-dot (-> arg0 poly-normal) (-> arg0 dynam gravity-normal)))
|
|
(set! (-> arg0 touch-angle)
|
|
(fmax
|
|
(-> arg0 touch-angle)
|
|
(vector-dot arg1 (vector-normalize! (vector-negate! (new-stack-vector0) arg2) 1.0))
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for function poly-find-nearest-edge
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Stack slot offset 36 signed mismatch
|
|
;; WARN: Stack slot offset 36 signed mismatch
|
|
;; WARN: Stack slot offset 48 signed mismatch
|
|
;; WARN: Stack slot offset 36 signed mismatch
|
|
;; WARN: Stack slot offset 36 signed mismatch
|
|
;; WARN: Stack slot offset 48 signed mismatch
|
|
;; ERROR: Failed store: (s.q! v1-20 a0-7) at op 72
|
|
(defun poly-find-nearest-edge ((arg0 vector) (arg1 (inline-array vector)) (arg2 vector) (arg3 vector))
|
|
(let ((sv-32 (new 'stack-no-clear 'vector))
|
|
(sv-36 4095996000.0)
|
|
(sv-40 -1)
|
|
)
|
|
(let ((sv-48 0.0))
|
|
(dotimes (s2-0 3)
|
|
(let* ((s0-0 (-> arg1 s2-0))
|
|
(sv-80 (-> arg1 (mod (+ s2-0 1) 3)))
|
|
(f30-0 (vector-line-distance-point! arg2 s0-0 sv-80 sv-32))
|
|
(s1-1 (vector-! (new 'stack-no-clear 'vector) sv-80 s0-0))
|
|
)
|
|
0.0
|
|
(vector-normalize! s1-1 1.0)
|
|
(let ((f0-5 (fabs (vector-dot arg3 s1-1))))
|
|
(when (or (< f30-0 sv-36) (and (= f30-0 sv-36) (< sv-48 f0-5)))
|
|
(set! sv-36 f30-0)
|
|
(set! sv-40 s2-0)
|
|
(set! sv-48 f0-5)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((v1-20 (&-> arg0 x))
|
|
(a0-7 (-> arg1 sv-40 quad))
|
|
)
|
|
(s.q! v1-20 a0-7)
|
|
)
|
|
(set! (-> (&+ arg0 16) quad) (-> arg1 (mod (+ sv-40 1) 3) quad))
|
|
)
|
|
arg0
|
|
)
|
|
|
|
;; definition for function target-collision-low-coverage
|
|
;; INFO: Used lq/sq
|
|
;; INFO: Return type mismatch int vs uint.
|
|
(defun target-collision-low-coverage ((arg0 control-info)
|
|
(arg1 collide-shape-intersect)
|
|
(arg2 vector)
|
|
(arg3 (pointer uint32))
|
|
(arg4 (pointer uint64))
|
|
(arg5 (pointer symbol))
|
|
)
|
|
(let ((sv-16 arg2)
|
|
(sv-20 arg3)
|
|
(sv-24 arg4)
|
|
(sv-28 arg5)
|
|
(sv-32 (the-as cshape-reaction-flags (-> arg3 0)))
|
|
(sv-40 (the-as cshape-moving-flags (-> arg4 0)))
|
|
(sv-48 (-> arg5 0))
|
|
)
|
|
(let ((sv-52 (-> arg0 low-coverage-tangent)))
|
|
(let ((sv-56 (vector-cross! (-> arg0 low-coverage-overhang-plane-normal) (-> arg0 poly-normal) sv-16)))
|
|
(vector-normalize! sv-56 1.0)
|
|
(if (>= (fabs (vector-dot (-> arg0 dynam gravity-normal) sv-56)) 0.866)
|
|
(logior! sv-32 (cshape-reaction-flags csrf09))
|
|
)
|
|
(vector-cross! sv-52 sv-16 sv-56)
|
|
)
|
|
(if (< 0.0 (vector-dot (-> arg0 dynam gravity-normal) sv-52))
|
|
(vector-negate! sv-52 sv-52)
|
|
)
|
|
(vector-normalize! sv-52 1.0)
|
|
(let ((sv-160 (vector-flatten! (-> arg0 low-coverage-tangent-xz) sv-52 (-> arg0 dynam gravity-normal)))
|
|
(sv-164 (new 'stack 'collide-tri-result))
|
|
)
|
|
(vector-normalize! sv-160 1.0)
|
|
(if (< (vector-dot sv-160 sv-16) 0.0)
|
|
(vector-negate! sv-160 sv-160)
|
|
)
|
|
(set! (-> arg0 low-coverage-slope-to-next1) 4095996000.0)
|
|
(set! (-> arg0 low-coverage-slope-to-next2) 4095996000.0)
|
|
(let ((sv-208 (vector+float*! (new 'stack-no-clear 'vector) (-> arg1 best-tri intersect) sv-160 2867.2))
|
|
(sv-212 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> arg0 dynam gravity-normal) -20480.0))
|
|
)
|
|
(vector+float*! sv-212 sv-212 sv-160 4096.0)
|
|
(when (>= (probe-using-line-sphere
|
|
*collide-cache*
|
|
sv-208
|
|
sv-212
|
|
409.6
|
|
(-> arg1 best-from-prim collide-with)
|
|
sv-164
|
|
(new 'static 'pat-surface :noentity #x1)
|
|
)
|
|
0.0
|
|
)
|
|
(set! (-> arg0 low-coverage-slope-to-next1)
|
|
(vector-dot
|
|
(-> arg0 dynam gravity-normal)
|
|
(vector-! (new 'stack-no-clear 'vector) (-> arg1 best-tri intersect) (-> sv-164 intersect))
|
|
)
|
|
)
|
|
(set! (-> arg0 unknown-float-coverage-1) (the-as float (-> sv-164 pat)))
|
|
(set! (-> arg0 unknown-vector-coverage-0 quad) (-> sv-164 normal quad))
|
|
0
|
|
)
|
|
)
|
|
(let ((sv-272 (vector+float*!
|
|
(new 'stack-no-clear 'vector)
|
|
(-> arg1 best-tri intersect)
|
|
(-> arg0 dynam gravity-normal)
|
|
819.2
|
|
)
|
|
)
|
|
(sv-276 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> arg0 dynam gravity-normal) -20480.0))
|
|
)
|
|
(vector+float*! sv-272 sv-272 sv-160 -819.2)
|
|
(vector+float*! sv-276 sv-276 sv-160 -4096.0)
|
|
(when (>= (probe-using-line-sphere
|
|
*collide-cache*
|
|
sv-272
|
|
sv-276
|
|
409.6
|
|
(-> arg1 best-from-prim collide-with)
|
|
sv-164
|
|
(new 'static 'pat-surface :noentity #x1)
|
|
)
|
|
0.0
|
|
)
|
|
(set! (-> arg0 low-coverage-slope-to-next2) (vector-vector-distance sv-272 (-> sv-164 intersect)))
|
|
(set! (-> arg0 unknown-u32-coverage-0) (the-as uint (-> sv-164 pat)))
|
|
(set! (-> arg0 unknown-vector-coverage-1 quad) (-> sv-164 normal quad))
|
|
0
|
|
)
|
|
)
|
|
)
|
|
(when (and (not (logtest? sv-32 (cshape-reaction-flags csrf09)))
|
|
(and (or (< (* 1.25 (-> arg1 best-from-prim local-sphere w)) (-> arg0 low-coverage-slope-to-next1))
|
|
(= (shr (shl (the-as int (-> arg0 unknown-float-coverage-1)) 58) 61) 1)
|
|
)
|
|
(and (< (-> arg0 low-coverage-slope-to-next2) (* 2.0 (-> arg1 best-from-prim local-sphere w)))
|
|
(zero? (shr (shl (-> arg0 unknown-u32-coverage-0) 58) 61))
|
|
)
|
|
)
|
|
)
|
|
(logior! sv-32 (cshape-reaction-flags csrf07))
|
|
(set! (-> arg0 unknown-dword-coverage) (the-as int (current-time)))
|
|
(logior! sv-40 (cshape-moving-flags csmf07))
|
|
(set-time! (-> arg0 time-of-last-lc))
|
|
(let ((f30-0 (vector-dot sv-52 (-> arg0 turn-to-target)))
|
|
(f0-21 (if (logtest? sv-32 (cshape-reaction-flags csrf01))
|
|
(cos (- 16384.0 (acos (-> arg0 coverage))))
|
|
(-> arg0 coverage)
|
|
)
|
|
)
|
|
(f1-11 (vector-dot
|
|
(-> arg0 dynam gravity-normal)
|
|
(vector-! (new 'stack-no-clear 'vector) (-> arg0 trans) (-> arg1 best-tri intersect))
|
|
)
|
|
)
|
|
)
|
|
(if (or (not (logtest? sv-32 (cshape-reaction-flags csrf05))) (< 0.5 f0-21))
|
|
(set! sv-48 (the-as symbol #f))
|
|
)
|
|
(when (and (or (and (< f0-21 0.95) (>= f30-0 0.0))
|
|
(and (logtest? sv-32 (cshape-reaction-flags csrf05)) (< f0-21 0.3))
|
|
(< f1-11 (/ (-> arg1 best-from-prim local-sphere w) -4))
|
|
)
|
|
(>= (vector-dot sv-52 sv-16) -0.000001)
|
|
)
|
|
(set! (-> arg0 surf) *edge-surface*)
|
|
(logior! sv-32 (cshape-reaction-flags csrf10))
|
|
(set! sv-48 (the-as symbol #f))
|
|
(when (logtest? sv-32 (cshape-reaction-flags csrf05))
|
|
(set! sv-48 #t)
|
|
(logior! sv-32 (cshape-reaction-flags csrf12))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (< (-> arg0 surface-angle) 0.0)
|
|
(set! sv-48 #t)
|
|
)
|
|
(when sv-48
|
|
(cond
|
|
((and (or (= (-> arg0 poly-pat mode) (pat-mode ground))
|
|
(and (logtest? sv-32 (cshape-reaction-flags csrf03))
|
|
(>= (* 1.25 (-> arg1 best-from-prim local-sphere w)) (-> arg0 low-coverage-slope-to-next1))
|
|
(zero? (shr (shl (the-as int (-> arg0 unknown-float-coverage-1)) 58) 61))
|
|
(< 0.3 (fabs (-> arg0 surface-angle)))
|
|
)
|
|
)
|
|
(not (logtest? sv-32 (cshape-reaction-flags csrf07)))
|
|
)
|
|
(logior! sv-32 (cshape-reaction-flags csrf06))
|
|
(logior! sv-40 (cshape-moving-flags csmf07))
|
|
(set-time! (-> arg0 time-of-last-lc))
|
|
(set! sv-48 (the-as symbol #f))
|
|
)
|
|
(#t
|
|
(logior! sv-32 (cshape-reaction-flags csrf06))
|
|
(logior! sv-40 (cshape-moving-flags csmf07))
|
|
(set-time! (-> arg0 time-of-last-lc))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> sv-24 0) (the-as uint sv-40))
|
|
(set! (-> sv-20 0) (the-as uint sv-32))
|
|
(set! (-> sv-28 0) sv-48)
|
|
)
|
|
(the-as uint 0)
|
|
)
|
|
|
|
;; definition for function target-collision-reaction
|
|
;; INFO: Used lq/sq
|
|
(defun target-collision-reaction ((arg0 control-info) (arg1 collide-shape-intersect) (arg2 vector) (arg3 vector))
|
|
(let ((sv-80 (new-stack-vector0))
|
|
(sv-84 (new-stack-vector0))
|
|
(v1-2 (new 'stack-no-clear 'matrix))
|
|
)
|
|
(dotimes (a0-1 2)
|
|
(set! (-> v1-2 vector a0-1 quad) (the-as uint128 0))
|
|
)
|
|
(let ((sv-88 v1-2)
|
|
(moving-flags (cshape-moving-flags))
|
|
)
|
|
(let ((react-flags (cshape-reaction-flags)))
|
|
(set! (-> sv-88 vector 0 quad) (-> arg3 quad))
|
|
(set! (-> sv-88 vector 1 quad) (-> arg3 quad))
|
|
(let ((a1-3 (new 'stack-no-clear 'vector)))
|
|
(vector-float*! a1-3 (-> arg1 move-vec) (-> arg1 best-u))
|
|
(move-by-vector! arg0 a1-3)
|
|
)
|
|
(set-and-handle-pat! arg0 (-> arg1 best-tri pat))
|
|
(if (= (-> arg0 poly-pat mode) (pat-mode wall))
|
|
(logior! react-flags (cshape-reaction-flags csrf00))
|
|
)
|
|
(if (logtest? (-> arg0 mod-surface flags) (surface-flags jump))
|
|
(logior! react-flags (cshape-reaction-flags csrf05))
|
|
)
|
|
(let ((v1-23 (new 'stack-no-clear 'vector)))
|
|
(set! (-> v1-23 quad) (-> arg1 best-from-prim prim-core world-sphere quad))
|
|
(vector-! sv-80 v1-23 (-> arg1 best-tri intersect))
|
|
)
|
|
(vector-normalize! sv-80 1.0)
|
|
(set! (-> arg0 coverage) (vector-dot sv-80 (-> arg1 best-tri normal)))
|
|
(when (< (-> arg0 coverage) 0.0)
|
|
(set! (-> arg0 coverage) 0.0)
|
|
(vector-flatten! sv-80 sv-80 (-> arg1 best-tri normal))
|
|
(vector-normalize! sv-80 1.0)
|
|
)
|
|
(if (< (-> arg0 coverage) 0.9999)
|
|
(logior! react-flags (cshape-reaction-flags csrf03 csrf04))
|
|
)
|
|
(set! (-> sv-84 quad) (-> sv-80 quad))
|
|
(if (= (-> arg1 best-u) 0.0)
|
|
(move-by-vector! arg0 (vector-normalize-copy! (new-stack-vector0) sv-84 3.0))
|
|
)
|
|
(set! (-> arg0 poly-normal quad) (-> arg1 best-tri normal quad))
|
|
(collide-shape-moving-angle-set! arg0 sv-84 (-> sv-88 vector 0))
|
|
(if (< (-> arg0 poly-angle) -0.2)
|
|
(logior! moving-flags (cshape-moving-flags t-ceil))
|
|
)
|
|
(if (< (-> arg0 poly-angle) 0.0)
|
|
(logior! moving-flags (cshape-moving-flags t-ceil-sticky))
|
|
)
|
|
(let ((sv-160 (< (fabs (-> arg0 surface-angle)) (-> *pat-mode-info* (-> arg0 cur-pat mode) wall-angle))))
|
|
(if (and sv-160 (and (= (-> arg0 mod-surface mode) 'dive) (< 0.2 (fabs (-> arg0 surface-angle)))))
|
|
(set! sv-160 (the-as symbol #f))
|
|
)
|
|
(if sv-160
|
|
(logior! react-flags (cshape-reaction-flags csrf01))
|
|
)
|
|
(if (logtest? react-flags (cshape-reaction-flags csrf03))
|
|
(target-collision-low-coverage arg0 arg1 sv-84 (& react-flags) (& moving-flags) (& sv-160))
|
|
)
|
|
(when (not (logtest? (-> arg0 prev-status) (cshape-moving-flags onsurf)))
|
|
(set! (-> arg0 ground-impact-vel) (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal))))
|
|
(logior! moving-flags (cshape-moving-flags impact-surf))
|
|
(when (not sv-160)
|
|
(let ((f30-0 (- 1.0 (-> arg0 surf impact-fric))))
|
|
(when (< f30-0 1.0)
|
|
(let ((s3-1 (new-stack-vector0))
|
|
(f28-0 (vector-dot (-> arg0 dynam gravity-normal) (-> sv-88 vector 0)))
|
|
)
|
|
0.0
|
|
(vector-! s3-1 (-> sv-88 vector 0) (vector-float*! s3-1 (-> arg0 dynam gravity-normal) f28-0))
|
|
(let* ((f0-20 (vector-length s3-1))
|
|
(f1-9 f0-20)
|
|
)
|
|
(if (< f28-0 0.0)
|
|
(set! f28-0 (* f28-0 f30-0))
|
|
)
|
|
(vector+!
|
|
(-> sv-88 vector 0)
|
|
(vector-float*! (-> sv-88 vector 0) (-> arg0 dynam gravity-normal) f28-0)
|
|
(vector-float*! s3-1 s3-1 (/ f0-20 f1-9))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(logior! moving-flags (cshape-moving-flags tsurf))
|
|
(cond
|
|
((-> arg1 best-to-prim)
|
|
(logior! moving-flags (cshape-moving-flags t-act))
|
|
(set! (-> arg0 actor-contact-pt quad) (-> arg1 best-tri intersect quad))
|
|
(set! (-> arg0 actor-contact-normal quad) (-> arg0 poly-normal quad))
|
|
(set! (-> arg0 actor-contact-handle) (process->handle (-> arg1 best-to-prim cshape process)))
|
|
)
|
|
((= (-> arg0 poly-pat material) (pat-material waterbottom))
|
|
)
|
|
(else
|
|
(logior! moving-flags (cshape-moving-flags t-bckgnd))
|
|
)
|
|
)
|
|
(cond
|
|
(sv-160
|
|
(logior! react-flags (cshape-reaction-flags csrf02))
|
|
(logior! moving-flags (cshape-moving-flags twall))
|
|
(set! (-> arg0 cur-pat mode) 1)
|
|
(set! (-> arg0 wall-contact-pt quad) (-> arg1 best-tri intersect quad))
|
|
(set! (-> arg0 wall-contact-poly-normal quad) (-> arg0 poly-normal quad))
|
|
(set! (-> arg0 wall-contact-normal quad) (-> sv-84 quad))
|
|
(set! (-> arg0 wall-pat) (-> arg1 best-tri pat))
|
|
(-> arg0 history-data (logand (+ (-> arg0 history-data-idx) 127) 127))
|
|
(cond
|
|
(#f
|
|
(sound-play "cursor-options")
|
|
(logior! react-flags (cshape-reaction-flags csrf13))
|
|
(vector-reflect-flat-above! arg2 (-> sv-88 vector 0) sv-84)
|
|
)
|
|
(else
|
|
(vector-reflect-flat! arg2 (-> sv-88 vector 0) sv-84)
|
|
)
|
|
)
|
|
(cond
|
|
((not (and (>= (-> arg1 best-from-prim local-sphere w)
|
|
(vector-dot
|
|
(-> arg0 ground-poly-normal)
|
|
(vector-! (new 'stack-no-clear 'vector) (-> arg1 best-tri intersect) (-> arg0 ground-touch-point))
|
|
)
|
|
)
|
|
(and (< 0.0 (vector-dot (-> arg0 ground-poly-normal) arg2))
|
|
(not (time-elapsed? (-> arg0 last-time-on-ground) (seconds 0.3)))
|
|
(not (logtest? react-flags (cshape-reaction-flags csrf05)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(logior! react-flags (cshape-reaction-flags csrf08))
|
|
(logclear! react-flags (cshape-reaction-flags csrf06))
|
|
(let ((s3-4 (vector-cross! (new 'stack-no-clear 'vector) (-> arg0 poly-normal) (-> arg0 ground-poly-normal))))
|
|
(vector-normalize! s3-4 1.0)
|
|
(vector-float*! arg2 s3-4 (vector-dot (-> sv-88 vector 0) s3-4))
|
|
)
|
|
(vector+! arg2 arg2 (-> arg0 poly-normal))
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(logior! moving-flags (cshape-moving-flags onsurf))
|
|
(set! (-> arg0 cur-pat mode) 0)
|
|
(if (= (-> arg1 best-from-prim prim-id) 6)
|
|
(set! (-> arg0 local-normal quad) (-> sv-84 quad))
|
|
)
|
|
(vector-reflect-flat! arg2 (-> sv-88 vector 0) sv-84)
|
|
(vector+! arg2 arg2 sv-84)
|
|
(set! (-> arg0 ground-touch-point w) 0.0)
|
|
(when (not (or (logtest? react-flags (cshape-reaction-flags csrf00 csrf01 csrf02 csrf03))
|
|
(nonzero? (-> arg0 poly-pat event))
|
|
)
|
|
)
|
|
(logior! moving-flags (cshape-moving-flags onground))
|
|
(set! (-> arg0 ground-poly-normal quad) (-> arg0 poly-normal quad))
|
|
(set! (-> arg0 ground-contact-normal quad) (-> sv-84 quad))
|
|
(set! (-> arg0 ground-local-norm-dot-grav) (vector-dot sv-84 (-> arg0 dynam gravity-normal)))
|
|
(set-time! (-> arg0 last-time-on-ground))
|
|
(set! (-> arg0 ground-pat) (-> arg0 poly-pat))
|
|
(set! (-> arg0 ground-touch-point quad) (-> arg1 best-tri intersect quad))
|
|
(set! (-> arg0 ground-contact-sphere-center quad) (-> arg1 best-from-prim prim-core world-sphere quad))
|
|
(logior! react-flags (cshape-reaction-flags csrf11))
|
|
(if (= (-> arg0 poly-pat material) (pat-material waterbottom))
|
|
(logior! moving-flags (cshape-moving-flags on-water))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(logior! (-> arg0 status) moving-flags)
|
|
(set! (-> arg0 reaction-flag) react-flags)
|
|
)
|
|
(update!
|
|
(-> arg0 history-data (-> arg0 history-data-idx))
|
|
arg0
|
|
(-> arg1 best-tri intersect)
|
|
(-> sv-88 vector 1)
|
|
arg2
|
|
)
|
|
(set! (-> arg0 history-data-idx) (logand (+ (-> arg0 history-data-idx) 1) 127))
|
|
moving-flags
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for function target-collision-no-reaction
|
|
;; INFO: Return type mismatch int vs none.
|
|
(defun target-collision-no-reaction ((arg0 control-info) (arg1 collide-shape-intersect) (arg2 vector) (arg3 vector))
|
|
(if (= (-> arg0 mod-surface mode) 'air)
|
|
(logior! (-> arg0 reaction-flag) (cshape-reaction-flags csrf05))
|
|
)
|
|
(let ((s5-0 (-> arg0 history-data (-> arg0 history-data-idx))))
|
|
(update! s5-0 arg0 (-> arg0 trans) arg3 arg2)
|
|
(logior! (-> s5-0 status) (cshape-moving-flags csmf08))
|
|
)
|
|
(set! (-> arg0 history-data-idx) (logand (+ (-> arg0 history-data-idx) 1) 127))
|
|
0
|
|
(none)
|
|
)
|