[jak3] Fix crash with volcano platforms

This commit is contained in:
water111 2024-09-22 12:49:31 -04:00
parent 4e33746634
commit d91f7091dd
4 changed files with 21 additions and 9 deletions

View file

@ -42180,6 +42180,12 @@
;; rigid-body ;; ;; rigid-body ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deftype rigid-body-stack (structure)
((vec vector :inline)
(mat matrix :inline)
)
)
(deftype rigid-body-work (structure) (deftype rigid-body-work (structure)
((max-ang-momentum float :offset-assert 0) ((max-ang-momentum float :offset-assert 0)
(max-ang-velocity float :offset-assert 4) (max-ang-velocity float :offset-assert 4)

View file

@ -429,7 +429,7 @@
"(method 22 rigid-body-control)": [[16, ["inline-array", "vector", 2]]], "(method 22 rigid-body-control)": [[16, ["inline-array", "vector", 2]]],
"(method 23 rigid-body-control)": [[16, ["inline-array", "vector", 2]]], "(method 23 rigid-body-control)": [[16, ["inline-array", "vector", 2]]],
"(method 24 rigid-body-control)": [[16, ["inline-array", "vector", 2]]], "(method 24 rigid-body-control)": [[16, ["inline-array", "vector", 2]]],
"(method 28 rigid-body-control)": [[16, "rigid-body-impact"]], "(method 28 rigid-body-control)": [[16, "rigid-body-stack"]],
"(method 50 rigid-body-object)": [[16, "rigid-body-impact"]], "(method 50 rigid-body-object)": [[16, "rigid-body-impact"]],
"(method 51 rigid-body-object)": [[16, "rigid-body-impact"]], "(method 51 rigid-body-object)": [[16, "rigid-body-impact"]],
"ptest": [[16, "vector"]], "ptest": [[16, "vector"]],

View file

@ -5,6 +5,12 @@
;; name in dgo: rigid-body ;; name in dgo: rigid-body
;; dgos: GAME ;; dgos: GAME
(deftype rigid-body-stack (structure)
((vec vector :inline)
(mat matrix :inline)
)
)
;; DECOMP BEGINS ;; DECOMP BEGINS
(deftype rigid-body-work (structure) (deftype rigid-body-work (structure)
@ -92,10 +98,10 @@
) )
(defmethod rigid-body-control-method-28 ((this rigid-body-control) (arg0 vector) (arg1 quaternion)) (defmethod rigid-body-control-method-28 ((this rigid-body-control) (arg0 vector) (arg1 quaternion))
(let ((s3-0 (new 'stack-no-clear 'rigid-body-impact))) (let ((s3-0 (new 'stack-no-clear 'rigid-body-stack)))
(quaternion->matrix (the-as matrix (-> s3-0 normal)) arg1) (quaternion->matrix (-> s3-0 mat) arg1)
(vector-rotate*! (-> s3-0 point) (-> this info cm-offset-joint) (the-as matrix (-> s3-0 normal))) (vector-rotate*! (-> s3-0 vec) (-> this info cm-offset-joint) (-> s3-0 mat))
(vector+! (-> this position) arg0 (-> s3-0 point)) (vector+! (-> this position) arg0 (-> s3-0 vec))
) )
(quaternion-copy! (the-as quaternion (-> this rot)) arg1) (quaternion-copy! (the-as quaternion (-> this rot)) arg1)
(quaternion-normalize! (the-as quaternion (-> this rot))) (quaternion-normalize! (the-as quaternion (-> this rot)))

View file

@ -114,10 +114,10 @@
;; definition for method 28 of type rigid-body-control ;; definition for method 28 of type rigid-body-control
;; WARN: Return type mismatch int vs none. ;; WARN: Return type mismatch int vs none.
(defmethod rigid-body-control-method-28 ((this rigid-body-control) (arg0 vector) (arg1 quaternion)) (defmethod rigid-body-control-method-28 ((this rigid-body-control) (arg0 vector) (arg1 quaternion))
(let ((s3-0 (new 'stack-no-clear 'rigid-body-impact))) (let ((s3-0 (new 'stack-no-clear 'rigid-body-stack)))
(quaternion->matrix (the-as matrix (-> s3-0 normal)) arg1) (quaternion->matrix (-> s3-0 mat) arg1)
(vector-rotate*! (-> s3-0 point) (-> this info cm-offset-joint) (the-as matrix (-> s3-0 normal))) (vector-rotate*! (-> s3-0 vec) (-> this info cm-offset-joint) (-> s3-0 mat))
(vector+! (-> this position) arg0 (-> s3-0 point)) (vector+! (-> this position) arg0 (-> s3-0 vec))
) )
(quaternion-copy! (the-as quaternion (-> this rot)) arg1) (quaternion-copy! (the-as quaternion (-> this rot)) arg1)
(quaternion-normalize! (the-as quaternion (-> this rot))) (quaternion-normalize! (the-as quaternion (-> this rot)))