mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-10-19 11:42:39 +00:00
e25b06b60e
All credits to zoinknoise, I found this at Romhacking: http://www.romhacking.net/hacks/5008/ "Thanks to the recent decompilation efforts, it’s now known that this texture is displayed in the wrong format by the game, resulting in black garbage pixels. Since video game smoke of this era was often depicted with black garbage pixels, the mistake went unnoticed for over two decades. This patch corrects the error by displaying the texture correctly as proper transparent smoke. It does not add any new art; the texture has been inside the ROM all along. At build time, this will compile the texture into IA16 format (correct) instead of RGBA16 (incorrect)."
51 lines
1.9 KiB
C
51 lines
1.9 KiB
C
// Burn Smoke
|
|
|
|
// 0x040217C0
|
|
static const Vtx burn_smoke_seg4_vertex_040217C0[] = {
|
|
{{{ -50, -50, 0}, 0, { 0, 992}, {0x14, 0x0a, 0x0a, 0xff}}},
|
|
{{{ 50, -50, 0}, 0, { 992, 992}, {0x14, 0x0a, 0x0a, 0xff}}},
|
|
{{{ 50, 50, 0}, 0, { 992, 0}, {0x14, 0x0a, 0x0a, 0xff}}},
|
|
{{{ -50, 50, 0}, 0, { 0, 0}, {0x14, 0x0a, 0x0a, 0xff}}},
|
|
};
|
|
|
|
// //! Wrong texture format. Called as rgba16, which makes the burn smoke appear
|
|
// as a transparent black burn smoke. Probably meant to show up as white-ish
|
|
// burn smoke, but mistakened for being intended as black smoke.
|
|
// 0x04021800
|
|
ALIGNED8 static const u8 burn_smoke_seg4_texture_04021800[] = {
|
|
#include "actors/burn_smoke/burn_smoke.ia16.inc.c"
|
|
};
|
|
|
|
// 0x04022000 - 0x04022028
|
|
const Gfx burn_smoke_seg4_dl_04022000[] = {
|
|
gsDPPipeSync(),
|
|
gsDPSetCombineMode(G_CC_MODULATERGBA, G_CC_MODULATERGBA),
|
|
gsSPClearGeometryMode(G_LIGHTING | G_CULL_BACK),
|
|
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
|
|
gsSPEndDisplayList(),
|
|
};
|
|
|
|
// 0x04022028 - 0x04022048
|
|
const Gfx burn_smoke_seg4_dl_04022028[] = {
|
|
gsSPVertex(burn_smoke_seg4_vertex_040217C0, 4, 0),
|
|
gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
|
gsSPEndDisplayList(),
|
|
};
|
|
|
|
// 0x04022048 - 0x04022070
|
|
const Gfx burn_smoke_seg4_dl_04022048[] = {
|
|
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
|
|
gsDPPipeSync(),
|
|
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
|
|
gsSPSetGeometryMode(G_LIGHTING),
|
|
gsSPEndDisplayList(),
|
|
};
|
|
|
|
// 0x04022070 - 0x040220C8
|
|
const Gfx burn_smoke_seg4_dl_04022070[] = {
|
|
gsSPDisplayList(burn_smoke_seg4_dl_04022000),
|
|
gsDPLoadTextureBlock(burn_smoke_seg4_texture_04021800, G_IM_FMT_IA, G_IM_SIZ_16b, 32, 32, 0, G_TX_CLAMP, G_TX_CLAMP, 5, 5, G_TX_NOLOD, G_TX_NOLOD),
|
|
gsSPDisplayList(burn_smoke_seg4_dl_04022028),
|
|
gsSPDisplayList(burn_smoke_seg4_dl_04022048),
|
|
gsSPEndDisplayList(),
|
|
};
|