Files
jak-project/goal_src/engine/collide/collide-shape.gc
T

2748 lines
104 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: collide-shape.gc
;; name in dgo: collide-shape
;; dgos: GAME, ENGINE
;; TODO - for misty-teetertotter | rigid-body
(define-extern default-collision-reaction (function collide-shape-moving collide-shape-intersect vector vector none)) ;; TODO - not completely confirmed
;; DECOMP BEGINS
;; ERROR: function was not converted to expressions. Cannot decompile.
(defmethod should-push-away-test collide-shape-prim ()
(format 0 "ERROR: collide-shape-prim::should-push-away-test was called illegally!~%")
(none)
)
;; ERROR: function was not converted to expressions. Cannot decompile.
;; ERROR: function was not converted to expressions. Cannot decompile.
;; ERROR: function was not converted to expressions. Cannot decompile.
;; ERROR: function was not converted to expressions. Cannot decompile.
(defmethod collide-with-collide-cache-prim-mesh collide-shape-prim ((obj collide-shape-prim) (arg0 collide-shape-intersect) (arg1 collide-cache-prim))
(format 0 "ERROR: Unsupported prim type in collide-shape-prim::collide-with-collide-cache-prim-mesh!~%")
(none)
)
;; ERROR: function was not converted to expressions. Cannot decompile.
(defmethod collide-with-collide-cache-prim-mesh collide-shape-prim-mesh ((obj collide-shape-prim-mesh) (arg0 collide-shape-intersect) (arg1 collide-cache-prim))
(format 0 "ERROR: collide-shape-prim-mesh vs. collide-cache-prim mesh is not currently supported!~%")
(none)
)
(defmethod collide-with-collide-cache-prim-mesh collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 collide-shape-intersect) (arg1 collide-cache-prim))
(let ((s3-0 (-> arg1 prim-core collide-as)))
(dotimes (s2-0 (-> obj num-prims))
(let ((a0-1 (-> obj prims s2-0)))
(if (logtest? (-> a0-1 collide-with) s3-0)
(collide-with-collide-cache-prim-mesh a0-1 arg0 arg1)
)
)
)
)
(none)
)
(defmethod collide-with-collide-cache-prim-sphere collide-shape-prim ((obj collide-shape-prim) (arg0 collide-shape-intersect) (arg1 collide-cache-prim))
(format 0 "ERROR: Unsupported prim type in collide-shape-prim::collide-with-collide-cache-prim-sphere!~%")
(none)
)
(defmethod collide-with-collide-cache-prim-sphere collide-shape-prim-sphere ((obj collide-shape-prim-sphere) (arg0 collide-shape-intersect) (arg1 collide-cache-prim))
(local-vars (v1-4 collide-offense) (a3-2 pat-surface))
(rlet ((vf1 :class vf)
(vf2 :class vf)
(vf3 :class vf)
(vf4 :class vf)
(vf5 :class vf)
)
(let* ((s5-0 (new 'stack-no-clear 'collide-tri-result))
(f0-1 (resolve-moving-sphere-sphere
arg1
s5-0
(-> obj prim-core)
(-> arg0 move-vec)
(-> arg0 best-u)
(-> obj prim-core action)
)
)
)
(when (>= f0-1 0.0)
(let ((v1-3 0)
(a1-2 (-> obj prim-core action))
)
(nop!)
(let ((a2-2 (-> arg1 prim-core action)))
(nop!)
(let ((a0-2 (-> arg1 prim-core offense))
(a1-3 (logand a1-2 a2-2))
(a2-3 (-> arg1 prim))
)
(let ((a3-1 (logand a1-3 (collide-action solid)))
(a1-4 (-> obj prim-core offense))
)
(b! (zero? a3-1) cfg-5 :delay (set! a3-2 (-> s5-0 pat)))
(b! (= a0-2 v1-3) cfg-5 :delay (set! v1-4 (- a1-4 a0-2)))
)
(b! (> (the-as int v1-4) 0) cfg-5 :delay (.lvf vf1 (&-> s5-0 intersect quad)))
(.lvf vf2 (&-> s5-0 normal quad))
(.lvf vf3 (&-> s5-0 vertex 0 quad))
(.lvf vf4 (&-> s5-0 vertex 1 quad))
(.lvf vf5 (&-> s5-0 vertex 2 quad))
(set! (-> arg0 best-u) f0-1)
(set! (-> arg0 best-to-prim) a2-3)
(set! (-> arg0 best-from-prim) obj)
(set! (-> arg0 best-tri pat) a3-2)
(.svf (&-> arg0 best-tri intersect quad) vf1)
(.svf (&-> arg0 best-tri normal quad) vf2)
(.svf (&-> arg0 best-tri vertex 0 quad) vf3)
(.svf (&-> arg0 best-tri vertex 1 quad) vf4)
(.svf (&-> arg0 best-tri vertex 2 quad) vf5)
(label cfg-5)
(add-touching-prims *touching-list* obj a2-3 f0-1 (the-as collide-tri-result #f) s5-0)
)
)
)
)
)
0
(none)
)
)
(defmethod collide-with-collide-cache-prim-sphere collide-shape-prim-mesh ((obj collide-shape-prim-mesh) (arg0 collide-shape-intersect) (arg1 collide-cache-prim))
(format 0 "ERROR: collide-shape-prim-mesh vs. collide-cache-prim sphere is not currently supported!~%")
(none)
)
(defmethod collide-with-collide-cache-prim-sphere collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 collide-shape-intersect) (arg1 collide-cache-prim))
(let ((s3-0 (-> arg1 prim-core collide-as)))
(dotimes (s2-0 (-> obj num-prims))
(let ((a0-1 (-> obj prims s2-0)))
(if (logtest? (-> a0-1 collide-with) s3-0)
(collide-with-collide-cache-prim-sphere a0-1 arg0 arg1)
)
)
)
)
(none)
)
(defun find-ground-point ((arg0 control-info) (arg1 vector) (arg2 float) (arg3 float))
(local-vars (sv-176 int) (sv-192 int))
(let ((f30-1 (if (< 819.2 (vector-xz-length (-> arg0 transv)))
(vector-y-angle (-> arg0 transv))
(y-angle arg0)
)
)
(s2-0 (-> arg0 trans))
(s1-0 (new 'stack-no-clear 'vector))
(s0-0 (new 'stack-no-clear 'collide-tri-result))
)
(let ((a1-1 (new 'stack-no-clear 'bounding-box)))
(set! (-> arg1 w) 0.0)
(dotimes (v1-1 3)
(set! (-> a1-1 min data v1-1) (- (-> s2-0 data v1-1) arg3))
(set! (-> a1-1 max data v1-1) (+ (-> s2-0 data v1-1) arg3))
)
(set! (-> a1-1 min y) (+ -40960.0 (-> s2-0 y)))
(set! (-> a1-1 max y) (+ 20480.0 (-> s2-0 y)))
(fill-using-bounding-box
*collide-cache*
a1-1
(-> arg0 root-prim collide-with)
(-> arg0 process)
(new 'static 'pat-surface :skip #x1 :noentity #x1)
)
)
(set! sv-176 0)
(while (< sv-176 8)
(let ((f28-0 (+ f30-1 (if (zero? (logand sv-176 1))
(* 8192.0 (the float (/ sv-176 2)))
(* -8192.0 (the float (/ sv-176 2)))
)
)
)
)
(set! sv-192 0)
(let ((f26-0 arg3))
(set-vector! s1-0 0.0 0.0 arg3 1.0)
(vector-rotate-y! s1-0 s1-0 f28-0)
(if (>= (probe-using-line-sphere
*collide-cache*
(vector+! (new 'stack-no-clear 'vector) s2-0 (new 'static 'vector :y 20480.0 :w 1.0))
s1-0
2048.0
(-> arg0 root-prim collide-with)
s0-0
1
)
0.0
)
(set! f26-0 (+ -6144.0 (vector-vector-xz-distance s2-0 (-> s0-0 intersect))))
)
(let ((f24-0 arg2))
(while (>= f26-0 f24-0)
(set-vector! s1-0 0.0 0.0 f24-0 1.0)
(vector-rotate-y! s1-0 s1-0 f28-0)
(vector+! s1-0 s2-0 s1-0)
(set! (-> s1-0 y) (+ 20480.0 (-> s2-0 y)))
(when (>= (probe-using-line-sphere
*collide-cache*
s1-0
(new 'static 'vector :y -251658240.0 :w 1.0)
10240.0
(-> arg0 root-prim collide-with)
s0-0
1
)
0.0
)
(cond
((and (= (-> s0-0 pat mode) (pat-mode ground))
(= (-> s0-0 pat event) (pat-event none))
(< 0.7 (-> s0-0 normal y))
)
(set! (-> arg1 quad) (-> s0-0 intersect quad))
(set! sv-192 (+ sv-192 1))
(if (>= sv-192 2)
(return arg1)
)
)
((and (= (-> s0-0 pat mode) (pat-mode wall)) (< (+ 4096.0 (-> s2-0 y)) (-> s0-0 intersect y)))
(goto cfg-35)
)
)
)
(set! f24-0 (+ 4096.0 f24-0))
)
)
)
)
(label cfg-35)
(set! sv-176 (+ sv-176 1))
)
)
(the-as vector #f)
)
(defun target-attack-up ((arg0 target) (arg1 symbol) (arg2 symbol))
(with-pp
(let ((s4-0 (find-ground-point (-> arg0 control) (new 'stack-no-clear 'vector) 8192.0 40960.0)))
(set! s4-0 (cond
(s4-0
(empty)
s4-0
)
(else
(-> arg0 control unknown-vector54)
)
)
)
(let* ((s2-1 (vector-! (new 'stack-no-clear 'vector) s4-0 (-> arg0 control trans)))
(f30-1 (fmax 8192.0 (fmin 40960.0 (vector-xz-length s2-1))))
)
(cond
((< (fabs (vector-dot
(-> arg0 control dynam gravity-normal)
(vector-! (new 'stack-no-clear 'vector) s4-0 (-> arg0 control trans))
)
)
40960.0
)
(vector-xz-normalize! s2-1 f30-1)
(let ((s1-0 (new 'stack-no-clear 'event-message-block)))
(set! (-> s1-0 from) pp)
(set! (-> s1-0 num-params) 2)
(set! (-> s1-0 message) arg1)
(set! (-> s1-0 param 0) (the-as uint #f))
(let ((s3-1 (new 'static 'attack-info :mask #x8a2)))
(set! (-> s3-1 mode) arg2)
(set! (-> s3-1 vector quad) (-> s2-1 quad))
(set! (-> s3-1 shove-up)
(+ (lerp-scale 4096.0 16384.0 f30-1 4096.0 40960.0) (fmax 0.0 (- (-> s4-0 y) (-> arg0 control trans y))))
)
(set! (-> s3-1 angle) 'up)
(set! (-> s1-0 param 1) (the-as uint s3-1))
)
(send-event-function arg0 s1-0)
)
)
(else
(let ((a1-6 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-6 from) pp)
(set! (-> a1-6 num-params) 2)
(set! (-> a1-6 message) arg1)
(set! (-> a1-6 param 0) (the-as uint #f))
(let ((v1-12 (new 'static 'attack-info :mask #xca2)))
(set! (-> v1-12 mode) arg2)
(set! (-> v1-12 vector quad)
(-> (new 'static 'attack-info :trans (new 'static 'vector :y 40960.0 :w 1.0) :speed (the-as float #x1))
trans
quad
)
)
(set! (-> v1-12 shove-up) 40960.0)
(set! (-> v1-12 angle) 'up)
(set! (-> v1-12 control) 1.0)
(set! (-> a1-6 param 1) (the-as uint v1-12))
)
(send-event-function arg0 a1-6)
)
)
)
)
)
(none)
)
)
(defmethod set-and-handle-pat! collide-shape-moving ((obj collide-shape-moving) (arg0 pat-surface))
(with-pp
(set! (-> obj cur-pat) arg0)
(set! (-> obj poly-pat) arg0)
(case (-> arg0 material)
(((pat-material ice))
(set! (-> obj surf) *ice-surface*)
)
(((pat-material quicksand))
(set! (-> obj surf) *quicksand-surface*)
)
(((pat-material tube))
(set! (-> obj surf) *no-walk-surface*)
)
(((pat-material rotate))
(set! (-> obj surf) *rotate-surface*)
)
(else
(set! (-> obj surf) *standard-ground-surface*)
)
)
(if (logtest? (-> obj root-prim prim-core action) (collide-action ca-9))
(set! (-> obj surf) *race-track-surface*)
)
(when (nonzero? (-> arg0 event))
(case (-> arg0 event)
(((pat-event deadly))
(let ((a1-3 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-3 from) pp)
(set! (-> a1-3 num-params) 2)
(set! (-> a1-3 message) 'attack)
(set! (-> a1-3 param 0) (the-as uint #f))
(let ((v1-19 (new 'static 'attack-info :mask #xa0)))
(set! (-> v1-19 mode) 'deadly)
(set! (-> v1-19 shove-up) 12288.0)
(set! (-> a1-3 param 1) (the-as uint v1-19))
)
(send-event-function (-> obj process) a1-3)
)
)
(((pat-event burn))
(let ((a1-6 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-6 from) pp)
(set! (-> a1-6 num-params) 2)
(set! (-> a1-6 message) 'attack)
(set! (-> a1-6 param 0) (the-as uint #f))
(let ((v1-23 (new 'static 'attack-info :mask #xa0)))
(set! (-> v1-23 mode) 'burn)
(set! (-> v1-23 shove-up) 12288.0)
(set! (-> a1-6 param 1) (the-as uint v1-23))
)
(send-event-function (-> obj process) a1-6)
)
)
(((pat-event deadlyup))
(target-attack-up (the-as target (-> obj process)) 'attack-or-shove 'deadlyup)
)
(((pat-event burnup))
(if (zero?
(logand (-> (the-as target (-> obj process)) control root-prim prim-core action) (collide-action ca-9))
)
(target-attack-up (the-as target (-> obj process)) 'attack-or-shove 'burnup)
)
)
(((pat-event melt))
(let ((a1-15 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-15 from) pp)
(set! (-> a1-15 num-params) 2)
(set! (-> a1-15 message) 'attack-invinc)
(set! (-> a1-15 param 0) (the-as uint #f))
(let ((a2-8 (new 'static 'attack-info :mask #x20)))
(set! (-> a2-8 mode) 'melt)
(set! (-> a1-15 param 1) (the-as uint a2-8))
)
(send-event-function (-> obj process) a1-15)
)
)
(((pat-event endlessfall))
(let ((a1-17 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-17 from) pp)
(set! (-> a1-17 num-params) 2)
(set! (-> a1-17 message) 'attack-invinc)
(set! (-> a1-17 param 0) (the-as uint #f))
(let ((a2-9 (new 'static 'attack-info :mask #x20)))
(set! (-> a2-9 mode) 'endlessfall)
(set! (-> a1-17 param 1) (the-as uint a2-9))
)
(send-event-function (-> obj process) a1-17)
)
)
)
)
0
(none)
)
)
(defun default-collision-reaction ((arg0 collide-shape-moving) (arg1 collide-shape-intersect) (arg2 vector) (arg3 vector))
(local-vars (sv-64 vector) (sv-68 vector) (sv-72 vector) (sv-80 int) (sv-128 symbol))
(set! sv-64 (new-stack-vector0))
(set! sv-68 (new-stack-vector0))
(set! sv-72 (new 'stack-no-clear 'vector))
(set! sv-80 0)
(set! (-> sv-72 quad) (-> arg3 quad))
(let ((a1-1 (new 'stack-no-clear 'vector)))
(vector-float*! a1-1 (-> arg1 move-vec) (-> arg1 best-u))
(TODO-RENAME-28 arg0 a1-1)
)
(set-and-handle-pat! arg0 (-> arg1 best-tri pat))
(vector-! sv-64 (the-as vector (-> arg1 best-from-prim prim-core)) (-> arg1 best-tri intersect))
(set! (-> sv-64 w) 1.0)
(vector-normalize! sv-64 1.0)
(set! (-> arg0 coverage) (vector-dot sv-64 (-> arg1 best-tri normal)))
(let ((v1-16 (-> sv-64 quad)))
(set! (-> sv-68 quad) v1-16)
)
(if (= (-> arg1 best-u) 0.0)
(TODO-RENAME-28 arg0 sv-68)
)
(set! (-> arg0 surface-normal quad) (-> sv-68 quad))
(set! (-> arg0 poly-normal quad) (-> arg1 best-tri normal quad))
(set! (-> arg0 surface-angle) (vector-dot sv-68 (-> arg0 dynam gravity-normal)))
(set! (-> arg0 poly-angle) (vector-dot (-> arg0 poly-normal) (-> arg0 dynam gravity-normal)))
(set! (-> arg0 touch-angle)
(vector-dot sv-68 (vector-normalize! (vector-negate! (new-stack-vector0) sv-72) 1.0))
)
(if (< (-> arg0 poly-angle) -0.2)
(set! sv-80 (logior sv-80 16))
)
(set! sv-128 (< (fabs (-> arg0 surface-angle)) (-> *pat-mode-info* (-> arg0 cur-pat mode) wall-angle)))
(when (zero? (logand (-> arg0 prev-status) 1))
(set! (-> arg0 ground-impact-vel) (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal))))
(when (not sv-128)
(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-72))
)
0.0
(vector-! s3-1 sv-72 (vector-float*! s3-1 (-> arg0 dynam gravity-normal) f28-0))
(let* ((f0-22 (vector-length s3-1))
(f1-4 f0-22)
)
(if (< f28-0 0.0)
(set! f28-0 (* f28-0 f30-0))
)
(vector+!
sv-72
(vector-float*! sv-72 (-> arg0 dynam gravity-normal) f28-0)
(vector-float*! s3-1 s3-1 (/ f0-22 f1-4))
)
)
)
)
)
)
)
(set! sv-80 (logior sv-80 4))
(if (-> arg1 best-to-prim)
(set! sv-80 (logior sv-80 32))
)
(cond
(sv-128
(set! sv-80 (logior sv-80 8))
(set! (-> arg0 cur-pat mode) 1)
)
(else
(set! sv-80 (logior sv-80 1))
(set! (-> arg0 local-normal quad) (-> sv-68 quad))
)
)
(vector-reflect-flat! arg2 sv-72 sv-68)
(when (and (not sv-128) (>= (-> arg0 coverage) 0.9))
(set! sv-80 (logior sv-80 2))
(set! (-> arg0 ground-poly-normal quad) (-> arg0 poly-normal quad))
(when (!= (-> arg0 poly-pat mode) (pat-mode wall))
(set! (-> arg0 ground-pat) (-> arg0 poly-pat))
(set! (-> arg0 ground-touch-point quad) (-> arg1 best-tri intersect quad))
)
)
(logior! (-> arg0 status) sv-80)
sv-80
(none)
)
(defun simple-collision-reaction ((arg0 collide-shape-moving) (arg1 collide-shape-intersect))
(let ((s5-0 0))
(let ((a1-1 (new 'stack-no-clear 'vector)))
(vector-float*! a1-1 (-> arg1 move-vec) (-> arg1 best-u))
(TODO-RENAME-28 arg0 a1-1)
)
(let ((f0-2 (vector-dot (-> arg0 transv) (-> arg1 best-tri normal)))
(v1-6 (new 'stack-no-clear 'vector))
)
(vector-float*! v1-6 (-> arg1 best-tri normal) (* 1.5 f0-2))
(vector-! (-> arg0 transv) (-> arg0 transv) v1-6)
)
(let ((v0-1 (logior s5-0 7)))
(logior! (-> arg0 status) v0-1)
)
)
(none)
)
(defmethod dummy-63 collide-shape-moving ((obj collide-shape-moving) (arg0 vector) (arg1 vector) (arg2 float))
(local-vars (sv-192 int))
(let ((s5-0 (new 'stack 'collide-shape-intersect))
(s2-0 (new 'stack-no-clear 'vector))
)
(vector-float*! s2-0 arg1 (* arg2 (-> *display* seconds-per-frame)))
(init! s5-0 s2-0)
(let* ((s1-1 (-> obj root-prim))
(v1-4 *collide-cache*)
(s0-0 (the-as collide-cache-prim (-> v1-4 prims)))
)
(set! sv-192 (-> v1-4 num-prims))
(while (nonzero? sv-192)
(set! sv-192 (+ sv-192 -1))
(when (logtest? (-> s1-1 collide-with) (-> s0-0 prim-core collide-as))
(if (>= (-> s0-0 prim-core prim-type) 0)
(collide-with-collide-cache-prim-mesh s1-1 s5-0 s0-0)
(collide-with-collide-cache-prim-sphere s1-1 s5-0 s0-0)
)
)
(set! s0-0 (-> (the-as (inline-array collide-cache-prim) s0-0) 1))
)
)
(let ((f30-0 (-> s5-0 best-u)))
(cond
((>= f30-0 0.0)
(let ((s2-1 (new 'stack-no-clear 'vector)))
(if *display-collision-marks*
(set! (-> s2-1 quad) (-> arg1 quad))
)
(set! (-> obj prev-status) (the-as uint ((-> obj reaction) obj s5-0 arg0 arg1)))
(when *display-collision-marks*
(let ((t1-0 (-> *pat-mode-info* (-> s5-0 best-tri pat mode) hilite-color)))
(add-debug-outline-triangle
#t
(bucket-id debug-draw1)
(the-as vector (-> s5-0 best-tri))
(-> s5-0 best-tri vertex 1)
(-> s5-0 best-tri vertex 2)
t1-0
)
)
(add-debug-vector
#t
(bucket-id debug-draw1)
(-> s5-0 best-tri intersect)
s2-1
(meters 0.00007324219)
(new 'static 'rgba :r #xff :g #xa0 :a #x80)
)
(add-debug-vector
#t
(bucket-id debug-draw1)
(-> s5-0 best-tri intersect)
arg0
(meters 0.00007324219)
(new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)
)
(if (= (-> obj process type) target)
(add-debug-vector
#t
(bucket-id debug-draw1)
(-> s5-0 best-tri intersect)
(-> obj surface-normal)
(meters 0.5)
(-> *pat-mode-info* (-> obj cur-pat mode) hilite-color)
)
)
)
)
(return f30-0)
)
(else
(set! (-> obj reaction-flag) (the-as uint 0))
((-> obj no-reaction) obj s5-0 arg0 arg1)
(set! (-> obj prev-status) (the-as uint 0))
(TODO-RENAME-28 obj s2-0)
(set! (-> arg0 quad) (-> arg1 quad))
(return 1.0)
)
)
)
)
(the-as none 0)
(the-as float 1.0)
)
(defmethod dummy-37 collide-shape ((obj collide-shape) (arg0 vector))
(local-vars (at-0 int))
(rlet ((vf0 :class vf)
(vf1 :class vf)
(vf2 :class vf)
)
(init-vf0-vector)
(let ((t9-0 (method-of-object obj TODO-RENAME-28))
(v1-1 (new 'stack-no-clear 'vector))
)
(.lvf vf1 (&-> arg0 quad))
(let ((f0-0 (-> *display* seconds-per-frame)))
(.mov at-0 f0-0)
)
(.mov vf2 at-0)
(.mov.vf vf1 vf0 :mask #b1000)
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> v1-1 quad) vf1)
(t9-0 obj v1-1)
)
(none)
)
)
(defmethod dummy-37 collide-shape-moving ((obj collide-shape-moving) (arg0 vector))
(dummy-47 obj)
(set! (-> obj trans-old 2 quad) (-> obj trans-old 1 quad))
(set! (-> obj trans-old 1 quad) (-> obj trans-old 0 quad))
(set! (-> obj trans-old 0 quad) (-> obj trans quad))
(set! (-> obj prev-status) (-> obj status))
(set! (-> obj status) (logand -16128 (-> obj status)))
(set! (-> obj local-normal quad) (-> obj dynam gravity-normal quad))
(set! (-> obj surface-normal quad) (-> obj dynam gravity-normal quad))
(set! (-> obj poly-normal quad) (-> obj dynam gravity-normal quad))
(set! (-> obj coverage) 0.0)
(set! (-> obj touch-angle) 0.0)
(let ((f30-0 1.0)
(s4-0 0)
)
(while (and (< 0.05 f30-0) (and
(< s4-0 (the-as int (-> obj max-iteration-count)))
(not (and (= (-> arg0 x) 0.0) (= (-> arg0 y) 0.0) (= (-> arg0 z) 0.0)))
)
)
(let ((f28-0 (dummy-63 obj arg0 arg0 f30-0)))
(dummy-11 *touching-list* f28-0)
(set! f30-0 (- f30-0 (* f28-0 f30-0)))
)
(+! s4-0 1)
)
)
0
(none)
)
(defmethod dummy-37 control-info ((obj control-info) (arg0 vector))
(stopwatch-start (-> *collide-stats* total-target))
(when (< 1638400.0 (vector-length arg0))
(format 0 "WARNING: target vel is ~M m/s, reseting to zero.~%" (vector-length arg0))
(vector-reset! arg0)
)
(set! (-> obj unknown-vector15 quad) (-> obj unknown-vector14 quad))
(vector-matrix*! (-> obj unknown-vector14) (-> obj unknown-vector13) (-> obj unknown-matrix02))
(vector-! (-> obj unknown-vector16) (-> obj unknown-vector14) (-> obj unknown-vector15))
(let ((a1-6 (vector-! (new 'stack-no-clear 'vector) (-> obj unknown-vector11) (-> obj unknown-vector14))))
(vector-seek! (-> obj unknown-vector12) a1-6 (* 16384.0 (-> *display* seconds-per-frame)))
)
(let ((s3-1 (vector+float*! (new-stack-vector0) arg0 (-> obj unknown-vector16) 60.0))
(s4-1 (new 'stack-no-clear 'vector))
)
(set! (-> s4-1 quad) (-> arg0 quad))
(let ((t9-7 (method-of-type collide-shape-moving dummy-37)))
(t9-7 obj s3-1)
)
(let ((s1-0 (new-stack-vector0)))
(set! (-> s1-0 quad) (-> s4-1 quad))
(let ((s2-1 (new-stack-vector0)))
(set! (-> s2-1 quad) (-> s3-1 quad))
(let ((s0-0 (new-stack-vector0)))
(let ((f0-4 (vector-dot (-> obj dynam gravity-normal) s1-0)))
0.0
(vector-! s0-0 s1-0 (vector-float*! s0-0 (-> obj dynam gravity-normal) f0-4))
)
(let* ((f0-5 (vector-length s0-0))
(f1-2 f0-5)
(f2-0 0.0)
)
(vector+!
s1-0
(vector-float*! s1-0 (-> obj dynam gravity-normal) f2-0)
(vector-float*! s0-0 s0-0 (/ f0-5 f1-2))
)
)
)
(let ((s0-1 (new-stack-vector0)))
(let ((f0-8 (vector-dot (-> obj dynam gravity-normal) s2-1)))
0.0
(vector-! s0-1 s2-1 (vector-float*! s0-1 (-> obj dynam gravity-normal) f0-8))
)
(let* ((f0-9 (vector-length s0-1))
(f1-4 f0-9)
(f2-1 0.0)
)
(vector+!
s2-1
(vector-float*! s2-1 (-> obj dynam gravity-normal) f2-1)
(vector-float*! s0-1 s0-1 (/ f0-9 f1-4))
)
)
)
(vector-normalize! s1-0 1.0)
(vector-normalize! s2-1 1.0)
(let ((f30-1 (vector-dot s1-0 s2-1)))
(cond
((and (!= (vector-length (-> obj unknown-vector01)) 0.0) (if (logtest? (-> obj status) 8)
(< f30-1 0.9999)
(< f30-1 0.95)
)
)
(set! (-> obj unknown-float70) (seek (-> obj unknown-float70) 1.0 (* 4.0 (-> *display* seconds-per-frame))))
(set! (-> obj unknown-float71) (seek
(-> obj unknown-float71)
(if (= (-> obj unknown-surface00 mode) 'air)
1.0
0.0
)
(* 4.0 (-> *display* seconds-per-frame))
)
)
(logior! (-> obj status) 512)
)
(else
(set! (-> obj unknown-float70) (seek (-> obj unknown-float70) 0.0 (* 2.0 (-> *display* seconds-per-frame))))
(set! (-> obj unknown-float71) (seek (-> obj unknown-float71) 0.0 (* 2.0 (-> *display* seconds-per-frame))))
)
)
)
)
)
(if (logtest? (-> obj status) 1)
(set! (-> arg0 quad) (-> s3-1 quad))
(vector--float*! arg0 s3-1 (-> obj unknown-vector16) 60.0)
)
(if (and
(logtest? (-> obj status) 1)
(and (zero? (logand (-> obj status) 520)) (< (vector-length (-> obj unknown-vector61)) (vector-length s4-1)))
)
(set! (-> obj unknown-vector61 quad) (-> s4-1 quad))
)
)
(let ((s5-1 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> obj unknown-vector120) 1.0))
(f0-32 (vector-length (-> obj unknown-vector120)))
)
(set! (-> obj unknown-float140) (if (= f0-32 0.0)
0.0
(fmax 0.0 (/ (vector-dot (-> obj transv) s5-1) f0-32))
)
)
)
(stopwatch-stop (-> *collide-stats* total-target))
0
(none)
)
(defmethod TODO-RENAME-61 collide-shape-moving ((obj collide-shape-moving) (arg0 vector) (arg1 vector) (arg2 vector))
(TODO-RENAME-30 obj arg0)
(set! (-> arg1 y) 0.0)
(logior! (-> obj status) 7)
(set! (-> obj poly-normal quad) (-> arg2 quad))
(set! (-> obj surface-normal quad) (-> arg2 quad))
(set! (-> obj local-normal quad) (-> arg2 quad))
(set! (-> obj ground-poly-normal quad) (-> arg2 quad))
(set! (-> obj ground-impact-vel) (- (vector-dot arg1 (-> obj dynam gravity-normal))))
(set! (-> obj ground-touch-point quad) (-> arg0 quad))
0
(none)
)
(defmethod dummy-57 collide-shape-moving ((obj collide-shape-moving) (arg0 vector))
(local-vars (at-0 int))
(rlet ((vf0 :class vf)
(vf1 :class vf)
(vf2 :class vf)
)
(init-vf0-vector)
(dummy-47 obj)
(set! (-> obj trans-old 2 quad) (-> obj trans-old 1 quad))
(set! (-> obj trans-old 1 quad) (-> obj trans-old 0 quad))
(set! (-> obj trans-old 0 quad) (-> obj trans quad))
(set! (-> obj prev-status) (-> obj status))
(set! (-> obj status) (logand -16128 (-> obj status)))
(set! (-> obj local-normal quad) (-> obj dynam gravity-normal quad))
(set! (-> obj surface-normal quad) (-> obj dynam gravity-normal quad))
(set! (-> obj poly-normal quad) (-> obj dynam gravity-normal quad))
(set! (-> obj coverage) 0.0)
(set! (-> obj touch-angle) 0.0)
(let* ((a0-12 obj)
(t9-1 (method-of-object a0-12 TODO-RENAME-28))
(a1-1 (new 'stack-no-clear 'vector))
)
(.lvf vf1 (&-> arg0 quad))
(let ((f0-2 (-> *display* seconds-per-frame)))
(.mov at-0 f0-2)
)
(.mov vf2 at-0)
(.mov.vf vf1 vf0 :mask #b1000)
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> a1-1 quad) vf1)
(t9-1 a0-12 a1-1)
)
(set! (-> obj shadow-pos quad) (-> obj trans quad))
0
(none)
)
)
(defmethod dummy-58 collide-shape-moving ((obj collide-shape-moving) (arg0 vector))
(dummy-57 obj arg0)
(let ((a1-1 (new 'stack-no-clear 'touching-shapes-entry)))
(set! (-> a1-1 cshape1) (the-as collide-shape 1))
(set! (-> a1-1 cshape2) (the-as collide-shape *touching-list*))
(when (dummy-40 obj a1-1)
(TODO-RENAME-30 obj (the-as vector (-> obj trans-old)))
(return #t)
)
)
#f
)
(defmethod dummy-64 collide-shape-moving ((obj collide-shape-moving) (arg0 collide-tri-result) (arg1 vector))
(TODO-RENAME-30 obj arg1)
(logior! (-> obj status) 7)
(let ((v1-4 (-> arg0 normal)))
(set! (-> obj poly-normal quad) (-> v1-4 quad))
(set! (-> obj surface-normal quad) (-> v1-4 quad))
(set! (-> obj local-normal quad) (-> v1-4 quad))
(set! (-> obj ground-poly-normal quad) (-> v1-4 quad))
)
(set! (-> obj poly-pat) (-> arg0 pat))
(set! (-> obj cur-pat) (-> arg0 pat))
(set! (-> obj ground-pat) (-> arg0 pat))
(set! (-> obj ground-touch-point quad) (-> arg1 quad))
0
(none)
)
;; WARN: Stack slot offset 128 signed mismatch
(defmethod dummy-59 collide-shape-moving ((obj collide-shape-moving) (arg0 vector) (arg1 uint) (arg2 float) (arg3 symbol) (arg4 symbol) (arg5 symbol))
(local-vars (sv-128 float) (sv-144 collide-tri-result))
(set! sv-128 arg2)
(let ((s5-0 arg3))
(let ((s3-0 arg4)
(s1-0 arg5)
)
(if *debug-segment*
(add-frame
(-> *display* frames (-> *display* on-screen) frame profile-bar 0)
'draw
(new 'static 'rgba :r #x40 :b #x40 :a #x80)
)
)
(dummy-57 obj arg0)
(let ((s0-0 (-> obj shadow-pos)))
(set! (-> s0-0 quad) (-> obj trans quad))
(set! sv-144 (new 'stack-no-clear 'collide-tri-result))
(+! (-> s0-0 y) sv-128)
0.0
(let ((f0-4 (if s1-0
(misty-ambush-height-probe s0-0 81920.0)
(fill-and-probe-using-line-sphere
*collide-cache*
s0-0
(new 'static 'vector :y -81920.0 :w 1.0)
40.96
(the-as collide-kind arg1)
(-> obj process)
sv-144
1
)
)
)
)
(cond
((>= f0-4 0.0)
(let ((a2-3 (new 'static 'vector :y -81920.0 :w 1.0)))
(vector+float*! s0-0 s0-0 a2-3 f0-4)
)
(when (>= (-> s0-0 y) (-> obj trans y))
(dummy-64 obj sv-144 s0-0)
(set! (-> obj ground-impact-vel) (- (vector-dot arg0 (-> obj dynam gravity-normal))))
(set! (-> arg0 y) 0.0)
)
)
(s3-0
(set! (-> obj trans y) (-> obj trans-old 0 y))
)
)
)
)
)
(when (logtest? (-> obj root-prim collide-with) (collide-kind cak-1 cak-2 cak-3 target))
(let ((a1-7 (new 'stack-no-clear 'touching-shapes-entry)))
(set! (-> a1-7 cshape1) (the-as collide-shape 1))
(set! (-> a1-7 cshape2) (the-as collide-shape *touching-list*))
(when (dummy-40 obj a1-7)
(if s5-0
(TODO-RENAME-30 obj (the-as vector (-> obj trans-old)))
)
)
)
)
)
(if *debug-segment*
(add-frame
(-> *display* frames (-> *display* on-screen) frame profile-bar 0)
'draw
(new 'static 'rgba :g #xff :a #x80)
)
)
0
(none)
)
(defmethod dummy-60 collide-shape-moving ((obj collide-shape-moving) (arg0 float) (arg1 float) (arg2 symbol) (arg3 collide-kind))
(if *debug-segment*
(add-frame
(-> *display* frames (-> *display* on-screen) frame profile-bar 0)
'draw
(new 'static 'rgba :r #x40 :b #x40 :a #x80)
)
)
(let ((s4-0 (new 'stack-no-clear 'vector))
(s3-0 (new 'stack-no-clear 'collide-tri-result))
)
(let ((f30-0 (+ arg0 arg1)))
(set! (-> s4-0 quad) (-> obj trans quad))
(+! (-> s4-0 y) arg0)
0.0
(let ((f0-4 (fill-and-probe-using-y-probe *collide-cache* s4-0 f30-0 arg3 (-> obj process) s3-0 (the-as uint 1))))
(when (< f0-4 0.0)
(if arg2
(format
0
"WARNING: move-to-ground: (~f ~f) failed to locate ground [~S type ~S]~%"
(* 0.00024414062 (-> s4-0 y))
(* 0.00024414062 f30-0)
(-> obj process name)
(-> obj process type symbol)
)
)
(return #f)
)
(set! (-> s4-0 y) (- (-> s4-0 y) (* f0-4 f30-0)))
)
)
(set! (-> obj shadow-pos quad) (-> s4-0 quad))
(dummy-64 obj s3-0 s4-0)
)
(if *debug-segment*
(add-frame
(-> *display* frames (-> *display* on-screen) frame profile-bar 0)
'draw
(new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)
)
)
#t
)
(defmethod dummy-62 collide-shape-moving ((obj collide-shape-moving) (arg0 vector) (arg1 float))
(let* ((s4-0 (vector-negate! (new-stack-vector0) (-> obj dynam gravity)))
(a2-1 (-> obj local-normal))
(a2-2 (vector-reflect-flat! (new-stack-vector0) s4-0 a2-1))
)
(vector--float*! arg0 s4-0 a2-2 (cond
((logtest? (-> obj status) 1)
(empty)
arg1
)
(else
0.0
)
)
)
)
arg0
)
(defmethod dummy-33 collide-shape ((obj collide-shape) (arg0 vector) (arg1 collide-kind))
(local-vars (at-0 int))
(rlet ((vf0 :class vf)
(vf1 :class vf)
(vf2 :class vf)
)
(init-vf0-vector)
(let ((a0-1 (new 'stack-no-clear 'vector)))
(let ((v1-0 a0-1))
(.lvf vf1 (&-> arg0 quad))
(let ((f0-0 (-> *display* seconds-per-frame)))
(.mov at-0 f0-0)
)
(.mov vf2 at-0)
(.mov.vf vf1 vf0 :mask #b1000)
(.mul.x.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> v1-0 quad) vf1)
)
(let ((f0-2 (+ (vector-length a0-1) (if (= (-> obj process type) target)
4096.0
0.0
)
)
)
)
(dummy-32 obj f0-2 arg1)
)
)
(dummy-37 obj arg0)
(none)
)
)
(defmethod dummy-32 collide-shape ((obj collide-shape) (arg0 object) (arg1 collide-kind))
(let ((s5-0 (new 'stack-no-clear 'bounding-box)))
(cond
((dummy-36 obj s5-0 (the-as float arg0) arg1)
(fill-using-bounding-box *collide-cache* s5-0 arg1 (-> obj process) (-> obj pat-ignore-mask))
(if (and *display-collide-cache* (= (-> obj process type) target))
(dummy-9 *collide-cache*)
)
)
(else
(initialize *collide-cache*)
)
)
)
(none)
)
(defmethod dummy-36 collide-shape ((obj collide-shape) (arg0 bounding-box) (arg1 float) (arg2 collide-kind))
(rlet ((vf0 :class vf)
(vf1 :class vf)
(vf29 :class vf)
(vf30 :class vf)
(vf31 :class vf)
)
(init-vf0-vector)
(let ((v1-0 (new 'static 'vector :x 4.096))
(a0-1 (-> obj root-prim))
)
(cond
((logtest? (-> a0-1 collide-with) arg2)
(.mov vf31 arg1)
(.lvf vf1 (&-> v1-0 quad))
(.add.x.vf vf31 vf31 vf1 :mask #b1)
(cond
((dummy-20 a0-1 arg2)
(.mov.vf vf29 vf0 :mask #b1000)
(.mov.vf vf30 vf0 :mask #b1000)
(.svf (&-> arg0 min quad) vf29)
(.svf (&-> arg0 max quad) vf30)
(return #t)
)
(else
(return #f)
)
)
(the-as none 0)
)
(else
(return #f)
)
)
)
(the-as symbol 0)
)
)
;; WARN: Bad vector register dependency: vf31
(defmethod dummy-20 collide-shape-prim ((obj collide-shape-prim) (arg0 collide-kind))
(rlet ((vf1 :class vf)
(vf2 :class vf)
(vf29 :class vf)
(vf30 :class vf)
(vf31 :class vf)
)
(.lvf vf1 (&-> obj prim-core world-sphere quad))
(.add.w.vf vf2 vf31 vf1 :mask #b1)
(.add.x.vf vf30 vf1 vf2 :mask #b111)
(.sub.x.vf vf29 vf1 vf2 :mask #b111)
#t
)
)
;; ERROR: function was not converted to expressions. Cannot decompile.
;; WARN: Bad vector register dependency: vf29
;; WARN: Bad vector register dependency: vf30
;; WARN: Bad vector register dependency: vf31
;; WARN: Expression building failed: In (method 29 collide-shape-prim-group): Could not match ArrayFieldAccess (stride power of 2) values: (+ v1-0 (the-as int obj))
; (defmethod dummy-29 collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 uint))
; (local-vars
; (v0-0 none)
; (v0-1 int)
; (v1-0 int)
; (v1-1 int)
; (v1-2 uint)
; (v1-3 uint)
; (v1-5 type)
; (v1-6 type)
; (v1-8 float)
; (a0-1 collide-shape-prim)
; (a1-1 type)
; (a1-2 uint)
; (s3-0 int)
; (s4-0 int)
; (t9-0 (function collide-shape-prim-group uint none))
; )
; (rlet ((vf1 :class vf)
; (vf2 :class vf)
; (vf29 :class vf)
; (vf3 :class vf)
; (vf30 :class vf)
; (vf31 :class vf)
; (vf4 :class vf)
; )
; (set! s4-0 (-> obj num-prims))
; (set! s3-0 0)
; (label cfg-1)
; ((b! (= s3-0 s4-0) L214 (set! v1-0 (sll s3-0 2))) (set! v1-0 (sll s3-0 2)))
; (when (begin
; (set! v1-1 (+ v1-0 (the-as int obj)))
; (set! a0-1 (dynamic-array-field-access v1-1 prims PLACEHOLDER))
; (set! v1-2 (-> a0-1 collide-with))
; (set! v1-3 (logand v1-2 arg0))
; (nonzero? v1-3)
; )
; (cond
; ((begin (set! v1-5 collide-shape-prim-group) (set! a1-1 (-> a0-1 type)) (= a1-1 v1-5))
; (set! v1-6 (-> (the-as collide-shape-prim-group a0-1) type))
; (set! t9-0 (method-of-type v1-6 dummy-29))
; (set! a1-2 arg0)
; (call! a0-1 a1-2)
; (set! v1-7 v0-0)
; )
; (else
; (.lvf vf1 (&-> a0-1 prim-core world-sphere quad))
; (.add.w.vf vf2 vf31 vf1 :mask #b1)
; (.add.x.vf vf4 vf1 vf2 :mask #b111)
; (.sub.x.vf vf3 vf1 vf2 :mask #b111)
; (.min.vf vf29 vf29 vf3)
; (.max.vf vf30 vf30 vf4)
; (.mov v1-8 vf30)
; )
; )
; )
; ((b! #t L211 (set! s3-0 (+ s3-0 1))) (set! s3-0 (+ s3-0 1)))
; (label cfg-7)
; (set! v0-1 0)
; (ret-none)
; )
; )
(defmethod dummy-34 collide-shape ((obj collide-shape) (arg0 uint))
(dummy-10 (-> obj root-prim) arg0)
)
(defmethod dummy-10 collide-shape-prim ((obj collide-shape-prim) (arg0 uint))
(if (= (-> obj prim-id) arg0)
(return obj)
)
(the-as collide-shape-prim #f)
)
(defmethod dummy-10 collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 uint))
(if (= (-> obj prim-id) arg0)
(return obj)
)
(countdown (s4-0 (-> obj num-prims))
(let ((a0-1 (-> obj prims s4-0)))
(cond
((= (-> a0-1 type) collide-shape-prim-group)
(let ((a0-2 (dummy-10 a0-1 arg0)))
(if a0-2
(return a0-2)
)
)
)
(else
(if (= (-> a0-1 prim-id) arg0)
(return a0-1)
)
)
)
)
)
(the-as collide-shape-prim #f)
)
(defun-debug collide-shape-draw-debug-marks ()
(add-debug-sphere
(or *display-collision-marks* *display-target-marks*)
(bucket-id debug-draw0)
(target-pos 0)
819.2
(new 'static 'rgba :r #xff :g #xff :b #xff :a #x80)
)
(when *display-collision-marks*
(let ((v1-4 (-> *collide-player-list* alive-list next0)))
*collide-player-list*
(let ((gp-1 (-> v1-4 next0)))
(while (!= v1-4 (-> *collide-player-list* alive-list-end))
(let ((s5-1 (-> (the-as connection v1-4) param1)))
(if (or (and (not *display-actor-anim*) (not *display-process-anim*))
(or (= (-> (the-as collide-shape s5-1) process) *target*)
(name= *display-actor-anim* (-> (the-as collide-shape s5-1) process name))
(= (ppointer->process *display-process-anim*) (-> (the-as collide-shape s5-1) process))
)
)
(debug-draw (the-as collide-shape s5-1))
)
)
(set! v1-4 gp-1)
*collide-player-list*
(set! gp-1 (-> gp-1 next0))
)
)
)
(let ((v1-19 (-> *collide-hit-by-player-list* alive-list next0)))
*collide-hit-by-player-list*
(let ((gp-2 (-> v1-19 next0)))
(while (!= v1-19 (-> *collide-hit-by-player-list* alive-list-end))
(let ((s5-2 (-> (the-as connection v1-19) param1)))
(if (or (and (not *display-actor-anim*) (not *display-process-anim*))
(or (= (-> (the-as collide-shape s5-2) process) *target*)
(name= *display-actor-anim* (-> (the-as collide-shape s5-2) process name))
(= (ppointer->process *display-process-anim*) (-> (the-as collide-shape s5-2) process))
)
)
(debug-draw (the-as collide-shape s5-2))
)
)
(set! v1-19 gp-2)
*collide-hit-by-player-list*
(set! gp-2 (-> gp-2 next0))
)
)
)
(let ((v1-34 (-> *collide-usually-hit-by-player-list* alive-list next0)))
*collide-usually-hit-by-player-list*
(let ((gp-3 (-> v1-34 next0)))
(while (!= v1-34 (-> *collide-usually-hit-by-player-list* alive-list-end))
(let ((s5-3 (-> (the-as connection v1-34) param1)))
(if (or (and (not *display-actor-anim*) (not *display-process-anim*))
(or (= (-> (the-as collide-shape s5-3) process) *target*)
(name= *display-actor-anim* (-> (the-as collide-shape s5-3) process name))
(= (ppointer->process *display-process-anim*) (-> (the-as collide-shape s5-3) process))
)
)
(debug-draw (the-as collide-shape s5-3))
)
)
(set! v1-34 gp-3)
*collide-usually-hit-by-player-list*
(set! gp-3 (-> gp-3 next0))
)
)
)
(let ((v1-49 (-> *collide-hit-by-others-list* alive-list next0)))
*collide-hit-by-others-list*
(let ((gp-4 (-> v1-49 next0)))
(while (!= v1-49 (-> *collide-hit-by-others-list* alive-list-end))
(let ((s5-4 (-> (the-as connection v1-49) param1)))
(if (or (and (not *display-actor-anim*) (not *display-process-anim*))
(or (= (-> (the-as collide-shape s5-4) process) *target*)
(name= *display-actor-anim* (-> (the-as collide-shape s5-4) process name))
(= (ppointer->process *display-process-anim*) (-> (the-as collide-shape s5-4) process))
)
)
(debug-draw (the-as collide-shape s5-4))
)
)
(set! v1-49 gp-4)
*collide-hit-by-others-list*
(set! gp-4 (-> gp-4 next0))
)
)
)
)
0
(none)
)
(defmethod debug-draw collide-shape ((obj collide-shape))
(if (sphere-in-view-frustum? (the-as sphere (-> obj root-prim prim-core)))
(debug-draw-world-sphere (-> obj root-prim))
)
(none)
)
(define *col-timer* (new 'global 'stopwatch))
(define *frame-timer* (new 'global 'stopwatch))
(define *col-timer-enable* #t)
(defun debug-report-col-stats ()
(when *col-timer-enable*
(stopwatch-end *frame-timer*)
(format *stdcon* "col stats:~%")
(format *stdcon* " col ~F ms~%" (* 1000.0 (stopwatch-elapsed-seconds *col-timer*)))
(format *stdcon* " frame ~F ms~%" (* 1000.0 (stopwatch-elapsed-seconds *frame-timer*)))
(stopwatch-init *col-timer*)
(stopwatch-init *frame-timer*)
(stopwatch-begin *frame-timer*)
)
)
(defmethod dummy-47 collide-shape ((obj collide-shape))
(dummy-25 (-> obj root-prim) (-> obj process))
#f
)
(defmethod dummy-25 collide-shape-prim ((obj collide-shape-prim) (arg0 process-drawable))
(local-vars (a0-2 float) (a0-4 float) (a0-6 float))
(rlet ((acc :class vf)
(Q :class vf)
(vf0 :class vf)
(vf1 :class vf)
(vf2 :class vf)
(vf3 :class vf)
(vf4 :class vf)
(vf5 :class vf)
)
(init-vf0-vector)
(let ((a1-1 (-> arg0 node-list))
(v1-0 (-> obj cshape))
(a0-1 (-> obj transform-index))
)
(cond
((nonzero? a1-1)
(cond
((>= a0-1 0)
(let ((v1-4 (-> a1-1 data a0-1 bone transform)))
(.lvf vf5 (&-> v1-4 vector 3 quad))
(.lvf vf1 (&-> obj local-sphere quad))
(.lvf vf2 (&-> v1-4 vector 0 quad))
(.mul.w.vf acc vf5 vf0)
(.div.vf Q vf0 vf5 :fsf #b11 :ftf #b11)
(.lvf vf3 (&-> v1-4 vector 1 quad))
(.add.mul.x.vf acc vf2 vf1 acc)
(.lvf vf4 (&-> v1-4 vector 2 quad))
)
(.add.mul.y.vf acc vf3 vf1 acc)
(.add.mul.z.vf vf1 vf4 vf1 acc :mask #b111)
(.mul.vf vf1 vf1 Q :mask #b111)
(.svf (&-> obj prim-core world-sphere quad) vf1)
(.mov a0-2 vf1)
)
(else
(when (= a0-1 -2)
(.lvf vf1 (&-> obj local-sphere quad))
(.lvf vf2 (&-> v1-0 trans quad))
(.add.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> obj prim-core world-sphere quad) vf1)
(.mov a0-4 vf1)
)
)
)
)
(else
(when (!= a0-1 -1)
(.lvf vf1 (&-> obj local-sphere quad))
(.lvf vf2 (&-> v1-0 trans quad))
(.add.vf vf1 vf1 vf2 :mask #b111)
(.svf (&-> obj prim-core world-sphere quad) vf1)
(.mov a0-6 vf1)
)
)
)
)
(when (= (-> obj type) collide-shape-prim-group)
(countdown (s4-0 (-> (the-as collide-shape-prim-group obj) num-prims))
(dummy-25 (-> (the-as collide-shape-prim-group obj) prims s4-0) arg0)
)
#f
)
)
)
(defmethod TODO-RENAME-28 collide-shape ((obj collide-shape) (arg0 vector))
(vector+! (-> obj trans) (-> obj trans) arg0)
(dummy-9 (-> obj root-prim) arg0)
)
(defmethod dummy-9 collide-shape-prim ((obj collide-shape-prim) (arg0 vector))
(vector+! (the-as vector (-> obj prim-core)) (the-as vector (-> obj prim-core)) arg0)
(let ((f0-0 (-> obj local-sphere w)))
(set! (-> obj prim-core world-sphere w) f0-0)
(the-as object f0-0)
)
)
(defmethod dummy-9 collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 vector))
(vector+! (the-as vector (-> obj prim-core)) (the-as vector (-> obj prim-core)) arg0)
(set! (-> obj prim-core world-sphere w) (-> obj local-sphere w))
(countdown (s4-0 (-> obj num-prims))
(let ((a0-2 (-> obj prims s4-0)))
(cond
((= (-> a0-2 type) collide-shape-prim-group)
(dummy-9 a0-2 arg0)
)
(else
(vector+! (the-as vector (-> a0-2 prim-core)) (the-as vector (-> a0-2 prim-core)) arg0)
(set! (-> a0-2 prim-core world-sphere w) (-> a0-2 local-sphere w))
)
)
)
)
(the-as object #f)
)
(defmethod TODO-RENAME-30 collide-shape ((obj collide-shape) (arg0 vector))
(let ((v1-0 (new 'stack-no-clear 'vector)))
(vector-! v1-0 arg0 (-> obj trans))
(TODO-RENAME-28 obj v1-0)
)
)
(defmethod set-root-prim! collide-shape ((obj collide-shape) (arg0 collide-shape-prim))
(set! (-> obj root-prim) arg0)
arg0
)
(defmethod set-collide-with! collide-shape-prim ((obj collide-shape-prim) (arg0 collide-kind))
(set! (-> obj collide-with) arg0)
0
(none)
)
(defmethod set-collide-with! collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 collide-kind))
(set! (-> obj collide-with) arg0)
(dotimes (s4-0 (-> obj num-prims))
(set-collide-with! (-> obj prims s4-0) arg0)
)
0
(none)
)
(defmethod set-collide-as! collide-shape-prim ((obj collide-shape-prim) (arg0 collide-kind))
(set! (-> obj prim-core collide-as) arg0)
0
(none)
)
(defmethod set-collide-as! collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 collide-kind))
(set! (-> obj prim-core collide-as) arg0)
(dotimes (s4-0 (-> obj num-prims))
(set-collide-as! (-> obj prims s4-0) arg0)
)
0
(none)
)
(defmethod set-root-prim-collide-with! collide-shape ((obj collide-shape) (arg0 collide-kind))
(set-collide-with! (-> obj root-prim) arg0)
0
(none)
)
(defmethod set-root-prim-collide-as! collide-shape ((obj collide-shape) (arg0 collide-kind))
(set-collide-as! (-> obj root-prim) arg0)
0
(none)
)
(defmethod append-prim collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 collide-shape-prim))
(let ((v1-0 (-> obj num-prims)))
(cond
((>= v1-0 (-> obj allocated-prims))
(format 0 "collide-shape-prim-group::append-prim : Exceeded max # of prims!~%")
)
(else
(set! (-> obj prims v1-0) arg0)
(set! (-> obj num-prims) (+ v1-0 1))
)
)
)
(none)
)
(defmethod find-collision-meshes collide-shape ((obj collide-shape))
(let ((s5-0 0))
(let ((v1-1 (-> obj process draw)))
(when (and (nonzero? v1-1) (-> v1-1 jgeo))
(let ((a1-1 (res-lump-struct (-> v1-1 jgeo extra) 'collide-mesh-group structure)))
(if a1-1
(set! s5-0 (num-mesh (-> obj root-prim) (the-as collide-shape-prim a1-1)))
)
)
)
)
(if (nonzero? s5-0)
(format 0 "ERROR: Failed to find collision meshes for ~D prim(s) in ~A!~%" s5-0 (-> obj process name))
)
)
(dummy-47 obj)
)
(defmethod num-mesh collide-shape-prim ((obj collide-shape-prim) (arg0 collide-shape-prim))
(local-vars (v0-0 int))
(return 0)
v0-0
)
(defmethod num-mesh collide-shape-prim-mesh ((obj collide-shape-prim-mesh) (arg0 collide-shape-prim))
(let ((s4-0 (-> obj mesh-id)))
(cond
((and (>= s4-0 0) (< s4-0 (length arg0)))
(set! (-> obj mesh) (the-as collide-mesh (-> arg0 prim-core world-sphere data s4-0)))
(return 0)
)
(else
(set! (-> obj mesh) #f)
(return 1)
)
)
)
(the-as int 0)
)
(defmethod num-mesh collide-shape-prim-group ((obj collide-shape-prim-group) (arg0 collide-shape-prim))
(let ((gp-0 0))
(countdown (s3-0 (-> obj num-prims))
(+! gp-0 (num-mesh (-> obj prims s3-0) arg0))
)
gp-0
)
)
;; WARN: Expression building failed: In (method 28 collide-shape-prim-mesh): Unhandled branch delay in BranchElement::push_to_stack: (bl! (zero? (the-as uint v0-5)) L148 (no-delay!))
; (defmethod change-mesh collide-shape-prim-mesh ((obj collide-shape-prim-mesh) (arg0 int))
; (local-vars
; (v0-5 int)
; (v0-6 object)
; (v1-3 draw-control)
; (v1-8 int)
; (v1-9 int)
; (v1-10 uint)
; (v1-11 collide-mesh-cache)
; (a0-6 uint)
; (a0-7 int)
; (a1-2 string)
; (s4-0 structure)
; (t9-2 (function _varargs_ object))
; )
; (when (!= (-> obj mesh-id) arg0)
; (when (and (nonzero? v1-3) (-> v1-3 jgeo))
; (when s4-0
; (cond
; ((and (>= arg0 0) (< arg0 (length (the-as collide-shape-prim-group s4-0))))
; (set! v1-8 (* arg0 4))
; (set! v1-9 (+ (* arg0 4) (the-as int s4-0)))
; (set! v1-10 (l.wu (+ (* arg0 4) (the-as int s4-0) 12)))
; (set! (-> obj mesh) (the-as collide-mesh v1-10))
; (set! (-> obj mesh-id) arg0)
; (set! v1-11 *collide-mesh-cache*)
; (set! a0-6 (-> v1-11 id))
; (set! (-> v1-11 used-size) (the-as uint 0))
; (set! v0-5 (the-as int (+ a0-6 1)))
; (bl! (zero? (the-as uint v0-5)) L148 (no-delay!))
; (set! v0-5 1)
; (label cfg-12)
; (set! (-> v1-11 id) (the-as uint v0-5))
; )
; (else
; (set! t9-2 format)
; (set! a0-7 0)
; (set! a1-2 L402)
; (call! a0-7 a1-2)
; )
; )
; )
; )
; )
; (ret-none)
; )
(defmethod init! collide-shape-intersect ((obj collide-shape-intersect) (arg0 vector))
(set! (-> obj move-vec quad) (-> arg0 quad))
(set! (-> obj best-u) -100000000.0)
(set! (-> obj best-from-prim) #f)
(set! (-> obj best-to-prim) #f)
#f
)
(defmethod debug-draw-world-sphere collide-shape-prim ((obj collide-shape-prim))
(add-debug-sphere
#t
(bucket-id debug-draw0)
(the-as vector (-> obj prim-core))
(-> obj local-sphere w)
(new 'static 'rgba :r #xff :g #xff :b #xff :a #x40)
)
)
(defmethod debug-draw-world-sphere collide-shape-prim-sphere ((obj collide-shape-prim-sphere))
(add-debug-sphere
#t
(bucket-id debug-draw0)
(the-as vector (-> obj prim-core))
(-> obj local-sphere w)
(the-as rgba (cond
((and (zero? (-> obj prim-core collide-as)) (zero? (-> obj collide-with)))
#x40808080
)
((logtest? (-> obj prim-core action) 1)
#x4000ffff
)
(else
#x400080ff
)
)
)
)
)
(defmethod debug-draw-world-sphere collide-shape-prim-mesh ((obj collide-shape-prim-mesh))
(add-debug-sphere
#t
(bucket-id debug-draw0)
(the-as vector (-> obj prim-core))
(-> obj local-sphere w)
(new 'static 'rgba :b #xff :a #x40)
)
)
(defmethod debug-draw-world-sphere collide-shape-prim-group ((obj collide-shape-prim-group))
(add-debug-sphere
#t
(bucket-id debug-draw0)
(the-as vector (-> obj prim-core))
(-> obj local-sphere w)
(new 'static 'rgba :g #xff :a #x10)
)
(countdown (s5-0 (-> obj num-prims))
(debug-draw-world-sphere (-> obj prims s5-0))
)
#f
)
;; WARN: Expression building failed: In (method 45 collide-shape): Unhandled branch delay in BranchElement::push_to_stack: (bl! (zero? (the-as uint a0-2)) L93 (no-delay!))
; (defmethod dummy-45 collide-shape ((obj collide-shape))
; (local-vars
; (at-0 int)
; (at-1 int)
; (at-2 int)
; (at-3 int)
; (v0-0 none)
; (v0-1 none)
; (v0-2 vector)
; (v0-3 none)
; (v0-4 none)
; (v0-5 symbol)
; (v0-6 none)
; (v0-7 none)
; (v0-8 vector)
; (v0-9 none)
; (v0-10 none)
; (v0-11 none)
; (v0-12 none)
; (v0-13 vector)
; (v0-14 none)
; (v0-15 none)
; (v0-16 none)
; (v0-17 none)
; (v0-18 vector)
; (v0-19 none)
; (v0-20 none)
; (v1-0 collide-mesh-cache)
; (v1-1 collide-shape-prim)
; (v1-2 uint)
; (v1-4 engine)
; (v1-5 connectable)
; (v1-6 collide-shape-prim)
; (v1-7 uint)
; (v1-8 uint)
; (v1-10 process-drawable)
; (v1-12 type)
; (v1-13 none)
; (v1-14 none)
; (v1-16 type)
; (v1-17 collide-shape-prim)
; (v1-19 vector)
; (v1-20 float)
; (v1-21 vector)
; (v1-22 vector)
; (v1-23 vector)
; (v1-24 type)
; (v1-26 symbol)
; (v1-27 type)
; (v1-28 none)
; (v1-30 collide-shape-prim)
; (v1-34 uint)
; (v1-35 uint)
; (v1-37 engine)
; (v1-38 connectable)
; (v1-39 collide-shape-prim)
; (v1-40 uint)
; (v1-41 uint)
; (v1-43 process-drawable)
; (v1-45 type)
; (v1-46 none)
; (v1-47 none)
; (v1-49 type)
; (v1-50 collide-shape-prim)
; (v1-52 vector)
; (v1-53 float)
; (v1-54 vector)
; (v1-55 vector)
; (v1-56 vector)
; (v1-57 type)
; (v1-59 symbol)
; (v1-60 type)
; (v1-61 none)
; (v1-63 collide-shape-prim)
; (v1-67 uint)
; (v1-69 engine)
; (v1-70 connectable)
; (v1-71 collide-shape-prim)
; (v1-72 uint)
; (v1-73 uint)
; (v1-75 process-drawable)
; (v1-77 type)
; (v1-78 none)
; (v1-79 none)
; (v1-81 type)
; (v1-82 collide-shape-prim)
; (v1-84 vector)
; (v1-85 float)
; (v1-86 vector)
; (v1-87 vector)
; (v1-88 vector)
; (v1-89 type)
; (v1-91 symbol)
; (v1-92 type)
; (v1-93 none)
; (v1-95 collide-shape-prim)
; (v1-99 uint)
; (v1-100 engine)
; (v1-101 connectable)
; (v1-102 collide-shape-prim)
; (v1-103 uint)
; (v1-104 uint)
; (v1-106 process-drawable)
; (v1-108 type)
; (v1-109 none)
; (v1-110 none)
; (v1-112 type)
; (v1-113 collide-shape-prim)
; (v1-115 vector)
; (v1-116 float)
; (v1-117 vector)
; (v1-118 vector)
; (v1-119 vector)
; (v1-120 type)
; (v1-122 symbol)
; (v1-123 type)
; (v1-124 none)
; (v1-126 collide-shape-prim)
; (a0-1 uint)
; (a0-2 int)
; (a0-3 engine)
; (a0-4 connectable)
; (a0-5 process-drawable)
; (a0-6 collide-shape)
; (a0-7 collide-shape-moving)
; (a0-8 vector)
; (a0-14 vector)
; (a0-15 vector)
; (a0-16 vector)
; (a0-17 display)
; (a0-18 collide-shape-moving)
; (a0-19 symbol)
; (a0-20 collide-shape)
; (a0-21 engine)
; (a0-22 connectable)
; (a0-23 engine)
; (a0-24 connectable)
; (a0-25 engine)
; (a0-26 connectable)
; (a0-27 process-drawable)
; (a0-28 collide-shape)
; (a0-29 collide-shape-moving)
; (a0-30 vector)
; (a0-36 vector)
; (a0-37 vector)
; (a0-38 vector)
; (a0-39 display)
; (a0-40 collide-shape-moving)
; (a0-41 symbol)
; (a0-42 collide-shape)
; (a0-43 engine)
; (a0-44 connectable)
; (a0-45 engine)
; (a0-46 connectable)
; (a0-47 engine)
; (a0-48 connectable)
; (a0-49 process-drawable)
; (a0-50 collide-shape)
; (a0-51 collide-shape-moving)
; (a0-52 vector)
; (a0-58 vector)
; (a0-59 vector)
; (a0-60 vector)
; (a0-61 display)
; (a0-62 collide-shape-moving)
; (a0-63 symbol)
; (a0-64 collide-shape)
; (a0-65 engine)
; (a0-66 connectable)
; (a0-67 engine)
; (a0-68 connectable)
; (a0-69 engine)
; (a0-70 connectable)
; (a0-71 process-drawable)
; (a0-72 collide-shape)
; (a0-73 collide-shape-moving)
; (a0-74 vector)
; (a0-80 vector)
; (a0-81 vector)
; (a0-82 vector)
; (a0-83 display)
; (a0-84 collide-shape-moving)
; (a0-85 symbol)
; (a0-86 collide-shape)
; (a0-87 engine)
; (a0-88 connectable)
; (a0-89 engine)
; (a0-90 connectable)
; (a1-0 collide-shape-moving)
; (a1-1 float)
; (a1-2 vector)
; (a1-3 uint128)
; (a1-4 float)
; (a1-5 vector)
; (a1-6 collide-shape-moving)
; (a1-7 collide-shape-moving)
; (a1-8 float)
; (a1-9 vector)
; (a1-10 uint128)
; (a1-11 float)
; (a1-12 vector)
; (a1-13 collide-shape-moving)
; (a1-14 collide-shape-moving)
; (a1-15 float)
; (a1-16 vector)
; (a1-17 uint128)
; (a1-18 float)
; (a1-19 vector)
; (a1-20 collide-shape-moving)
; (a1-21 collide-shape-moving)
; (a1-22 float)
; (a1-23 vector)
; (a1-24 uint128)
; (a1-25 float)
; (a1-26 vector)
; (a1-27 collide-shape-moving)
; (a2-0 collide-work)
; (a2-1 uint)
; (a2-2 collide-work)
; (a2-3 collide-work)
; (a2-4 uint)
; (a2-5 collide-work)
; (a2-6 collide-work)
; (a2-7 uint)
; (a2-8 collide-work)
; (a2-9 collide-work)
; (a2-10 uint)
; (a2-11 collide-work)
; (s0-0 uint)
; (s0-1 uint)
; (s0-2 uint)
; (s0-3 uint)
; (s1-0 vector)
; (s1-1 vector)
; (s1-2 vector)
; (s1-3 vector)
; (s2-0 collide-work)
; (s2-1 collide-work)
; (s2-2 collide-work)
; (s2-3 collide-work)
; (s3-0 collide-shape-moving)
; (s3-1 collide-shape-moving)
; (s3-2 collide-shape-moving)
; (s3-3 collide-shape-moving)
; (s4-0 connectable)
; (s4-1 connectable)
; (s4-2 connectable)
; (s4-3 connectable)
; (s5-0 uint)
; (s5-1 int)
; (s5-2 int)
; (s5-3 int)
; (s5-4 int)
; (t9-0 (function collide-shape collide-shape collide-work none))
; (t9-1 (function collide-shape-moving object uint none))
; (t9-2 (function vector float vector))
; (t9-3 (function collide-shape-moving vector none))
; (t9-4 (function collide-shape collide-shape collide-work none))
; (t9-5 (function collide-shape collide-shape collide-work none))
; (t9-6 (function collide-shape-moving object uint none))
; (t9-7 (function vector float vector))
; (t9-8 (function collide-shape-moving vector none))
; (t9-9 (function collide-shape collide-shape collide-work none))
; (t9-10 (function collide-shape collide-shape collide-work none))
; (t9-11 (function collide-shape-moving object uint none))
; (t9-12 (function vector float vector))
; (t9-13 (function collide-shape-moving vector none))
; (t9-14 (function collide-shape collide-shape collide-work none))
; (t9-15 (function collide-shape collide-shape collide-work none))
; (t9-16 (function collide-shape-moving object uint none))
; (t9-17 (function vector float vector))
; (t9-18 (function collide-shape-moving vector none))
; (t9-19 (function collide-shape collide-shape collide-work none))
; (f0-0 float)
; (f0-1 float)
; (f0-2 float)
; (f0-3 float)
; (f0-4 float)
; (f0-5 float)
; (f0-6 float)
; (f0-7 float)
; (f0-8 float)
; (f0-9 float)
; (f0-10 float)
; (f0-11 float)
; (f0-12 float)
; (f0-13 float)
; (f0-14 float)
; (f0-15 float)
; (f0-16 float)
; (f0-17 float)
; (f0-18 float)
; (f0-19 float)
; (f0-20 float)
; (f0-21 float)
; (f0-22 float)
; (f0-23 float)
; (f0-24 float)
; (f0-25 float)
; (f0-26 float)
; (f0-27 float)
; (f1-0 float)
; (f1-1 float)
; (f1-2 float)
; (f1-3 float)
; (f1-4 float)
; (f1-5 float)
; (f1-6 float)
; (f1-7 float)
; (f1-8 float)
; (f1-9 float)
; (f1-10 float)
; (f1-11 float)
; (f2-0 float)
; (f2-1 float)
; (f2-2 float)
; (f2-3 float)
; )
; (rlet ((vf0 :class vf)
; (vf1 :class vf)
; (vf2 :class vf)
; (vf3 :class vf)
; (vf4 :class vf)
; (vf5 :class vf)
; )
; (init-vf0-vector)
; (when (begin
; (when (begin
; (set! v1-0 *collide-mesh-cache*)
; (set! a0-1 (-> v1-0 id))
; (set! (-> v1-0 used-size) (the-as uint 0))
; (set! a0-2 (the-as int (+ a0-1 1)))
; (bl! (zero? (the-as uint a0-2)) L93 (no-delay!))
; (set! a0-2 1)
; (label cfg-2)
; (set! (-> v1-0 id) (the-as uint a0-2))
; (set! v1-1 (-> obj root-prim))
; (set! s5-0 (-> v1-1 collide-with))
; (set! v1-2 (logand s5-0 16))
; (nonzero? v1-2)
; )
; (set! v1-4 *collide-player-list*)
; (set! v1-5 (-> v1-4 alive-list next0))
; (set! a0-3 *collide-player-list*)
; (set! a0-4 v1-5)
; (set! s4-0 (-> a0-4 next0))
; (while (begin (set! a0-23 *collide-player-list*) (set! a0-24 (-> a0-23 alive-list-end)) (!= v1-5 a0-24))
; (when (begin
; (set! s3-0 (the-as collide-shape-moving (-> (the-as connection v1-5) param1)))
; (set! v1-6 (-> s3-0 root-prim))
; (set! v1-7 (-> v1-6 prim-core collide-as))
; (set! v1-8 (logand s5-0 v1-7))
; (nonzero? v1-8)
; )
; (when (begin (set! v1-10 (-> s3-0 process)) (set! a0-5 (-> obj process)) (!= a0-5 v1-10))
; (when (begin
; (and
; (begin
; (set! s2-0 (new 'stack-no-clear 'collide-work))
; (set! a0-6 obj)
; (set! v1-12 (-> a0-6 type))
; (set! t9-0 (method-of-type v1-12 dummy-42))
; (set! a1-0 s3-0)
; (set! a2-0 s2-0)
; (set! v0-0 (call! a0-6 a1-0 a2-0))
; (set! v1-13 v0-0)
; v1-13
; )
; (begin
; (set! f0-0 -81.92)
; (set! f1-0 (-> s2-0 collide-sphere-neg-r x))
; (set! v1-14 (the-as none (>=.s f0-0 f1-0)))
; )
; )
; v1-14
; )
; (set! a0-7 s3-0)
; (set! v1-16 (-> a0-7 type))
; (set! t9-1 (method-of-type v1-16 dummy-32))
; (set! a1-1 8192.0)
; (set! v1-17 (-> s3-0 root-prim))
; (set! a2-1 (-> v1-17 collide-with))
; (call! a0-7 a1-1 a2-1)
; (set! v1-18 v0-1)
; (set! s5-1 3)
; (until (begin
; (cond
; ((begin
; (set! s1-0 (new 'stack-no-clear 'vector))
; (set! v1-19 (new 'stack-no-clear 'vector))
; (set! a0-8 v1-19)
; (set! a1-2 (-> s3-0 trans))
; (set! a1-3 (-> a1-2 quad))
; (set! (-> a0-8 quad) a1-3)
; (set! f0-1 2867.2)
; (set! f1-1 (-> v1-19 y))
; (set! f1-2 (+.s f0-1 f1-1))
; (set! f0-2 5734.4)
; (set! f2-0 (+.s f0-2 f1-2))
; (set! f0-3 (-> s2-0 inv-mat vector 1 y))
; (<.s f0-3 f1-2)
; )
; (set! f0-3 f1-2)
; (set! a0-10 (fpr->gpr f0-3))
; )
; ((<.s f2-0 f0-3)
; (set! f0-3 f2-0)
; (set! a0-12 (fpr->gpr f0-3))
; )
; )
; (set! (-> v1-19 y) f0-3)
; (set! a0-13 (fpr->gpr f0-3))
; (.lvf vf4 (&-> v1-19 quad))
; (.lvf vf3 (&-> s2-0 inv-mat vector 1 quad))
; (.lvf vf5 (&-> s2-0 inv-mat vector 2 quad))
; (.sub.vf vf2 vf4 vf3)
; (.mul.vf vf1 vf5 vf2)
; (.add.x.vf vf1 vf1 vf1 :mask #b10)
; (.add.z.vf vf1 vf1 vf1 :mask #b10)
; (.mov v1-20 vf1)
; (bl! (<0.si v1-20) L99 (no-delay!))
; (.sub.vf vf2 vf0 vf2)
; (or
; (begin
; (label cfg-18)
; (.svf (&-> s1-0 quad) vf2)
; (set! t9-2 vector-normalize!)
; (set! a0-14 s1-0)
; (set! a1-4 1.0)
; (call! a0-14 a1-4)
; (set! v1-21 s1-0)
; (set! a0-15 s1-0)
; (set! f0-4 (-> s2-0 collide-sphere-neg-r x))
; (set! f0-5 (neg.s f0-4))
; (set! v1-22 (vector-float*!2 v1-21 a0-15 f0-5))
; (set! v1-23 s1-0)
; (set! a0-16 s1-0)
; (.lvf vf1 (&-> a0-16 quad))
; (set! a0-17 *display*)
; (set! f0-6 (-> a0-17 frames-per-second))
; (.mov at-0 f0-6)
; (.mov vf2 at-0)
; (.mov.vf vf1 vf0 :mask #b1000)
; (.mul.x.vf vf1 vf1 vf2 :mask #b111)
; (.svf (&-> v1-23 quad) vf1)
; (set! s0-0 (-> s3-0 status))
; (set! a0-18 s3-0)
; (set! v1-24 (-> a0-18 type))
; (set! t9-3 (method-of-type v1-24 dummy-37))
; (set! a1-5 s1-0)
; (call! a0-18 a1-5)
; (set! v1-25 v0-3)
; (set! (-> s3-0 status) s0-0)
; (set! s5-1 (+ s5-1 -1))
; (set! a0-19 (<=0.si s5-1))
; a0-19
; )
; (begin
; (set! a0-20 obj)
; (set! v1-27 (-> a0-20 type))
; (set! t9-4 (method-of-type v1-27 dummy-42))
; (set! a1-6 s3-0)
; (set! a2-2 s2-0)
; (set! v0-4 (call! a0-20 a1-6 a2-2))
; (set! v1-28 v0-4)
; (set! v1-26 (not v1-28))
; )
; )
; v1-26
; )
; (empty)
; )
; (set! v1-30 (-> obj root-prim))
; (set! s5-0 (-> v1-30 collide-with))
; (set! v1-31 s5-0)
; )
; )
; )
; (set! v1-5 s4-0)
; (set! a0-21 *collide-player-list*)
; (set! a0-22 (-> s4-0 next0))
; (set! s4-0 a0-22)
; )
; )
; (set! v1-34 (logand s5-0 14))
; (nonzero? v1-34)
; )
; (when (begin
; (when (begin
; (when (begin (set! v1-35 (logand s5-0 2)) (nonzero? v1-35))
; (set! v1-37 *collide-hit-by-player-list*)
; (set! v1-38 (-> v1-37 alive-list next0))
; (set! a0-25 *collide-hit-by-player-list*)
; (set! a0-26 v1-38)
; (set! s4-1 (-> a0-26 next0))
; (while (begin (set! a0-45 *collide-hit-by-player-list*) (set! a0-46 (-> a0-45 alive-list-end)) (!= v1-38 a0-46))
; (when (begin
; (set! s3-1 (the-as collide-shape-moving (-> (the-as connection v1-38) param1)))
; (set! v1-39 (-> s3-1 root-prim))
; (set! v1-40 (-> v1-39 prim-core collide-as))
; (set! v1-41 (logand s5-0 v1-40))
; (nonzero? v1-41)
; )
; (when (begin (set! v1-43 (-> s3-1 process)) (set! a0-27 (-> obj process)) (!= a0-27 v1-43))
; (when (begin
; (and
; (begin
; (set! s2-1 (new 'stack-no-clear 'collide-work))
; (set! a0-28 obj)
; (set! v1-45 (-> a0-28 type))
; (set! t9-5 (method-of-type v1-45 dummy-42))
; (set! a1-7 s3-1)
; (set! a2-3 s2-1)
; (set! v0-6 (call! a0-28 a1-7 a2-3))
; (set! v1-46 v0-6)
; v1-46
; )
; (begin
; (set! f0-7 -81.92)
; (set! f1-3 (-> s2-1 collide-sphere-neg-r x))
; (set! v1-47 (the-as none (>=.s f0-7 f1-3)))
; )
; )
; v1-47
; )
; (set! a0-29 s3-1)
; (set! v1-49 (-> a0-29 type))
; (set! t9-6 (method-of-type v1-49 dummy-32))
; (set! a1-8 8192.0)
; (set! v1-50 (-> s3-1 root-prim))
; (set! a2-4 (-> v1-50 collide-with))
; (call! a0-29 a1-8 a2-4)
; (set! v1-51 v0-7)
; (set! s5-2 3)
; (until (begin
; (cond
; ((begin
; (set! s1-1 (new 'stack-no-clear 'vector))
; (set! v1-52 (new 'stack-no-clear 'vector))
; (set! a0-30 v1-52)
; (set! a1-9 (-> s3-1 trans))
; (set! a1-10 (-> a1-9 quad))
; (set! (-> a0-30 quad) a1-10)
; (set! f0-8 2867.2)
; (set! f1-4 (-> v1-52 y))
; (set! f1-5 (+.s f0-8 f1-4))
; (set! f0-9 5734.4)
; (set! f2-1 (+.s f0-9 f1-5))
; (set! f0-10 (-> s2-1 inv-mat vector 1 y))
; (<.s f0-10 f1-5)
; )
; (set! f0-10 f1-5)
; (set! a0-32 (fpr->gpr f0-10))
; )
; ((<.s f2-1 f0-10)
; (set! f0-10 f2-1)
; (set! a0-34 (fpr->gpr f0-10))
; )
; )
; (set! (-> v1-52 y) f0-10)
; (set! a0-35 (fpr->gpr f0-10))
; (.lvf vf4 (&-> v1-52 quad))
; (.lvf vf3 (&-> s2-1 inv-mat vector 1 quad))
; (.lvf vf5 (&-> s2-1 inv-mat vector 2 quad))
; (.sub.vf vf2 vf4 vf3)
; (.mul.vf vf1 vf5 vf2)
; (.add.x.vf vf1 vf1 vf1 :mask #b10)
; (.add.z.vf vf1 vf1 vf1 :mask #b10)
; (.mov v1-53 vf1)
; (bl! (<0.si v1-53) L109 (no-delay!))
; (.sub.vf vf2 vf0 vf2)
; (or
; (begin
; (label cfg-44)
; (.svf (&-> s1-1 quad) vf2)
; (set! t9-7 vector-normalize!)
; (set! a0-36 s1-1)
; (set! a1-11 1.0)
; (call! a0-36 a1-11)
; (set! v1-54 s1-1)
; (set! a0-37 s1-1)
; (set! f0-11 (-> s2-1 collide-sphere-neg-r x))
; (set! f0-12 (neg.s f0-11))
; (set! v1-55 (vector-float*!2 v1-54 a0-37 f0-12))
; (set! v1-56 s1-1)
; (set! a0-38 s1-1)
; (.lvf vf1 (&-> a0-38 quad))
; (set! a0-39 *display*)
; (set! f0-13 (-> a0-39 frames-per-second))
; (.mov at-1 f0-13)
; (.mov vf2 at-1)
; (.mov.vf vf1 vf0 :mask #b1000)
; (.mul.x.vf vf1 vf1 vf2 :mask #b111)
; (.svf (&-> v1-56 quad) vf1)
; (set! s0-1 (-> s3-1 status))
; (set! a0-40 s3-1)
; (set! v1-57 (-> a0-40 type))
; (set! t9-8 (method-of-type v1-57 dummy-37))
; (set! a1-12 s1-1)
; (call! a0-40 a1-12)
; (set! v1-58 v0-9)
; (set! (-> s3-1 status) s0-1)
; (set! s5-2 (+ s5-2 -1))
; (set! a0-41 (<=0.si s5-2))
; a0-41
; )
; (begin
; (set! a0-42 obj)
; (set! v1-60 (-> a0-42 type))
; (set! t9-9 (method-of-type v1-60 dummy-42))
; (set! a1-13 s3-1)
; (set! a2-5 s2-1)
; (set! v0-10 (call! a0-42 a1-13 a2-5))
; (set! v1-61 v0-10)
; (set! v1-59 (not v1-61))
; )
; )
; v1-59
; )
; (empty)
; )
; (set! v1-63 (-> obj root-prim))
; (set! s5-0 (-> v1-63 collide-with))
; (set! v1-64 s5-0)
; )
; )
; )
; (set! v1-38 s4-1)
; (set! a0-43 *collide-hit-by-player-list*)
; (set! a0-44 (-> s4-1 next0))
; (set! s4-1 a0-44)
; )
; )
; (set! v1-67 (logand s5-0 4))
; (nonzero? v1-67)
; )
; (set! v1-69 *collide-usually-hit-by-player-list*)
; (set! v1-70 (-> v1-69 alive-list next0))
; (set! a0-47 *collide-usually-hit-by-player-list*)
; (set! a0-48 v1-70)
; (set! s4-2 (-> a0-48 next0))
; (while (begin
; (set! a0-67 *collide-usually-hit-by-player-list*)
; (set! a0-68 (-> a0-67 alive-list-end))
; (!= v1-70 a0-68)
; )
; (when (begin
; (set! s3-2 (the-as collide-shape-moving (-> (the-as connection v1-70) param1)))
; (set! v1-71 (-> s3-2 root-prim))
; (set! v1-72 (-> v1-71 prim-core collide-as))
; (set! v1-73 (logand s5-0 v1-72))
; (nonzero? v1-73)
; )
; (when (begin (set! v1-75 (-> s3-2 process)) (set! a0-49 (-> obj process)) (!= a0-49 v1-75))
; (when (begin
; (and
; (begin
; (set! s2-2 (new 'stack-no-clear 'collide-work))
; (set! a0-50 obj)
; (set! v1-77 (-> a0-50 type))
; (set! t9-10 (method-of-type v1-77 dummy-42))
; (set! a1-14 s3-2)
; (set! a2-6 s2-2)
; (set! v0-11 (call! a0-50 a1-14 a2-6))
; (set! v1-78 v0-11)
; v1-78
; )
; (begin
; (set! f0-14 -81.92)
; (set! f1-6 (-> s2-2 collide-sphere-neg-r x))
; (set! v1-79 (the-as none (>=.s f0-14 f1-6)))
; )
; )
; v1-79
; )
; (set! a0-51 s3-2)
; (set! v1-81 (-> a0-51 type))
; (set! t9-11 (method-of-type v1-81 dummy-32))
; (set! a1-15 8192.0)
; (set! v1-82 (-> s3-2 root-prim))
; (set! a2-7 (-> v1-82 collide-with))
; (call! a0-51 a1-15 a2-7)
; (set! v1-83 v0-12)
; (set! s5-3 3)
; (until (begin
; (cond
; ((begin
; (set! s1-2 (new 'stack-no-clear 'vector))
; (set! v1-84 (new 'stack-no-clear 'vector))
; (set! a0-52 v1-84)
; (set! a1-16 (-> s3-2 trans))
; (set! a1-17 (-> a1-16 quad))
; (set! (-> a0-52 quad) a1-17)
; (set! f0-15 2867.2)
; (set! f1-7 (-> v1-84 y))
; (set! f1-8 (+.s f0-15 f1-7))
; (set! f0-16 5734.4)
; (set! f2-2 (+.s f0-16 f1-8))
; (set! f0-17 (-> s2-2 inv-mat vector 1 y))
; (<.s f0-17 f1-8)
; )
; (set! f0-17 f1-8)
; (set! a0-54 (fpr->gpr f0-17))
; )
; ((<.s f2-2 f0-17)
; (set! f0-17 f2-2)
; (set! a0-56 (fpr->gpr f0-17))
; )
; )
; (set! (-> v1-84 y) f0-17)
; (set! a0-57 (fpr->gpr f0-17))
; (.lvf vf4 (&-> v1-84 quad))
; (.lvf vf3 (&-> s2-2 inv-mat vector 1 quad))
; (.lvf vf5 (&-> s2-2 inv-mat vector 2 quad))
; (.sub.vf vf2 vf4 vf3)
; (.mul.vf vf1 vf5 vf2)
; (.add.x.vf vf1 vf1 vf1 :mask #b10)
; (.add.z.vf vf1 vf1 vf1 :mask #b10)
; (.mov v1-85 vf1)
; (bl! (<0.si v1-85) L119 (no-delay!))
; (.sub.vf vf2 vf0 vf2)
; (or
; (begin
; (label cfg-69)
; (.svf (&-> s1-2 quad) vf2)
; (set! t9-12 vector-normalize!)
; (set! a0-58 s1-2)
; (set! a1-18 1.0)
; (call! a0-58 a1-18)
; (set! v1-86 s1-2)
; (set! a0-59 s1-2)
; (set! f0-18 (-> s2-2 collide-sphere-neg-r x))
; (set! f0-19 (neg.s f0-18))
; (set! v1-87 (vector-float*!2 v1-86 a0-59 f0-19))
; (set! v1-88 s1-2)
; (set! a0-60 s1-2)
; (.lvf vf1 (&-> a0-60 quad))
; (set! a0-61 *display*)
; (set! f0-20 (-> a0-61 frames-per-second))
; (.mov at-2 f0-20)
; (.mov vf2 at-2)
; (.mov.vf vf1 vf0 :mask #b1000)
; (.mul.x.vf vf1 vf1 vf2 :mask #b111)
; (.svf (&-> v1-88 quad) vf1)
; (set! s0-2 (-> s3-2 status))
; (set! a0-62 s3-2)
; (set! v1-89 (-> a0-62 type))
; (set! t9-13 (method-of-type v1-89 dummy-37))
; (set! a1-19 s1-2)
; (call! a0-62 a1-19)
; (set! v1-90 v0-14)
; (set! (-> s3-2 status) s0-2)
; (set! s5-3 (+ s5-3 -1))
; (set! a0-63 (<=0.si s5-3))
; a0-63
; )
; (begin
; (set! a0-64 obj)
; (set! v1-92 (-> a0-64 type))
; (set! t9-14 (method-of-type v1-92 dummy-42))
; (set! a1-20 s3-2)
; (set! a2-8 s2-2)
; (set! v0-15 (call! a0-64 a1-20 a2-8))
; (set! v1-93 v0-15)
; (set! v1-91 (not v1-93))
; )
; )
; v1-91
; )
; (empty)
; )
; (set! v1-95 (-> obj root-prim))
; (set! s5-0 (-> v1-95 collide-with))
; (set! v1-96 s5-0)
; )
; )
; )
; (set! v1-70 s4-2)
; (set! a0-65 *collide-usually-hit-by-player-list*)
; (set! a0-66 (-> s4-2 next0))
; (set! s4-2 a0-66)
; )
; )
; (set! v1-99 (logand s5-0 8))
; (nonzero? v1-99)
; )
; (set! v1-100 *collide-hit-by-others-list*)
; (set! v1-101 (-> v1-100 alive-list next0))
; (set! a0-69 *collide-hit-by-others-list*)
; (set! a0-70 v1-101)
; (set! s4-3 (-> a0-70 next0))
; (while (begin (set! a0-89 *collide-hit-by-others-list*) (set! a0-90 (-> a0-89 alive-list-end)) (!= v1-101 a0-90))
; (when (begin
; (set! s3-3 (the-as collide-shape-moving (-> (the-as connection v1-101) param1)))
; (set! v1-102 (-> s3-3 root-prim))
; (set! v1-103 (-> v1-102 prim-core collide-as))
; (set! v1-104 (logand s5-0 v1-103))
; (nonzero? v1-104)
; )
; (when (begin (set! v1-106 (-> s3-3 process)) (set! a0-71 (-> obj process)) (!= a0-71 v1-106))
; (when (begin
; (and
; (begin
; (set! s2-3 (new 'stack-no-clear 'collide-work))
; (set! a0-72 obj)
; (set! v1-108 (-> a0-72 type))
; (set! t9-15 (method-of-type v1-108 dummy-42))
; (set! a1-21 s3-3)
; (set! a2-9 s2-3)
; (set! v0-16 (call! a0-72 a1-21 a2-9))
; (set! v1-109 v0-16)
; v1-109
; )
; (begin
; (set! f0-21 -81.92)
; (set! f1-9 (-> s2-3 collide-sphere-neg-r x))
; (set! v1-110 (the-as none (>=.s f0-21 f1-9)))
; )
; )
; v1-110
; )
; (set! a0-73 s3-3)
; (set! v1-112 (-> a0-73 type))
; (set! t9-16 (method-of-type v1-112 dummy-32))
; (set! a1-22 8192.0)
; (set! v1-113 (-> s3-3 root-prim))
; (set! a2-10 (-> v1-113 collide-with))
; (call! a0-73 a1-22 a2-10)
; (set! v1-114 v0-17)
; (set! s5-4 3)
; (until (begin
; (cond
; ((begin
; (set! s1-3 (new 'stack-no-clear 'vector))
; (set! v1-115 (new 'stack-no-clear 'vector))
; (set! a0-74 v1-115)
; (set! a1-23 (-> s3-3 trans))
; (set! a1-24 (-> a1-23 quad))
; (set! (-> a0-74 quad) a1-24)
; (set! f0-22 2867.2)
; (set! f1-10 (-> v1-115 y))
; (set! f1-11 (+.s f0-22 f1-10))
; (set! f0-23 5734.4)
; (set! f2-3 (+.s f0-23 f1-11))
; (set! f0-24 (-> s2-3 inv-mat vector 1 y))
; (<.s f0-24 f1-11)
; )
; (set! f0-24 f1-11)
; (set! a0-76 (fpr->gpr f0-24))
; )
; ((<.s f2-3 f0-24)
; (set! f0-24 f2-3)
; (set! a0-78 (fpr->gpr f0-24))
; )
; )
; (set! (-> v1-115 y) f0-24)
; (set! a0-79 (fpr->gpr f0-24))
; (.lvf vf4 (&-> v1-115 quad))
; (.lvf vf3 (&-> s2-3 inv-mat vector 1 quad))
; (.lvf vf5 (&-> s2-3 inv-mat vector 2 quad))
; (.sub.vf vf2 vf4 vf3)
; (.mul.vf vf1 vf5 vf2)
; (.add.x.vf vf1 vf1 vf1 :mask #b10)
; (.add.z.vf vf1 vf1 vf1 :mask #b10)
; (.mov v1-116 vf1)
; (bl! (<0.si v1-116) L129 (no-delay!))
; (.sub.vf vf2 vf0 vf2)
; (or
; (begin
; (label cfg-94)
; (.svf (&-> s1-3 quad) vf2)
; (set! t9-17 vector-normalize!)
; (set! a0-80 s1-3)
; (set! a1-25 1.0)
; (call! a0-80 a1-25)
; (set! v1-117 s1-3)
; (set! a0-81 s1-3)
; (set! f0-25 (-> s2-3 collide-sphere-neg-r x))
; (set! f0-26 (neg.s f0-25))
; (set! v1-118 (vector-float*!2 v1-117 a0-81 f0-26))
; (set! v1-119 s1-3)
; (set! a0-82 s1-3)
; (.lvf vf1 (&-> a0-82 quad))
; (set! a0-83 *display*)
; (set! f0-27 (-> a0-83 frames-per-second))
; (.mov at-3 f0-27)
; (.mov vf2 at-3)
; (.mov.vf vf1 vf0 :mask #b1000)
; (.mul.x.vf vf1 vf1 vf2 :mask #b111)
; (.svf (&-> v1-119 quad) vf1)
; (set! s0-3 (-> s3-3 status))
; (set! a0-84 s3-3)
; (set! v1-120 (-> a0-84 type))
; (set! t9-18 (method-of-type v1-120 dummy-37))
; (set! a1-26 s1-3)
; (call! a0-84 a1-26)
; (set! v1-121 v0-19)
; (set! (-> s3-3 status) s0-3)
; (set! s5-4 (+ s5-4 -1))
; (set! a0-85 (<=0.si s5-4))
; a0-85
; )
; (begin
; (set! a0-86 obj)
; (set! v1-123 (-> a0-86 type))
; (set! t9-19 (method-of-type v1-123 dummy-42))
; (set! a1-27 s3-3)
; (set! a2-11 s2-3)
; (set! v0-20 (call! a0-86 a1-27 a2-11))
; (set! v1-124 v0-20)
; (set! v1-122 (not v1-124))
; )
; )
; v1-122
; )
; (empty)
; )
; (set! v1-126 (-> obj root-prim))
; (set! s5-0 (-> v1-126 collide-with))
; (set! v1-127 s5-0)
; )
; )
; )
; (set! v1-101 s4-3)
; (set! a0-87 *collide-hit-by-others-list*)
; (set! a0-88 (-> s4-3 next0))
; (set! s4-3 a0-88)
; )
; (set! v0-5 #f)
; )
; )
; (ret-value v0-5)
; )
; )
;; ERROR: function was not converted to expressions. Cannot decompile.
(defmethod overlaps-others-test collide-shape-prim ((obj collide-shape-prim))
(format 0 "ERROR: Unsupported call to collide-shape-prim::overlaps-others-test!~%")
#f
)
;; ERROR: function was not converted to expressions. Cannot decompile.
;; ERROR: function was not converted to expressions. Cannot decompile.
;; ERROR: function was not converted to expressions. Cannot decompile.
;; ERROR: function was not converted to expressions. Cannot decompile.
(defmethod clear-collide-with-as collide-shape ((obj collide-shape))
(set! (-> obj root-prim collide-with) (collide-kind))
(set! (-> obj root-prim prim-core collide-as) (collide-kind))
0
(none)
)
(defmethod backup-collide-with-as collide-shape ((obj collide-shape))
(set! (-> obj backup-collide-with) (-> obj root-prim collide-with))
(set! (-> obj backup-collide-as) (-> obj root-prim prim-core collide-as))
0
(none)
)
(defmethod restore-collide-with-as collide-shape ((obj collide-shape))
(set! (-> obj root-prim collide-with) (-> obj backup-collide-with))
(set! (-> obj root-prim prim-core collide-as) (-> obj backup-collide-as))
0
(none)
)
(defmethod dummy-53 collide-shape ((obj collide-shape) (arg0 int) (arg1 collide-kind) (arg2 collide-kind))
(let ((s3-0 (-> obj root-prim)))
(if (logtest? (-> s3-0 prim-id) arg0)
(set! (-> s3-0 prim-core collide-as) (logior (logclear (-> s3-0 prim-core collide-as) arg1) arg2))
)
(let ((v1-7 (if (and (nonzero? s3-0) (type-type? (-> s3-0 type) collide-shape-prim-group))
s3-0
)
)
)
(when v1-7
(dotimes (a0-4 (-> (the-as collide-shape-prim-group v1-7) num-prims))
(let ((a1-4 (-> (the-as collide-shape-prim-group (+ (* a0-4 4) (the-as int v1-7))) prims 0)))
(if (logtest? (-> a1-4 prim-id) arg0)
(set! (-> a1-4 prim-core collide-as) (logior (logclear (-> a1-4 prim-core collide-as) arg1) arg2))
)
)
)
)
)
)
0
(none)
)
(defmethod dummy-54 collide-shape ((obj collide-shape) (arg0 int) (arg1 collide-offense))
(let ((s4-0 (-> obj root-prim)))
(if (logtest? (-> s4-0 prim-id) arg0)
(set! (-> s4-0 prim-core offense) arg1)
)
(let ((v1-5 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) collide-shape-prim-group))
s4-0
)
)
)
(when v1-5
(dotimes (a0-3 (-> (the-as collide-shape-prim-group v1-5) num-prims))
(let ((a1-4 (-> (the-as collide-shape-prim-group (+ (* a0-3 4) (the-as int v1-5))) prims 0)))
(if (logtest? (-> a1-4 prim-id) arg0)
(set! (-> a1-4 prim-core offense) arg1)
)
)
)
)
)
)
0
(none)
)
(defmethod dummy-55 collide-shape ((obj collide-shape) (arg0 process) (arg1 touching-shapes-entry) (arg2 float) (arg3 float) (arg4 float))
(local-vars (sv-144 process))
(with-pp
(when arg1
(let ((s1-0 (-> arg1 head)))
(set! sv-144 arg0)
(let ((s5-0 (if (and (nonzero? sv-144) (type-type? (-> sv-144 type) process-drawable))
sv-144
)
)
)
(when (and s1-0 s5-0)
(let ((s0-1 (get-touched-prim s1-0 obj (the-as touching-prims-entry arg1))))
(get-touched-prim s1-0 (-> (the-as process-drawable s5-0) root) (the-as touching-prims-entry arg1))
(let* ((v1-8 (dummy-11 s1-0 (new 'stack-no-clear 'vector)))
(s1-2 (vector-! (new 'stack-no-clear 'vector) v1-8 (the-as vector (-> s0-1 prim-core))))
)
(vector-normalize! s1-2 1.0)
(when (< arg2 (-> s1-2 y))
(let ((s2-1 (new 'stack-no-clear 'vector)))
(set! (-> s2-1 quad) (-> (the-as process-drawable s5-0) root transv quad))
(let ((f30-0 (vector-xz-length (-> (the-as process-drawable s5-0) root transv))))
(if (= f30-0 0.0)
(set! (-> s2-1 quad) (-> (vector-z-quaternion! s2-1 (-> (the-as process-drawable s5-0) root quat)) quad))
)
(vector-xz-normalize! s2-1 (fmax f30-0 arg4))
)
(set! (-> s2-1 y) arg3)
(let ((a1-8 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-8 from) pp)
(set! (-> a1-8 num-params) 2)
(set! (-> a1-8 message) 'shove)
(set! (-> a1-8 param 0) (the-as uint arg1))
(let ((v1-18 (new 'static 'attack-info :mask #x802)))
(set! (-> v1-18 vector quad) (-> s2-1 quad))
(set! (-> v1-18 angle) 'jump)
(set! (-> a1-8 param 1) (the-as uint v1-18))
)
(send-event-function s5-0 a1-8)
)
)
)
)
)
)
)
)
)
(none)
)
)
(defmethod dummy-41 collide-shape ((obj collide-shape) (arg0 attack-info) (arg1 float))
(set! (-> arg0 shove-up) arg1)
(let* ((s3-0 (-> obj process path))
(s2-0 (-> s3-0 curve num-cverts))
(s4-0 (target-pos 0))
(s1-0 (new 'stack-no-clear 'vector))
(s5-0 (new 'stack-no-clear 'vector))
)
(let ((f30-0 -1.0))
(dotimes (s0-0 s2-0)
(eval-path-curve-div! s3-0 s1-0 (the float s0-0) 'interp)
(let ((f0-3 (vector-vector-distance-squared s4-0 s1-0)))
(when (or (< f30-0 0.0) (< f0-3 f30-0))
(set! f30-0 f0-3)
(set! (-> s5-0 quad) (-> s1-0 quad))
)
)
)
)
(vector-! (-> arg0 vector) s5-0 s4-0)
)
)