[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 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(deftype rigid-body-stack (structure)
((vec vector :inline)
(mat matrix :inline)
)
)
(deftype rigid-body-work (structure)
((max-ang-momentum float :offset-assert 0)
(max-ang-velocity float :offset-assert 4)

View file

@ -429,7 +429,7 @@
"(method 22 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 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 51 rigid-body-object)": [[16, "rigid-body-impact"]],
"ptest": [[16, "vector"]],

View file

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

View file

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