Files
jak-project/goal_src/jak2/levels/intro/vortex.gc
T
water111 976e08fe97 [jak2] add vortex renderer (#2441)
Add the vortex renderer. The vortex texture isn't there yet (it uses the
same texture as clouds), so it uses a checkerboard. But the
colors/vertices seem right.
2023-03-29 20:28:48 -04:00

194 lines
9.2 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: vortex.gc
;; name in dgo: vortex
;; dgos: INTROCST
;; DECOMP BEGINS
;; ERROR: function has no type analysis. Cannot decompile.
(def-mips2c init-vortex-regs (function none))
(def-mips2c draw-large-polygon-vortex function)
(def-mips2c render-vortex-quad (function vortex-vertex dma-buffer vector none))
(defun update-vortex-data ((arg0 float))
(when (not (paused?))
(+! (-> *vortex-work* off-s-0) (the int (* 4.0 arg0)))
(+! (-> *vortex-work* off-t-0) (the int (* -8.0 arg0)))
(+! (-> *vortex-work* off-s-1) (the int (* 4.0 arg0)))
(+! (-> *vortex-work* off-t-1) (the int (* -8.0 arg0)))
)
0
(none)
)
;; ERROR: Failed store: (s.w! (+ v1-76 8) 0) at op 268
(defun draw-vortex ()
(rlet ((vf27 :class vf))
(when (and (logtest? (-> *display* vu1-enable-user) (vu1-renderer-mask sky))
(logtest? (-> *texture-pool* texture-enable-user) (texture-enable-mask sky))
)
(let ((gp-0 (-> *display* frames (-> *display* on-screen) global-buf base)))
(update-vortex-data 60.0)
(with-dma-buffer-add-bucket ((s4-0 (-> *display* frames (-> *display* on-screen) global-buf))
(bucket-id sky-draw)
)
(let ((v1-17 s4-0))
(let ((a0-6 (the-as dma-packet (-> v1-17 base))))
(set! (-> a0-6 dma) (new 'static 'dma-tag :qwc #x4 :id (dma-tag-id cnt)))
(set! (-> a0-6 vif0) (new 'static 'vif-tag))
(set! (-> a0-6 vif1) (new 'static 'vif-tag :imm #x4 :cmd (vif-cmd direct) :msk #x1))
(set! (-> v1-17 base) (the-as pointer (&+ a0-6 16)))
)
)
(let ((v1-18 s4-0))
(let ((a0-8 (the-as gs-gif-tag (-> v1-18 base))))
(set! (-> a0-8 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x3))
(set! (-> a0-8 regs) GIF_REGS_ALL_AD)
(set! (-> v1-18 base) (the-as pointer (&+ a0-8 16)))
)
)
(let ((v1-19 s4-0))
(let ((a0-10 (-> v1-19 base)))
(set! (-> (the-as (pointer gs-zbuf) a0-10) 0) (new 'static 'gs-zbuf :zbp #x130 :psm (gs-psm ct24)))
(set! (-> (the-as (pointer gs-reg64) a0-10) 1) (gs-reg64 zbuf-1))
(set! (-> (the-as (pointer gs-test) a0-10) 2)
(new 'static 'gs-test :ate #x1 :atst (gs-atest always) :zte #x1 :ztst (gs-ztest always))
)
(set! (-> (the-as (pointer gs-reg64) a0-10) 3) (gs-reg64 test-1))
(set! (-> (the-as (pointer gs-rgbaq) a0-10) 4) (new 'static 'gs-rgbaq :b #x40 :q 1.0))
(set! (-> (the-as (pointer gs-reg64) a0-10) 5) (gs-reg64 rgbaq))
(set! (-> v1-19 base) (&+ a0-10 48))
)
)
(let ((v1-20 (-> s4-0 base)))
(set! (-> (the-as (pointer uint128) v1-20)) (-> *sky-work* sprite-tmpl dma-vif quad))
(set! (-> (the-as (pointer uint128) v1-20) 1) (-> *sky-work* sprite-tmpl quad 1))
)
(&+! (-> s4-0 base) 32)
(let ((v1-23 (-> s4-0 base)))
(set-vector! (the-as vector4w (&+ v1-23 0)) #x7000 #x7300 0 0)
(set-vector! (the-as vector4w (&+ v1-23 16)) #x9000 #x8d00 0 0)
)
(&+! (-> s4-0 base) 32)
(let ((v1-27 s4-0))
(let ((a0-19 (the-as dma-packet (-> v1-27 base))))
(set! (-> a0-19 dma) (new 'static 'dma-tag :qwc #x6 :id (dma-tag-id cnt)))
(set! (-> a0-19 vif0) (new 'static 'vif-tag))
(set! (-> a0-19 vif1) (new 'static 'vif-tag :imm #x6 :cmd (vif-cmd direct) :msk #x1))
(set! (-> v1-27 base) (the-as pointer (&+ a0-19 16)))
)
)
(let ((v1-28 s4-0))
(let ((a0-21 (the-as gs-gif-tag (-> v1-28 base))))
(set! (-> a0-21 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x5))
(set! (-> a0-21 regs) GIF_REGS_ALL_AD)
(set! (-> v1-28 base) (the-as pointer (&+ a0-21 16)))
)
)
(let ((s3-0 s4-0))
(let ((s2-0 (-> s3-0 base)))
(set! (-> (the-as (pointer gs-tex0) s2-0) 0) (new 'static 'gs-tex0
:tbp0 #x100
:tbw #x2
:psm #x1b
:tcc #x1
:cbp #x300
:cld #x1
:th (log2 128)
:tw (log2 128)
)
)
(set! (-> (the-as (pointer gs-reg64) s2-0) 1) (gs-reg64 tex0-1))
(set! (-> (the-as (pointer gs-tex1) s2-0) 2) (new 'static 'gs-tex1 :mmag #x1 :mmin #x1))
(set! (-> (the-as (pointer gs-reg64) s2-0) 3) (gs-reg64 tex1-1))
(set! (-> (the-as (pointer gs-clamp) s2-0) 4) (new 'static 'gs-clamp))
(set! (-> (the-as (pointer gs-reg64) s2-0) 5) (gs-reg64 clamp-1))
(set! (-> (the-as (pointer gs-alpha) s2-0) 6) (new 'static 'gs-alpha :b #x1 :d #x1))
(set! (-> (the-as (pointer gs-reg64) s2-0) 7) (gs-reg64 alpha-1))
(set! (-> (the-as (pointer uint64) s2-0) 8) (the-as uint 0))
(set! (-> (the-as (pointer gs-reg64) s2-0) 9) (gs-reg64 texflush))
(set! (-> s3-0 base) (&+ s2-0 80))
)
)
(init-vortex-regs)
;;(.lvf vf27 (&-> *vortex-work* giftag quad))
(set-sky-vf27 (&-> *vortex-work* giftag quad))
(set-tex-offset (the-as int (-> *vortex-work* off-s-0)) (the-as int (-> *vortex-work* off-t-0)))
(let ((s3-1 (the-as dma-packet (-> s4-0 base))))
(&+! (-> s4-0 base) 16)
(let ((s2-1 *vortex-poly*))
(dotimes (s1-2 304)
(render-vortex-quad (-> s2-1 (* s1-2 4)) s4-0 (new 'static 'vector :z 128.0 :w 128.0))
)
)
(close-sky-buffer s4-0)
(let ((v1-54 (/ (+ (- -16 (the-as int s3-1)) (the-as int (-> s4-0 base))) 16)))
(set! (-> s3-1 dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc v1-54))
(set! (-> s3-1 vif0) (new 'static 'vif-tag))
(set! (-> s3-1 vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1 :imm v1-54))
)
)
(let ((v1-58 s4-0))
(let ((a0-32 (the-as dma-packet (-> v1-58 base))))
(set! (-> a0-32 dma) (new 'static 'dma-tag :qwc #x3 :id (dma-tag-id cnt)))
(set! (-> a0-32 vif0) (new 'static 'vif-tag))
(set! (-> a0-32 vif1) (new 'static 'vif-tag :imm #x3 :cmd (vif-cmd direct) :msk #x1))
(set! (-> v1-58 base) (the-as pointer (&+ a0-32 16)))
)
)
(let ((v1-59 s4-0))
(let ((a0-34 (the-as gs-gif-tag (-> v1-59 base))))
(set! (-> a0-34 tag) (new 'static 'gif-tag64 :nloop #x1 :eop #x1 :nreg #x2))
(set! (-> a0-34 regs) GIF_REGS_ALL_AD)
(set! (-> v1-59 base) (the-as pointer (&+ a0-34 16)))
)
)
(let ((v1-60 s4-0))
(let ((a0-36 (-> v1-60 base)))
(set! (-> (the-as (pointer gs-alpha) a0-36) 0) (new 'static 'gs-alpha :b #x2 :d #x1))
(set! (-> (the-as (pointer gs-reg64) a0-36) 1) (gs-reg64 alpha-1))
(set! (-> (the-as (pointer uint64) a0-36) 2) (the-as uint 1))
(set! (-> (the-as (pointer gs-reg64) a0-36) 3) (gs-reg64 colclamp))
(set! (-> v1-60 base) (&+ a0-36 32))
)
)
(set-tex-offset (the-as int (-> *vortex-work* off-s-1)) (the-as int (-> *vortex-work* off-t-1)))
(let ((s3-2 (the-as dma-packet (-> s4-0 base))))
(&+! (-> s4-0 base) 16)
(let ((s2-2 *vortex-poly*))
(dotimes (s1-3 304)
(render-vortex-quad (-> s2-2 (* s1-3 4)) s4-0 (new 'static 'vector :x 144.0 :y 128.0 :z 255.0 :w 128.0))
)
)
(close-sky-buffer s4-0)
(let ((v1-72 (/ (+ (- -16 (the-as int s3-2)) (the-as int (-> s4-0 base))) 16)))
(set! (-> s3-2 dma) (new 'static 'dma-tag :id (dma-tag-id cnt) :qwc v1-72))
(set! (-> s3-2 vif0) (new 'static 'vif-tag))
(set! (-> s3-2 vif1) (new 'static 'vif-tag :cmd (vif-cmd direct) :msk #x1 :imm v1-72))
)
)
)
(let ((v1-83 *dma-mem-usage*))
(when (nonzero? v1-83)
(set! (-> v1-83 length) (max 89 (-> v1-83 length)))
(set! (-> v1-83 data 88 name) "sky")
(+! (-> v1-83 data 88 count) 1)
(+! (-> v1-83 data 88 used)
(&- (-> *display* frames (-> *display* on-screen) global-buf base) (the-as uint gp-0))
)
(set! (-> v1-83 data 88 total) (-> v1-83 data 88 used))
)
)
)
)
0
(none)
)
)