Serialize new side fields

This commit is contained in:
Lactozilla 2023-11-23 21:56:18 -03:00
parent ca4f7cc508
commit 41cacd783b
6 changed files with 232 additions and 145 deletions

View file

@ -1216,8 +1216,8 @@ static void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom
if ((worldlowslope > worldbottomslope || worldlow > worldbottom) && gl_bottomtexture) if ((worldlowslope > worldbottomslope || worldlow > worldbottom) && gl_bottomtexture)
{ {
grTex = HWR_GetTexture(gl_bottomtexture); grTex = HWR_GetTexture(gl_bottomtexture);
xscale = FixedToFloat(gl_sidedef->scalex_bot); xscale = FixedToFloat(gl_sidedef->scalex_bottom);
yscale = FixedToFloat(gl_sidedef->scaley_bot); yscale = FixedToFloat(gl_sidedef->scaley_bottom);
// PEGGING // PEGGING
if (!(gl_linedef->flags & ML_DONTPEGBOTTOM)) if (!(gl_linedef->flags & ML_DONTPEGBOTTOM))
@ -1229,15 +1229,15 @@ static void HWR_ProcessSeg(void) // Sort of like GLWall::Process in GZDoom
texturevpeg *= yscale; texturevpeg *= yscale;
texturevpeg += gl_sidedef->rowoffset + gl_sidedef->offsety_bot; texturevpeg += gl_sidedef->rowoffset + gl_sidedef->offsety_bottom;
// This is so that it doesn't overflow and screw up the wall, it doesn't need to go higher than the texture's height anyway // This is so that it doesn't overflow and screw up the wall, it doesn't need to go higher than the texture's height anyway
texturevpeg %= FixedDiv(textureheight[gl_bottomtexture], gl_sidedef->scaley_bot); texturevpeg %= FixedDiv(textureheight[gl_bottomtexture], gl_sidedef->scaley_bottom);
wallVerts[3].t = wallVerts[2].t = texturevpeg * grTex->scaleY; wallVerts[3].t = wallVerts[2].t = texturevpeg * grTex->scaleY;
wallVerts[0].t = wallVerts[1].t = (texturevpeg + (gl_backsector->floorheight - gl_frontsector->floorheight) * yscale) * grTex->scaleY; wallVerts[0].t = wallVerts[1].t = (texturevpeg + (gl_backsector->floorheight - gl_frontsector->floorheight) * yscale) * grTex->scaleY;
wallVerts[0].s = wallVerts[3].s = ((cliplow * xscale) + gl_sidedef->offsetx_bot) * grTex->scaleX; wallVerts[0].s = wallVerts[3].s = ((cliplow * xscale) + gl_sidedef->offsetx_bottom) * grTex->scaleX;
wallVerts[2].s = wallVerts[1].s = ((cliphigh * xscale) + gl_sidedef->offsetx_bot) * grTex->scaleX; wallVerts[2].s = wallVerts[1].s = ((cliphigh * xscale) + gl_sidedef->offsetx_bottom) * grTex->scaleX;
// Adjust t value for sloped walls // Adjust t value for sloped walls
if (!(gl_linedef->flags & ML_SKEWTD)) if (!(gl_linedef->flags & ML_SKEWTD))

View file

@ -1218,10 +1218,10 @@ static int side_get(lua_State *L)
lua_pushfixed(L, side->offsety_mid); lua_pushfixed(L, side->offsety_mid);
return 1; return 1;
case side_offsetx_bot: case side_offsetx_bot:
lua_pushfixed(L, side->offsetx_bot); lua_pushfixed(L, side->offsetx_bottom);
return 1; return 1;
case side_offsety_bot: case side_offsety_bot:
lua_pushfixed(L, side->offsety_bot); lua_pushfixed(L, side->offsety_bottom);
return 1; return 1;
case side_scalex_top: case side_scalex_top:
lua_pushfixed(L, side->scalex_top); lua_pushfixed(L, side->scalex_top);
@ -1236,10 +1236,10 @@ static int side_get(lua_State *L)
lua_pushfixed(L, side->scaley_mid); lua_pushfixed(L, side->scaley_mid);
return 1; return 1;
case side_scalex_bot: case side_scalex_bot:
lua_pushfixed(L, side->scalex_bot); lua_pushfixed(L, side->scalex_bottom);
return 1; return 1;
case side_scaley_bot: case side_scaley_bot:
lua_pushfixed(L, side->scaley_bot); lua_pushfixed(L, side->scaley_bottom);
return 1; return 1;
case side_toptexture: case side_toptexture:
lua_pushinteger(L, side->toptexture); lua_pushinteger(L, side->toptexture);
@ -1324,10 +1324,10 @@ static int side_set(lua_State *L)
side->offsety_mid = luaL_checkfixed(L, 3); side->offsety_mid = luaL_checkfixed(L, 3);
break; break;
case side_offsetx_bot: case side_offsetx_bot:
side->offsetx_bot = luaL_checkfixed(L, 3); side->offsetx_bottom = luaL_checkfixed(L, 3);
break; break;
case side_offsety_bot: case side_offsety_bot:
side->offsety_bot = luaL_checkfixed(L, 3); side->offsety_bottom = luaL_checkfixed(L, 3);
break; break;
case side_scalex_top: case side_scalex_top:
side->scalex_top = luaL_checkfixed(L, 3); side->scalex_top = luaL_checkfixed(L, 3);
@ -1342,10 +1342,10 @@ static int side_set(lua_State *L)
side->scaley_mid = luaL_checkfixed(L, 3); side->scaley_mid = luaL_checkfixed(L, 3);
break; break;
case side_scalex_bot: case side_scalex_bot:
side->scalex_bot = luaL_checkfixed(L, 3); side->scalex_bottom = luaL_checkfixed(L, 3);
break; break;
case side_scaley_bot: case side_scaley_bot:
side->scaley_bot = luaL_checkfixed(L, 3); side->scaley_bottom = luaL_checkfixed(L, 3);
break; break;
case side_toptexture: case side_toptexture:
side->toptexture = luaL_checkinteger(L, 3); side->toptexture = luaL_checkinteger(L, 3);

View file

@ -868,23 +868,42 @@ static void P_NetUnArchiveWaypoints(void)
#define SD_TRIGGERER 0x04 #define SD_TRIGGERER 0x04
#define SD_GRAVITY 0x08 #define SD_GRAVITY 0x08
#define LD_FLAG 0x01 #define LD_FLAG 0x01
#define LD_SPECIAL 0x02 #define LD_SPECIAL 0x02
#define LD_CLLCOUNT 0x04 #define LD_CLLCOUNT 0x04
#define LD_S1TEXOFF 0x08 #define LD_ARGS 0x08
#define LD_S1TOPTEX 0x10 #define LD_STRINGARGS 0x10
#define LD_S1BOTTEX 0x20 #define LD_EXECUTORDELAY 0x20
#define LD_S1MIDTEX 0x40 #define LD_SIDE1 0x40
#define LD_DIFF2 0x80 #define LD_SIDE2 0x80
// diff2 flags // sidedef flags
#define LD_S2TEXOFF 0x01 enum
#define LD_S2TOPTEX 0x02 {
#define LD_S2BOTTEX 0x04 LD_SDTEXOFFX = 1,
#define LD_S2MIDTEX 0x08 LD_SDTEXOFFY = 1<<1,
#define LD_ARGS 0x10 LD_SDTOPTEX = 1<<2,
#define LD_STRINGARGS 0x20 LD_SDBOTTEX = 1<<3,
#define LD_EXECUTORDELAY 0x40 LD_SDMIDTEX = 1<<4,
LD_SDTOPOFFX = 1<<5,
LD_SDTOPOFFY = 1<<6,
LD_SDMIDOFFX = 1<<7,
LD_SDMIDOFFY = 1<<8,
LD_SDBOTOFFX = 1<<9,
LD_SDBOTOFFY = 1<<10,
LD_SDTOPSCALEX = 1<<11,
LD_SDTOPSCALEY = 1<<12,
LD_SDMIDSCALEX = 1<<13,
LD_SDMIDSCALEY = 1<<14,
LD_SDBOTSCALEX = 1<<15,
LD_SDBOTSCALEY = 1<<16,
LD_SDLIGHT = 1<<17,
LD_SDTOPLIGHT = 1<<18,
LD_SDMIDLIGHT = 1<<19,
LD_SDBOTLIGHT = 1<<20,
LD_SDREPEATCNT = 1<<21,
LD_SDFLAGS = 1<<22
};
static boolean P_AreArgsEqual(const line_t *li, const line_t *spawnli) static boolean P_AreArgsEqual(const line_t *li, const line_t *spawnli)
{ {
@ -1271,18 +1290,103 @@ static void UnArchiveSectors(void)
} }
} }
static UINT32 GetSideDiff(const side_t *si, const side_t *spawnsi)
{
UINT32 diff = 0;
if (si->textureoffset != spawnsi->textureoffset)
diff |= LD_SDTEXOFFX;
if (si->rowoffset != spawnsi->rowoffset)
diff |= LD_SDTEXOFFY;
//SoM: 4/1/2000: Some textures are colormaps. Don't worry about invalid textures.
if (si->toptexture != spawnsi->toptexture)
diff |= LD_SDTOPTEX;
if (si->bottomtexture != spawnsi->bottomtexture)
diff |= LD_SDBOTTEX;
if (si->midtexture != spawnsi->midtexture)
diff |= LD_SDMIDTEX;
if (si->offsetx_top != spawnsi->offsetx_top)
diff |= LD_SDTOPOFFX;
if (si->offsetx_mid != spawnsi->offsetx_mid)
diff |= LD_SDMIDOFFX;
if (si->offsetx_bottom != spawnsi->offsetx_bottom)
diff |= LD_SDBOTOFFX;
if (si->offsety_top != spawnsi->offsety_top)
diff |= LD_SDTOPOFFY;
if (si->offsety_mid != spawnsi->offsety_mid)
diff |= LD_SDMIDOFFY;
if (si->offsety_bottom != spawnsi->offsety_bottom)
diff |= LD_SDBOTOFFY;
if (si->scalex_top != spawnsi->scalex_top)
diff |= LD_SDTOPSCALEX;
if (si->scalex_mid != spawnsi->scalex_mid)
diff |= LD_SDMIDSCALEX;
if (si->scalex_bottom != spawnsi->scalex_bottom)
diff |= LD_SDBOTSCALEX;
if (si->scaley_top != spawnsi->scaley_top)
diff |= LD_SDTOPSCALEY;
if (si->scaley_mid != spawnsi->scaley_mid)
diff |= LD_SDMIDSCALEY;
if (si->scaley_bottom != spawnsi->scaley_bottom)
diff |= LD_SDBOTSCALEY;
if (si->repeatcnt != spawnsi->repeatcnt)
diff |= LD_SDREPEATCNT;
return diff;
}
static void ArchiveSide(const side_t *si, UINT32 diff)
{
WRITEUINT32(save_p, diff);
if (diff & LD_SDTEXOFFX)
WRITEFIXED(save_p, si->textureoffset);
if (diff & LD_SDTEXOFFY)
WRITEFIXED(save_p, si->rowoffset);
if (diff & LD_SDTOPTEX)
WRITEINT32(save_p, si->toptexture);
if (diff & LD_SDBOTTEX)
WRITEINT32(save_p, si->bottomtexture);
if (diff & LD_SDMIDTEX)
WRITEINT32(save_p, si->midtexture);
if (diff & LD_SDTOPOFFX)
WRITEFIXED(save_p, si->offsetx_top);
if (diff & LD_SDMIDOFFX)
WRITEFIXED(save_p, si->offsetx_mid);
if (diff & LD_SDBOTOFFX)
WRITEFIXED(save_p, si->offsetx_bottom);
if (diff & LD_SDTOPOFFY)
WRITEFIXED(save_p, si->offsety_top);
if (diff & LD_SDMIDOFFY)
WRITEFIXED(save_p, si->offsety_mid);
if (diff & LD_SDBOTOFFY)
WRITEFIXED(save_p, si->offsety_bottom);
if (diff & LD_SDTOPSCALEX)
WRITEFIXED(save_p, si->scalex_top);
if (diff & LD_SDMIDSCALEX)
WRITEFIXED(save_p, si->scalex_mid);
if (diff & LD_SDBOTSCALEX)
WRITEFIXED(save_p, si->scalex_bottom);
if (diff & LD_SDTOPSCALEY)
WRITEFIXED(save_p, si->scaley_top);
if (diff & LD_SDMIDSCALEY)
WRITEFIXED(save_p, si->scaley_mid);
if (diff & LD_SDBOTSCALEY)
WRITEFIXED(save_p, si->scaley_bottom);
if (diff & LD_SDREPEATCNT)
WRITEINT16(save_p, si->repeatcnt);
}
static void ArchiveLines(void) static void ArchiveLines(void)
{ {
size_t i; size_t i;
const line_t *li = lines; const line_t *li = lines;
const line_t *spawnli = spawnlines; const line_t *spawnli = spawnlines;
const side_t *si; UINT8 diff;
const side_t *spawnsi; UINT32 diff2;
UINT8 diff, diff2; // no diff3 UINT32 diff3;
for (i = 0; i < numlines; i++, spawnli++, li++) for (i = 0; i < numlines; i++, spawnli++, li++)
{ {
diff = diff2 = 0; diff = diff2 = diff3 = 0;
if (li->special != spawnli->special) if (li->special != spawnli->special)
diff |= LD_SPECIAL; diff |= LD_SPECIAL;
@ -1291,84 +1395,44 @@ static void ArchiveLines(void)
diff |= LD_CLLCOUNT; diff |= LD_CLLCOUNT;
if (!P_AreArgsEqual(li, spawnli)) if (!P_AreArgsEqual(li, spawnli))
diff2 |= LD_ARGS; diff |= LD_ARGS;
if (!P_AreStringArgsEqual(li, spawnli)) if (!P_AreStringArgsEqual(li, spawnli))
diff2 |= LD_STRINGARGS; diff |= LD_STRINGARGS;
if (li->executordelay != spawnli->executordelay) if (li->executordelay != spawnli->executordelay)
diff2 |= LD_EXECUTORDELAY; diff |= LD_EXECUTORDELAY;
if (li->sidenum[0] != 0xffff) if (li->sidenum[0] != 0xffff)
{ {
si = &sides[li->sidenum[0]]; diff2 = GetSideDiff(&sides[li->sidenum[0]], &spawnsides[li->sidenum[0]]);
spawnsi = &spawnsides[li->sidenum[0]]; if (diff2)
if (si->textureoffset != spawnsi->textureoffset) diff |= LD_SIDE1;
diff |= LD_S1TEXOFF;
//SoM: 4/1/2000: Some textures are colormaps. Don't worry about invalid textures.
if (si->toptexture != spawnsi->toptexture)
diff |= LD_S1TOPTEX;
if (si->bottomtexture != spawnsi->bottomtexture)
diff |= LD_S1BOTTEX;
if (si->midtexture != spawnsi->midtexture)
diff |= LD_S1MIDTEX;
} }
if (li->sidenum[1] != 0xffff) if (li->sidenum[1] != 0xffff)
{ {
si = &sides[li->sidenum[1]]; diff3 = GetSideDiff(&sides[li->sidenum[1]], &spawnsides[li->sidenum[1]]);
spawnsi = &spawnsides[li->sidenum[1]]; if (diff3)
if (si->textureoffset != spawnsi->textureoffset) diff |= LD_SIDE2;
diff2 |= LD_S2TEXOFF;
if (si->toptexture != spawnsi->toptexture)
diff2 |= LD_S2TOPTEX;
if (si->bottomtexture != spawnsi->bottomtexture)
diff2 |= LD_S2BOTTEX;
if (si->midtexture != spawnsi->midtexture)
diff2 |= LD_S2MIDTEX;
} }
if (diff2)
diff |= LD_DIFF2;
if (diff) if (diff)
{ {
WRITEINT16(save_p, i); WRITEINT16(save_p, i);
WRITEUINT8(save_p, diff); WRITEUINT8(save_p, diff);
if (diff & LD_DIFF2)
WRITEUINT8(save_p, diff2);
if (diff & LD_FLAG) if (diff & LD_FLAG)
WRITEINT16(save_p, li->flags); WRITEINT16(save_p, li->flags);
if (diff & LD_SPECIAL) if (diff & LD_SPECIAL)
WRITEINT16(save_p, li->special); WRITEINT16(save_p, li->special);
if (diff & LD_CLLCOUNT) if (diff & LD_CLLCOUNT)
WRITEINT16(save_p, li->callcount); WRITEINT16(save_p, li->callcount);
if (diff & LD_ARGS)
si = &sides[li->sidenum[0]];
if (diff & LD_S1TEXOFF)
WRITEFIXED(save_p, si->textureoffset);
if (diff & LD_S1TOPTEX)
WRITEINT32(save_p, si->toptexture);
if (diff & LD_S1BOTTEX)
WRITEINT32(save_p, si->bottomtexture);
if (diff & LD_S1MIDTEX)
WRITEINT32(save_p, si->midtexture);
si = &sides[li->sidenum[1]];
if (diff2 & LD_S2TEXOFF)
WRITEFIXED(save_p, si->textureoffset);
if (diff2 & LD_S2TOPTEX)
WRITEINT32(save_p, si->toptexture);
if (diff2 & LD_S2BOTTEX)
WRITEINT32(save_p, si->bottomtexture);
if (diff2 & LD_S2MIDTEX)
WRITEINT32(save_p, si->midtexture);
if (diff2 & LD_ARGS)
{ {
UINT8 j; UINT8 j;
for (j = 0; j < NUMLINEARGS; j++) for (j = 0; j < NUMLINEARGS; j++)
WRITEINT32(save_p, li->args[j]); WRITEINT32(save_p, li->args[j]);
} }
if (diff2 & LD_STRINGARGS) if (diff & LD_STRINGARGS)
{ {
UINT8 j; UINT8 j;
for (j = 0; j < NUMLINESTRINGARGS; j++) for (j = 0; j < NUMLINESTRINGARGS; j++)
@ -1387,19 +1451,64 @@ static void ArchiveLines(void)
WRITECHAR(save_p, li->stringargs[j][k]); WRITECHAR(save_p, li->stringargs[j][k]);
} }
} }
if (diff2 & LD_EXECUTORDELAY) if (diff & LD_EXECUTORDELAY)
WRITEINT32(save_p, li->executordelay); WRITEINT32(save_p, li->executordelay);
if (diff & LD_SIDE1)
ArchiveSide(&sides[li->sidenum[0]], diff2);
if (diff & LD_SIDE2)
ArchiveSide(&sides[li->sidenum[1]], diff3);
} }
} }
WRITEUINT16(save_p, 0xffff); WRITEUINT16(save_p, 0xffff);
} }
static void UnArchiveSide(side_t *si)
{
UINT32 diff = READUINT32(save_p);
if (diff & LD_SDTEXOFFX)
si->textureoffset = READFIXED(save_p);
if (diff & LD_SDTEXOFFY)
si->rowoffset = READFIXED(save_p);
if (diff & LD_SDTOPTEX)
si->toptexture = READINT32(save_p);
if (diff & LD_SDBOTTEX)
si->bottomtexture = READINT32(save_p);
if (diff & LD_SDMIDTEX)
si->midtexture = READINT32(save_p);
if (diff & LD_SDTOPOFFX)
si->offsetx_top = READFIXED(save_p);
if (diff & LD_SDMIDOFFX)
si->offsetx_mid = READFIXED(save_p);
if (diff & LD_SDBOTOFFX)
si->offsetx_bottom = READFIXED(save_p);
if (diff & LD_SDTOPOFFY)
si->offsety_top = READFIXED(save_p);
if (diff & LD_SDMIDOFFY)
si->offsety_mid = READFIXED(save_p);
if (diff & LD_SDBOTOFFY)
si->offsety_bottom = READFIXED(save_p);
if (diff & LD_SDTOPSCALEX)
si->scalex_top = READFIXED(save_p);
if (diff & LD_SDMIDSCALEX)
si->scalex_mid = READFIXED(save_p);
if (diff & LD_SDBOTSCALEX)
si->scalex_bottom = READFIXED(save_p);
if (diff & LD_SDTOPSCALEY)
si->scaley_top = READFIXED(save_p);
if (diff & LD_SDMIDSCALEY)
si->scaley_mid = READFIXED(save_p);
if (diff & LD_SDBOTSCALEY)
si->scaley_bottom = READFIXED(save_p);
if (diff & LD_SDREPEATCNT)
si->repeatcnt = READINT16(save_p);
}
static void UnArchiveLines(void) static void UnArchiveLines(void)
{ {
UINT16 i; UINT16 i;
line_t *li; line_t *li;
side_t *si; UINT8 diff;
UINT8 diff, diff2; // no diff3
for (;;) for (;;)
{ {
@ -1413,44 +1522,19 @@ static void UnArchiveLines(void)
diff = READUINT8(save_p); diff = READUINT8(save_p);
li = &lines[i]; li = &lines[i];
if (diff & LD_DIFF2)
diff2 = READUINT8(save_p);
else
diff2 = 0;
if (diff & LD_FLAG) if (diff & LD_FLAG)
li->flags = READINT16(save_p); li->flags = READINT16(save_p);
if (diff & LD_SPECIAL) if (diff & LD_SPECIAL)
li->special = READINT16(save_p); li->special = READINT16(save_p);
if (diff & LD_CLLCOUNT) if (diff & LD_CLLCOUNT)
li->callcount = READINT16(save_p); li->callcount = READINT16(save_p);
if (diff & LD_ARGS)
si = &sides[li->sidenum[0]];
if (diff & LD_S1TEXOFF)
si->textureoffset = READFIXED(save_p);
if (diff & LD_S1TOPTEX)
si->toptexture = READINT32(save_p);
if (diff & LD_S1BOTTEX)
si->bottomtexture = READINT32(save_p);
if (diff & LD_S1MIDTEX)
si->midtexture = READINT32(save_p);
si = &sides[li->sidenum[1]];
if (diff2 & LD_S2TEXOFF)
si->textureoffset = READFIXED(save_p);
if (diff2 & LD_S2TOPTEX)
si->toptexture = READINT32(save_p);
if (diff2 & LD_S2BOTTEX)
si->bottomtexture = READINT32(save_p);
if (diff2 & LD_S2MIDTEX)
si->midtexture = READINT32(save_p);
if (diff2 & LD_ARGS)
{ {
UINT8 j; UINT8 j;
for (j = 0; j < NUMLINEARGS; j++) for (j = 0; j < NUMLINEARGS; j++)
li->args[j] = READINT32(save_p); li->args[j] = READINT32(save_p);
} }
if (diff2 & LD_STRINGARGS) if (diff & LD_STRINGARGS)
{ {
UINT8 j; UINT8 j;
for (j = 0; j < NUMLINESTRINGARGS; j++) for (j = 0; j < NUMLINESTRINGARGS; j++)
@ -1471,9 +1555,12 @@ static void UnArchiveLines(void)
li->stringargs[j][len] = '\0'; li->stringargs[j][len] = '\0';
} }
} }
if (diff2 & LD_EXECUTORDELAY) if (diff & LD_EXECUTORDELAY)
li->executordelay = READINT32(save_p); li->executordelay = READINT32(save_p);
if (diff & LD_SIDE1)
UnArchiveSide(&sides[li->sidenum[0]]);
if (diff & LD_SIDE2)
UnArchiveSide(&sides[li->sidenum[1]]);
} }
} }

