sm64coopdx/actors/burn_smoke/model.inc.c
Víctor Díez García e25b06b60e
Correct texture format for burn smoke
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)."
2020-05-15 20:33:00 +02:00

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(),
};