jak-project/goal_src/jak3/engine/gfx/vu1-user-h.gc
water111 13def9a8b2
Decompile foreground and bones (#3427)
Small fix to decompiler when the original compiler uses `ra` register.
This seems to happen in "normal" code very rarely - perhaps they
manually specified this in an `rlet`.

Start figuring out buckets/textures for Jak 3.

The foreground code is not yet modified for PC - I want to wait until
the game is running, since it is too hard to do it now.
2024-03-16 14:50:41 -04:00

805 lines
14 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: vu1-user-h.gc
;; name in dgo: vu1-user-h
;; dgos: GAME
;; +++tpage-category
(defenum tpage-category
:type int8
(tfrag 0) ;;
(pris 1)
(shrub 2)
(alpha 3)
(water 4)
(warp 5)
(pris2 6)
(sprite 7)
(hud 8) ;; or map?
(sky 9)
(hfrag 10)
)
;; ---tpage-category
;; +++bucket-id
;; <renderer>-l<level>-<tpage>
(defenum bucket-id
:type int32
(bucket0 0)
(bucket1 1)
(bucket2 2)
(bucket3 3) ;; blit?
(tex-lcom-sky-pre 4)
(bucket5 5) ;; sky
(bucket6 6) ;; ocean
(bucket7 7) ;; unknown new jak 3 texture upload, for all levels.
(bucket8 8) ;; hfrag
(bucket9 9) ;; hfrag
(tex-l0-tfrag 10) ;; texture
(bucket11 11) ;; tfrag
(bucket12 12) ;; tie
(bucket13 13) ;; tie
(bucket14 14) ;; tfrag
(bucket15 15) ;; tie
(bucket16 16) ;; tie
(merc-l0-tfrag 17) ;; merc
(emerc-l0-tfrag 18) ;; emerc
(gmerc-l0-tfrag 19) ;; generic
(bucket20 20) ;; tie
(gmerc2-l0-tfrag 21) ;; generic
(tex-l1-tfrag 22)
(bucket23 23)
(bucket24 24)
(bucket25 25)
(bucket26 26)
(bucket27 27)
(bucket28 28)
(merc-l1-tfrag 29)
(emerc-l1-tfrag 30)
(gmerc-l1-tfrag 31)
(bucket32 32)
(gmerc2-l1-tfrag 33)
(tex-l2-tfrag 34)
(bucket35 35)
(bucket36 36)
(bucket37 37)
(bucket38 38)
(bucket39 39)
(bucket40 40)
(merc-l2-tfrag 41)
(emerc-l2-tfrag 42)
(gmerc-l2-tfrag 43)
(bucket44 44)
(gmerc2-l2-tfrag 45)
(tex-l3-tfrag 46)
(bucket47 47)
(bucket48 48)
(bucket49 49)
(bucket50 50)
(bucket51 51)
(bucket52 52)
(merc-l3-tfrag 53)
(emerc-l3-tfrag 54)
(gmerc-l3-tfrag 55)
(bucket56 56)
(gmerc2-l3-tfrag 57)
(tex-l4-tfrag 58)
(bucket59 59)
(bucket60 60)
(bucket61 61)
(bucket62 62)
(bucket63 63)
(bucket64 64)
(merc-l4-tfrag 65)
(emerc-l4-tfrag 66)
(gmerc-l4-tfrag 67)
(bucket68 68)
(gmerc2-l4-tfrag 69)
(tex-l5-tfrag 70)
(bucket71 71)
(bucket72 72)
(bucket73 73)
(bucket74 74)
(bucket75 75)
(bucket76 76)
(merc-l5-tfrag 77)
(emerc-l5-tfrag 78)
(gmerc-l5-tfrag 79)
(bucket80 80)
(gmerc2-l5-tfrag 81)
(tex-l6-tfrag 82)
(bucket83 83)
(bucket84 84)
(bucket85 85)
(bucket86 86)
(bucket87 87)
(bucket88 88)
(merc-l6-tfrag 89)
(emerc-l6-tfrag 90)
(gmerc-l6-tfrag 91)
(bucket92 92)
(gmerc2-l6-tfrag 93)
(tex-l7-tfrag 94)
(bucket95 95)
(bucket96 96)
(bucket97 97)
(bucket98 98)
(bucket99 99)
(bucket100 100)
(merc-l7-tfrag 101)
(emerc-l7-tfrag 102)
(gmerc-l7-tfrag 103)
(bucket104 104)
(gmerc2-l7-tfrag 105)
(tex-l8-tfrag 106)
(bucket107 107)
(bucket108 108)
(bucket109 109)
(bucket110 110)
(bucket111 111)
(bucket112 112)
(merc-l8-tfrag 113)
(emerc-l8-tfrag 114)
(gmerc-l8-tfrag 115)
(bucket116 116)
(gmerc2-l8-tfrag 117)
(tex-l9-tfrag 118)
(bucket119 119)
(bucket120 120)
(bucket121 121)
(bucket122 122)
(bucket123 123)
(bucket124 124)
(merc-l9-tfrag 125)
(emerc-l9-tfrag 126)
(gmerc-l9-tfrag 127)
(bucket128 128)
(gmerc2-l9-tfrag 129)
(tex-l0-shrub 130)
(bucket131 131)
(bucket132 132)
(bucket133 133)
(bucket134 134)
(bucket135 135)
(merc-l0-shrub 136)
(emerc-l0-shrub 137)
(gmerc-l0-shrub 138)
(gmerc2-l0-shrub 139)
(tex-l1-shrub 140)
(bucket141 141)
(bucket142 142)
(bucket143 143)
(bucket144 144)
(bucket145 145)
(merc-l1-shrub 146)
(emerc-l1-shrub 147)
(gmerc-l1-shrub 148)
(gmerc2-l1-shrub 149)
(tex-l2-shrub 150)
(bucket151 151)
(bucket152 152)
(bucket153 153)
(bucket154 154)
(bucket155 155)
(merc-l2-shrub 156)
(emerc-l2-shrub 157)
(gmerc-l2-shrub 158)
(gmerc2-l2-shrub 159)
(tex-l3-shrub 160)
(bucket161 161)
(bucket162 162)
(bucket163 163)
(bucket164 164)
(bucket165 165)
(merc-l3-shrub 166)
(emerc-l3-shrub 167)
(gmerc-l3-shrub 168)
(gmerc2-l3-shrub 169)
(tex-l4-shrub 170)
(bucket171 171)
(bucket172 172)
(bucket173 173)
(bucket174 174)
(bucket175 175)
(merc-l4-shrub 176)
(emerc-l4-shrub 177)
(gmerc-l4-shrub 178)
(gmerc2-l4-shrub 179)
(tex-l5-shrub 180)
(bucket181 181)
(bucket182 182)
(bucket183 183)
(bucket184 184)
(bucket185 185)
(merc-l5-shrub 186)
(emerc-l5-shrub 187)
(gmerc-l5-shrub 188)
(gmerc2-l5-shrub 189)
(tex-l6-shrub 190)
(bucket191 191)
(bucket192 192)
(bucket193 193)
(bucket194 194)
(bucket195 195)
(merc-l6-shrub 196)
(emerc-l6-shrub 197)
(gmerc-l6-shrub 198)
(gmerc2-l6-shrub 199)
(tex-l7-shrub 200)
(bucket201 201)
(bucket202 202)
(bucket203 203)
(bucket204 204)
(bucket205 205)
(merc-l7-shrub 206)
(emerc-l7-shrub 207)
(gmerc-l7-shrub 208)
(gmerc2-l7-shrub 209)
(tex-l8-shrub 210)
(bucket211 211)
(bucket212 212)
(bucket213 213)
(bucket214 214)
(bucket215 215)
(merc-l8-shrub 216)
(emerc-l8-shrub 217)
(gmerc-l8-shrub 218)
(gmerc2-l8-shrub 219)
(tex-l9-shrub 220)
(bucket221 221)
(bucket222 222)
(bucket223 223)
(bucket224 224)
(bucket225 225)
(merc-l9-shrub 226)
(emerc-l9-shrub 227)
(gmerc-l9-shrub 228)
(gmerc2-l9-shrub 229)
(tex-l0-alpha 230)
(bucket231 231)
(bucket232 232)
(bucket233 233)
(merc-l0-alpha 234)
(emerc-l0-alpha 235)
(gmerc-l0-alpha 236)
(bucket237 237)
(bucket238 238)
(bucket239 239)
(gmerc2-l0-alpha 240)
(tex-l1-alpha 241)
(bucket242 242)
(bucket243 243)
(bucket244 244)
(merc-l1-alpha 245)
(emerc-l1-alpha 246)
(gmerc-l1-alpha 247)
(bucket248 248)
(bucket249 249)
(bucket250 250)
(gmerc2-l1-alpha 251)
(tex-l2-alpha 252)
(bucket253 253)
(bucket254 254)
(bucket255 255)
(merc-l2-alpha 256)
(emerc-l2-alpha 257)
(gmerc-l2-alpha 258)
(bucket259 259)
(bucket260 260)
(bucket261 261)
(gmerc2-l2-alpha 262)
(tex-l3-alpha 263)
(bucket264 264)
(bucket265 265)
(bucket266 266)
(merc-l3-alpha 267)
(emerc-l3-alpha 268)
(gmerc-l3-alpha 269)
(bucket270 270)
(bucket271 271)
(bucket272 272)
(gmerc2-l3-alpha 273)
(tex-l4-alpha 274)
(bucket275 275)
(bucket276 276)
(bucket277 277)
(merc-l4-alpha 278)
(emerc-l4-alpha 279)
(gmerc-l4-alpha 280)
(bucket281 281)
(bucket282 282)
(bucket283 283)
(gmerc2-l4-alpha 284)
(tex-l5-alpha 285)
(bucket286 286)
(bucket287 287)
(bucket288 288)
(merc-l5-alpha 289)
(emerc-l5-alpha 290)
(gmerc-l5-alpha 291)
(bucket292 292)
(bucket293 293)
(bucket294 294)
(gmerc2-l5-alpha 295)
(tex-l6-alpha 296)
(bucket297 297)
(bucket298 298)
(bucket299 299)
(merc-l6-alpha 300)
(emerc-l6-alpha 301)
(gmerc-l6-alpha 302)
(bucket303 303)
(bucket304 304)
(bucket305 305)
(gmerc2-l6-alpha 306)
(tex-l7-alpha 307)
(bucket308 308)
(bucket309 309)
(bucket310 310)
(merc-l7-alpha 311)
(emerc-l7-alpha 312)
(gmerc-l7-alpha 313)
(bucket314 314)
(bucket315 315)
(bucket316 316)
(gmerc2-l7-alpha 317)
(tex-l8-alpha 318)
(bucket319 319)
(bucket320 320)
(bucket321 321)
(merc-l8-alpha 322)
(emerc-l8-alpha 323)
(gmerc-l8-alpha 324)
(bucket325 325)
(bucket326 326)
(bucket327 327)
(gmerc2-l8-alpha 328)
(tex-l9-alpha 329)
(bucket330 330)
(bucket331 331)
(bucket332 332)
(merc-l9-alpha 333)
(emerc-l9-alpha 334)
(gmerc-l9-alpha 335)
(bucket336 336)
(bucket337 337)
(bucket338 338)
(gmerc2-l9-alpha 339)
(tex-lcom-tfrag 340)
(merc-lcom-tfrag 341)
(emerc-lcom-tfrag 342)
(gmerc-lcom-tfrag 343)
(gmerc2-lcom-tfrag 344)
(tex-lcom-shrub 345)
(merc-lcom-shrub 346)
(emerc-lcom-shrub 347)
(gmerc-lcom-shrub 348)
(gmerc2-lcom-shrub 349)
(shadow 350)
(tex-l0-pris 351)
(merc-l0-pris 352)
(emerc-l0-pris 353)
(gmerc-l0-pris 354)
(gmerc2-l0-pris 355)
(tex-l1-pris 356)
(merc-l1-pris 357)
(emerc-l1-pris 358)
(gmerc-l1-pris 359)
(gmerc2-l1-pris 360)
(tex-l2-pris 361)
(merc-l2-pris 362)
(emerc-l2-pris 363)
(gmerc-l2-pris 364)
(gmerc2-l2-pris 365)
(tex-l3-pris 366)
(merc-l3-pris 367)
(emerc-l3-pris 368)
(gmerc-l3-pris 369)
(gmerc2-l3-pris 370)
(tex-l4-pris 371)
(merc-l4-pris 372)
(emerc-l4-pris 373)
(gmerc-l4-pris 374)
(gmerc2-l4-pris 375)
(tex-l5-pris 376)
(merc-l5-pris 377)
(emerc-l5-pris 378)
(gmerc-l5-pris 379)
(gmerc2-l5-pris 380)
(tex-l6-pris 381)
(merc-l6-pris 382)
(emerc-l6-pris 383)
(gmerc-l6-pris 384)
(gmerc2-l6-pris 385)
(tex-l7-pris 386)
(merc-l7-pris 387)
(emerc-l7-pris 388)
(gmerc-l7-pris 389)
(gmerc2-l7-pris 390)
(tex-l8-pris 391)
(merc-l8-pris 392)
(emerc-l8-pris 393)
(gmerc-l8-pris 394)
(gmerc2-l8-pris 395)
(tex-l9-pris 396)
(merc-l9-pris 397)
(emerc-l9-pris 398)
(gmerc-l9-pris 399)
(gmerc2-l9-pris 400)
(tex-lcom-pris 401)
(merc-lcom-pris 402)
(emerc-lcom-pris 403)
(gmerc-lcom-pris 404)
(gmerc2-lcom-pris 405)
(tex-l0-pris2 406)
(merc-l0-pris2 407)
(emerc-l0-pris2 408)
(gmerc-l0-pris2 409)
(gmerc2-l0-pris2 410)
(tex-l1-pris2 411)
(merc-l1-pris2 412)
(emerc-l1-pris2 413)
(gmerc-l1-pris2 414)
(gmerc2-l1-pris2 415)
(tex-l2-pris2 416)
(merc-l2-pris2 417)
(emerc-l2-pris2 418)
(gmerc-l2-pris2 419)
(gmerc2-l2-pris2 420)
(tex-l3-pris2 421)
(merc-l3-pris2 422)
(emerc-l3-pris2 423)
(gmerc-l3-pris2 424)
(gmerc2-l3-pris2 425)
(tex-l4-pris2 426)
(merc-l4-pris2 427)
(emerc-l4-pris2 428)
(gmerc-l4-pris2 429)
(gmerc2-l4-pris2 430)
(tex-l5-pris2 431)
(merc-l5-pris2 432)
(emerc-l5-pris2 433)
(gmerc-l5-pris2 434)
(gmerc2-l5-pris2 435)
(tex-l6-pris2 436)
(merc-l6-pris2 437)
(emerc-l6-pris2 438)
(gmerc-l6-pris2 439)
(gmerc2-l6-pris2 440)
(tex-l7-pris2 441)
(merc-l7-pris2 442)
(emerc-l7-pris2 443)
(gmerc-l7-pris2 444)
(gmerc2-l7-pris2 445)
(tex-l8-pris2 446)
(merc-l8-pris2 447)
(emerc-l8-pris2 448)
(gmerc-l8-pris2 449)
(gmerc2-l8-pris2 450)
(tex-l9-pris2 451)
(merc-l9-pris2 452)
(emerc-l9-pris2 453)
(gmerc-l9-pris2 454)
(gmerc2-l9-pris2 455)
(tex-lcom-pris2 456)
(merc-lcom-pris2 457)
(emerc-lcom-pris2 458)
(gmerc-lcom-pris2 459)
(gmerc2-lcom-pris2 460)
(tex-lcom-sky-post 461)
(bucket462 462)
(tex-l0-water 463)
(merc-l0-water 464)
(gmerc-l0-water 465)
(bucket466 466)
(bucket467 467)
(bucket468 468)
(bucket469 469)
(bucket470 470)
(bucket471 471)
(gmerc2-l0-water 472)
(tex-l1-water 473)
(merc-l1-water 474)
(gmerc-l1-water 475)
(bucket476 476)
(bucket477 477)
(bucket478 478)
(bucket479 479)
(bucket480 480)
(bucket481 481)
(gmerc2-l1-water 482)
(tex-l2-water 483)
(merc-l2-water 484)
(gmerc-l2-water 485)
(bucket486 486)
(bucket487 487)
(bucket488 488)
(bucket489 489)
(bucket490 490)
(bucket491 491)
(gmerc2-l2-water 492)
(tex-l3-water 493)
(merc-l3-water 494)
(gmerc-l3-water 495)
(bucket496 496)
(bucket497 497)
(bucket498 498)
(bucket499 499)
(bucket500 500)
(bucket501 501)
(gmerc2-l3-water 502)
(tex-l4-water 503)
(merc-l4-water 504)
(gmerc-l4-water 505)
(bucket506 506)
(bucket507 507)
(bucket508 508)
(bucket509 509)
(bucket510 510)
(bucket511 511)
(gmerc2-l4-water 512)
(tex-l5-water 513)
(merc-l5-water 514)
(gmerc-l5-water 515)
(bucket516 516)
(bucket517 517)
(bucket518 518)
(bucket519 519)
(bucket520 520)
(bucket521 521)
(gmerc2-l5-water 522)
(tex-l6-water 523)
(merc-l6-water 524)
(gmerc-l6-water 525)
(bucket526 526)
(bucket527 527)
(bucket528 528)
(bucket529 529)
(bucket530 530)
(bucket531 531)
(gmerc2-l6-water 532)
(tex-l7-water 533)
(merc-l7-water 534)
(gmerc-l7-water 535)
(bucket536 536)
(bucket537 537)
(bucket538 538)
(bucket539 539)
(bucket540 540)
(bucket541 541)
(gmerc2-l7-water 542)
(tex-l8-water 543)
(merc-l8-water 544)
(gmerc-l8-water 545)
(bucket546 546)
(bucket547 547)
(bucket548 548)
(bucket549 549)
(bucket550 550)
(bucket551 551)
(gmerc2-l8-water 552)
(tex-l9-water 553)
(merc-l9-water 554)
(gmerc-l9-water 555)
(bucket556 556)
(bucket557 557)
(bucket558 558)
(bucket559 559)
(bucket560 560)
(bucket561 561)
(gmerc2-l9-water 562)
(tex-lcom-water 563)
(merc-lcom-water 564)
(gmerc-lcom-water 565)
(gmerc2-lcom-water 566) ;; default for prim
(bucket567 567)
(tex-sprite 568)
(generic-sprite-1 569) ;; ;prim
(particles 570)
(generic-sprite-2 571)
(shadow2 572)
(shadow3 573)
(generic-sprite-3 574)
(tex-warp 575)
(generic-warp 576)
(debug-no-zbuf1 577) ;; debug?
(tex-hud-hud-alpha 578)
(hud-draw-hud-alpha 579)
(tex-hud-pris2 580)
(hud-draw-pris2 581)
(bucket582 582)
(bucket583 583)
(debug-no-zbuf2 584)
(bucket585 585)
(bucket586 586)
)
;; ---bucket-id
(defenum bucket-id-16
:type int16
:copy-entries bucket-id
)
;; +++vu1-renderer-mask
;; TODO stolen from Jak 2
(defenum vu1-renderer-mask
:type uint64
:bitfield #t
(rn0)
(rn1)
(rn2)
(sky)
(ocean)
(ocean-wave)
(tfrag)
(tie)
(tie-envmap)
(tie-scissor)
(tie-envmap-scissor)
(tie-vanish)
(shrubbery)
(shrub-near)
(generic)
(merc)
(emerc)
(billboard)
(shrubbery-vanish)
(tfrag-trans)
(tie-scissor-trans)
(tie-trans)
(tie-envmap-trans)
(tie-envmap-scissor-trans)
(tfrag-water)
(tie-scissor-water)
(tie-water)
(tie-envmap-water)
(tie-envmap-scissor-water)
(sprite)
(shadow)
(rn31)
(rn32)
(rn33)
(depth-cue)
(rn35)
(rn36)
(rn37)
)
;; ---vu1-renderer-mask
;; +++tpage-category-u32
(defenum tpage-category-u32
:type uint32
:copy-entries tpage-category
)
;; ---tpage-category-u32
;; +++texture-enable-mask
(defenum texture-enable-mask
:type uint64
:bitfield #t
(tfrag 0)
(all-pris 1)
(shrub 2)
(alpha 3)
(water 4)
(warp 5)
(sprite 6)
(hud 7)
(sky 8)
(hfrag 9)
)
;; ---texture-enable-mask
;; +++texture-enable-mask-u32
(defenum texture-enable-mask-u32
:type uint32
:bitfield #t
:copy-entries texture-enable-mask
)
;; ---texture-enable-mask-u32
;; DECOMP BEGINS
(deftype dma-foreground-sink (basic)
"A specification for where a foreground renderer should output its DMA data."
((bucket bucket-id)
(foreground-texture-page tpage-category)
(foreground-texture-level int8)
(foreground-output-bucket int8)
)
)
(deftype generic-bucket-state (structure)
"The state of buffers for the generic renderer.
When generating generic DMA data, you must know the previous state
of the VU's memory to properly double-buffer the input and output data."
((gifbuf-adr uint32)
(inbuf-adr uint32)
)
:pack-me
)
(deftype generic-dma-foreground-sink (dma-foreground-sink)
"A specification for where a foreground generic renderer should output DMA data,
and the state of the VU memory buffers at the end of the bucket."
((state generic-bucket-state :inline)
)
)