Fix endianess for import of extended nodes

Thanks Michael Bäuerle!
This commit is contained in:
Fabian Greffrath 2020-04-23 23:25:51 +02:00
parent a60f8b4761
commit e5f7ae07c6

View File

@ -152,10 +152,15 @@ void P_LoadSegs_DeePBSP (int lump)
int side, linedef; int side, linedef;
line_t *ldef; line_t *ldef;
int vn1, vn2;
// [MB] 2020-04-22: Fix endianess for DeePBSDP V4 nodes
vn1 = LONG(ml->v1);
vn2 = LONG(ml->v2);
// [FG] extended nodes // [FG] extended nodes
li->v1 = &vertexes[ml->v1]; li->v1 = &vertexes[vn1];
li->v2 = &vertexes[ml->v2]; li->v2 = &vertexes[vn2];
li->angle = (SHORT(ml->angle))<<16; li->angle = (SHORT(ml->angle))<<16;
li->offset = (SHORT(ml->offset))<<16; li->offset = (SHORT(ml->offset))<<16;
@ -189,8 +194,9 @@ void P_LoadSubsectors_DeePBSP (int lump)
for (i=0; i<numsubsectors; i++) for (i=0; i<numsubsectors; i++)
{ {
subsectors[i].numlines = (int)data[i].numsegs; // [MB] 2020-04-22: Fix endianess for DeePBSDP V4 nodes
subsectors[i].firstline = (int)data[i].firstseg; subsectors[i].numlines = (unsigned short)SHORT(data[i].numsegs);
subsectors[i].firstline = LONG(data[i].firstseg);
} }
Z_Free (data); Z_Free (data);
@ -222,7 +228,8 @@ void P_LoadNodes_DeePBSP (int lump)
for (j=0 ; j<2 ; j++) for (j=0 ; j<2 ; j++)
{ {
int k; int k;
no->children[j] = (unsigned int)(mn->children[j]); // [MB] 2020-04-22: Fix endianess for DeePBSDP V4 nodes
no->children[j] = LONG(mn->children[j]);
for (k=0 ; k<4 ; k++) for (k=0 ; k<4 ; k++)
no->bbox[j][k] = SHORT(mn->bbox[j][k])<<FRACBITS; no->bbox[j][k] = SHORT(mn->bbox[j][k])<<FRACBITS;
@ -241,6 +248,8 @@ void P_LoadNodes_DeePBSP (int lump)
// - added support for compressed ZDBSP nodes // - added support for compressed ZDBSP nodes
// - added support for flipped levels // - added support for flipped levels
// [MB] 2020-04-22: Fix endianess for ZDoom extended nodes
void P_LoadNodes_ZDBSP (int lump, boolean compressed) void P_LoadNodes_ZDBSP (int lump, boolean compressed)
{ {
byte *data; byte *data;
@ -312,10 +321,10 @@ void P_LoadNodes_ZDBSP (int lump, boolean compressed)
// 1. Load new vertices added during node building // 1. Load new vertices added during node building
orgVerts = *((unsigned int*)data); orgVerts = LONG(*((unsigned int*)data));
data += sizeof(orgVerts); data += sizeof(orgVerts);
newVerts = *((unsigned int*)data); newVerts = LONG(*((unsigned int*)data));
data += sizeof(newVerts); data += sizeof(newVerts);
if (orgVerts + newVerts == (unsigned int)numvertexes) if (orgVerts + newVerts == (unsigned int)numvertexes)
@ -332,11 +341,11 @@ void P_LoadNodes_ZDBSP (int lump, boolean compressed)
for (i = 0; i < newVerts; i++) for (i = 0; i < newVerts; i++)
{ {
newvertarray[i + orgVerts].r_x = newvertarray[i + orgVerts].r_x =
newvertarray[i + orgVerts].x = *((unsigned int*)data); newvertarray[i + orgVerts].x = LONG(*((unsigned int*)data));
data += sizeof(newvertarray[0].x); data += sizeof(newvertarray[0].x);
newvertarray[i + orgVerts].r_y = newvertarray[i + orgVerts].r_y =
newvertarray[i + orgVerts].y = *((unsigned int*)data); newvertarray[i + orgVerts].y = LONG(*((unsigned int*)data));
data += sizeof(newvertarray[0].y); data += sizeof(newvertarray[0].y);
} }
@ -355,7 +364,7 @@ void P_LoadNodes_ZDBSP (int lump, boolean compressed)
// 2. Load subsectors // 2. Load subsectors
numSubs = *((unsigned int*)data); numSubs = LONG(*((unsigned int*)data));
data += sizeof(numSubs); data += sizeof(numSubs);
if (numSubs < 1) if (numSubs < 1)
@ -369,15 +378,15 @@ void P_LoadNodes_ZDBSP (int lump, boolean compressed)
mapsubsector_zdbsp_t *mseg = (mapsubsector_zdbsp_t*) data + i; mapsubsector_zdbsp_t *mseg = (mapsubsector_zdbsp_t*) data + i;
subsectors[i].firstline = currSeg; subsectors[i].firstline = currSeg;
subsectors[i].numlines = mseg->numsegs; subsectors[i].numlines = LONG(mseg->numsegs);
currSeg += mseg->numsegs; currSeg += LONG(mseg->numsegs);
} }
data += numsubsectors * sizeof(mapsubsector_zdbsp_t); data += numsubsectors * sizeof(mapsubsector_zdbsp_t);
// 3. Load segs // 3. Load segs
numSegs = *((unsigned int*)data); numSegs = LONG(*((unsigned int*)data));
data += sizeof(numSegs); data += sizeof(numSegs);
// The number of stored segs should match the number of segs used by subsectors // The number of stored segs should match the number of segs used by subsectors
@ -396,9 +405,12 @@ void P_LoadNodes_ZDBSP (int lump, boolean compressed)
unsigned char side; unsigned char side;
seg_t *li = segs + i; seg_t *li = segs + i;
mapseg_zdbsp_t *ml = (mapseg_zdbsp_t *) data + i; mapseg_zdbsp_t *ml = (mapseg_zdbsp_t *) data + i;
unsigned int v1, v2;
li->v1 = &vertexes[ml->v1]; v1 = LONG(ml->v1);
li->v2 = &vertexes[ml->v2]; v2 = LONG(ml->v2);
li->v1 = &vertexes[v1];
li->v2 = &vertexes[v2];
linedef = (unsigned short)SHORT(ml->linedef); linedef = (unsigned short)SHORT(ml->linedef);
ldef = &lines[linedef]; ldef = &lines[linedef];
@ -430,7 +442,7 @@ void P_LoadNodes_ZDBSP (int lump, boolean compressed)
// 4. Load nodes // 4. Load nodes
numNodes = *((unsigned int*)data); numNodes = LONG(*((unsigned int*)data));
data += sizeof(numNodes); data += sizeof(numNodes);
numnodes = numNodes; numnodes = numNodes;
@ -449,7 +461,7 @@ void P_LoadNodes_ZDBSP (int lump, boolean compressed)
for (j = 0; j < 2; j++) for (j = 0; j < 2; j++)
{ {
no->children[j] = (unsigned int)(mn->children[j]); no->children[j] = LONG(mn->children[j]);
for (k = 0; k < 4; k++) for (k = 0; k < 4; k++)
no->bbox[j][k] = SHORT(mn->bbox[j][k])<<FRACBITS; no->bbox[j][k] = SHORT(mn->bbox[j][k])<<FRACBITS;