diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index 4c3e59c910..2eec4db7d2 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -9276,7 +9276,8 @@ ) (deftype region-face-array (inline-array-class) - ((data region-face-data :dynamic :offset 20) ;; not sure what's going on here. + ((data drawable-region-face :inline :dynamic :offset 16) + (pad0 uint8 4) ) :method-count-assert 9 :size-assert #x14 @@ -9289,8 +9290,6 @@ :method-count-assert 20 :size-assert #x20 :flag-assert #x1400000020 - (:methods - ) ) (deftype region-prim-list (structure) @@ -20367,23 +20366,23 @@ ) (deftype region-prim-area (structure) - ((region-prim-list region-prim-list :inline :offset-assert 0) - (pos vector :inline :offset-assert 1296) - (unknown-vector-uiyb1 vector :inline :offset-assert 1312) - (ray vector :inline :offset 1328) - (unknown-vector-t3edh vector :inline :offset-assert 1344) - (region-enter-count int32 :offset 1360) - (region-enter-list region-prim-area 320 :offset-assert 1364) - (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) - (region-exit-count int32 :offset-assert 3924) - (region-exit-list region-prim-area 320 :offset-assert 3928) - (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) - (region-inside-count int32 :offset-assert 6488) - (region-inside-list region-prim-area 320 :offset-assert 6492) - (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) - (region-start-count int32 :offset-assert 9052) - (region-start-list region-prim-area 320 :offset-assert 9056) - (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) + ((region-prim-list region-prim-list :inline :offset-assert 0) + (pos vector :inline :offset-assert 1296) + (unknown-vector-uiyb1 vector :inline :offset-assert 1312) + (ray vector :inline :offset 1328) + (unknown-vector-t3edh vector :inline :offset-assert 1344) + (region-enter-count int32 :offset 1360) + (region-enter-list region 320 :offset-assert 1364) + (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) + (region-exit-count int32 :offset-assert 3924) + (region-exit-list region 320 :offset-assert 3928) + (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) + (region-inside-count int32 :offset-assert 6488) + (region-inside-list region 320 :offset-assert 6492) + (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) + (region-start-count int32 :offset-assert 9052) + (region-start-list region 320 :offset-assert 9056) + (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 :size-assert #x2d60 diff --git a/decompiler/config/jak2/ntsc_v1/type_casts.jsonc b/decompiler/config/jak2/ntsc_v1/type_casts.jsonc index 631c963dc9..5188433d9f 100644 --- a/decompiler/config/jak2/ntsc_v1/type_casts.jsonc +++ b/decompiler/config/jak2/ntsc_v1/type_casts.jsonc @@ -2784,13 +2784,6 @@ [[23, 28], "a0", "drawable-region-prim"], [4, "a0", "region-prim-area"] ], - "(method 19 drawable-region-volume)": [[8, "a3", "drawable-region-face"]], - "(method 18 drawable-region-volume)": [ - [[23, 27], "a0", "drawable-region-face"] - ], - "(method 17 drawable-region-volume)": [ - [[12, 21], "a0", "drawable-region-face"] - ], "region-prim-lookup-by-id": [[45, "t6", "drawable-region-prim"]], "region-tree-execute": [ [114, "v1", "region-prim-area"], diff --git a/goal_src/jak1/engine/gfx/sprite/sparticle/sparticle.gc b/goal_src/jak1/engine/gfx/sprite/sparticle/sparticle.gc index cbdb0e277a..db83f133e2 100644 --- a/goal_src/jak1/engine/gfx/sprite/sparticle/sparticle.gc +++ b/goal_src/jak1/engine/gfx/sprite/sparticle/sparticle.gc @@ -211,107 +211,37 @@ (defun sp-get-particle ((arg0 sparticle-system) (arg1 int) (arg2 sparticle-launch-state)) "alloc a particle" - (local-vars - (a2-3 int) - (a2-4 int) - (a2-5 int) - (a2-6 int) - (a2-7 int) - (a2-8 int) - (t1-16 int) - (t1-17 int) - (t1-18 int) - (t1-19 int) - (t1-20 int) - (t3-5 int) - ) + ;; pc port note : this function originally attempted to find a free sparticle by picking a "random" + ;; (actually incremental) starting block and going from there. we disable that completely for pc + ;; because it is actually detrimental since we may alloc sparticles spread over way too many blocks + ;; which can have a negative impact on our performance. (let ((v1-0 0) (t0-0 (-> arg0 blocks 0)) (a3-0 0) ) - (when (= arg1 1) - (set! v1-0 t0-0) - (set! t0-0 (-> arg0 blocks 1)) - ) - - ;; this adds a moving offset to the allocation system. I'm not sure why. - (when arg2 - (set! a3-0 (the-as int (-> arg2 randomize))) - (+! (-> arg2 randomize) 1) - (when (= (-> arg2 randomize) (/ t0-0 SPRITE_MAX_AMOUNT_MULT)) - (set! (-> arg2 randomize) (the-as uint 0)) - 0 - ) - ) - - ;; find the earliest free. - (dotimes (a2-1 t0-0) - (when (nonzero? (-> arg0 alloc-table (+ v1-0 a3-0))) - (let ((a2-2 0) - (t1-15 (-> arg0 alloc-table (+ v1-0 a3-0))) - (t0-4 (* (+ v1-0 a3-0) 64)) - ) - 0 - 0 - (let ((t2-4 (shl t1-15 32)) - (t3-0 (+ a2-2 32)) - ) - (.movn t1-16 t2-4 t2-4 t1-15) - (.movz a2-3 t3-0 t2-4 a2-2) - ) - (let ((t2-5 (shl t1-16 16)) - (t3-1 (+ a2-3 16)) - ) - (.movn t1-17 t2-5 t2-5 t1-16) - (.movz a2-4 t3-1 t2-5 a2-3) - ) - (let ((t2-6 (* t1-17 256)) - (t3-2 (+ a2-4 8)) - ) - (.movn t1-18 t2-6 t2-6 t1-17) - (.movz a2-5 t3-2 t2-6 a2-4) - ) - (let ((t2-7 (* t1-18 16)) - (t3-3 (+ a2-5 4)) - ) - (.movn t1-19 t2-7 t2-7 t1-18) - (.movz a2-6 t3-3 t2-7 a2-5) - ) - (let ((t2-8 (* t1-19 4)) - (t3-4 (+ a2-6 2)) - ) - (.movn t1-20 t2-8 t2-8 t1-19) - (.movz a2-7 t3-4 t2-8 a2-6) - (let ((t1-21 (* t1-20 2)) - (t2-9 (+ a2-7 1)) - ) - (.movn t3-5 t1-21 t1-21 t3-4) - (.movz a2-8 t2-9 t1-21 a2-7) - ) - ) - ;; mark as allocated - (let ((t0-5 (+ t0-4 a2-8))) - (set! (-> arg0 alloc-table (+ v1-0 a3-0)) - (logxor (-> arg0 alloc-table (+ v1-0 a3-0)) (the-as uint (ash 1 a2-8))) - ) - ;; update group's alloc count - (+! (-> arg0 num-alloc arg1) 1) - ;; return it! - (let ((v1-9 (-> arg0 cpuinfo-table t0-5))) - (set! (-> v1-9 valid) #t) - (return v1-9) - ) - ) + (when (= arg1 1) + (set! v1-0 t0-0) + (set! t0-0 (-> arg0 blocks 1)) + ) + (dotimes (blk t0-0) + (when (nonzero? (-> arg0 alloc-table (+ v1-0 a3-0))) + (dotimes (bit 64) + (when (nonzero? (logand (ash 1 bit) (-> arg0 alloc-table (+ v1-0 a3-0)))) + (logxor! (-> arg0 alloc-table (+ v1-0 a3-0)) (ash 1 bit)) + (+! (-> arg0 num-alloc arg1) 1) + (let ((v1-9 (-> arg0 cpuinfo-table (+ bit (* (+ v1-0 a3-0) 64))))) + (set! (-> v1-9 valid) #t) + (return v1-9) + ) + ) + ) + ) + (+! a3-0 1) + (if (= a3-0 t0-0) + (set! a3-0 0) + ) ) - ) - (+! a3-0 1) - (when (= a3-0 t0-0) - ;; wrap - (set! a3-0 0) - ) ) - ) - (the-as sparticle-cpuinfo #f) ) diff --git a/goal_src/jak2/engine/entity/entity.gc b/goal_src/jak2/engine/entity/entity.gc index 581df87aa6..ee038a665d 100644 --- a/goal_src/jak2/engine/entity/entity.gc +++ b/goal_src/jak2/engine/entity/entity.gc @@ -1543,6 +1543,10 @@ (s1-3 (-> s4-8 bsp region-trees s2-4)) ) (while (< s2-4 s3-5) + ;; pc port note : added this name check + (let ((tree-name (-> s1-3 name))) + (set! *debug-region-color-alt* (= tree-name 'camera)) + (let ((s0-4 (-> s1-3 data2 (+ (-> s1-3 length) -1) length))) (set! sv-128 0) (let ((a0-117 (-> (the-as drawable-inline-array-region-prim (-> s1-3 data2 (+ (-> s1-3 length) -1))) data sv-128))) @@ -1555,6 +1559,7 @@ ) ) ) + ) (+! s2-4 1) (set! s1-3 (-> s4-8 bsp region-trees s2-4)) ) diff --git a/goal_src/jak2/engine/game/main.gc b/goal_src/jak2/engine/game/main.gc index a6ccaf8880..3f0bcedcea 100644 --- a/goal_src/jak2/engine/game/main.gc +++ b/goal_src/jak2/engine/game/main.gc @@ -690,6 +690,7 @@ (region-tree (-> region-trees tree-i)) ) (while (< tree-i s3-5) + (let ((tree-name (-> region-tree name))) (let* ((s0-4 (-> region-tree data2 (+ (-> region-tree length) -1) length)) (i 0) (region (-> (the-as drawable-inline-array-region-prim (-> region-tree data2 (+ (-> region-tree length) -1))) data i)) @@ -698,10 +699,10 @@ (let ((draw? #f)) (when (and *display-region-inside* (region-method-9 (-> region region) (target-pos 0))) (true! draw?) - (format *stdcon* "~1kinside region-~D (~A)~%" (-> region region id) (-> lev name))) + (format *stdcon* "~1kinside region-~D [~A] (l: ~A)~%" (-> region region id) tree-name (-> lev name))) (when (and *region-debug-inspect* (or (= *region-debug-inspect* region) (and *merge-region-prims* (= (-> region region id) (-> *region-debug-inspect* region id))))) (when (= *region-debug-inspect* region) - (format *stdcon* "~1kinspecting region-~D (~A)~%" (-> *region-debug-inspect* region id) (-> lev name)) + (format *stdcon* "~1kinspecting region-~D [~A] (l: ~A)~%" (-> *region-debug-inspect* region id) tree-name (-> lev name)) (format *stdcon* " on-enter: ~A~%" (-> *region-debug-inspect* region on-enter)) (format *stdcon* " on-inside: ~A~%" (-> *region-debug-inspect* region on-inside)) (format *stdcon* " on-exit: ~A~%" (-> *region-debug-inspect* region on-exit)) @@ -709,11 +710,13 @@ (true! draw?) ) (when draw? + (set! *debug-region-color-alt* (= tree-name 'camera)) (debug-draw-region region 0))) (set! i (+ i 1)) (set! region (-> (the-as drawable-inline-array-region-prim (-> region-tree data2 (+ (-> region-tree length) -1))) data i)) ) ) + ) (+! tree-i 1) (set! region-tree (-> region-trees tree-i)) ) diff --git a/goal_src/jak2/engine/gfx/background/subdivide-h.gc b/goal_src/jak2/engine/gfx/background/subdivide-h.gc index 621b76f6dd..2bf3eb87f9 100644 --- a/goal_src/jak2/engine/gfx/background/subdivide-h.gc +++ b/goal_src/jak2/engine/gfx/background/subdivide-h.gc @@ -138,16 +138,16 @@ (ray vector :inline :offset 1328) (unknown-vector-t3edh vector :inline :offset-assert 1344) (region-enter-count int32 :offset 1360) - (region-enter-list region-prim-area 320 :offset-assert 1364) + (region-enter-list region 320 :offset-assert 1364) (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) (region-exit-count int32 :offset-assert 3924) - (region-exit-list region-prim-area 320 :offset-assert 3928) + (region-exit-list region 320 :offset-assert 3928) (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) (region-inside-count int32 :offset-assert 6488) - (region-inside-list region-prim-area 320 :offset-assert 6492) + (region-inside-list region 320 :offset-assert 6492) (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) (region-start-count int32 :offset-assert 9052) - (region-start-list region-prim-area 320 :offset-assert 9056) + (region-start-list region 320 :offset-assert 9056) (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 diff --git a/goal_src/jak2/engine/gfx/sprite/particles/sparticle.gc b/goal_src/jak2/engine/gfx/sprite/particles/sparticle.gc index 2a81265ef0..e2c7691da5 100644 --- a/goal_src/jak2/engine/gfx/sprite/particles/sparticle.gc +++ b/goal_src/jak2/engine/gfx/sprite/particles/sparticle.gc @@ -180,20 +180,10 @@ ) (defun sp-get-particle ((arg0 sparticle-system) (arg1 int) (arg2 sparticle-launch-state)) - (local-vars - (a2-3 int) - (a2-4 int) - (a2-5 int) - (a2-6 int) - (a2-7 int) - (a2-8 int) - (t1-16 int) - (t1-17 int) - (t1-18 int) - (t1-19 int) - (t1-20 int) - (t3-5 int) - ) + ;; pc port note : this function originally attempted to find a free sparticle by picking a "random" + ;; (actually incremental) starting block and going from there. we disable that completely for pc + ;; because it is actually detrimental since we may alloc sparticles spread over way too many blocks + ;; which can have a negative impact on our performance. (let ((v1-0 0) (t0-0 (-> arg0 blocks 0)) (a3-0 0) @@ -202,62 +192,13 @@ (set! v1-0 t0-0) (set! t0-0 (-> arg0 blocks 1)) ) - (when arg2 - (set! a3-0 (the-as int (-> arg2 randomize))) - (+! (-> arg2 randomize) 1) - (when (= (-> arg2 randomize) (/ t0-0 SPRITE_MAX_AMOUNT_MULT)) - (set! (-> arg2 randomize) (the-as uint 0)) - 0 - ) - ) - (dotimes (a2-1 t0-0) + (dotimes (blk t0-0) (when (nonzero? (-> arg0 alloc-table (+ v1-0 a3-0))) - (let ((a2-2 0) - (t1-15 (-> arg0 alloc-table (+ v1-0 a3-0))) - (t0-4 (* (+ v1-0 a3-0) 64)) - ) - 0 - 0 - (let ((t2-4 (shl t1-15 32)) - (t3-0 (+ a2-2 32)) - ) - (.movn t1-16 t2-4 t2-4 t1-15) - (.movz a2-3 t3-0 t2-4 a2-2) - ) - (let ((t2-5 (shl t1-16 16)) - (t3-1 (+ a2-3 16)) - ) - (.movn t1-17 t2-5 t2-5 t1-16) - (.movz a2-4 t3-1 t2-5 a2-3) - ) - (let ((t2-6 (* t1-17 256)) - (t3-2 (+ a2-4 8)) - ) - (.movn t1-18 t2-6 t2-6 t1-17) - (.movz a2-5 t3-2 t2-6 a2-4) - ) - (let ((t2-7 (* t1-18 16)) - (t3-3 (+ a2-5 4)) - ) - (.movn t1-19 t2-7 t2-7 t1-18) - (.movz a2-6 t3-3 t2-7 a2-5) - ) - (let ((t2-8 (* t1-19 4)) - (t3-4 (+ a2-6 2)) - ) - (.movn t1-20 t2-8 t2-8 t1-19) - (.movz a2-7 t3-4 t2-8 a2-6) - (let ((t1-21 (* t1-20 2)) - (t2-9 (+ a2-7 1)) - ) - (.movn t3-5 t1-21 t1-21 t3-4) - (.movz a2-8 t2-9 t1-21 a2-7) - ) - ) - (let ((t0-5 (+ t0-4 a2-8))) - (logxor! (-> arg0 alloc-table (+ v1-0 a3-0)) (the-as uint (ash 1 a2-8))) + (dotimes (bit 64) + (when (nonzero? (logand (ash 1 bit) (-> arg0 alloc-table (+ v1-0 a3-0)))) + (logxor! (-> arg0 alloc-table (+ v1-0 a3-0)) (ash 1 bit)) (+! (-> arg0 num-alloc arg1) 1) - (let ((v1-9 (-> arg0 cpuinfo-table t0-5))) + (let ((v1-9 (-> arg0 cpuinfo-table (+ bit (* (+ v1-0 a3-0) 64))))) (set! (-> v1-9 valid) (the-as uint 1)) (return v1-9) ) diff --git a/goal_src/jak2/engine/level/region-h.gc b/goal_src/jak2/engine/level/region-h.gc index 62e357d52b..8453e4356b 100644 --- a/goal_src/jak2/engine/level/region-h.gc +++ b/goal_src/jak2/engine/level/region-h.gc @@ -102,7 +102,8 @@ (deftype region-face-array (inline-array-class) - ((data region-face-data :dynamic :offset 20) + ((data drawable-region-face :inline :dynamic :offset 16) + (pad0 uint8 4 :offset-assert 16) ) :method-count-assert 9 :size-assert #x14 diff --git a/goal_src/jak2/engine/level/region.gc b/goal_src/jak2/engine/level/region.gc index 7366d37691..ea601b5418 100644 --- a/goal_src/jak2/engine/level/region.gc +++ b/goal_src/jak2/engine/level/region.gc @@ -87,7 +87,8 @@ (local-vars (sv-32 vector2h) (sv-36 vector)) (set! sv-32 (new 'stack 'vector2h)) (set! sv-36 (-> obj bsphere)) - (add-debug-x #t (bucket-id debug-no-zbuf1) sv-36 (new 'static 'rgba :r #xff :g #xff :a #x80)) + (add-debug-x #t (bucket-id debug-no-zbuf1) sv-36 (#if PC_PORT (if *debug-region-color-alt* (static-rgba #x00 #xff #x00 #x80) (new 'static 'rgba :r #xff :g #xff :a #x80)) + (new 'static 'rgba :r #xff :g #xff :a #x80))) (when (nonzero? (-> obj region)) (let ((s5-0 add-debug-text-3d) (s4-0 #t) @@ -162,7 +163,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-enter-prim-list` and in (return #f) ) ) - (set! (-> obj region-enter-list regions-entered) (the-as region-prim-area region)) + (set! (-> obj region-enter-list regions-entered) region) ) (set! (-> obj region-enter-prim-list regions-entered) region-sphere) (set! (-> obj region-enter-count) (+ regions-entered 1)) @@ -185,7 +186,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-exit-prim-list` and inc (return #f) ) ) - (set! (-> obj region-exit-list regions-exited) (the-as region-prim-area region)) + (set! (-> obj region-exit-list regions-exited) region) ) (set! (-> obj region-exit-prim-list regions-exited) arg0) (set! (-> obj region-exit-count) (+ regions-exited 1)) @@ -208,7 +209,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-inside-prim-list` and i (return #f) ) ) - (set! (-> obj region-inside-list regions-inside) (the-as region-prim-area region)) + (set! (-> obj region-inside-list regions-inside) region) ) (set! (-> obj region-inside-prim-list regions-inside) arg0) (set! (-> obj region-inside-count) (+ regions-inside 1)) @@ -231,7 +232,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in (return #f) ) ) - (set! (-> obj region-start-list regions-started) (the-as region-prim-area region)) + (set! (-> obj region-start-list regions-started) region) ) (set! (-> obj region-start-prim-list regions-started) arg0) (set! (-> obj region-start-count) (+ regions-started 1)) @@ -245,7 +246,8 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in (t9-0 obj arg0) ) (let ((a2-0 (-> obj bsphere))) - (add-debug-sphere #t (bucket-id debug2) a2-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x80)) + (add-debug-sphere #t (bucket-id debug2) a2-0 (-> obj bsphere w) (#if PC_PORT (if *debug-region-color-alt* (static-rgba #xff #x00 #xff #x80) (new 'static 'rgba :r #xff :a #x80)) + (new 'static 'rgba :r #xff :a #x80))) ) 0 (none) @@ -288,23 +290,43 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in (t9-0 obj arg0) ) ) - (let ((s5-0 (-> obj bsphere))) - (add-debug-vector - #t - (bucket-id debug-no-zbuf1) - s5-0 - (-> obj data normal) - (meters 2) - (new 'static 'rgba :r #xff :g #xff :a #x80) + (#cond + (PC_PORT + (when *debug-region-show-bsphere* + (let ((s5-0 (-> obj bsphere))) + (add-debug-vector + #t + (bucket-id debug-no-zbuf1) + s5-0 + (-> obj data normal) + (meters 2) + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + (add-debug-sphere #t (bucket-id debug2) s5-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x30)) + ) + ) ) - (add-debug-sphere #t (bucket-id debug2) s5-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x30)) - ) + (#t + (let ((s5-0 (-> obj bsphere))) + (add-debug-vector + #t + (bucket-id debug-no-zbuf1) + s5-0 + (-> obj data normal) + (meters 2) + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + (add-debug-sphere #t (bucket-id debug2) s5-0 (-> obj bsphere w) (new 'static 'rgba :r #xff :a #x30)) + ) + )) (add-debug-bound (bucket-id debug2) (-> obj data points) (the-as int (-> obj data num-points)) - (new 'static 'rgba :r #xff :g #xff :a #x80) - (new 'static 'rgba :r #xff :a #x80) + (#if PC_PORT (if *debug-region-color-alt* (static-rgba #x00 #xff #x00 #x80) (new 'static 'rgba :r #xff :g #xff :a #x80)) + (new 'static 'rgba :r #xff :g #xff :a #x80)) + (#if PC_PORT (if *debug-region-color-alt* (static-rgba #xff #x00 #xff #x80) (new 'static 'rgba :r #xff :a #x80)) + (new 'static 'rgba :r #xff :a #x80)) 0 ) 0 @@ -384,12 +406,12 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) (let* ((s5-0 (-> obj faces length)) (s4-0 0) - (a0-3 (the-as object (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces))))) + (a0-3 (-> obj faces data s4-0)) ) (while (< s4-0 s5-0) - (debug-draw-region (the-as drawable-region-face a0-3) 1) + (debug-draw-region a0-3 1) (+! s4-0 1) - (set! a0-3 (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces)))) + (set! a0-3 (-> obj faces data s4-0)) ) ) 0 @@ -403,14 +425,14 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) (let* ((s4-0 (-> obj faces length)) (s3-0 0) - (a0-4 (the-as object (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces))))) + (a0-4 (-> obj faces data s3-0)) ) (while (< s3-0 s4-0) - (if (not (track-region (the-as drawable-region-face a0-4) area)) + (if (not (track-region a0-4 area)) (return #f) ) (+! s3-0 1) - (set! a0-4 (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces)))) + (set! a0-4 (-> obj faces data s3-0)) ) ) (track-inside-region! area (the-as drawable-region-sphere obj)) @@ -421,16 +443,16 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" (let* ((v1-1 (-> obj faces length)) (a2-0 0) - (a3-2 (the-as object (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces))))) + (a3-2 (-> obj faces data a2-0)) ) (while (< a2-0 v1-1) - (let ((a3-4 (-> (the-as drawable-region-face a3-2) data normal))) + (let ((a3-4 (-> a3-2 data normal))) (if (< 0.0 (- (vector-dot (-> arg0 pos) a3-4) (-> a3-4 w))) (return #f) ) ) (+! a2-0 1) - (set! a3-2 (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces)))) + (set! a3-2 (-> obj faces data a2-0)) ) ) #t @@ -494,13 +516,13 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) (defmethod debug-print drawable-tree-region-prim ((obj drawable-tree-region-prim) (arg0 vector) (arg1 object)) - (sphere<-vector+r! (the-as sphere (+ 1296 (scratchpad-object int))) arg0 0.0) + (sphere<-vector+r! (the-as sphere (-> (scratchpad-object region-prim-area) pos)) arg0 0.0) (let* ((s4-0 (-> obj data2 (+ (-> obj length) -1) length)) (s3-0 0) (s2-0 (the-as object (+ (+ (* s3-0 32) 32) (the-as int (-> obj data2 (+ (-> obj length) -1)))))) ) (while (< s3-0 s4-0) - (if (within-area? (the-as drawable-region-prim s2-0) (the-as region-prim-area (+ (scratchpad-object int) 0))) + (if (within-area? (the-as drawable-region-prim s2-0) (scratchpad-object region-prim-area)) (format arg1 " splitbox-~D ~A~%" @@ -550,18 +572,18 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) ) ) - (countdown (gp-1 (-> (scratchpad-object region-prim-area) region-prim-list num-items)) - (track-region - (-> (scratchpad-object region-prim-area) region-prim-list items gp-1) - (the-as region-prim-area (-> (scratchpad-object region-prim-area) region-prim-list)) - ) + ) + (countdown (gp-1 (-> (scratchpad-object region-prim-area) region-prim-list num-items)) + (track-region + (-> (scratchpad-object region-prim-area) region-prim-list items gp-1) + (the-as region-prim-area (-> (scratchpad-object region-prim-area) region-prim-list)) ) ) (let ((gp-2 (-> (scratchpad-object region-prim-area) region-enter-count))) (while (begin (label cfg-22) (nonzero? gp-2)) (+! gp-2 -1) (let* ((a2-5 (-> (scratchpad-object region-prim-area) region-enter-list gp-2)) - (s5-2 (-> a2-5 region-prim-list items 0)) + (s5-2 (-> a2-5 on-enter)) ) (when s5-2 (countdown (v1-47 (-> (scratchpad-object region-prim-area) region-start-count)) @@ -570,7 +592,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) ) (script-eval - (the-as pair s5-2) + s5-2 :key a2-5 :vector (-> (scratchpad-object region-prim-area) region-enter-prim-list gp-2 bsphere) ) @@ -582,7 +604,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in (while (begin (label cfg-31) (nonzero? gp-3)) (+! gp-3 -1) (let* ((a2-6 (-> (scratchpad-object region-prim-area) region-exit-list gp-3)) - (s5-3 (-> a2-6 region-prim-list items 2)) + (s5-3 (-> a2-6 on-exit)) ) (when s5-3 (countdown (v1-64 (-> (scratchpad-object region-prim-area) region-inside-count)) @@ -591,7 +613,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) ) (script-eval - (the-as pair s5-3) + s5-3 :key a2-6 :vector (-> (scratchpad-object region-prim-area) region-exit-prim-list gp-3 bsphere) ) @@ -601,11 +623,11 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) (countdown (gp-4 (-> (scratchpad-object region-prim-area) region-inside-count)) (let* ((a2-7 (-> (scratchpad-object region-prim-area) region-inside-list gp-4)) - (s5-4 (-> a2-7 region-prim-list items 1)) + (s5-4 (-> a2-7 on-inside)) ) (if s5-4 (script-eval - (the-as pair s5-4) + s5-4 :key a2-7 :vector (-> (scratchpad-object region-prim-area) region-inside-prim-list gp-4 bsphere) ) diff --git a/goal_src/jak2/pc/debug/default-menu-pc.gc b/goal_src/jak2/pc/debug/default-menu-pc.gc index d4d7dd17f4..4f4530f948 100644 --- a/goal_src/jak2/pc/debug/default-menu-pc.gc +++ b/goal_src/jak2/pc/debug/default-menu-pc.gc @@ -698,6 +698,7 @@ (debug-menu-append-item regions-menu (new-dm-func "Print on-inside" 'on-inside dm-print-region-pick-func)) (debug-menu-append-item regions-menu (new-dm-func "Print on-exit" 'on-exit dm-print-region-pick-func)) (debug-menu-append-item regions-menu (new-dm-bool "Display region inside" *display-region-inside* dm-boolean-toggle-pick-func)) + (debug-menu-append-item regions-menu (new-dm-bool "Show non-sphere bsphere" *debug-region-show-bsphere* dm-boolean-toggle-pick-func)) (debug-menu-append-item regions-menu (new-dm-bool "Region Marks" *display-region-marks* dm-boolean-toggle-pick-func)) (debug-menu-append-item regions-menu (new-dm-bool "region-mode" #f (lambda (arg (msg debug-menu-msg)) diff --git a/goal_src/jak2/pc/pckernel-impl.gc b/goal_src/jak2/pc/pckernel-impl.gc index c8bed17c3c..f14bd39c6b 100644 --- a/goal_src/jak2/pc/pckernel-impl.gc +++ b/goal_src/jak2/pc/pckernel-impl.gc @@ -161,6 +161,8 @@ (define *hires-sky* #t) +(define *debug-region-color-alt* #f) +(define *debug-region-show-bsphere* #f) (defun get-video-params () *video-params*) diff --git a/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc index b588e5b330..c5c400dc4a 100644 --- a/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/background/subdivide-h_REF.gc @@ -245,16 +245,16 @@ (ray vector :inline :offset 1328) (unknown-vector-t3edh vector :inline :offset-assert 1344) (region-enter-count int32 :offset 1360) - (region-enter-list region-prim-area 320 :offset-assert 1364) + (region-enter-list region 320 :offset-assert 1364) (region-enter-prim-list drawable-region-sphere 320 :offset-assert 2644) (region-exit-count int32 :offset-assert 3924) - (region-exit-list region-prim-area 320 :offset-assert 3928) + (region-exit-list region 320 :offset-assert 3928) (region-exit-prim-list drawable-region-sphere 320 :offset-assert 5208) (region-inside-count int32 :offset-assert 6488) - (region-inside-list region-prim-area 320 :offset-assert 6492) + (region-inside-list region 320 :offset-assert 6492) (region-inside-prim-list drawable-region-sphere 320 :offset-assert 7772) (region-start-count int32 :offset-assert 9052) - (region-start-list region-prim-area 320 :offset-assert 9056) + (region-start-list region 320 :offset-assert 9056) (region-start-prim-list drawable-region-sphere 320 :offset-assert 10336) ) :method-count-assert 13 diff --git a/test/decompiler/reference/jak2/engine/level/region-h_REF.gc b/test/decompiler/reference/jak2/engine/level/region-h_REF.gc index 350d13d478..c45fee42ce 100644 --- a/test/decompiler/reference/jak2/engine/level/region-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/region-h_REF.gc @@ -203,7 +203,8 @@ ;; definition of type region-face-array (deftype region-face-array (inline-array-class) - ((data region-face-data :dynamic :offset 20) + ((data drawable-region-face :inline :dynamic :offset 16) + (pad0 uint8 4 :offset-assert 16) ) :method-count-assert 9 :size-assert #x14 diff --git a/test/decompiler/reference/jak2/engine/level/region_REF.gc b/test/decompiler/reference/jak2/engine/level/region_REF.gc index f69885e19a..52bf2b52ad 100644 --- a/test/decompiler/reference/jak2/engine/level/region_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/region_REF.gc @@ -173,7 +173,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-enter-prim-list` and in (return #f) ) ) - (set! (-> obj region-enter-list regions-entered) (the-as region-prim-area region)) + (set! (-> obj region-enter-list regions-entered) region) ) (set! (-> obj region-enter-prim-list regions-entered) region-sphere) (set! (-> obj region-enter-count) (+ regions-entered 1)) @@ -198,7 +198,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-exit-prim-list` and inc (return #f) ) ) - (set! (-> obj region-exit-list regions-exited) (the-as region-prim-area region)) + (set! (-> obj region-exit-list regions-exited) region) ) (set! (-> obj region-exit-prim-list regions-exited) arg0) (set! (-> obj region-exit-count) (+ regions-exited 1)) @@ -223,7 +223,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-inside-prim-list` and i (return #f) ) ) - (set! (-> obj region-inside-list regions-inside) (the-as region-prim-area region)) + (set! (-> obj region-inside-list regions-inside) region) ) (set! (-> obj region-inside-prim-list regions-inside) arg0) (set! (-> obj region-inside-count) (+ regions-inside 1)) @@ -248,7 +248,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in (return #f) ) ) - (set! (-> obj region-start-list regions-started) (the-as region-prim-area region)) + (set! (-> obj region-start-list regions-started) region) ) (set! (-> obj region-start-prim-list regions-started) arg0) (set! (-> obj region-start-count) (+ regions-started 1)) @@ -410,12 +410,12 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) (let* ((s5-0 (-> obj faces length)) (s4-0 0) - (a0-3 (the-as object (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces))))) + (a0-3 (-> obj faces data s4-0)) ) (while (< s4-0 s5-0) - (debug-draw-region (the-as drawable-region-face a0-3) 1) + (debug-draw-region a0-3 1) (+! s4-0 1) - (set! a0-3 (+ (+ (* s4-0 32) 16) (the-as int (-> obj faces)))) + (set! a0-3 (-> obj faces data s4-0)) ) ) 0 @@ -430,14 +430,14 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) (let* ((s4-0 (-> obj faces length)) (s3-0 0) - (a0-4 (the-as object (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces))))) + (a0-4 (-> obj faces data s3-0)) ) (while (< s3-0 s4-0) - (if (not (track-region (the-as drawable-region-face a0-4) area)) + (if (not (track-region a0-4 area)) (return #f) ) (+! s3-0 1) - (set! a0-4 (+ (+ (* s3-0 32) 16) (the-as int (-> obj faces)))) + (set! a0-4 (-> obj faces data s3-0)) ) ) (track-inside-region! area (the-as drawable-region-sphere obj)) @@ -449,16 +449,16 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in "@returns Whether or not the object overlaps with the provided [[region-prim-area]]'s extent" (let* ((v1-1 (-> obj faces length)) (a2-0 0) - (a3-2 (the-as object (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces))))) + (a3-2 (-> obj faces data a2-0)) ) (while (< a2-0 v1-1) - (let ((a3-4 (-> (the-as drawable-region-face a3-2) data normal))) + (let ((a3-4 (-> a3-2 data normal))) (if (< 0.0 (- (vector-dot (-> arg0 pos) a3-4) (-> a3-4 w))) (return #f) ) ) (+! a2-0 1) - (set! a3-2 (+ (+ (* a2-0 32) 16) (the-as int (-> obj faces)))) + (set! a3-2 (-> obj faces data a2-0)) ) ) #t @@ -596,7 +596,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in (while (begin (label cfg-22) (nonzero? gp-2)) (+! gp-2 -1) (let* ((a2-5 (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-list 0)) - (s5-2 (-> a2-5 region-prim-list items 0)) + (s5-2 (-> a2-5 on-enter)) ) (when s5-2 (countdown (v1-47 (-> (the-as region-prim-area #x70000000) region-start-count)) @@ -605,7 +605,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) ) (script-eval - (the-as pair s5-2) + s5-2 :key a2-5 :vector (-> (the-as region-prim-area (+ (* gp-2 4) #x70000000)) region-enter-prim-list 0 bsphere) ) @@ -617,7 +617,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in (while (begin (label cfg-31) (nonzero? gp-3)) (+! gp-3 -1) (let* ((a2-6 (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-list 0)) - (s5-3 (-> a2-6 region-prim-list items 2)) + (s5-3 (-> a2-6 on-exit)) ) (when s5-3 (countdown (v1-64 (-> (the-as region-prim-area #x70000000) region-inside-count)) @@ -626,7 +626,7 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) ) (script-eval - (the-as pair s5-3) + s5-3 :key a2-6 :vector (-> (the-as region-prim-area (+ (* gp-3 4) #x70000000)) region-exit-prim-list 0 bsphere) ) @@ -636,11 +636,11 @@ otherwise, add the [[drawable-region-sphere]] to `region-start-prim-list` and in ) (countdown (gp-4 (-> (the-as region-prim-area #x70000000) region-inside-count)) (let* ((a2-7 (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-list 0)) - (s5-4 (-> a2-7 region-prim-list items 1)) + (s5-4 (-> a2-7 on-inside)) ) (if s5-4 (script-eval - (the-as pair s5-4) + s5-4 :key a2-7 :vector (-> (the-as region-prim-area (+ (* gp-4 4) #x70000000)) region-inside-prim-list 0 bsphere) )