View file

@ -1347,11 +1347,11 @@ static void P_LoadSidedefs(UINT8 *data)
} }
sd->rowoffset = SHORT(msd->rowoffset)<<FRACBITS; sd->rowoffset = SHORT(msd->rowoffset)<<FRACBITS;
sd->offsetx_top = sd->offsetx_mid = sd->offsetx_bot = 0; sd->offsetx_top = sd->offsetx_mid = sd->offsetx_bottom = 0;
sd->offsety_top = sd->offsety_mid = sd->offsety_bot = 0; sd->offsety_top = sd->offsety_mid = sd->offsety_bottom = 0;
sd->scalex_top = sd->scalex_mid = sd->scalex_bot = FRACUNIT; sd->scalex_top = sd->scalex_mid = sd->scalex_bottom = FRACUNIT;
sd->scaley_top = sd->scaley_mid = sd->scaley_bot = FRACUNIT; sd->scaley_top = sd->scaley_mid = sd->scaley_bottom = FRACUNIT;
P_SetSidedefSector(i, SHORT(msd->sector)); P_SetSidedefSector(i, SHORT(msd->sector));
@ -1886,25 +1886,25 @@ static void ParseTextmapSidedefParameter(UINT32 i, const char *param, const char
else if (fastcmp(param, "offsetx_mid")) else if (fastcmp(param, "offsetx_mid"))
sides[i].offsetx_mid = atol(val) << FRACBITS; sides[i].offsetx_mid = atol(val) << FRACBITS;
else if (fastcmp(param, "offsetx_bottom")) else if (fastcmp(param, "offsetx_bottom"))
sides[i].offsetx_bot = atol(val) << FRACBITS; sides[i].offsetx_bottom = atol(val) << FRACBITS;
else if (fastcmp(param, "offsety_top")) else if (fastcmp(param, "offsety_top"))
sides[i].offsety_top = atol(val) << FRACBITS; sides[i].offsety_top = atol(val) << FRACBITS;
else if (fastcmp(param, "offsety_mid")) else if (fastcmp(param, "offsety_mid"))
sides[i].offsety_mid = atol(val) << FRACBITS; sides[i].offsety_mid = atol(val) << FRACBITS;
else if (fastcmp(param, "offsety_bottom")) else if (fastcmp(param, "offsety_bottom"))
sides[i].offsety_bot = atol(val) << FRACBITS; sides[i].offsety_bottom = atol(val) << FRACBITS;
else if (fastcmp(param, "scalex_top")) else if (fastcmp(param, "scalex_top"))
sides[i].scalex_top = FLOAT_TO_FIXED(atof(val)); sides[i].scalex_top = FLOAT_TO_FIXED(atof(val));
else if (fastcmp(param, "scalex_mid")) else if (fastcmp(param, "scalex_mid"))
sides[i].scalex_mid = FLOAT_TO_FIXED(atof(val)); sides[i].scalex_mid = FLOAT_TO_FIXED(atof(val));
else if (fastcmp(param, "scalex_bottom")) else if (fastcmp(param, "scalex_bottom"))
sides[i].scalex_bot = FLOAT_TO_FIXED(atof(val)); sides[i].scalex_bottom = FLOAT_TO_FIXED(atof(val));
else if (fastcmp(param, "scaley_top")) else if (fastcmp(param, "scaley_top"))
sides[i].scaley_top = FLOAT_TO_FIXED(atof(val)); sides[i].scaley_top = FLOAT_TO_FIXED(atof(val));
else if (fastcmp(param, "scaley_mid")) else if (fastcmp(param, "scaley_mid"))
sides[i].scaley_mid = FLOAT_TO_FIXED(atof(val)); sides[i].scaley_mid = FLOAT_TO_FIXED(atof(val));
else if (fastcmp(param, "scaley_bottom")) else if (fastcmp(param, "scaley_bottom"))
sides[i].scaley_bot = FLOAT_TO_FIXED(atof(val)); sides[i].scaley_bottom = FLOAT_TO_FIXED(atof(val));
else if (fastcmp(param, "texturetop")) else if (fastcmp(param, "texturetop"))
sides[i].toptexture = R_TextureNumForName(val); sides[i].toptexture = R_TextureNumForName(val);
else if (fastcmp(param, "texturebottom")) else if (fastcmp(param, "texturebottom"))
@ -2609,10 +2609,10 @@ static void P_WriteTextmap(void)
fprintf(f, "offsetx_mid = %d;\n", wsides[i].offsetx_mid >> FRACBITS); fprintf(f, "offsetx_mid = %d;\n", wsides[i].offsetx_mid >> FRACBITS);
if (wsides[i].offsety_mid != 0) if (wsides[i].offsety_mid != 0)
fprintf(f, "offsety_mid = %d;\n", wsides[i].offsety_mid >> FRACBITS); fprintf(f, "offsety_mid = %d;\n", wsides[i].offsety_mid >> FRACBITS);
if (wsides[i].offsetx_bot != 0) if (wsides[i].offsetx_bottom != 0)
fprintf(f, "offsetx_bottom = %d;\n", wsides[i].offsetx_bot >> FRACBITS); fprintf(f, "offsetx_bottom = %d;\n", wsides[i].offsetx_bottom >> FRACBITS);
if (wsides[i].offsety_bot != 0) if (wsides[i].offsety_bottom != 0)
fprintf(f, "offsety_bottom = %d;\n", wsides[i].offsety_bot >> FRACBITS); fprintf(f, "offsety_bottom = %d;\n", wsides[i].offsety_bottom >> FRACBITS);
if (wsides[i].scalex_top != FRACUNIT) if (wsides[i].scalex_top != FRACUNIT)
fprintf(f, "scalex_top = %f;\n", FIXED_TO_FLOAT(wsides[i].scalex_top)); fprintf(f, "scalex_top = %f;\n", FIXED_TO_FLOAT(wsides[i].scalex_top));
if (wsides[i].scaley_top != FRACUNIT) if (wsides[i].scaley_top != FRACUNIT)
@ -2621,10 +2621,10 @@ static void P_WriteTextmap(void)
fprintf(f, "scalex_mid = %f;\n", FIXED_TO_FLOAT(wsides[i].scalex_mid)); fprintf(f, "scalex_mid = %f;\n", FIXED_TO_FLOAT(wsides[i].scalex_mid));
if (wsides[i].scaley_mid != FRACUNIT) if (wsides[i].scaley_mid != FRACUNIT)
fprintf(f, "scaley_mid = %f;\n", FIXED_TO_FLOAT(wsides[i].scaley_mid)); fprintf(f, "scaley_mid = %f;\n", FIXED_TO_FLOAT(wsides[i].scaley_mid));
if (wsides[i].scalex_bot != FRACUNIT) if (wsides[i].scalex_bottom != FRACUNIT)
fprintf(f, "scalex_bottom = %f;\n", FIXED_TO_FLOAT(wsides[i].scalex_bot)); fprintf(f, "scalex_bottom = %f;\n", FIXED_TO_FLOAT(wsides[i].scalex_bottom));
if (wsides[i].scaley_bot != FRACUNIT) if (wsides[i].scaley_bottom != FRACUNIT)
fprintf(f, "scaley_bottom = %f;\n", FIXED_TO_FLOAT(wsides[i].scaley_bot)); fprintf(f, "scaley_bottom = %f;\n", FIXED_TO_FLOAT(wsides[i].scaley_bottom));
if (wsides[i].toptexture > 0 && wsides[i].toptexture < numtextures) if (wsides[i].toptexture > 0 && wsides[i].toptexture < numtextures)
fprintf(f, "texturetop = \"%.*s\";\n", 8, textures[wsides[i].toptexture]->name); fprintf(f, "texturetop = \"%.*s\";\n", 8, textures[wsides[i].toptexture]->name);
if (wsides[i].bottomtexture > 0 && wsides[i].bottomtexture < numtextures) if (wsides[i].bottomtexture > 0 && wsides[i].bottomtexture < numtextures)
@ -3001,10 +3001,10 @@ static void P_LoadTextmap(void)
// Defaults. // Defaults.
sd->textureoffset = 0; sd->textureoffset = 0;
sd->rowoffset = 0; sd->rowoffset = 0;
sd->offsetx_top = sd->offsetx_mid = sd->offsetx_bot = 0; sd->offsetx_top = sd->offsetx_mid = sd->offsetx_bottom = 0;
sd->offsety_top = sd->offsety_mid = sd->offsety_bot = 0; sd->offsety_top = sd->offsety_mid = sd->offsety_bottom = 0;
sd->scalex_top = sd->scalex_mid = sd->scalex_bot = FRACUNIT; sd->scalex_top = sd->scalex_mid = sd->scalex_bottom = FRACUNIT;
sd->scaley_top = sd->scaley_mid = sd->scaley_bot = FRACUNIT; sd->scaley_top = sd->scaley_mid = sd->scaley_bottom = FRACUNIT;
sd->toptexture = R_TextureNumForName("-"); sd->toptexture = R_TextureNumForName("-");
sd->midtexture = R_TextureNumForName("-"); sd->midtexture = R_TextureNumForName("-");
sd->bottomtexture = R_TextureNumForName("-"); sd->bottomtexture = R_TextureNumForName("-");

View file

@ -559,11 +559,11 @@ typedef struct
fixed_t rowoffset; fixed_t rowoffset;
// per-texture offsets for UDMF // per-texture offsets for UDMF
fixed_t offsetx_top, offsetx_mid, offsetx_bot; fixed_t offsetx_top, offsetx_mid, offsetx_bottom;
fixed_t offsety_top, offsety_mid, offsety_bot; fixed_t offsety_top, offsety_mid, offsety_bottom;
fixed_t scalex_top, scalex_mid, scalex_bot; fixed_t scalex_top, scalex_mid, scalex_bottom;
fixed_t scaley_top, scaley_mid, scaley_bot; fixed_t scaley_top, scaley_mid, scaley_bottom;
// Texture indices. // Texture indices.
// We do not maintain names here. // We do not maintain names here.

View file

@ -2043,7 +2043,7 @@ void R_StoreWallRange(INT32 start, INT32 stop)
} }
fixed_t toprowoffset = sidedef->rowoffset + sidedef->offsety_top; fixed_t toprowoffset = sidedef->rowoffset + sidedef->offsety_top;
fixed_t botrowoffset = sidedef->rowoffset + sidedef->offsety_bot; fixed_t botrowoffset = sidedef->rowoffset + sidedef->offsety_bottom;
// check TOP TEXTURE // check TOP TEXTURE
if (!bothceilingssky // never draw the top texture if on if (!bothceilingssky // never draw the top texture if on
@ -2092,8 +2092,8 @@ void R_StoreWallRange(INT32 start, INT32 stop)
// bottom texture // bottom texture
bottomtexture = R_GetTextureNum(sidedef->bottomtexture); bottomtexture = R_GetTextureNum(sidedef->bottomtexture);
rw_bottomtexturescalex = sidedef->scalex_bot; rw_bottomtexturescalex = sidedef->scalex_bottom;
rw_bottomtexturescaley = sidedef->scaley_bot; rw_bottomtexturescaley = sidedef->scaley_bottom;
rw_invbottomtexturescalex = FixedDiv(FRACUNIT, rw_bottomtexturescalex); rw_invbottomtexturescalex = FixedDiv(FRACUNIT, rw_bottomtexturescalex);
@ -2418,7 +2418,7 @@ void R_StoreWallRange(INT32 start, INT32 stop)
rw_offset_top = sideoffset + sidedef->offsetx_top; rw_offset_top = sideoffset + sidedef->offsetx_top;
rw_offset_mid = sideoffset + sidedef->offsetx_mid; rw_offset_mid = sideoffset + sidedef->offsetx_mid;
rw_offset_bottom = sideoffset + sidedef->offsetx_bot; rw_offset_bottom = sideoffset + sidedef->offsetx_bottom;
rw_offsetx = rw_offset_mid; rw_offsetx = rw_offset_mid;
if (rw_midtexturescalex < 0) if (rw_midtexturescalex < 0)