2020-10-26 21:08:24 -04:00
|
|
|
;;-*-Lisp-*-
|
2020-09-04 14:44:23 -04:00
|
|
|
(in-package goal)
|
|
|
|
|
|
|
|
;; name: aligner.gc
|
|
|
|
;; name in dgo: aligner
|
|
|
|
;; dgos: GAME, ENGINE
|
|
|
|
|
2021-07-11 16:19:03 -04:00
|
|
|
;; definition for method 9 of type align-control
|
|
|
|
;; WARN: Unsupported inline assembly instruction kind - [lw ra, return-from-thread(s7)]
|
|
|
|
;; WARN: Unsupported inline assembly instruction kind - [jr ra]
|
|
|
|
;; Used lq/sq
|
|
|
|
(defmethod TODO-RENAME-9 align-control ((obj align-control))
|
|
|
|
(local-vars (a0-9 symbol) (s7-0 none) (ra-0 int))
|
|
|
|
(with-pp
|
2021-07-17 15:00:10 -04:00
|
|
|
(let ((s5-0 (-> obj process skel active-channels)))
|
|
|
|
(dotimes (s4-0 s5-0)
|
|
|
|
(let* ((a0-3 (-> obj process skel channel s4-0))
|
|
|
|
(v1-5 (-> a0-3 frame-group))
|
|
|
|
(a0-4 (-> a0-3 command))
|
|
|
|
(a1-0 'stack)
|
|
|
|
(a2-0 (= a0-4 a1-0))
|
|
|
|
)
|
|
|
|
(cond
|
|
|
|
((or a2-0 (begin
|
|
|
|
(set! a1-0 'stack1)
|
|
|
|
(= a0-4 a1-0)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(else
|
|
|
|
; TODO - support decompiling the return-from-thread
|
|
|
|
; TODO - properly decompile the `go`to
|
|
|
|
; (when (!= (-> v1-5 type) art-joint-anim)
|
|
|
|
; (let
|
|
|
|
; ((t9-0 (the-as (function object object object object) enter-state))
|
|
|
|
; (a0-7 "align joint-anim")
|
|
|
|
; )
|
|
|
|
; (set! (-> pp next-state) process-drawable-art-error)
|
|
|
|
; (t9-0 a0-7 (the-as none a1-0) a2-0)
|
|
|
|
; )
|
|
|
|
; (.lw ra-0 return-from-thread s7-0)
|
|
|
|
; (.jr ra-0)
|
|
|
|
; (nop!)
|
|
|
|
; 0
|
|
|
|
; )
|
|
|
|
0
|
|
|
|
)
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
2021-07-17 15:00:10 -04:00
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(let* ((a0-8 (-> obj process skel root-channel 0))
|
|
|
|
(v1-16 (-> a0-8 frame-group))
|
|
|
|
(f0-0 (-> a0-8 frame-num))
|
|
|
|
)
|
|
|
|
(= (-> a0-8 num-func) num-func-loop!)
|
2021-07-11 16:19:03 -04:00
|
|
|
(cond
|
2021-07-17 15:00:10 -04:00
|
|
|
((or (not v1-16) (!= (-> obj frame-group) v1-16))
|
|
|
|
(set! a0-9 #t)
|
|
|
|
)
|
|
|
|
((= (-> a0-8 num-func) num-func-loop!)
|
|
|
|
(set! a0-9 (< (* (-> a0-8 param 0) (- f0-0 (-> obj frame-num))) 0.0))
|
|
|
|
)
|
|
|
|
(else
|
|
|
|
(set! a0-9 (= f0-0 0.0))
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
|
|
|
)
|
2021-07-17 15:00:10 -04:00
|
|
|
(if a0-9
|
2021-07-23 20:51:26 -04:00
|
|
|
(logior! (-> obj flags) 1)
|
2021-07-17 15:00:10 -04:00
|
|
|
(set! (-> obj flags) (logand -2 (the-as int (-> obj flags))))
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
2021-07-17 15:00:10 -04:00
|
|
|
(set! (-> obj frame-group) v1-16)
|
|
|
|
(set! (-> obj frame-num) f0-0)
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
2021-07-17 15:00:10 -04:00
|
|
|
(mem-copy!
|
|
|
|
(the-as pointer (-> obj transform 1))
|
|
|
|
(the-as pointer (-> obj transform))
|
|
|
|
48
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
2021-07-17 15:00:10 -04:00
|
|
|
(quaternion-copy!
|
|
|
|
(the-as quaternion (-> obj transform 1 rot))
|
|
|
|
(-> obj align quat)
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
2021-07-17 15:00:10 -04:00
|
|
|
(set! (-> obj transform 1 scale quad) (-> obj align scale quad))
|
|
|
|
(let* ((a2-5 (-> obj matrix 1))
|
|
|
|
(a3-0 (-> obj matrix))
|
|
|
|
(v1-19 (-> a3-0 0 vector 0 quad))
|
|
|
|
(a0-18 (-> a3-0 0 vector 1 quad))
|
|
|
|
(a1-12 (-> a3-0 0 vector 2 quad))
|
|
|
|
(a3-1 (-> a3-0 0 vector 3 quad))
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
2021-07-17 15:00:10 -04:00
|
|
|
(set! (-> a2-5 vector 0 quad) v1-19)
|
|
|
|
(set! (-> a2-5 vector 1 quad) a0-18)
|
|
|
|
(set! (-> a2-5 vector 2 quad) a1-12)
|
|
|
|
(set! (-> a2-5 vector 3 quad) a3-1)
|
|
|
|
)
|
|
|
|
(let ((s5-1 (-> obj process node-list data 1)))
|
2021-10-31 11:01:15 -04:00
|
|
|
(cspace<-matrix-no-push-joint! s5-1 (-> obj process skel))
|
2021-07-17 15:00:10 -04:00
|
|
|
(let* ((v1-23 (-> obj matrix))
|
|
|
|
(a3-2 (-> s5-1 bone transform))
|
|
|
|
(a0-21 (-> a3-2 vector 0 quad))
|
|
|
|
(a1-14 (-> a3-2 vector 1 quad))
|
|
|
|
(a2-6 (-> a3-2 vector 2 quad))
|
|
|
|
(a3-3 (-> a3-2 vector 3 quad))
|
|
|
|
)
|
|
|
|
(set! (-> v1-23 0 vector 0 quad) a0-21)
|
|
|
|
(set! (-> v1-23 0 vector 1 quad) a1-14)
|
|
|
|
(set! (-> v1-23 0 vector 2 quad) a2-6)
|
|
|
|
(set! (-> v1-23 0 vector 3 quad) a3-3)
|
|
|
|
)
|
|
|
|
(vector*!
|
|
|
|
(the-as vector (-> obj transform))
|
|
|
|
(-> s5-1 bone position)
|
|
|
|
(-> obj process root scale)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(vector-!
|
|
|
|
(the-as vector (-> obj delta))
|
2021-07-11 16:19:03 -04:00
|
|
|
(the-as vector (-> obj transform))
|
2021-07-17 15:00:10 -04:00
|
|
|
(the-as vector (-> obj transform 1))
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
2021-07-17 15:00:10 -04:00
|
|
|
(set-vector!
|
|
|
|
(-> obj align scale)
|
|
|
|
(vector-length (the-as vector (-> obj matrix)))
|
|
|
|
(vector-length (-> obj matrix 0 vector 1))
|
|
|
|
(vector-length (-> obj matrix 0 vector 2))
|
|
|
|
1.0
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
2021-07-17 15:00:10 -04:00
|
|
|
(vector-!
|
|
|
|
(-> obj delta scale)
|
|
|
|
(-> obj align scale)
|
|
|
|
(-> obj transform 1 scale)
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
2021-07-17 15:00:10 -04:00
|
|
|
(let
|
|
|
|
((a2-8
|
|
|
|
(matrix-inv-scale! (new 'stack-no-clear 'matrix) (-> obj align scale))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(quaternion-normalize!
|
|
|
|
(matrix->quaternion
|
|
|
|
(-> obj align quat)
|
|
|
|
(matrix*! a2-8 (the-as matrix (-> obj matrix)) a2-8)
|
|
|
|
)
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
|
|
|
)
|
2021-07-17 15:00:10 -04:00
|
|
|
(let
|
|
|
|
((a1-24
|
|
|
|
(quaternion-inverse!
|
|
|
|
(new 'stack-no-clear 'quaternion)
|
|
|
|
(the-as quaternion (-> obj transform 1 rot))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(quaternion-normalize!
|
|
|
|
(quaternion*! (-> obj delta quat) a1-24 (-> obj align quat))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(-> obj delta)
|
2021-07-11 16:19:03 -04:00
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
;; definition for method 12 of type align-control
|
|
|
|
;; INFO: Return type mismatch (inline-array transform) vs transform.
|
|
|
|
(defmethod first-transform align-control ((obj align-control))
|
|
|
|
(the-as transform (-> obj transform))
|
|
|
|
)
|
|
|
|
|
|
|
|
;; definition for method 13 of type align-control
|
|
|
|
(defmethod snd-transform align-control ((obj align-control))
|
|
|
|
(-> obj transform 1)
|
|
|
|
)
|
|
|
|
|
|
|
|
;; definition for method 10 of type align-control
|
|
|
|
(defmethod
|
|
|
|
TODO-RENAME-10
|
|
|
|
align-control
|
|
|
|
((obj align-control) (arg0 int) (arg1 float) (arg2 float) (arg3 float))
|
|
|
|
(when (zero? (logand (-> obj flags) 1))
|
|
|
|
(let* ((a0-1 (-> obj process))
|
|
|
|
(t9-0 (method-of-object a0-1 dummy-16))
|
|
|
|
(v1-4 (-> obj delta))
|
|
|
|
(t1-0 (new 'stack-no-clear 'vector))
|
|
|
|
)
|
|
|
|
(set! (-> t1-0 x) arg1)
|
|
|
|
(set! (-> t1-0 y) arg2)
|
|
|
|
(set! (-> t1-0 z) arg3)
|
|
|
|
(set! (-> t1-0 w) 1.0)
|
|
|
|
(t9-0 a0-1 arg0 (the-as (inline-array vector) v1-4) t1-0)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(-> obj process root)
|
|
|
|
)
|
|
|
|
|
|
|
|
;; definition for method 26 of type trsqv
|
|
|
|
(defmethod
|
|
|
|
TODO-RENAME-26
|
|
|
|
trsqv
|
|
|
|
((obj trsqv) (arg0 int) (arg1 vector) (arg2 float))
|
|
|
|
(let ((gp-0 (-> obj transv)))
|
|
|
|
(when (nonzero? (logand arg0 4))
|
|
|
|
(set! (-> gp-0 x) (-> arg1 x))
|
|
|
|
(set! (-> gp-0 z) (-> arg1 z))
|
|
|
|
(let
|
|
|
|
((f0-4
|
|
|
|
(fmin (* (vector-xz-length arg1) (-> *display* frames-per-second)) arg2)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(vector-xz-normalize! gp-0 f0-4)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
obj
|
|
|
|
)
|
|
|
|
|
|
|
|
;; definition for method 11 of type align-control
|
|
|
|
;; INFO: Return type mismatch trsqv vs none.
|
|
|
|
(defmethod
|
|
|
|
TODO-RENAME-11
|
|
|
|
align-control
|
|
|
|
((obj align-control)
|
|
|
|
(arg0 int)
|
|
|
|
(arg1 vector)
|
|
|
|
(arg2 int)
|
|
|
|
(arg3 float)
|
|
|
|
(arg4 float)
|
|
|
|
)
|
|
|
|
(when (zero? (logand (-> obj flags) 1))
|
|
|
|
(let ((s5-0 (-> obj delta)))
|
|
|
|
(let ((s3-0 (-> obj process root transv)))
|
|
|
|
(if (nonzero? (logand arg0 2))
|
|
|
|
(set!
|
|
|
|
(-> s3-0 y)
|
|
|
|
(* (* (-> s5-0 trans y) arg3) (-> *display* frames-per-second))
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(when (nonzero? (logand arg0 4))
|
|
|
|
(set! (-> s3-0 x) (-> arg1 x))
|
|
|
|
(set! (-> s3-0 z) (-> arg1 z))
|
|
|
|
(let
|
|
|
|
((f0-8
|
|
|
|
(*
|
|
|
|
(fmin
|
|
|
|
(vector-xz-length arg1)
|
|
|
|
(* (vector-xz-length (-> s5-0 trans)) arg4)
|
|
|
|
)
|
|
|
|
(-> *display* frames-per-second)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(t9-2 vector-xz-normalize!)
|
|
|
|
)
|
|
|
|
(set! (-> obj last-speed) f0-8)
|
|
|
|
(t9-2 s3-0 f0-8)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(if (nonzero? (logand arg0 16))
|
|
|
|
(quaternion-normalize!
|
|
|
|
(quaternion*!
|
|
|
|
(-> obj process root quat)
|
|
|
|
(-> obj process root quat)
|
|
|
|
(-> s5-0 quat)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
(-> obj process root)
|
|
|
|
(none)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|