mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-25 22:01:01 +00:00
Serialize new side fields
This commit is contained in:
parent
ca4f7cc508
commit
41cacd783b
6 changed files with 232 additions and 145 deletions
|
@ -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))
|
||||||
|
|
|
@ -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);
|
||||||
|
|
293
src/p_saveg.c
293
src/p_saveg.c
|
@ -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]]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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("-");
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue