1
0
mirror of https://github.com/XProger/OpenLara.git synced 2025-08-21 20:35:17 +02:00

fix additive blending flags for faces

This commit is contained in:
XProger
2019-08-10 22:46:33 +03:00
parent db1f06c117
commit e161791008

View File

@@ -1709,6 +1709,11 @@ namespace TR {
uint16 vertices[4]; uint16 vertices[4];
uint8 triangle:1, colored:1, water:1, flip:5; uint8 triangle:1, colored:1, water:1, flip:5;
Face() : triangle(0), colored(0), water(0), flip(0) {
flags.value = 0;
effects.value = 0;
}
static int cmp(const Face &a, const Face &b) { static int cmp(const Face &a, const Face &b) {
int aIndex = a.flags.texture; int aIndex = a.flags.texture;
int bIndex = b.flags.texture; int bIndex = b.flags.texture;
@@ -4040,7 +4045,6 @@ namespace TR {
ASSERT(fIndex < data.fCount); ASSERT(fIndex < data.fCount);
Face &f = data.faces[fIndex++]; Face &f = data.faces[fIndex++];
f.flags.value = 0;
switch (type) { switch (type) {
case TYPE_SPRITE : { case TYPE_SPRITE : {
Room::Data::Sprite &sprite = data.sprites[data.sCount++]; Room::Data::Sprite &sprite = data.sprites[data.sCount++];
@@ -4067,7 +4071,6 @@ namespace TR {
case TYPE_R_INVISIBLE : case TYPE_R_INVISIBLE :
case TYPE_R_TRANSP : case TYPE_R_TRANSP :
case TYPE_R_SOLID : case TYPE_R_SOLID :
f.triangle = false;
f.vertices[0] = (stream.readBE16() >> 4); f.vertices[0] = (stream.readBE16() >> 4);
f.vertices[1] = (stream.readBE16() >> 4); f.vertices[1] = (stream.readBE16() >> 4);
f.vertices[2] = (stream.readBE16() >> 4); f.vertices[2] = (stream.readBE16() >> 4);
@@ -4087,9 +4090,6 @@ namespace TR {
ASSERT(f.flags.value % 16 == 0); ASSERT(f.flags.value % 16 == 0);
ASSERT(f.flags.value / 16 < roomTexturesCount); ASSERT(f.flags.value / 16 < roomTexturesCount);
f.flags.value /= 16; f.flags.value /= 16;
f.water = false;
f.colored = false;
f.flip = false;
if (type == TYPE_R_TRANSP) if (type == TYPE_R_TRANSP)
roomTextures[f.flags.texture].attribute = 1; roomTextures[f.flags.texture].attribute = 1;
@@ -5031,13 +5031,9 @@ namespace TR {
if (!isRoomMesh && (version & (VER_TR4 | VER_TR5))) { if (!isRoomMesh && (version & (VER_TR4 | VER_TR5))) {
stream.read(f.effects.value); stream.read(f.effects.value);
} else {
f.effects.value = 0;
} }
f.colored = colored; f.colored = colored;
f.water = false;
f.flip = false;
} }
void readRoom(Stream &stream, int roomIndex) { void readRoom(Stream &stream, int roomIndex) {
@@ -5145,11 +5141,7 @@ namespace TR {
Face &f = d.faces[d.fCount++]; Face &f = d.faces[d.fCount++];
f.flags.texture = t.texture; f.flags.texture = t.texture;
f.flags.doubleSided = false;
f.triangle = true; f.triangle = true;
f.colored = false;
f.water = false;
f.flip = false;
f.vertices[0] = vStart + t.i0; f.vertices[0] = vStart + t.i0;
f.vertices[1] = vStart + t.i1; f.vertices[1] = vStart + t.i1;
f.vertices[2] = vStart + t.i2; f.vertices[2] = vStart + t.i2;
@@ -5181,11 +5173,6 @@ namespace TR {
Face &f = d.faces[d.fCount++]; Face &f = d.faces[d.fCount++];
f.flags.texture = texture; f.flags.texture = texture;
f.flags.doubleSided = false;
f.triangle = false;
f.colored = false;
f.water = false;
f.flip = false;
f.vertices[0] = vStart + r.i0; f.vertices[0] = vStart + r.i0;
f.vertices[1] = vStart + r.i1; f.vertices[1] = vStart + r.i1;
f.vertices[2] = vStart + r.i2; f.vertices[2] = vStart + r.i2;
@@ -5291,10 +5278,6 @@ namespace TR {
f.vertices[1] >>= 2; f.vertices[1] >>= 2;
f.vertices[2] >>= 2; f.vertices[2] >>= 2;
f.vertices[3] >>= 2; f.vertices[3] >>= 2;
f.triangle = false;
f.colored = false;
f.water = false;
f.flip = false;
} }
} else { } else {
for (int i = 0; i < d.rCount; i++) { for (int i = 0; i < d.rCount; i++) {
@@ -5316,9 +5299,6 @@ namespace TR {
f.vertices[2] >>= 2; f.vertices[2] >>= 2;
f.vertices[3] = 0; f.vertices[3] = 0;
f.triangle = true; f.triangle = true;
f.colored = false;
f.water = false;
f.flip = false;
} }
} else { } else {
for (int i = 0; i < d.tCount; i++) { for (int i = 0; i < d.tCount; i++) {
@@ -5620,9 +5600,6 @@ namespace TR {
for (int k = 0; k < count; k++) { for (int k = 0; k < count; k++) {
ASSERT(fIndex < mesh.fCount); ASSERT(fIndex < mesh.fCount);
Face &f = mesh.faces[fIndex++]; Face &f = mesh.faces[fIndex++];
f.water = false;
f.colored = false;
f.flip = 0;
switch (type) { switch (type) {
case TYPE_T_COLOR : f.colored = true; case TYPE_T_COLOR : f.colored = true;
case TYPE_T_TEX_UNK : case TYPE_T_TEX_UNK :
@@ -5678,7 +5655,6 @@ namespace TR {
case TYPE_R_FLIP_TRANSP : f.flip = 1; case TYPE_R_FLIP_TRANSP : f.flip = 1;
case TYPE_R_TEX : case TYPE_R_TEX :
case TYPE_R_TRANSP : case TYPE_R_TRANSP :
f.triangle = false;
f.vertices[0] = (stream.readBE16() >> 5); f.vertices[0] = (stream.readBE16() >> 5);
f.vertices[1] = (stream.readBE16() >> 5); f.vertices[1] = (stream.readBE16() >> 5);
f.vertices[2] = (stream.readBE16() >> 5); f.vertices[2] = (stream.readBE16() >> 5);
@@ -5892,12 +5868,8 @@ namespace TR {
stream.raw(&r, sizeof(r)); stream.raw(&r, sizeof(r));
Face &f = mesh.faces[idx++]; Face &f = mesh.faces[idx++];
f.flags.doubleSided = false;
f.flags.texture = (info & 0xFF) | (r.tex << 8); f.flags.texture = (info & 0xFF) | (r.tex << 8);
f.triangle = true; f.triangle = true;
f.colored = false;
f.water = false;
f.flip = false;
f.vertices[0] = r.i0; f.vertices[0] = r.i0;
f.vertices[1] = r.i1; f.vertices[1] = r.i1;
@@ -5913,12 +5885,7 @@ namespace TR {
stream.read(info); stream.read(info);
Face &f = mesh.faces[idx++]; Face &f = mesh.faces[idx++];
f.flags.doubleSided = false;
f.flags.texture = info & 0xFFFF; f.flags.texture = info & 0xFFFF;
f.triangle = false;
f.colored = false;
f.water = false;
f.flip = false;
struct { struct {
uint32 i0:8, i1:8, i2:8, i3:8; uint32 i0:8, i1:8, i2:8, i3:8;