mirror of
https://github.com/open-goal/jak-project
synced 2026-09-13 05:05:48 -04:00
c162c66118
This PR does two main things: 1. Work through the main low-hanging fruit issues in the formatter keeping it from feeling mature and usable 2. Iterate and prove that point by formatting all of the Jak 1 code base. **This has removed around 100K lines in total.** - The decompiler will now format it's results for jak 1 to keep things from drifting back to where they were. This is controlled by a new config flag `format_code`. How am I confident this hasn't broken anything?: - I compiled the entire project and stored it's `out/jak1/obj` files separately - I then recompiled the project after formatting and wrote a script that md5's each file and compares it (`compare-compilation-outputs.py` - The results (eventually) were the same:  > This proves that the only difference before and after is non-critical whitespace for all code/macros that is actually in use. I'm still aware of improvements that could be made to the formatter, as well as general optimization of it's performance. But in general these are for rare or non-critical situations in my opinion and I'll work through them before doing Jak 2. The vast majority looks great and is working properly at this point. Those known issues are the following if you are curious: 
176 lines
7.7 KiB
Common Lisp
176 lines
7.7 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
(bundles "ENGINE.CGO" "GAME.CGO")
|
|
(require "engine/debug/debug-h.gc")
|
|
(require "engine/geometry/vol-h.gc")
|
|
(require "engine/geometry/cylinder.gc")
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(defun plane-volume-intersect-dist ((arg0 vector) (arg1 vector) (arg2 vector))
|
|
(let ((f0-1 (vector-dot arg1 arg0))
|
|
(f1-1 (vector-dot arg2 arg0)))
|
|
(if (< 0.00001 (fabs f1-1)) (/ (- (-> arg0 w) f0-1) f1-1) 409600000.0)))
|
|
|
|
(defmethod init-vol! ((this plane-volume) (arg0 symbol) (arg1 vector-array) (arg2 vector-array))
|
|
(local-vars
|
|
(sv-144 vector)
|
|
(sv-148 float)
|
|
(sv-152 int)
|
|
(sv-160 vector)
|
|
(sv-176 vector)
|
|
(sv-192 vector)
|
|
(sv-208 vector)
|
|
(sv-224 vector)
|
|
(sv-240 int)
|
|
(sv-256 int))
|
|
(set! (-> this volume-type) arg0)
|
|
(set! (-> this point-count) 0)
|
|
(set! (-> this first-point) (the-as (pointer vector) (-> arg1 data (-> arg1 length))))
|
|
(set! (-> this normal-count) 0)
|
|
(set! (-> this first-normal) (the-as (pointer vector) (-> arg2 data (-> arg2 length))))
|
|
(dotimes (s3-0 (-> this num-planes))
|
|
(set! sv-176 (new 'stack-no-clear 'vector))
|
|
(set! (-> sv-176 quad) (the-as uint128 0))
|
|
(set! sv-192 (new 'stack-no-clear 'vector))
|
|
(set! (-> sv-192 quad) (the-as uint128 0))
|
|
(set! sv-208 (new 'stack-no-clear 'vector))
|
|
(set! (-> sv-208 quad) (the-as uint128 0))
|
|
(set! sv-224 (new 'stack-no-clear 'vector))
|
|
(set! (-> sv-224 quad) (the-as uint128 0))
|
|
0.0
|
|
0.0
|
|
0.0
|
|
(set! (-> (new 'stack-no-clear 'vector) quad) (the-as uint128 0))
|
|
(let ((s1-0 (new-stack-vector0))
|
|
(s0-0 0)
|
|
(s2-0 (-> this plane)))
|
|
(set! sv-240 0)
|
|
(while (< sv-240 (-> this num-planes))
|
|
(when (!= s3-0 sv-240)
|
|
(vector-float*! sv-176 (the-as vector (-> s2-0 sv-240)) (-> s2-0 sv-240 w))
|
|
(vector-cross! sv-192 (the-as vector (-> s2-0 sv-240)) (the-as vector (-> s2-0 s3-0)))
|
|
(vector-normalize! sv-192 1.0)
|
|
(vector-cross! sv-208 sv-192 (the-as vector (-> s2-0 sv-240)))
|
|
(vector-normalize! sv-208 1.0)
|
|
(let ((f0-4 (plane-volume-intersect-dist (-> s2-0 s3-0) sv-176 sv-208)))
|
|
(when (!= f0-4 409600000.0)
|
|
(vector+float*! sv-224 sv-176 sv-208 f0-4)
|
|
(set! sv-144 (new-stack-vector0))
|
|
(set! sv-148 0.0)
|
|
(set! sv-152 0)
|
|
(set! sv-160 (new-stack-vector0))
|
|
(set! (-> sv-144 quad) (-> sv-224 quad))
|
|
(set! sv-256 0)
|
|
(while (< sv-256 (-> this num-planes))
|
|
(when (and (!= sv-256 s3-0) (!= sv-256 sv-240))
|
|
(let ((f30-0 (plane-volume-intersect-dist (-> s2-0 sv-256) sv-144 sv-192)))
|
|
(cond
|
|
((= f30-0 409600000.0))
|
|
((zero? sv-152)
|
|
(vector+float*! sv-144 sv-144 sv-192 f30-0)
|
|
(set! (-> sv-160 quad) (-> s2-0 sv-256 quad))
|
|
(set! sv-148 8192000.0)
|
|
(set! sv-152 1))
|
|
((begin (vector-float*! sv-224 sv-192 f30-0) (>= (vector-dot sv-224 sv-160) 0.0)))
|
|
((>= (vector-dot sv-224 (the-as vector (-> s2-0 sv-256))) 0.0)
|
|
(when (< (fabs f30-0) (fabs sv-148))
|
|
(set! sv-148 f30-0)
|
|
(set! sv-152 (+ sv-152 1))))
|
|
(else
|
|
(vector+float*! sv-144 sv-144 sv-192 f30-0)
|
|
(set! (-> sv-160 quad) (-> s2-0 sv-256 quad))
|
|
(set! sv-152 (+ sv-152 1))
|
|
(if (< (fabs f30-0) (fabs sv-148)) (set! sv-148 (- sv-148 f30-0)) (set! sv-148 0.0))))))
|
|
(set! sv-256 (+ sv-256 1)))
|
|
(cond
|
|
((zero? sv-152))
|
|
((= sv-148 0.0))
|
|
(else
|
|
(dotimes (v1-70 (-> this num-planes))
|
|
(when (and (!= v1-70 s3-0) (!= v1-70 sv-240))
|
|
(if (< 4096.0 (- (vector-dot sv-144 (the-as vector (-> s2-0 v1-70))) (the-as float (-> s2-0 v1-70 w)))) (goto cfg-42))))
|
|
(vector+float*! sv-224 sv-144 sv-192 sv-148)
|
|
(cond
|
|
((< (-> arg1 allocated-length) (+ (-> arg1 length) 2))
|
|
(format 0 "ERROR <AG>: vol-control #x~X out of volume points~%" this))
|
|
(else
|
|
(set! (-> arg1 data (-> arg1 length) quad) (-> sv-144 quad))
|
|
(set! (-> arg1 data (+ (-> arg1 length) 1) quad) (-> sv-224 quad))
|
|
(+! (-> arg1 length) 2)
|
|
(+! (-> this point-count) 2)))
|
|
(vector+! s1-0 s1-0 sv-144)
|
|
(vector+! s1-0 s1-0 sv-224)
|
|
(+! s0-0 2))))))
|
|
(label cfg-42)
|
|
(set! sv-240 (+ sv-240 1)))
|
|
(when (nonzero? s0-0)
|
|
(vector-float*! s1-0 s1-0 (/ 1.0 (the float s0-0)))
|
|
(cond
|
|
((< (-> arg2 allocated-length) (+ (-> arg2 length) 2))
|
|
(format 0 "ERROR <AG>: vol-control #x~X out of volume normals~%" this))
|
|
(else
|
|
(set! (-> arg2 data (-> arg2 length) quad) (-> s1-0 quad))
|
|
(set! (-> arg2 data (+ (-> arg2 length) 1) quad) (-> s2-0 s3-0 quad))
|
|
(+! (-> arg2 length) 2)
|
|
(set! (-> this normal-count) (+ (-> this normal-count) 2)))))))
|
|
#f)
|
|
|
|
(defmethod debug-draw ((this plane-volume))
|
|
(let* ((v1-0 (-> this volume-type))
|
|
(s5-0 (cond
|
|
((= v1-0 'vol) (the-as uint #x8000c000))
|
|
((= v1-0 'pvol) (the-as uint #x80808080))
|
|
(else (the-as uint #x800000c0))))
|
|
(s4-0 (-> this first-point)))
|
|
(dotimes (s3-0 (/ (-> this point-count) 2))
|
|
(add-debug-line #t
|
|
(bucket-id debug-no-zbuf)
|
|
(the-as vector s4-0)
|
|
(the-as vector (&-> s4-0 4))
|
|
(the-as rgba s5-0)
|
|
#f
|
|
(the-as rgba -1))
|
|
(set! s4-0 (&-> s4-0 8))))
|
|
0
|
|
(none))
|
|
|
|
(defmethod point-in-vol? ((this plane-volume) (arg0 vector) (arg1 float))
|
|
(dotimes (v1-0 (-> this num-planes))
|
|
(if (< arg1 (- (vector-dot arg0 (the-as vector (-> this plane v1-0))) (the-as float (-> this plane v1-0 w)))) (return #f)))
|
|
#t)
|
|
|
|
(defmethod init! ((this vol-control))
|
|
(with-pp
|
|
(let ((a0-1 this))
|
|
(when (and (and *display-vol-marks* (logtest? (-> a0-1 flags) 1)) (logtest? (-> this flags) 2))
|
|
(when (zero? (-> this debug-point))
|
|
(let ((s5-0 pp))
|
|
(set! pp (-> this process))
|
|
(let ((s4-0 0))
|
|
(dotimes (v1-8 (-> this pos-vol-count))
|
|
(+! s4-0 (-> this pos-vol v1-8 num-planes)))
|
|
(dotimes (v1-11 (-> this neg-vol-count))
|
|
(+! s4-0 (-> this neg-vol v1-11 num-planes)))
|
|
(set! (-> this debug-point) (new 'debug 'vector-array (* 10 s4-0)))
|
|
(set! (-> this debug-normal) (new 'debug 'vector-array (* 10 s4-0))))
|
|
(set! pp s5-0))
|
|
(set! (-> this debug-point length) 0)
|
|
(set! (-> this debug-normal length) 0)
|
|
(dotimes (s5-1 (-> this pos-vol-count))
|
|
(init-vol! (-> this pos-vol s5-1) 'vol (-> this debug-point) (-> this debug-normal)))
|
|
(dotimes (s5-2 (-> this neg-vol-count))
|
|
(init-vol! (-> this neg-vol s5-2) 'vol (-> this debug-point) (-> this debug-normal))))
|
|
(dotimes (s5-3 (-> this pos-vol-count))
|
|
(debug-draw (-> this pos-vol s5-3)))
|
|
(dotimes (s5-4 (-> this neg-vol-count))
|
|
(debug-draw (-> this neg-vol s5-4)))))
|
|
(the-as symbol 0)))
|
|
|
|
(defmethod point-in-vol? ((this vol-control) (arg0 vector))
|
|
(dotimes (s4-0 (-> this neg-vol-count))
|
|
(if (point-in-vol? (-> this neg-vol s4-0) arg0 0.0) (return #f)))
|
|
(dotimes (s4-1 (-> this pos-vol-count))
|
|
(if (point-in-vol? (-> this pos-vol s4-1) arg0 0.0) (return #t)))
|
|
#f)
|