mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
532 lines
15 KiB
Common Lisp
532 lines
15 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: vu1-user-h.gc
|
|
;; name in dgo: vu1-user-h
|
|
;; dgos: ENGINE, GAME
|
|
|
|
;; The DMA buckets
|
|
;; name format:
|
|
;; <what renderer>-<what level>-<what tpage>
|
|
(defenum bucket-id
|
|
:type int32
|
|
:bitfield #f
|
|
|
|
;;;;;;;;;;
|
|
|
|
(bucket-0 0)
|
|
(bucket-1 1)
|
|
(bucket-2 2)
|
|
(bucket-3 3) ;; blit displays
|
|
(tex-lcom-sky-pre 4) ;; tex
|
|
(bucket-5 5) ;; sky
|
|
(bucket-6 6) ;; ocean
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; All levels with tfrag tpage
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(tex-l0-tfrag 7) ;; level 0 tex
|
|
(tfrag-l0-tfrag 8) ;; tfrag
|
|
(bucket-9 9) ;; tie
|
|
(bucket-10 10) ;; tie
|
|
(tfrag-s-l0-tfrag 11) ;; tfrag
|
|
(bucket-12 12) ;; tie
|
|
(bucket-13 13) ;; tie
|
|
(merc-l0-tfrag 14) ;; merc
|
|
(emerc-l0-tfrag 15) ;; emerc
|
|
(bucket-16 16) ;; mercneric
|
|
(bucket-17 17) ;; tie
|
|
|
|
(tex-l1-tfrag 18) ;; tex
|
|
(tfrag-l1-tfrag 19) ;; tfrag
|
|
(bucket-20 20) ;; tie
|
|
(bucket-21 21) ;; tie
|
|
(tfrag-s-l1-tfrag 22) ;; tfrag
|
|
(bucket-23 23) ;; tie
|
|
(bucket-24 24) ;; tie
|
|
(merc-l1-tfrag 25) ;; merc
|
|
(emerc-l1-tfrag 26) ;; emerc
|
|
(bucket-27 27) ;; mercneric
|
|
(bucket-28 28) ;; tie
|
|
|
|
(tex-l2-tfrag 29) ;; tex
|
|
(tfrag-l2-tfrag 30) ;; tfrag
|
|
(bucket-31 31) ;; tie
|
|
(bucket-32 32) ;; tie
|
|
(tfrag-s-l2-tfrag 33) ;; tfrag
|
|
(bucket-34 34) ;; tie
|
|
(bucket-35 35) ;; tie
|
|
(merc-l2-tfrag 36) ;; merc
|
|
(emerc-l2-tfrag 37) ;; emerc
|
|
(bucket-38 38) ;; mercneric
|
|
(bucket-39 39) ;; tie
|
|
|
|
(tex-l3-tfrag 40) ;; tex
|
|
(tfrag-l3-tfrag 41) ;; tfrag
|
|
(bucket-42 42) ;; tie
|
|
(bucket-43 43) ;; tie
|
|
(tfrag-s-l3-tfrag 44) ;; tfrag
|
|
(bucket-45 45) ;; tie
|
|
(bucket-46 46) ;; tie
|
|
(merc-l3-tfrag 47) ;; merc
|
|
(emerc-l3-tfrag 48) ;; emerc
|
|
(bucket-49 49) ;; mercneric
|
|
(bucket-50 50) ;; tie
|
|
|
|
(tex-l4-tfrag 51) ;; tex
|
|
(tfrag-l4-tfrag 52) ;; tfrag
|
|
(bucket-53 53) ;; tie
|
|
(bucket-54 54) ;; tie
|
|
(tfrag-s-l4-tfrag 55) ;; tfrag
|
|
(bucket-56 56) ;; tie
|
|
(bucket-57 57) ;; tie
|
|
(merc-l4-tfrag 58) ;; merc
|
|
(emerc-l4-tfrag 59) ;; emerc
|
|
(bucket-60 60) ;; mercneric
|
|
(bucket-61 61) ;; tie
|
|
|
|
(tex-l5-tfrag 62) ;; tex
|
|
(tfrag-l5-tfrag 63) ;; tfrag
|
|
(bucket-64 64) ;; tie
|
|
(bucket-65 65) ;; tie
|
|
(tfrag-s-l5-tfrag 66) ;; tfrag
|
|
(bucket-67 67) ;; tie
|
|
(bucket-68 68) ;; tie
|
|
(merc-l5-tfrag 69) ;; merc
|
|
(emerc-l5-tfrag 70) ;; emerc
|
|
(bucket-71 71) ;; mercneric
|
|
(bucket-72 72) ;; tie
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;; All levels with shrub tpage
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(tex-l0-shrub 73) ;; tex
|
|
(bucket-74 74) ;; shrub
|
|
(bucket-75 75) ;; shrub
|
|
(bucket-76 76) ;; shrub
|
|
(bucket-77 77) ;; shrub
|
|
(bucket-78 78) ;; shrub
|
|
(merc-l0-shrub 79) ;; merc
|
|
(emerc-l0-shrub 80) ;; emerc
|
|
(bucket-81 81) ;; mercneric
|
|
|
|
(tex-l1-shrub 82) ;; tex
|
|
(bucket-83 83) ;; shrub
|
|
(bucket-84 84) ;; shrub
|
|
(bucket-85 85) ;; shrub
|
|
(bucket-86 86) ;; shrub
|
|
(bucket-87 87) ;; shrub
|
|
(merc-l1-shrub 88) ;; merc
|
|
(emerc-l1-shrub 89) ;; emerc
|
|
(bucket-90 90) ;; mercneric
|
|
|
|
(tex-l2-shrub 91) ;; tex
|
|
(bucket-92 92) ;; shrub
|
|
(bucket-93 93) ;; shrub
|
|
(bucket-94 94) ;; shrub
|
|
(bucket-95 95) ;; shrub
|
|
(bucket-96 96) ;; shrub
|
|
(merc-l2-shrub 97) ;; merc
|
|
(emerc-l2-shrub 98) ;; emerc
|
|
(bucket-99 99) ;; mercneric
|
|
|
|
(tex-l3-shrub 100) ;; tex
|
|
(bucket-101 101) ;; shrub
|
|
(bucket-102 102) ;; shrub
|
|
(bucket-103 103) ;; shrub
|
|
(bucket-104 104) ;; shrub
|
|
(bucket-105 105) ;; shrub
|
|
(merc-l3-shrub 106) ;; merc
|
|
(emerc-l3-shrub 107) ;; emerc
|
|
(bucket-108 108) ;; mercneric
|
|
|
|
(tex-l4-shrub 109) ;; tex
|
|
(bucket-110 110) ;; shrub
|
|
(bucket-111 111) ;; shrub
|
|
(bucket-112 112) ;; shrub
|
|
(bucket-113 113) ;; shrub
|
|
(bucket-114 114) ;; shrub
|
|
(merc-l4-shrub 115) ;; merc
|
|
(emerc-l4-shrub 116) ;; emerc
|
|
(bucket-117 117) ;; mercneric
|
|
|
|
(tex-l5-shrub 118) ;; tex
|
|
(bucket-119 119) ;; shrub
|
|
(bucket-120 120) ;; shrub
|
|
(bucket-121 121) ;; shrub
|
|
(bucket-122 122) ;; shrub
|
|
(bucket-123 123) ;; shrub
|
|
(merc-l5-shrub 124) ;; merc
|
|
(emerc-l5-shrub 125) ;; emerc
|
|
(bucket-126 126) ;; mercneric
|
|
|
|
(tex-l0-alpha 127) ;; tex
|
|
(tfrag-t-l0-alpha 128) ;; tfrag
|
|
(bucket-129 129) ;; tie
|
|
(bucket-130 130) ;; tie
|
|
(merc-l0-alpha 131) ;; merc
|
|
(emerc-l0-alpha 132) ;; emerc
|
|
(bucket-133 133) ;; mercneric
|
|
(tfrag-st-l0-alpha 134) ;; tfrag
|
|
(bucket-135 135) ;; tie
|
|
(bucket-136 136) ;; tie
|
|
|
|
(tex-l1-alpha 137) ;; tex
|
|
(tfrag-t-l1-alpha 138) ;; tfrag
|
|
(bucket-139 139) ;; tie
|
|
(bucket-140 140) ;; tie
|
|
(merc-l1-alpha 141) ;; merc
|
|
(emerc-l1-alpha 142) ;; emerc
|
|
(bucket-143 143) ;; mercneric
|
|
(tfrag-st-l1-alpha 144) ;; tfrag
|
|
(bucket-145 145) ;; tie
|
|
(bucket-146 146) ;; tie
|
|
|
|
(tex-l2-alpha 147) ;; tex
|
|
(tfrag-t-l2-alpha 148) ;; tfrag
|
|
(bucket-149 149) ;; tie
|
|
(bucket-150 150) ;; tie
|
|
(merc-l2-alpha 151) ;; merc
|
|
(emerc-l2-alpha 152) ;; emerc
|
|
(bucket-153 153) ;; mercneric
|
|
(tfrag-st-l2-alpha 154) ;; tfrag
|
|
(bucket-155 155) ;; tie
|
|
(bucket-156 156) ;; tie
|
|
|
|
(tex-l3-alpha 157) ;; tex
|
|
(tfrag-t-l3-alpha 158) ;; tfrag
|
|
(bucket-159 159) ;; tie
|
|
(bucket-160 160) ;; tie
|
|
(merc-l3-alpha 161) ;; merc
|
|
(emerc-l3-alpha 162) ;; emerc
|
|
(bucket-163 163) ;; mercneric
|
|
(tfrag-st-l3-alpha 164) ;; tfrag
|
|
(bucket-165 165) ;; tie
|
|
(bucket-166 166) ;; tie
|
|
|
|
(tex-l4-alpha 167) ;; tex
|
|
(tfrag-t-l4-alpha 168) ;; tfrag
|
|
(bucket-169 169) ;; tie
|
|
(bucket-170 170) ;; tie
|
|
(merc-l4-alpha 171) ;; merc
|
|
(emerc-l4-alpha 172) ;; emerc
|
|
(bucket-173 173) ;; mercneric
|
|
(tfrag-st-l4-alpha 174) ;; tfrag
|
|
(bucket-175 175) ;; tie
|
|
(bucket-176 176) ;; tie
|
|
|
|
(tex-l5-alpha 177) ;; tex
|
|
(tfrag-t-l5-alpha 178) ;; tfrag
|
|
(bucket-179 179) ;; tie
|
|
(bucket-180 180) ;; tie
|
|
(merc-l5-alpha 181) ;; merc
|
|
(emerc-l5-alpha 182) ;; emerc
|
|
(bucket-183 183) ;; mercneric
|
|
(tfrag-st-l5-alpha 184) ;; tfrag
|
|
(bucket-185 185) ;; tie
|
|
(bucket-186 186) ;; tie
|
|
|
|
(tex-lcom-tfrag 187) ;; tex
|
|
(merc-lcom-tfrag 188) ;; merc
|
|
(emerc-lcom-tfrag 189) ;; emerc
|
|
(bucket-190 190) ;; mercneric
|
|
|
|
(tex-lcom-shrub 191) ;; tex
|
|
(merc-lcom-shrub 192) ;; merc
|
|
(emerc-lcom-shrub 193) ;; emerc
|
|
(bucket-194 194) ;; mercneric
|
|
|
|
(bucket-195 195) ;; shadow
|
|
|
|
(tex-l0-pris 196) ;; tex
|
|
(merc-l0-pris 197) ;; merc
|
|
(emerc-l0-pris 198) ;; emerc
|
|
(bucket-199 199) ;; mercneric
|
|
|
|
(tex-l1-pris 200) ;; tex
|
|
(merc-l1-pris 201) ;; merc
|
|
(emerc-l1-pris 202) ;; emerc
|
|
(bucket-203 203) ;; mercneric
|
|
|
|
(tex-l2-pris 204) ;; tex
|
|
(merc-l2-pris 205) ;; merc
|
|
(emerc-l2-pris 206) ;; emerc
|
|
(bucket-207 207) ;; mercneric
|
|
|
|
(tex-l3-pris 208) ;; tex
|
|
(merc-l3-pris 209) ;; merc
|
|
(emerc-l3-pris 210) ;; emerc
|
|
(bucket-211 211) ;; mercneric
|
|
|
|
(tex-l4-pris 212) ;; tex
|
|
(merc-l4-pris 213) ;; merc
|
|
(emerc-l4-pris 214) ;; emerc
|
|
(bucket-215 215) ;; mercneric
|
|
|
|
(tex-l5-pris 216) ;; tex
|
|
(merc-l5-pris 217) ;; merc
|
|
(emerc-l5-pris 218) ;; emerc
|
|
(bucket-219 219) ;; mercneric
|
|
|
|
(tex-lcom-pris 220) ;; tex
|
|
(merc-lcom-pris 221) ;; merc
|
|
(emerc-lcom-pris 222) ;; emerc
|
|
(bucket-223 223) ;; mercneric
|
|
|
|
(tex-l0-pris2 224) ;; tex
|
|
(merc-l0-pris2 225) ;; merc
|
|
(emerc-l0-pris2 226) ;; emerc
|
|
(bucket-227 227) ;; mercneric
|
|
|
|
(tex-l1-pris2 228) ;; tex
|
|
(merc-l1-pris2 229) ;; merc
|
|
(emerc-l1-pris2 230) ;; emerc
|
|
(bucket-231 231) ;; mercneric
|
|
|
|
(tex-l2-pris2 232) ;; tex
|
|
(merc-l2-pris2 233) ;; merc
|
|
(emerc-l2-pris2 234) ;; emerc
|
|
(bucket-235 235) ;; mercneric
|
|
|
|
(tex-l3-pris2 236) ;; tex
|
|
(merc-l3-pris2 237) ;; merc
|
|
(emerc-l3-pris2 238) ;; emerc
|
|
(bucket-239 239) ;; mercneric
|
|
|
|
(tex-l4-pris2 240) ;; tex
|
|
(merc-l4-pris2 241) ;; merc
|
|
(emerc-l4-pris2 242) ;; emerc
|
|
(bucket-243 243) ;; mercneric
|
|
|
|
(tex-l5-pris2 244) ;; tex
|
|
(merc-l5-pris2 245) ;; merc
|
|
(emerc-l5-pris2 246) ;; emerc
|
|
(bucket-247 247) ;; mercneric
|
|
|
|
(tex-lcom-pris2 248) ;; tex
|
|
(merc-lcom-pris2 249) ;; merc
|
|
(emerc-lcom-pris2 250) ;; emerc
|
|
(bucket-251 251) ;; mercneric
|
|
|
|
(tex-l0-water 252) ;; tex
|
|
(merc-l0-water 253) ;; merc
|
|
(bucket-254 254) ;; mercneric
|
|
(tfrag-w-l0-water 255) ;; tfrag
|
|
(bucket-256 256)
|
|
(bucket-257 257)
|
|
(bucket-258 258)
|
|
(tfrag-ws-l0-water 259) ;; tfrag
|
|
(bucket-260 260)
|
|
|
|
(tex-l1-water 261) ;; tex
|
|
(merc-l1-water 262) ;; merc
|
|
(bucket-263 263) ;; mercneric
|
|
(tfrag-w-l1-water 264) ;; tfrag
|
|
(bucket-265 265)
|
|
(bucket-266 266)
|
|
(bucket-267 267)
|
|
(tfrag-ws-l1-water 268) ;; tfrag
|
|
(bucket-269 269)
|
|
|
|
(tex-l2-water 270) ;; tex
|
|
(merc-l2-water 271) ;; merc
|
|
(bucket-272 272) ;; mercneric
|
|
(tfrag-w-l2-water 273) ;; tfrag
|
|
(bucket-274 274)
|
|
(bucket-275 275)
|
|
(bucket-276 276)
|
|
(tfrag-ws-l2-water 277) ;; tfrag
|
|
(bucket-278 278)
|
|
|
|
(tex-l3-water 279) ;; tex
|
|
(merc-l3-water 280) ;; merc
|
|
(bucket-281 281) ;; mercneric
|
|
(tfrag-w-l3-water 282) ;; tfrag
|
|
(bucket-283 283)
|
|
(bucket-284 284)
|
|
(bucket-285 285)
|
|
(tfrag-ws-l3-water 286) ;; tfrag
|
|
(bucket-287 287)
|
|
|
|
(tex-l4-water 288) ;; tex
|
|
(merc-l4-water 289) ;; merc
|
|
(bucket-290 290) ;; mercneric
|
|
(tfrag-w-l4-water 291) ;; tfrag
|
|
(bucket-292 292)
|
|
(bucket-293 293)
|
|
(bucket-294 294)
|
|
(tfrag-ws-l4-water 295) ;; tfrag
|
|
(bucket-296 296)
|
|
|
|
(tex-l5-water 297) ;; tex
|
|
(merc-l5-water 298) ;; merc
|
|
(bucket-299 299) ;; mercneric
|
|
(tfrag-w-l5-water 300) ;; tfrag
|
|
(bucket-301 301)
|
|
(bucket-302 302)
|
|
(bucket-303 303)
|
|
(tfrag-ws-l5-water 304) ;; tfrag
|
|
(bucket-305 305)
|
|
|
|
(tex-lcom-water 306) ;; tex
|
|
(merc-lcom-water 307) ;; merc
|
|
(bucket-308 308) ;; mercneric
|
|
|
|
(tex-lcom-sky-post 309)
|
|
|
|
(bucket-310 310) ;; ocean
|
|
(bucket-311 311) ;; depth-cue
|
|
|
|
(tex-all-sprite 312)
|
|
(bucket-313 313) ;; particles
|
|
(bucket-314 314) ;; shadow
|
|
(bucket-315 315) ;; effects
|
|
(tex-all-warp 316) ;; tex
|
|
(bucket-317 317) ;; mercneric
|
|
|
|
(debug-no-zbuf1 318) ;; debug, no zbuf
|
|
(tex-all-map 319) ;; tex
|
|
(bucket-320 320) ;; hud
|
|
(screen-filter 321) ;; hud letterbox, no zbuf
|
|
(bucket-322 322) ;; hud
|
|
(bucket-323 323) ;; hud
|
|
(debug2 324) ;; debug
|
|
(debug-no-zbuf2 325) ;; debug
|
|
(debug3 326)
|
|
)
|
|
|
|
(defenum vu1-renderer-mask
|
|
:type uint64
|
|
:bitfield #t
|
|
(rn0)
|
|
(rn1)
|
|
(rn2)
|
|
(rn3)
|
|
(rn4)
|
|
(rn5)
|
|
(tfrag)
|
|
(rn7)
|
|
(rn8)
|
|
(rn9)
|
|
(rn10)
|
|
(rn11)
|
|
(rn12)
|
|
(merc)
|
|
(emerc)
|
|
(rn15)
|
|
(rn16)
|
|
(rn17)
|
|
(rn18)
|
|
(tfrag-trans)
|
|
(rn20)
|
|
(rn21)
|
|
(rn22)
|
|
(rn23)
|
|
(tfrag-water)
|
|
(rn25)
|
|
(rn26)
|
|
(rn27)
|
|
(rn28)
|
|
(rn29)
|
|
(rn30)
|
|
(rn31)
|
|
(rn32)
|
|
(rn33)
|
|
(rn34)
|
|
)
|
|
|
|
(defenum texture-enable-mask
|
|
:type uint64
|
|
:bitfield #t
|
|
(tfrag 0)
|
|
(pris 1)
|
|
(shrub 2)
|
|
(alpha 3)
|
|
(water 4)
|
|
(warp 5)
|
|
(sprite 6)
|
|
(map 7)
|
|
(sky 8)
|
|
(tex9 9)
|
|
(tex10 10)
|
|
(tex11 11)
|
|
(tex12 12)
|
|
(tex13 13)
|
|
(tex14 14)
|
|
(tex15 15)
|
|
(tex16 16)
|
|
)
|
|
|
|
(defenum texture-enable-mask-u32
|
|
:type uint32
|
|
:bitfield #t
|
|
:copy-entries texture-enable-mask
|
|
)
|
|
|
|
(defenum tpage-category
|
|
:type int8
|
|
(tfrag 0)
|
|
(pris 1)
|
|
(shrub 2)
|
|
(alpha 3)
|
|
(water 4)
|
|
(warp 5)
|
|
(pris2 6)
|
|
(sprite 7)
|
|
(map 8)
|
|
(sky 9)
|
|
)
|
|
|
|
(defenum tpage-category-u32
|
|
:type uint32
|
|
:copy-entries tpage-category
|
|
)
|
|
;; DECOMP BEGINS
|
|
|
|
|
|
;; foreground renderers will output DMA data to one of these "sinks".
|
|
(deftype dma-foreground-sink (basic)
|
|
;; which bucket to output to. determines draw order.
|
|
((bucket bucket-id :offset-assert 4)
|
|
;; what kind of textures will be uploaded at this time?
|
|
(foreground-texture-page tpage-category :offset-assert 8)
|
|
;; which level do we belong to?
|
|
(foreground-texture-level int8 :offset-assert 9)
|
|
;; if there are multiple buckets for the above categories, which bucket
|
|
;; (for example, jak 1 had separate merc/gmerc buckets in some categories)
|
|
(foreground-output-bucket int8 :offset-assert 10)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #xb
|
|
:flag-assert #x90000000b
|
|
)
|
|
|
|
;; the generic renderer is double buffered - while one fragment is uploading, another is rendering.
|
|
;; This double buffering even happens across models. So when preparing DMA for the next model,
|
|
;; the generic renderer must know the output (gifbuf) region of last fragment of the previous model,
|
|
;; and upload to the other buffer.
|
|
;; The generic renderer doesn't track this state internally, so we have some extra information
|
|
;; to add on to generic buckets.
|
|
(deftype generic-bucket-state (structure)
|
|
((gifbuf-adr uint32 :offset-assert 0)
|
|
(inbuf-adr uint32 :offset-assert 4)
|
|
)
|
|
:allow-misaligned
|
|
:method-count-assert 9
|
|
:size-assert #x8
|
|
:flag-assert #x900000008
|
|
)
|
|
|
|
;; as described above, the generic renderer needs a bit of extra state to double
|
|
;; buffer between models.
|
|
(deftype generic-dma-foreground-sink (dma-foreground-sink)
|
|
((state generic-bucket-state :inline :offset-assert 12)
|
|
)
|
|
:method-count-assert 9
|
|
:size-assert #x14
|
|
:flag-assert #x900000014
|
|
)
|
|
|