mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-15 17:22:12 +00:00
Merge branch 'next' into sector-portals
This commit is contained in:
commit
5306d2b474
15 changed files with 277 additions and 159 deletions
|
@ -1,4 +1,4 @@
|
||||||
version: 2.2.12.{branch}-{build}
|
version: 2.2.13.{branch}-{build}
|
||||||
os: MinGW
|
os: MinGW
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|
|
@ -38,6 +38,8 @@
|
||||||
* Last updated 2021 / 05 / 06 - v2.2.9 - patch.pk3 & zones.pk3
|
* Last updated 2021 / 05 / 06 - v2.2.9 - patch.pk3 & zones.pk3
|
||||||
* Last updated 2022 / 03 / 06 - v2.2.10 - main assets
|
* Last updated 2022 / 03 / 06 - v2.2.10 - main assets
|
||||||
* Last updated 2023 / 05 / 02 - v2.2.11 - patch.pk3 & zones.pk3
|
* Last updated 2023 / 05 / 02 - v2.2.11 - patch.pk3 & zones.pk3
|
||||||
|
* Last updated 2023 / 09 / 06 - v2.2.12 - patch.pk3
|
||||||
|
* Last updated 2023 / 09 / 09 - v2.2.13 - none
|
||||||
*/
|
*/
|
||||||
#define ASSET_HASH_SRB2_PK3 "ad911f29a28a18968ee5b2d11c2acb39"
|
#define ASSET_HASH_SRB2_PK3 "ad911f29a28a18968ee5b2d11c2acb39"
|
||||||
#define ASSET_HASH_ZONES_PK3 "1c8adf8d079ecb87d00081f158acf3c7"
|
#define ASSET_HASH_ZONES_PK3 "1c8adf8d079ecb87d00081f158acf3c7"
|
||||||
|
|
|
@ -3540,7 +3540,7 @@ static void HWR_DrawDropShadow(mobj_t *thing, fixed_t scale)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
floordiff = abs((flip < 0 ? thing->height : 0) + interp.z - groundz);
|
floordiff = abs((flip < 0 ? interp.height : 0) + interp.z - groundz);
|
||||||
|
|
||||||
alpha = floordiff / (4*FRACUNIT) + 75;
|
alpha = floordiff / (4*FRACUNIT) + 75;
|
||||||
if (alpha >= 255) return;
|
if (alpha >= 255) return;
|
||||||
|
@ -3551,9 +3551,7 @@ static void HWR_DrawDropShadow(mobj_t *thing, fixed_t scale)
|
||||||
HWR_GetPatch(gpatch);
|
HWR_GetPatch(gpatch);
|
||||||
|
|
||||||
scalemul = FixedMul(FRACUNIT - floordiff/640, scale);
|
scalemul = FixedMul(FRACUNIT - floordiff/640, scale);
|
||||||
scalemul = FixedMul(scalemul, (thing->radius*2) / gpatch->height);
|
scalemul = FixedMul(scalemul, (interp.radius*2) / gpatch->height);
|
||||||
if ((thing->scale != thing->old_scale) && (thing->scale >= FRACUNIT/1024)) // Interpolate shadows when scaling mobjs
|
|
||||||
scalemul = FixedMul(scalemul, FixedDiv(interp.scale, thing->scale));
|
|
||||||
|
|
||||||
fscale = FIXED_TO_FLOAT(scalemul);
|
fscale = FIXED_TO_FLOAT(scalemul);
|
||||||
fx = FIXED_TO_FLOAT(interp.x);
|
fx = FIXED_TO_FLOAT(interp.x);
|
||||||
|
@ -3665,7 +3663,7 @@ static void HWR_RotateSpritePolyToAim(gl_vissprite_t *spr, FOutVector *wallVerts
|
||||||
|
|
||||||
if (P_MobjFlip(spr->mobj) == -1)
|
if (P_MobjFlip(spr->mobj) == -1)
|
||||||
{
|
{
|
||||||
basey = FIXED_TO_FLOAT(interp.z + spr->mobj->height);
|
basey = FIXED_TO_FLOAT(interp.z + interp.height);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -4000,32 +3998,32 @@ static void HWR_DrawBoundingBox(gl_vissprite_t *vis)
|
||||||
// repeat this 4 times (overhead)
|
// repeat this 4 times (overhead)
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// 17 20 21 11
|
// 15 16 17 09
|
||||||
// 16 15 14 10
|
// 14 13 12 08
|
||||||
// 27 22 *--* 07 12
|
// 23 18 *--* 07 10
|
||||||
// | |
|
// | |
|
||||||
// 26 23 *--* 06 13
|
// 22 19 *--* 06 11
|
||||||
// 24 00 01 02
|
// 20 00 01 02
|
||||||
// 25 05 04 03
|
// 21 05 04 03
|
||||||
//
|
//
|
||||||
|
|
||||||
v[000].x = v[005].x = v[015].x = v[016].x = v[017].x = v[020].x =
|
v[ 0].x = v[ 5].x = v[13].x = v[14].x = v[15].x = v[16].x =
|
||||||
v[022].x = v[023].x = v[024].x = v[025].x = v[026].x = v[027].x = vis->x1; // west
|
v[18].x = v[19].x = v[20].x = v[21].x = v[22].x = v[23].x = vis->x1; // west
|
||||||
|
|
||||||
v[001].x = v[002].x = v[003].x = v[004].x = v[006].x = v[007].x =
|
v[ 1].x = v[ 2].x = v[ 3].x = v[ 4].x = v[ 6].x = v[ 7].x =
|
||||||
v[010].x = v[011].x = v[012].x = v[013].x = v[014].x = v[021].x = vis->x2; // east
|
v[ 8].x = v[ 9].x = v[10].x = v[11].x = v[12].x = v[17].x = vis->x2; // east
|
||||||
|
|
||||||
v[000].z = v[001].z = v[002].z = v[003].z = v[004].z = v[005].z =
|
v[ 0].z = v[ 1].z = v[ 2].z = v[ 3].z = v[ 4].z = v[ 5].z =
|
||||||
v[006].z = v[013].z = v[023].z = v[024].z = v[025].z = v[026].z = vis->z1; // south
|
v[ 6].z = v[11].z = v[19].z = v[20].z = v[21].z = v[22].z = vis->z1; // south
|
||||||
|
|
||||||
v[007].z = v[010].z = v[011].z = v[012].z = v[014].z = v[015].z =
|
v[ 7].z = v[ 8].z = v[ 9].z = v[10].z = v[12].z = v[13].z =
|
||||||
v[016].z = v[017].z = v[020].z = v[021].z = v[022].z = v[027].z = vis->z2; // north
|
v[14].z = v[15].z = v[16].z = v[17].z = v[18].z = v[23].z = vis->z2; // north
|
||||||
|
|
||||||
v[000].y = v[001].y = v[002].y = v[006].y = v[007].y = v[010].y =
|
v[ 0].y = v[ 1].y = v[ 2].y = v[ 6].y = v[ 7].y = v[ 8].y =
|
||||||
v[014].y = v[015].y = v[016].y = v[022].y = v[023].y = v[024].y = vis->gz; // bottom
|
v[12].y = v[13].y = v[14].y = v[18].y = v[19].y = v[20].y = vis->gz; // bottom
|
||||||
|
|
||||||
v[003].y = v[004].y = v[005].y = v[011].y = v[012].y = v[013].y =
|
v[ 3].y = v[ 4].y = v[ 5].y = v[ 9].y = v[10].y = v[11].y =
|
||||||
v[017].y = v[020].y = v[021].y = v[025].y = v[026].y = v[027].y = vis->gzt; // top
|
v[15].y = v[16].y = v[17].y = v[21].y = v[22].y = v[23].y = vis->gzt; // top
|
||||||
|
|
||||||
Surf.PolyColor = V_GetColor(R_GetBoundingBoxColor(vis->mobj));
|
Surf.PolyColor = V_GetColor(R_GetBoundingBoxColor(vis->mobj));
|
||||||
|
|
||||||
|
@ -5271,7 +5269,7 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
||||||
}
|
}
|
||||||
|
|
||||||
groundz = R_GetShadowZ(thing, NULL);
|
groundz = R_GetShadowZ(thing, NULL);
|
||||||
floordiff = abs(((thing->eflags & MFE_VERTICALFLIP) ? caster->height : 0) + casterinterp.z - groundz);
|
floordiff = abs(((thing->eflags & MFE_VERTICALFLIP) ? casterinterp.height : 0) + casterinterp.z - groundz);
|
||||||
|
|
||||||
shadowheight = FIXED_TO_FLOAT(floordiff);
|
shadowheight = FIXED_TO_FLOAT(floordiff);
|
||||||
shadowscale = FIXED_TO_FLOAT(FixedMul(FRACUNIT - floordiff/640, casterinterp.scale));
|
shadowscale = FIXED_TO_FLOAT(FixedMul(FRACUNIT - floordiff/640, casterinterp.scale));
|
||||||
|
@ -5323,10 +5321,7 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
||||||
|
|
||||||
if (vflip)
|
if (vflip)
|
||||||
{
|
{
|
||||||
if (thing->scale != thing->old_scale) // Interpolate heights in reverse gravity when scaling mobjs
|
gz = FIXED_TO_FLOAT(interp.z + interp.height) - (FIXED_TO_FLOAT(spr_topoffset) * this_yscale);
|
||||||
gz = FIXED_TO_FLOAT(interp.z + FixedMul(thing->height, FixedDiv(interp.scale, thing->scale))) - (FIXED_TO_FLOAT(spr_topoffset) * this_yscale);
|
|
||||||
else
|
|
||||||
gz = FIXED_TO_FLOAT(interp.z + thing->height) - (FIXED_TO_FLOAT(spr_topoffset) * this_yscale);
|
|
||||||
gzt = gz + (FIXED_TO_FLOAT(spr_height) * this_yscale);
|
gzt = gz + (FIXED_TO_FLOAT(spr_height) * this_yscale);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -5632,7 +5627,6 @@ static void HWR_ProjectBoundingBox(mobj_t *thing)
|
||||||
gl_vissprite_t *vis;
|
gl_vissprite_t *vis;
|
||||||
float tr_x, tr_y;
|
float tr_x, tr_y;
|
||||||
float tz;
|
float tz;
|
||||||
float rad;
|
|
||||||
|
|
||||||
if (!thing)
|
if (!thing)
|
||||||
return;
|
return;
|
||||||
|
@ -5667,15 +5661,13 @@ static void HWR_ProjectBoundingBox(mobj_t *thing)
|
||||||
tr_x += gl_viewx;
|
tr_x += gl_viewx;
|
||||||
tr_y += gl_viewy;
|
tr_y += gl_viewy;
|
||||||
|
|
||||||
rad = FIXED_TO_FLOAT(thing->radius);
|
|
||||||
|
|
||||||
vis = HWR_NewVisSprite();
|
vis = HWR_NewVisSprite();
|
||||||
vis->x1 = tr_x - rad;
|
vis->x1 = tr_x - FIXED_TO_FLOAT(interp.radius);
|
||||||
vis->x2 = tr_x + rad;
|
vis->x2 = tr_x + FIXED_TO_FLOAT(interp.radius);
|
||||||
vis->z1 = tr_y - rad;
|
vis->z1 = tr_y - FIXED_TO_FLOAT(interp.radius);
|
||||||
vis->z2 = tr_y + rad;
|
vis->z2 = tr_y + FIXED_TO_FLOAT(interp.radius);
|
||||||
vis->gz = FIXED_TO_FLOAT(interp.z);
|
vis->gz = FIXED_TO_FLOAT(interp.z);
|
||||||
vis->gzt = vis->gz + FIXED_TO_FLOAT(thing->height);
|
vis->gzt = vis->gz + FIXED_TO_FLOAT(interp.height);
|
||||||
vis->mobj = thing;
|
vis->mobj = thing;
|
||||||
|
|
||||||
vis->precip = false;
|
vis->precip = false;
|
||||||
|
|
|
@ -1585,12 +1585,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
|
||||||
p.y = FIXED_TO_FLOAT(interp.y)+md2->offset;
|
p.y = FIXED_TO_FLOAT(interp.y)+md2->offset;
|
||||||
|
|
||||||
if (flip)
|
if (flip)
|
||||||
{
|
p.z = FIXED_TO_FLOAT(interp.z + interp.height);
|
||||||
if (spr->mobj->scale != spr->mobj->old_scale) // Interpolate heights in reverse gravity when scaling mobjs
|
|
||||||
p.z = FIXED_TO_FLOAT(interp.z + FixedMul(spr->mobj->height, FixedDiv(interp.scale, spr->mobj->scale)));
|
|
||||||
else
|
|
||||||
p.z = FIXED_TO_FLOAT(interp.z + spr->mobj->height);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
p.z = FIXED_TO_FLOAT(interp.z);
|
p.z = FIXED_TO_FLOAT(interp.z);
|
||||||
|
|
||||||
|
@ -1626,8 +1621,8 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
|
||||||
p.roll = true;
|
p.roll = true;
|
||||||
|
|
||||||
// rotation pivot
|
// rotation pivot
|
||||||
p.centerx = FIXED_TO_FLOAT(spr->mobj->radius / 2);
|
p.centerx = FIXED_TO_FLOAT(interp.radius / 2);
|
||||||
p.centery = FIXED_TO_FLOAT(spr->mobj->height / 2);
|
p.centery = FIXED_TO_FLOAT(interp.height / 2);
|
||||||
|
|
||||||
// rotation axes relative to camera
|
// rotation axes relative to camera
|
||||||
p.rollx = FIXED_TO_FLOAT(FINECOSINE(FixedAngle(camAngleDiff) >> ANGLETOFINESHIFT));
|
p.rollx = FIXED_TO_FLOAT(FINECOSINE(FixedAngle(camAngleDiff) >> ANGLETOFINESHIFT));
|
||||||
|
|
|
@ -25,6 +25,7 @@ enum skin {
|
||||||
skin_flags,
|
skin_flags,
|
||||||
skin_realname,
|
skin_realname,
|
||||||
skin_hudname,
|
skin_hudname,
|
||||||
|
skin_supername,
|
||||||
skin_ability,
|
skin_ability,
|
||||||
skin_ability2,
|
skin_ability2,
|
||||||
skin_thokitem,
|
skin_thokitem,
|
||||||
|
@ -63,6 +64,7 @@ static const char *const skin_opt[] = {
|
||||||
"flags",
|
"flags",
|
||||||
"realname",
|
"realname",
|
||||||
"hudname",
|
"hudname",
|
||||||
|
"supername",
|
||||||
"ability",
|
"ability",
|
||||||
"ability2",
|
"ability2",
|
||||||
"thokitem",
|
"thokitem",
|
||||||
|
@ -126,6 +128,9 @@ static int skin_get(lua_State *L)
|
||||||
case skin_hudname:
|
case skin_hudname:
|
||||||
lua_pushstring(L, skin->hudname);
|
lua_pushstring(L, skin->hudname);
|
||||||
break;
|
break;
|
||||||
|
case skin_supername:
|
||||||
|
lua_pushstring(L, skin->supername);
|
||||||
|
break;
|
||||||
case skin_ability:
|
case skin_ability:
|
||||||
lua_pushinteger(L, skin->ability);
|
lua_pushinteger(L, skin->ability);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -34,7 +34,7 @@ static CV_PossibleValue_t renderhitbox_cons_t[] = {
|
||||||
{RENDERHITBOX_RINGS, "Rings"},
|
{RENDERHITBOX_RINGS, "Rings"},
|
||||||
{0}};
|
{0}};
|
||||||
|
|
||||||
consvar_t cv_renderhitbox = CVAR_INIT ("renderhitbox", "Off", CV_CHEAT|CV_NETVAR, renderhitbox_cons_t, NULL);
|
consvar_t cv_renderhitbox = CVAR_INIT ("renderhitbox", "Off", CV_CHEAT|CV_NOTINNET, renderhitbox_cons_t, NULL);
|
||||||
consvar_t cv_renderhitboxinterpolation = CVAR_INIT ("renderhitbox_interpolation", "On", CV_SAVE, CV_OnOff, NULL);
|
consvar_t cv_renderhitboxinterpolation = CVAR_INIT ("renderhitbox_interpolation", "On", CV_SAVE, CV_OnOff, NULL);
|
||||||
consvar_t cv_renderhitboxgldepth = CVAR_INIT ("renderhitbox_gldepth", "Off", CV_SAVE, CV_OnOff, NULL);
|
consvar_t cv_renderhitboxgldepth = CVAR_INIT ("renderhitbox_gldepth", "Off", CV_SAVE, CV_OnOff, NULL);
|
||||||
|
|
||||||
|
@ -268,6 +268,9 @@ boolean R_ThingBoundingBoxVisible(mobj_t *thing)
|
||||||
{
|
{
|
||||||
INT32 cvmode = cv_renderhitbox.value;
|
INT32 cvmode = cv_renderhitbox.value;
|
||||||
|
|
||||||
|
if (multiplayer) // No hitboxes in multiplayer to avoid cheating
|
||||||
|
return false;
|
||||||
|
|
||||||
// Do not render bbox for these
|
// Do not render bbox for these
|
||||||
switch (thing->type)
|
switch (thing->type)
|
||||||
{
|
{
|
||||||
|
|
20
src/r_fps.c
20
src/r_fps.c
|
@ -292,6 +292,8 @@ void R_InterpolateMobjState(mobj_t *mobj, fixed_t frac, interpmobjstate_t *out)
|
||||||
out->y = mobj->y;
|
out->y = mobj->y;
|
||||||
out->z = mobj->z;
|
out->z = mobj->z;
|
||||||
out->scale = mobj->scale;
|
out->scale = mobj->scale;
|
||||||
|
out->radius = mobj->radius;
|
||||||
|
out->height = mobj->height;
|
||||||
out->subsector = mobj->subsector;
|
out->subsector = mobj->subsector;
|
||||||
out->angle = mobj->player ? mobj->player->drawangle : mobj->angle;
|
out->angle = mobj->player ? mobj->player->drawangle : mobj->angle;
|
||||||
out->pitch = mobj->pitch;
|
out->pitch = mobj->pitch;
|
||||||
|
@ -307,10 +309,22 @@ void R_InterpolateMobjState(mobj_t *mobj, fixed_t frac, interpmobjstate_t *out)
|
||||||
out->x = R_LerpFixed(mobj->old_x, mobj->x, frac);
|
out->x = R_LerpFixed(mobj->old_x, mobj->x, frac);
|
||||||
out->y = R_LerpFixed(mobj->old_y, mobj->y, frac);
|
out->y = R_LerpFixed(mobj->old_y, mobj->y, frac);
|
||||||
out->z = R_LerpFixed(mobj->old_z, mobj->z, frac);
|
out->z = R_LerpFixed(mobj->old_z, mobj->z, frac);
|
||||||
out->scale = mobj->resetinterp ? mobj->scale : R_LerpFixed(mobj->old_scale, mobj->scale, frac);
|
|
||||||
out->spritexscale = mobj->resetinterp ? mobj->spritexscale : R_LerpFixed(mobj->old_spritexscale, mobj->spritexscale, frac);
|
out->spritexscale = mobj->resetinterp ? mobj->spritexscale : R_LerpFixed(mobj->old_spritexscale, mobj->spritexscale, frac);
|
||||||
out->spriteyscale = mobj->resetinterp ? mobj->spriteyscale : R_LerpFixed(mobj->old_spriteyscale, mobj->spriteyscale, frac);
|
out->spriteyscale = mobj->resetinterp ? mobj->spriteyscale : R_LerpFixed(mobj->old_spriteyscale, mobj->spriteyscale, frac);
|
||||||
|
|
||||||
|
if (mobj->scale == mobj->old_scale) // Tiny optimisation - scale is usually unchanging, so let's skip a lerp, two FixedMuls, and two FixedDivs
|
||||||
|
{
|
||||||
|
out->scale = mobj->scale;
|
||||||
|
out->radius = mobj->radius;
|
||||||
|
out->height = mobj->height;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
out->scale = R_LerpFixed(mobj->old_scale, mobj->scale, frac);
|
||||||
|
out->radius = FixedMul(mobj->radius, FixedDiv(out->scale, mobj->scale));
|
||||||
|
out->height = FixedMul(mobj->height, FixedDiv(out->scale, mobj->scale));
|
||||||
|
}
|
||||||
|
|
||||||
// Sprite offsets are not interpolated until we have a way to interpolate them explicitly in Lua.
|
// Sprite offsets are not interpolated until we have a way to interpolate them explicitly in Lua.
|
||||||
// It seems existing mods visually break more often than not if it is interpolated.
|
// It seems existing mods visually break more often than not if it is interpolated.
|
||||||
out->spritexoffset = mobj->spritexoffset;
|
out->spritexoffset = mobj->spritexoffset;
|
||||||
|
@ -340,6 +354,8 @@ void R_InterpolatePrecipMobjState(precipmobj_t *mobj, fixed_t frac, interpmobjst
|
||||||
out->y = mobj->y;
|
out->y = mobj->y;
|
||||||
out->z = mobj->z;
|
out->z = mobj->z;
|
||||||
out->scale = FRACUNIT;
|
out->scale = FRACUNIT;
|
||||||
|
out->radius = mobj->radius;
|
||||||
|
out->height = mobj->height;
|
||||||
out->subsector = mobj->subsector;
|
out->subsector = mobj->subsector;
|
||||||
out->angle = mobj->angle;
|
out->angle = mobj->angle;
|
||||||
out->pitch = mobj->angle;
|
out->pitch = mobj->angle;
|
||||||
|
@ -356,6 +372,8 @@ void R_InterpolatePrecipMobjState(precipmobj_t *mobj, fixed_t frac, interpmobjst
|
||||||
out->y = R_LerpFixed(mobj->old_y, mobj->y, frac);
|
out->y = R_LerpFixed(mobj->old_y, mobj->y, frac);
|
||||||
out->z = R_LerpFixed(mobj->old_z, mobj->z, frac);
|
out->z = R_LerpFixed(mobj->old_z, mobj->z, frac);
|
||||||
out->scale = FRACUNIT;
|
out->scale = FRACUNIT;
|
||||||
|
out->radius = mobj->radius;
|
||||||
|
out->height = mobj->height;
|
||||||
out->spritexscale = R_LerpFixed(mobj->old_spritexscale, mobj->spritexscale, frac);
|
out->spritexscale = R_LerpFixed(mobj->old_spritexscale, mobj->spritexscale, frac);
|
||||||
out->spriteyscale = R_LerpFixed(mobj->old_spriteyscale, mobj->spriteyscale, frac);
|
out->spriteyscale = R_LerpFixed(mobj->old_spriteyscale, mobj->spriteyscale, frac);
|
||||||
out->spritexoffset = R_LerpFixed(mobj->old_spritexoffset, mobj->spritexoffset, frac);
|
out->spritexoffset = R_LerpFixed(mobj->old_spritexoffset, mobj->spritexoffset, frac);
|
||||||
|
|
|
@ -63,6 +63,8 @@ typedef struct {
|
||||||
angle_t roll;
|
angle_t roll;
|
||||||
angle_t spriteroll;
|
angle_t spriteroll;
|
||||||
fixed_t scale;
|
fixed_t scale;
|
||||||
|
fixed_t radius;
|
||||||
|
fixed_t height;
|
||||||
fixed_t spritexscale;
|
fixed_t spritexscale;
|
||||||
fixed_t spriteyscale;
|
fixed_t spriteyscale;
|
||||||
fixed_t spritexoffset;
|
fixed_t spritexoffset;
|
||||||
|
|
29
src/r_main.c
29
src/r_main.c
|
@ -41,16 +41,6 @@
|
||||||
#include "hardware/hw_main.h"
|
#include "hardware/hw_main.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//profile stuff ---------------------------------------------------------
|
|
||||||
//#define TIMING
|
|
||||||
#ifdef TIMING
|
|
||||||
#include "p5prof.h"
|
|
||||||
INT64 mycount;
|
|
||||||
INT64 mytotal = 0;
|
|
||||||
//unsigned long nombre = 100000;
|
|
||||||
#endif
|
|
||||||
//profile stuff ---------------------------------------------------------
|
|
||||||
|
|
||||||
// Fineangles in the SCREENWIDTH wide window.
|
// Fineangles in the SCREENWIDTH wide window.
|
||||||
#define FIELDOFVIEW 2048
|
#define FIELDOFVIEW 2048
|
||||||
|
|
||||||
|
@ -157,7 +147,8 @@ consvar_t cv_flipcam2 = CVAR_INIT ("flipcam2", "No", CV_SAVE|CV_CALL|CV_NOINIT,
|
||||||
|
|
||||||
consvar_t cv_shadow = CVAR_INIT ("shadow", "On", CV_SAVE, CV_OnOff, NULL);
|
consvar_t cv_shadow = CVAR_INIT ("shadow", "On", CV_SAVE, CV_OnOff, NULL);
|
||||||
consvar_t cv_skybox = CVAR_INIT ("skybox", "On", CV_SAVE, CV_OnOff, NULL);
|
consvar_t cv_skybox = CVAR_INIT ("skybox", "On", CV_SAVE, CV_OnOff, NULL);
|
||||||
consvar_t cv_ffloorclip = CVAR_INIT ("ffloorclip", "On", CV_SAVE, CV_OnOff, NULL);
|
consvar_t cv_ffloorclip = CVAR_INIT ("r_ffloorclip", "On", CV_SAVE, CV_OnOff, NULL);
|
||||||
|
consvar_t cv_spriteclip = CVAR_INIT ("r_spriteclip", "On", CV_SAVE, CV_OnOff, NULL);
|
||||||
consvar_t cv_allowmlook = CVAR_INIT ("allowmlook", "Yes", CV_NETVAR|CV_ALLOWLUA, CV_YesNo, NULL);
|
consvar_t cv_allowmlook = CVAR_INIT ("allowmlook", "Yes", CV_NETVAR|CV_ALLOWLUA, CV_YesNo, NULL);
|
||||||
consvar_t cv_showhud = CVAR_INIT ("showhud", "Yes", CV_CALL|CV_ALLOWLUA, CV_YesNo, R_SetViewSize);
|
consvar_t cv_showhud = CVAR_INIT ("showhud", "Yes", CV_CALL|CV_ALLOWLUA, CV_YesNo, R_SetViewSize);
|
||||||
consvar_t cv_translucenthud = CVAR_INIT ("translucenthud", "10", CV_SAVE, translucenthud_cons_t, NULL);
|
consvar_t cv_translucenthud = CVAR_INIT ("translucenthud", "10", CV_SAVE, translucenthud_cons_t, NULL);
|
||||||
|
@ -1490,29 +1481,18 @@ void R_RenderPlayerView(player_t *player)
|
||||||
|
|
||||||
Mask_Pre(&masks[nummasks - 1]);
|
Mask_Pre(&masks[nummasks - 1]);
|
||||||
curdrawsegs = ds_p;
|
curdrawsegs = ds_p;
|
||||||
//profile stuff ---------------------------------------------------------
|
|
||||||
#ifdef TIMING
|
|
||||||
mytotal = 0;
|
|
||||||
ProfZeroTimer();
|
|
||||||
#endif
|
|
||||||
ps_numbspcalls.value.i = ps_numpolyobjects.value.i = ps_numdrawnodes.value.i = 0;
|
ps_numbspcalls.value.i = ps_numpolyobjects.value.i = ps_numdrawnodes.value.i = 0;
|
||||||
PS_START_TIMING(ps_bsptime);
|
PS_START_TIMING(ps_bsptime);
|
||||||
R_RenderBSPNode((INT32)numnodes - 1);
|
R_RenderBSPNode((INT32)numnodes - 1);
|
||||||
PS_STOP_TIMING(ps_bsptime);
|
PS_STOP_TIMING(ps_bsptime);
|
||||||
ps_numsprites.value.i = visspritecount;
|
|
||||||
#ifdef TIMING
|
|
||||||
RDMSR(0x10, &mycount);
|
|
||||||
mytotal += mycount; // 64bit add
|
|
||||||
|
|
||||||
CONS_Debug(DBG_RENDER, "RenderBSPNode: 0x%d %d\n", *((INT32 *)&mytotal + 1), (INT32)mytotal);
|
|
||||||
#endif
|
|
||||||
//profile stuff ---------------------------------------------------------
|
|
||||||
Mask_Post(&masks[nummasks - 1]);
|
Mask_Post(&masks[nummasks - 1]);
|
||||||
|
|
||||||
PS_START_TIMING(ps_sw_spritecliptime);
|
PS_START_TIMING(ps_sw_spritecliptime);
|
||||||
R_ClipSprites(drawsegs, NULL);
|
R_ClipSprites(drawsegs, NULL);
|
||||||
PS_STOP_TIMING(ps_sw_spritecliptime);
|
PS_STOP_TIMING(ps_sw_spritecliptime);
|
||||||
|
|
||||||
|
ps_numsprites.value.i = numvisiblesprites;
|
||||||
|
|
||||||
// Add portals caused by visplanes.
|
// Add portals caused by visplanes.
|
||||||
Portal_AddPlanePortals(cv_skybox.value);
|
Portal_AddPlanePortals(cv_skybox.value);
|
||||||
|
|
||||||
|
@ -1613,6 +1593,7 @@ void R_RegisterEngineStuff(void)
|
||||||
CV_RegisterVar(&cv_shadow);
|
CV_RegisterVar(&cv_shadow);
|
||||||
CV_RegisterVar(&cv_skybox);
|
CV_RegisterVar(&cv_skybox);
|
||||||
CV_RegisterVar(&cv_ffloorclip);
|
CV_RegisterVar(&cv_ffloorclip);
|
||||||
|
CV_RegisterVar(&cv_spriteclip);
|
||||||
|
|
||||||
CV_RegisterVar(&cv_cam_dist);
|
CV_RegisterVar(&cv_cam_dist);
|
||||||
CV_RegisterVar(&cv_cam_still);
|
CV_RegisterVar(&cv_cam_still);
|
||||||
|
|
|
@ -114,7 +114,7 @@ extern consvar_t cv_chasecam, cv_chasecam2;
|
||||||
extern consvar_t cv_flipcam, cv_flipcam2;
|
extern consvar_t cv_flipcam, cv_flipcam2;
|
||||||
|
|
||||||
extern consvar_t cv_shadow;
|
extern consvar_t cv_shadow;
|
||||||
extern consvar_t cv_ffloorclip;
|
extern consvar_t cv_ffloorclip, cv_spriteclip;
|
||||||
extern consvar_t cv_translucency;
|
extern consvar_t cv_translucency;
|
||||||
extern consvar_t cv_drawdist, cv_drawdist_nights, cv_drawdist_precip;
|
extern consvar_t cv_drawdist, cv_drawdist_nights, cv_drawdist_precip;
|
||||||
extern consvar_t cv_fov;
|
extern consvar_t cv_fov;
|
||||||
|
|
|
@ -314,9 +314,7 @@ static void R_RasterizeFloorSplat(floorsplat_t *pSplat, vector2_t *verts, visspr
|
||||||
fixed_t planeheight = 0;
|
fixed_t planeheight = 0;
|
||||||
fixed_t step;
|
fixed_t step;
|
||||||
|
|
||||||
int spanfunctype = SPANDRAWFUNC_SPRITE;
|
int spanfunctype;
|
||||||
|
|
||||||
prepare_rastertab();
|
|
||||||
|
|
||||||
#define RASTERPARAMS(vnum1, vnum2, tv1, tv2, tc, dir) \
|
#define RASTERPARAMS(vnum1, vnum2, tv1, tv2, tc, dir) \
|
||||||
x1 = verts[vnum1].x; \
|
x1 = verts[vnum1].x; \
|
||||||
|
@ -367,21 +365,15 @@ static void R_RasterizeFloorSplat(floorsplat_t *pSplat, vector2_t *verts, visspr
|
||||||
if (ry1 > maxy) \
|
if (ry1 > maxy) \
|
||||||
maxy = ry1;
|
maxy = ry1;
|
||||||
|
|
||||||
// do segment a -> top of texture
|
|
||||||
RASTERPARAMS(3,2,0,pSplat->width-1,0,0);
|
|
||||||
// do segment b -> right side of texture
|
|
||||||
RASTERPARAMS(2,1,0,pSplat->width-1,pSplat->height-1,0);
|
|
||||||
// do segment c -> bottom of texture
|
|
||||||
RASTERPARAMS(1,0,pSplat->width-1,0,pSplat->height-1,0);
|
|
||||||
// do segment d -> left side of texture
|
|
||||||
RASTERPARAMS(0,3,pSplat->width-1,0,0,1);
|
|
||||||
|
|
||||||
ds_source = (UINT8 *)pSplat->pic;
|
ds_source = (UINT8 *)pSplat->pic;
|
||||||
ds_flatwidth = pSplat->width;
|
ds_flatwidth = pSplat->width;
|
||||||
ds_flatheight = pSplat->height;
|
ds_flatheight = pSplat->height;
|
||||||
ds_powersoftwo = false;
|
|
||||||
|
|
||||||
if (R_CheckPowersOfTwo())
|
ds_powersoftwo = ds_solidcolor = false;
|
||||||
|
|
||||||
|
if (R_CheckSolidColorFlat())
|
||||||
|
ds_solidcolor = true;
|
||||||
|
else if (R_CheckPowersOfTwo())
|
||||||
{
|
{
|
||||||
R_SetFlatVars(ds_flatwidth * ds_flatheight);
|
R_SetFlatVars(ds_flatwidth * ds_flatheight);
|
||||||
ds_powersoftwo = true;
|
ds_powersoftwo = true;
|
||||||
|
@ -392,9 +384,8 @@ static void R_RasterizeFloorSplat(floorsplat_t *pSplat, vector2_t *verts, visspr
|
||||||
R_SetTiltedSpan(0);
|
R_SetTiltedSpan(0);
|
||||||
R_SetScaledSlopePlane(pSplat->slope, vis->viewpoint.x, vis->viewpoint.y, vis->viewpoint.z, pSplat->xscale, pSplat->yscale, -pSplat->verts[0].x, pSplat->verts[0].y, vis->viewpoint.angle, pSplat->angle);
|
R_SetScaledSlopePlane(pSplat->slope, vis->viewpoint.x, vis->viewpoint.y, vis->viewpoint.z, pSplat->xscale, pSplat->yscale, -pSplat->verts[0].x, pSplat->verts[0].y, vis->viewpoint.angle, pSplat->angle);
|
||||||
R_CalculateSlopeVectors();
|
R_CalculateSlopeVectors();
|
||||||
spanfunctype = SPANDRAWFUNC_TILTEDSPRITE;
|
|
||||||
}
|
}
|
||||||
else
|
else if (!ds_solidcolor)
|
||||||
{
|
{
|
||||||
planeheight = abs(pSplat->z - vis->viewpoint.z);
|
planeheight = abs(pSplat->z - vis->viewpoint.z);
|
||||||
|
|
||||||
|
@ -429,23 +420,70 @@ static void R_RasterizeFloorSplat(floorsplat_t *pSplat, vector2_t *verts, visspr
|
||||||
ds_colormap = &vis->extra_colormap->colormap[ds_colormap - colormaps];
|
ds_colormap = &vis->extra_colormap->colormap[ds_colormap - colormaps];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vis->transmap)
|
|
||||||
{
|
|
||||||
ds_transmap = vis->transmap;
|
ds_transmap = vis->transmap;
|
||||||
|
|
||||||
|
// Determine which R_DrawWhatever to use
|
||||||
|
|
||||||
|
// Solid color
|
||||||
|
if (ds_solidcolor)
|
||||||
|
{
|
||||||
|
UINT16 px = *(UINT16 *)ds_source;
|
||||||
|
|
||||||
|
// Uh, it's not visible.
|
||||||
|
if (!(px & 0xFF00))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Pixel color is contained in the lower 8 bits (upper 8 are the opacity), so advance the pointer
|
||||||
|
ds_source++;
|
||||||
|
|
||||||
|
if (pSplat->slope)
|
||||||
|
{
|
||||||
|
if (ds_transmap)
|
||||||
|
spanfunctype = SPANDRAWFUNC_TILTEDTRANSSOLID;
|
||||||
|
else
|
||||||
|
spanfunctype = SPANDRAWFUNC_TILTEDSOLID;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ds_transmap)
|
||||||
|
spanfunctype = SPANDRAWFUNC_TRANSSOLID;
|
||||||
|
else
|
||||||
|
spanfunctype = SPANDRAWFUNC_SOLID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Transparent
|
||||||
|
else if (ds_transmap)
|
||||||
|
{
|
||||||
if (pSplat->slope)
|
if (pSplat->slope)
|
||||||
spanfunctype = SPANDRAWFUNC_TILTEDTRANSSPRITE;
|
spanfunctype = SPANDRAWFUNC_TILTEDTRANSSPRITE;
|
||||||
else
|
else
|
||||||
spanfunctype = SPANDRAWFUNC_TRANSSPRITE;
|
spanfunctype = SPANDRAWFUNC_TRANSSPRITE;
|
||||||
}
|
}
|
||||||
|
// Opaque
|
||||||
else
|
else
|
||||||
ds_transmap = NULL;
|
{
|
||||||
|
if (pSplat->slope)
|
||||||
|
spanfunctype = SPANDRAWFUNC_TILTEDSPRITE;
|
||||||
|
else
|
||||||
|
spanfunctype = SPANDRAWFUNC_SPRITE;
|
||||||
|
}
|
||||||
|
|
||||||
if (ds_powersoftwo)
|
if (ds_powersoftwo || ds_solidcolor)
|
||||||
spanfunc = spanfuncs[spanfunctype];
|
spanfunc = spanfuncs[spanfunctype];
|
||||||
else
|
else
|
||||||
spanfunc = spanfuncs_npo2[spanfunctype];
|
spanfunc = spanfuncs_npo2[spanfunctype];
|
||||||
|
|
||||||
|
prepare_rastertab();
|
||||||
|
|
||||||
|
// do segment a -> top of texture
|
||||||
|
RASTERPARAMS(3,2,0,pSplat->width-1,0,0);
|
||||||
|
// do segment b -> right side of texture
|
||||||
|
RASTERPARAMS(2,1,0,pSplat->width-1,pSplat->height-1,0);
|
||||||
|
// do segment c -> bottom of texture
|
||||||
|
RASTERPARAMS(1,0,pSplat->width-1,0,pSplat->height-1,0);
|
||||||
|
// do segment d -> left side of texture
|
||||||
|
RASTERPARAMS(0,3,pSplat->width-1,0,0,1);
|
||||||
|
|
||||||
if (maxy >= vid.height)
|
if (maxy >= vid.height)
|
||||||
maxy = vid.height-1;
|
maxy = vid.height-1;
|
||||||
|
|
||||||
|
@ -500,7 +538,7 @@ static void R_RasterizeFloorSplat(floorsplat_t *pSplat, vector2_t *verts, visspr
|
||||||
if (x2 < x1)
|
if (x2 < x1)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!pSplat->slope)
|
if (!ds_solidcolor && !pSplat->slope)
|
||||||
{
|
{
|
||||||
fixed_t xstep, ystep;
|
fixed_t xstep, ystep;
|
||||||
fixed_t distance, span;
|
fixed_t distance, span;
|
||||||
|
@ -549,7 +587,7 @@ static void R_RasterizeFloorSplat(floorsplat_t *pSplat, vector2_t *verts, visspr
|
||||||
rastertab[y].maxx = INT32_MIN;
|
rastertab[y].maxx = INT32_MIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pSplat->angle && !pSplat->slope)
|
if (!ds_solidcolor && pSplat->angle && !pSplat->slope)
|
||||||
memset(cachedheight, 0, sizeof(cachedheight));
|
memset(cachedheight, 0, sizeof(cachedheight));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
161
src/r_things.c
161
src/r_things.c
|
@ -524,7 +524,8 @@ void R_AddSpriteDefs(UINT16 wadnum)
|
||||||
//
|
//
|
||||||
// GAME FUNCTIONS
|
// GAME FUNCTIONS
|
||||||
//
|
//
|
||||||
UINT32 visspritecount;
|
UINT32 visspritecount, numvisiblesprites;
|
||||||
|
|
||||||
static UINT32 clippedvissprites;
|
static UINT32 clippedvissprites;
|
||||||
static vissprite_t *visspritechunks[MAXVISSPRITES >> VISSPRITECHUNKBITS] = {NULL};
|
static vissprite_t *visspritechunks[MAXVISSPRITES >> VISSPRITECHUNKBITS] = {NULL};
|
||||||
|
|
||||||
|
@ -598,7 +599,7 @@ void R_InitSprites(void)
|
||||||
//
|
//
|
||||||
void R_ClearSprites(void)
|
void R_ClearSprites(void)
|
||||||
{
|
{
|
||||||
visspritecount = clippedvissprites = 0;
|
visspritecount = numvisiblesprites = clippedvissprites = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -896,7 +897,7 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
||||||
frac = vis->startfrac;
|
frac = vis->startfrac;
|
||||||
windowtop = windowbottom = sprbotscreen = INT32_MAX;
|
windowtop = windowbottom = sprbotscreen = INT32_MAX;
|
||||||
|
|
||||||
if (!(vis->cut & SC_PRECIP) && vis->mobj->skin && ((skin_t *)vis->mobj->skin)->flags & SF_HIRES)
|
if (vis->cut & SC_SHADOW && vis->mobj->skin && ((skin_t *)vis->mobj->skin)->flags & SF_HIRES)
|
||||||
this_scale = FixedMul(this_scale, ((skin_t *)vis->mobj->skin)->highresscale);
|
this_scale = FixedMul(this_scale, ((skin_t *)vis->mobj->skin)->highresscale);
|
||||||
if (this_scale <= 0)
|
if (this_scale <= 0)
|
||||||
this_scale = 1;
|
this_scale = 1;
|
||||||
|
@ -906,10 +907,10 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
||||||
{
|
{
|
||||||
vis->scale = FixedMul(vis->scale, this_scale);
|
vis->scale = FixedMul(vis->scale, this_scale);
|
||||||
vis->scalestep = FixedMul(vis->scalestep, this_scale);
|
vis->scalestep = FixedMul(vis->scalestep, this_scale);
|
||||||
vis->xiscale = FixedDiv(vis->xiscale,this_scale);
|
vis->xiscale = FixedDiv(vis->xiscale, this_scale);
|
||||||
vis->cut |= SC_ISSCALED;
|
vis->cut |= SC_ISSCALED;
|
||||||
}
|
}
|
||||||
dc_texturemid = FixedDiv(dc_texturemid,this_scale);
|
dc_texturemid = FixedDiv(dc_texturemid, this_scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
spryscale = vis->scale;
|
spryscale = vis->scale;
|
||||||
|
@ -1193,7 +1194,7 @@ fixed_t R_GetShadowZ(mobj_t *thing, pslope_t **shadowslope)
|
||||||
R_InterpolateMobjState(thing, FRACUNIT, &interp);
|
R_InterpolateMobjState(thing, FRACUNIT, &interp);
|
||||||
}
|
}
|
||||||
|
|
||||||
halfHeight = interp.z + (thing->height >> 1);
|
halfHeight = interp.z + (interp.height >> 1);
|
||||||
floorz = P_GetFloorZ(thing, interp.subsector->sector, interp.x, interp.y, NULL);
|
floorz = P_GetFloorZ(thing, interp.subsector->sector, interp.x, interp.y, NULL);
|
||||||
ceilingz = P_GetCeilingZ(thing, interp.subsector->sector, interp.x, interp.y, NULL);
|
ceilingz = P_GetCeilingZ(thing, interp.subsector->sector, interp.x, interp.y, NULL);
|
||||||
|
|
||||||
|
@ -1257,8 +1258,8 @@ fixed_t R_GetShadowZ(mobj_t *thing, pslope_t **shadowslope)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isflipped ? (ceilingz < groundz - (!groundslope ? 0 : FixedMul(abs(groundslope->zdelta), thing->radius*3/2)))
|
if (isflipped ? (ceilingz < groundz - (!groundslope ? 0 : FixedMul(abs(groundslope->zdelta), interp.radius*3/2)))
|
||||||
: (floorz > groundz + (!groundslope ? 0 : FixedMul(abs(groundslope->zdelta), thing->radius*3/2))))
|
: (floorz > groundz + (!groundslope ? 0 : FixedMul(abs(groundslope->zdelta), interp.radius*3/2))))
|
||||||
{
|
{
|
||||||
groundz = isflipped ? ceilingz : floorz;
|
groundz = isflipped ? ceilingz : floorz;
|
||||||
groundslope = NULL;
|
groundslope = NULL;
|
||||||
|
@ -1301,9 +1302,9 @@ static void R_SkewShadowSprite(
|
||||||
//CONS_Printf("Shadow is sloped by %d %d\n", xslope, zslope);
|
//CONS_Printf("Shadow is sloped by %d %d\n", xslope, zslope);
|
||||||
|
|
||||||
if (viewz < groundz)
|
if (viewz < groundz)
|
||||||
*shadowyscale += FixedMul(FixedMul(thing->radius*2 / spriteheight, scalemul), zslope);
|
*shadowyscale += FixedMul(FixedMul(interp.radius*2 / spriteheight, scalemul), zslope);
|
||||||
else
|
else
|
||||||
*shadowyscale -= FixedMul(FixedMul(thing->radius*2 / spriteheight, scalemul), zslope);
|
*shadowyscale -= FixedMul(FixedMul(interp.radius*2 / spriteheight, scalemul), zslope);
|
||||||
|
|
||||||
*shadowyscale = abs((*shadowyscale));
|
*shadowyscale = abs((*shadowyscale));
|
||||||
*shadowskew = xslope;
|
*shadowskew = xslope;
|
||||||
|
@ -1354,20 +1355,18 @@ static void R_ProjectDropShadow(mobj_t *thing, vissprite_t *vis, fixed_t scale,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
floordiff = abs((isflipped ? thing->height : 0) + interp.z - groundz);
|
floordiff = abs((isflipped ? interp.height : 0) + interp.z - groundz);
|
||||||
|
|
||||||
trans = floordiff / (100*FRACUNIT) + 3;
|
trans = floordiff / (100*FRACUNIT) + 3;
|
||||||
if (trans >= 9) return;
|
if (trans >= 9) return;
|
||||||
|
|
||||||
scalemul = FixedMul(FRACUNIT - floordiff/640, scale);
|
scalemul = FixedMul(FRACUNIT - floordiff/640, scale);
|
||||||
if ((thing->scale != thing->old_scale) && (thing->scale >= FRACUNIT/1024)) // Interpolate shadows when scaling mobjs
|
|
||||||
scalemul = FixedMul(scalemul, FixedDiv(interp.scale, thing->scale));
|
|
||||||
|
|
||||||
patch = W_CachePatchName("DSHADOW", PU_SPRITE);
|
patch = W_CachePatchName("DSHADOW", PU_SPRITE);
|
||||||
xscale = FixedDiv(projection, tz);
|
xscale = FixedDiv(projection, tz);
|
||||||
yscale = FixedDiv(projectiony, tz);
|
yscale = FixedDiv(projectiony, tz);
|
||||||
shadowxscale = FixedMul(thing->radius*2, scalemul);
|
shadowxscale = FixedMul(interp.radius*2, scalemul);
|
||||||
shadowyscale = FixedMul(FixedMul(thing->radius*2, scalemul), FixedDiv(abs(groundz - viewz), tz));
|
shadowyscale = FixedMul(FixedMul(interp.radius*2, scalemul), FixedDiv(abs(groundz - viewz), tz));
|
||||||
shadowyscale = min(shadowyscale, shadowxscale) / patch->height;
|
shadowyscale = min(shadowyscale, shadowxscale) / patch->height;
|
||||||
shadowxscale /= patch->width;
|
shadowxscale /= patch->width;
|
||||||
shadowskew = 0;
|
shadowskew = 0;
|
||||||
|
@ -1493,8 +1492,8 @@ static void R_ProjectBoundingBox(mobj_t *thing, vissprite_t *vis)
|
||||||
// 0--2
|
// 0--2
|
||||||
|
|
||||||
// start in the (0) corner
|
// start in the (0) corner
|
||||||
gx = interp.x - thing->radius - viewx;
|
gx = interp.x - interp.radius - viewx;
|
||||||
gy = interp.y - thing->radius - viewy;
|
gy = interp.y - interp.radius - viewy;
|
||||||
|
|
||||||
tz = FixedMul(gx, viewcos) + FixedMul(gy, viewsin);
|
tz = FixedMul(gx, viewcos) + FixedMul(gy, viewsin);
|
||||||
|
|
||||||
|
@ -1516,14 +1515,14 @@ static void R_ProjectBoundingBox(mobj_t *thing, vissprite_t *vis)
|
||||||
box = R_NewVisSprite();
|
box = R_NewVisSprite();
|
||||||
box->mobj = thing;
|
box->mobj = thing;
|
||||||
box->mobjflags = thing->flags;
|
box->mobjflags = thing->flags;
|
||||||
box->thingheight = thing->height;
|
box->thingheight = interp.height;
|
||||||
box->cut = SC_BBOX;
|
box->cut = SC_BBOX;
|
||||||
|
|
||||||
box->gx = tx;
|
box->gx = tx;
|
||||||
box->gy = tz;
|
box->gy = tz;
|
||||||
|
|
||||||
box->scale = 2 * FixedMul(thing->radius, viewsin);
|
box->scale = 2 * FixedMul(interp.radius, viewsin);
|
||||||
box->xscale = 2 * FixedMul(thing->radius, viewcos);
|
box->xscale = 2 * FixedMul(interp.radius, viewcos);
|
||||||
|
|
||||||
box->pz = interp.z;
|
box->pz = interp.z;
|
||||||
box->pzt = box->pz + box->thingheight;
|
box->pzt = box->pz + box->thingheight;
|
||||||
|
@ -1572,6 +1571,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
fixed_t tr_x, tr_y;
|
fixed_t tr_x, tr_y;
|
||||||
fixed_t tx, tz;
|
fixed_t tx, tz;
|
||||||
fixed_t xscale, yscale; //added : 02-02-98 : aaargll..if I were a math-guy!!!
|
fixed_t xscale, yscale; //added : 02-02-98 : aaargll..if I were a math-guy!!!
|
||||||
|
fixed_t radius, height; // For drop shadows
|
||||||
fixed_t sortscale, sortsplat = 0;
|
fixed_t sortscale, sortsplat = 0;
|
||||||
fixed_t linkscale = 0;
|
fixed_t linkscale = 0;
|
||||||
fixed_t sort_x = 0, sort_y = 0, sort_z;
|
fixed_t sort_x = 0, sort_y = 0, sort_z;
|
||||||
|
@ -1647,6 +1647,8 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
}
|
}
|
||||||
|
|
||||||
this_scale = interp.scale;
|
this_scale = interp.scale;
|
||||||
|
radius = interp.radius; // For drop shadows
|
||||||
|
height = interp.height; // Ditto
|
||||||
|
|
||||||
// transform the origin point
|
// transform the origin point
|
||||||
tr_x = interp.x - viewx;
|
tr_x = interp.x - viewx;
|
||||||
|
@ -1767,9 +1769,6 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
|
|
||||||
I_Assert(lump < max_spritelumps);
|
I_Assert(lump < max_spritelumps);
|
||||||
|
|
||||||
if (thing->skin && ((skin_t *)thing->skin)->flags & SF_HIRES)
|
|
||||||
this_scale = FixedMul(this_scale, ((skin_t *)thing->skin)->highresscale);
|
|
||||||
|
|
||||||
spr_width = spritecachedinfo[lump].width;
|
spr_width = spritecachedinfo[lump].width;
|
||||||
spr_height = spritecachedinfo[lump].height;
|
spr_height = spritecachedinfo[lump].height;
|
||||||
spr_offset = spritecachedinfo[lump].offset;
|
spr_offset = spritecachedinfo[lump].offset;
|
||||||
|
@ -1819,6 +1818,14 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
// calculate edges of the shape
|
// calculate edges of the shape
|
||||||
spritexscale = interp.spritexscale;
|
spritexscale = interp.spritexscale;
|
||||||
spriteyscale = interp.spriteyscale;
|
spriteyscale = interp.spriteyscale;
|
||||||
|
|
||||||
|
if (thing->skin && ((skin_t *)thing->skin)->flags & SF_HIRES)
|
||||||
|
{
|
||||||
|
fixed_t highresscale = ((skin_t *)thing->skin)->highresscale;
|
||||||
|
spritexscale = FixedMul(spritexscale, highresscale);
|
||||||
|
spriteyscale = FixedMul(spriteyscale, highresscale);
|
||||||
|
}
|
||||||
|
|
||||||
if (spritexscale < 1 || spriteyscale < 1)
|
if (spritexscale < 1 || spriteyscale < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1986,6 +1993,8 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
{
|
{
|
||||||
R_InterpolateMobjState(thing, FRACUNIT, &tracer_interp);
|
R_InterpolateMobjState(thing, FRACUNIT, &tracer_interp);
|
||||||
}
|
}
|
||||||
|
radius = tracer_interp.radius; // For drop shadows
|
||||||
|
height = tracer_interp.height; // Ditto
|
||||||
|
|
||||||
tr_x = (tracer_interp.x + sort_x) - viewx;
|
tr_x = (tracer_interp.x + sort_x) - viewx;
|
||||||
tr_y = (tracer_interp.y + sort_y) - viewy;
|
tr_y = (tracer_interp.y + sort_y) - viewy;
|
||||||
|
@ -2077,7 +2086,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
if (abs(groundz-viewz)/tz > 4)
|
if (abs(groundz-viewz)/tz > 4)
|
||||||
return; // Prevent stretchy shadows and possible crashes
|
return; // Prevent stretchy shadows and possible crashes
|
||||||
|
|
||||||
floordiff = abs((isflipped ? caster->height : 0) + casterinterp.z - groundz);
|
floordiff = abs((isflipped ? casterinterp.height : 0) + casterinterp.z - groundz);
|
||||||
trans += ((floordiff / (100*FRACUNIT)) + 3);
|
trans += ((floordiff / (100*FRACUNIT)) + 3);
|
||||||
shadowscale = FixedMul(FRACUNIT - floordiff/640, casterinterp.scale);
|
shadowscale = FixedMul(FRACUNIT - floordiff/640, casterinterp.scale);
|
||||||
}
|
}
|
||||||
|
@ -2092,8 +2101,8 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
|
|
||||||
if (shadowdraw)
|
if (shadowdraw)
|
||||||
{
|
{
|
||||||
spritexscale = FixedMul(thing->radius * 2, FixedMul(shadowscale, spritexscale));
|
spritexscale = FixedMul(radius * 2, FixedMul(shadowscale, spritexscale));
|
||||||
spriteyscale = FixedMul(thing->radius * 2, FixedMul(shadowscale, spriteyscale));
|
spriteyscale = FixedMul(radius * 2, FixedMul(shadowscale, spriteyscale));
|
||||||
spriteyscale = FixedMul(spriteyscale, FixedDiv(abs(groundz - viewz), tz));
|
spriteyscale = FixedMul(spriteyscale, FixedDiv(abs(groundz - viewz), tz));
|
||||||
spriteyscale = min(spriteyscale, spritexscale) / patch->height;
|
spriteyscale = min(spriteyscale, spritexscale) / patch->height;
|
||||||
spritexscale /= patch->width;
|
spritexscale /= patch->width;
|
||||||
|
@ -2108,7 +2117,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
{
|
{
|
||||||
R_SkewShadowSprite(thing, thing->standingslope, groundz, patch->height, shadowscale, &spriteyscale, &sheartan);
|
R_SkewShadowSprite(thing, thing->standingslope, groundz, patch->height, shadowscale, &spriteyscale, &sheartan);
|
||||||
|
|
||||||
gzt = (isflipped ? (interp.z + thing->height) : interp.z) + patch->height * spriteyscale / 2;
|
gzt = (isflipped ? (interp.z + height) : interp.z) + patch->height * spriteyscale / 2;
|
||||||
gz = gzt - patch->height * spriteyscale;
|
gz = gzt - patch->height * spriteyscale;
|
||||||
|
|
||||||
cut |= SC_SHEAR;
|
cut |= SC_SHEAR;
|
||||||
|
@ -2123,11 +2132,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
// When vertical flipped, draw sprites from the top down, at least as far as offsets are concerned.
|
// When vertical flipped, draw sprites from the top down, at least as far as offsets are concerned.
|
||||||
// sprite height - sprite topoffset is the proper inverse of the vertical offset, of course.
|
// sprite height - sprite topoffset is the proper inverse of the vertical offset, of course.
|
||||||
// remember gz and gzt should be seperated by sprite height, not thing height - thing height can be shorter than the sprite itself sometimes!
|
// remember gz and gzt should be seperated by sprite height, not thing height - thing height can be shorter than the sprite itself sometimes!
|
||||||
|
gz = interp.z + interp.height - FixedMul(spr_topoffset, FixedMul(spriteyscale, this_scale));
|
||||||
if (oldthing->scale != oldthing->old_scale) // Interpolate heights in reverse gravity when scaling mobjs
|
|
||||||
gz = interp.z + FixedMul(oldthing->height, FixedDiv(interp.scale, oldthing->scale)) - FixedMul(spr_topoffset, FixedMul(spriteyscale, this_scale));
|
|
||||||
else
|
|
||||||
gz = interp.z + oldthing->height - FixedMul(spr_topoffset, FixedMul(spriteyscale, this_scale));
|
|
||||||
gzt = gz + FixedMul(spr_height, FixedMul(spriteyscale, this_scale));
|
gzt = gz + FixedMul(spr_height, FixedMul(spriteyscale, this_scale));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2206,7 +2211,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
vis->gy = interp.y;
|
vis->gy = interp.y;
|
||||||
vis->gz = gz;
|
vis->gz = gz;
|
||||||
vis->gzt = gzt;
|
vis->gzt = gzt;
|
||||||
vis->thingheight = thing->height;
|
vis->thingheight = height;
|
||||||
vis->pz = interp.z;
|
vis->pz = interp.z;
|
||||||
vis->pzt = vis->pz + vis->thingheight;
|
vis->pzt = vis->pz + vis->thingheight;
|
||||||
vis->texturemid = FixedDiv(gzt - viewz, spriteyscale);
|
vis->texturemid = FixedDiv(gzt - viewz, spriteyscale);
|
||||||
|
@ -2646,6 +2651,14 @@ static void R_SortVisSprites(vissprite_t* vsprsortedhead, UINT32 start, UINT32 e
|
||||||
// bundle linkdraw
|
// bundle linkdraw
|
||||||
for (ds = unsorted.prev; ds != &unsorted; ds = ds->prev)
|
for (ds = unsorted.prev; ds != &unsorted; ds = ds->prev)
|
||||||
{
|
{
|
||||||
|
// Remove this sprite if it was determined to not be visible
|
||||||
|
if (ds->cut & SC_NOTVISIBLE)
|
||||||
|
{
|
||||||
|
ds->next->prev = ds->prev;
|
||||||
|
ds->prev->next = ds->next;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!(ds->cut & SC_LINKDRAW))
|
if (!(ds->cut & SC_LINKDRAW))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -2672,21 +2685,27 @@ static void R_SortVisSprites(vissprite_t* vsprsortedhead, UINT32 start, UINT32 e
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// don't connect if the tracer's top is cut off, but lower than the link's top
|
// don't connect if the tracer's top is cut off, but lower than the link's top
|
||||||
if ((dsfirst->cut & SC_TOP)
|
if ((dsfirst->cut & SC_TOP) && dsfirst->szt > ds->szt)
|
||||||
&& dsfirst->szt > ds->szt)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// don't connect if the tracer's bottom is cut off, but higher than the link's bottom
|
// don't connect if the tracer's bottom is cut off, but higher than the link's bottom
|
||||||
if ((dsfirst->cut & SC_BOTTOM)
|
if ((dsfirst->cut & SC_BOTTOM) && dsfirst->sz < ds->sz)
|
||||||
&& dsfirst->sz < ds->sz)
|
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// If the object isn't visible, then the bounding box isn't either
|
||||||
|
if (ds->cut & SC_BBOX && dsfirst->cut & SC_NOTVISIBLE)
|
||||||
|
ds->cut |= SC_NOTVISIBLE;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove from chain
|
// remove from chain
|
||||||
ds->next->prev = ds->prev;
|
ds->next->prev = ds->prev;
|
||||||
ds->prev->next = ds->next;
|
ds->prev->next = ds->next;
|
||||||
|
|
||||||
|
if (ds->cut & SC_NOTVISIBLE)
|
||||||
|
continue;
|
||||||
|
|
||||||
linkedvissprites++;
|
linkedvissprites++;
|
||||||
|
|
||||||
if (dsfirst != &unsorted)
|
if (dsfirst != &unsorted)
|
||||||
|
@ -2738,6 +2757,8 @@ static void R_SortVisSprites(vissprite_t* vsprsortedhead, UINT32 start, UINT32 e
|
||||||
best = ds;
|
best = ds;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (best)
|
||||||
|
{
|
||||||
best->next->prev = best->prev;
|
best->next->prev = best->prev;
|
||||||
best->prev->next = best->next;
|
best->prev->next = best->next;
|
||||||
best->next = vsprsortedhead;
|
best->next = vsprsortedhead;
|
||||||
|
@ -2745,6 +2766,7 @@ static void R_SortVisSprites(vissprite_t* vsprsortedhead, UINT32 start, UINT32 e
|
||||||
vsprsortedhead->prev->next = best;
|
vsprsortedhead->prev->next = best;
|
||||||
vsprsortedhead->prev = best;
|
vsprsortedhead->prev = best;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -3174,6 +3196,44 @@ static void R_HeightSecClip(vissprite_t *spr, INT32 x1, INT32 x2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static boolean R_CheckSpriteVisible(vissprite_t *spr, INT32 x1, INT32 x2)
|
||||||
|
{
|
||||||
|
INT16 sz = spr->sz;
|
||||||
|
INT16 szt = spr->szt;
|
||||||
|
|
||||||
|
fixed_t texturemid, yscale, scalestep = spr->scalestep;
|
||||||
|
INT32 height;
|
||||||
|
|
||||||
|
if (scalestep)
|
||||||
|
{
|
||||||
|
height = spr->patch->height;
|
||||||
|
yscale = spr->scale;
|
||||||
|
scalestep = FixedMul(scalestep, spr->spriteyscale);
|
||||||
|
|
||||||
|
if (spr->thingscale != FRACUNIT)
|
||||||
|
texturemid = FixedDiv(spr->texturemid, max(spr->thingscale, 1));
|
||||||
|
else
|
||||||
|
texturemid = spr->texturemid;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (INT32 x = x1; x <= x2; x++)
|
||||||
|
{
|
||||||
|
if (scalestep)
|
||||||
|
{
|
||||||
|
fixed_t top = centeryfrac - FixedMul(texturemid, yscale);
|
||||||
|
fixed_t bottom = top + (height * yscale);
|
||||||
|
szt = (INT16)(top >> FRACBITS);
|
||||||
|
sz = (INT16)(bottom >> FRACBITS);
|
||||||
|
yscale += scalestep;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spr->cliptop[x] < spr->clipbot[x] && sz > spr->cliptop[x] && szt < spr->clipbot[x])
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// R_ClipVisSprite
|
// R_ClipVisSprite
|
||||||
// Clips vissprites without drawing, so that portals can work. -Red
|
// Clips vissprites without drawing, so that portals can work. -Red
|
||||||
static void R_ClipVisSprite(vissprite_t *spr, INT32 x1, INT32 x2, portal_t* portal)
|
static void R_ClipVisSprite(vissprite_t *spr, INT32 x1, INT32 x2, portal_t* portal)
|
||||||
|
@ -3317,8 +3377,7 @@ static void R_ClipVisSprite(vissprite_t *spr, INT32 x1, INT32 x2, portal_t* port
|
||||||
spr->clipbot[x] = (INT16)viewheight;
|
spr->clipbot[x] = (INT16)viewheight;
|
||||||
|
|
||||||
if (spr->cliptop[x] == -2)
|
if (spr->cliptop[x] == -2)
|
||||||
//Fab : 26-04-98: was -1, now clips against console bottom
|
spr->cliptop[x] = -1;
|
||||||
spr->cliptop[x] = (INT16)con_clipviewtop;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (portal)
|
if (portal)
|
||||||
|
@ -3343,6 +3402,14 @@ static void R_ClipVisSprite(vissprite_t *spr, INT32 x1, INT32 x2, portal_t* port
|
||||||
spr->cliptop[x] = -1;
|
spr->cliptop[x] = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if it'll be visible
|
||||||
|
// Not done for floorsprites.
|
||||||
|
if (cv_spriteclip.value && (spr->cut & SC_SPLAT) == 0)
|
||||||
|
{
|
||||||
|
if (!R_CheckSpriteVisible(spr, x1, x2))
|
||||||
|
spr->cut |= SC_NOTVISIBLE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void R_ClipSprites(drawseg_t* dsstart, portal_t* portal)
|
void R_ClipSprites(drawseg_t* dsstart, portal_t* portal)
|
||||||
|
@ -3411,8 +3478,19 @@ void R_ClipSprites(drawseg_t* dsstart, portal_t* portal)
|
||||||
{
|
{
|
||||||
vissprite_t *spr = R_GetVisSprite(clippedvissprites);
|
vissprite_t *spr = R_GetVisSprite(clippedvissprites);
|
||||||
|
|
||||||
if (spr->cut & SC_BBOX)
|
if (cv_spriteclip.value
|
||||||
|
&& (spr->szt > vid.height || spr->sz < 0)
|
||||||
|
&& !((spr->cut & SC_SPLAT) || spr->scalestep))
|
||||||
|
{
|
||||||
|
spr->cut |= SC_NOTVISIBLE;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spr->cut & SC_BBOX)
|
||||||
|
{
|
||||||
|
numvisiblesprites++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
INT32 x1 = (spr->cut & SC_SPLAT) ? 0 : spr->x1;
|
INT32 x1 = (spr->cut & SC_SPLAT) ? 0 : spr->x1;
|
||||||
INT32 x2 = (spr->cut & SC_SPLAT) ? viewwidth : spr->x2;
|
INT32 x2 = (spr->cut & SC_SPLAT) ? viewwidth : spr->x2;
|
||||||
|
@ -3434,6 +3512,9 @@ void R_ClipSprites(drawseg_t* dsstart, portal_t* portal)
|
||||||
}
|
}
|
||||||
|
|
||||||
R_ClipVisSprite(spr, x1, x2, portal);
|
R_ClipVisSprite(spr, x1, x2, portal);
|
||||||
|
|
||||||
|
if ((spr->cut & SC_NOTVISIBLE) == 0)
|
||||||
|
numvisiblesprites++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -123,21 +123,22 @@ typedef enum
|
||||||
SC_NONE = 0,
|
SC_NONE = 0,
|
||||||
SC_TOP = 1,
|
SC_TOP = 1,
|
||||||
SC_BOTTOM = 1<<1,
|
SC_BOTTOM = 1<<1,
|
||||||
|
SC_NOTVISIBLE = 1<<2,
|
||||||
// other flags
|
// other flags
|
||||||
SC_PRECIP = 1<<2,
|
SC_PRECIP = 1<<3,
|
||||||
SC_LINKDRAW = 1<<3,
|
SC_LINKDRAW = 1<<4,
|
||||||
SC_FULLBRIGHT = 1<<4,
|
SC_FULLBRIGHT = 1<<5,
|
||||||
SC_SEMIBRIGHT = 1<<5,
|
SC_SEMIBRIGHT = 1<<6,
|
||||||
SC_FULLDARK = 1<<6,
|
SC_FULLDARK = 1<<7,
|
||||||
SC_VFLIP = 1<<7,
|
SC_VFLIP = 1<<8,
|
||||||
SC_ISSCALED = 1<<8,
|
SC_ISSCALED = 1<<9,
|
||||||
SC_ISROTATED = 1<<9,
|
SC_ISROTATED = 1<<10,
|
||||||
SC_SHADOW = 1<<10,
|
SC_SHADOW = 1<<11,
|
||||||
SC_SHEAR = 1<<11,
|
SC_SHEAR = 1<<12,
|
||||||
SC_SPLAT = 1<<12,
|
SC_SPLAT = 1<<13,
|
||||||
SC_BBOX = 1<<13,
|
SC_BBOX = 1<<14,
|
||||||
// masks
|
// masks
|
||||||
SC_CUTMASK = SC_TOP|SC_BOTTOM,
|
SC_CUTMASK = SC_TOP|SC_BOTTOM|SC_NOTVISIBLE,
|
||||||
SC_FLAGMASK = ~SC_CUTMASK
|
SC_FLAGMASK = ~SC_CUTMASK
|
||||||
} spritecut_e;
|
} spritecut_e;
|
||||||
|
|
||||||
|
@ -219,7 +220,7 @@ typedef struct vissprite_s
|
||||||
INT32 dispoffset; // copy of mobj->dispoffset, affects ordering but not drawing
|
INT32 dispoffset; // copy of mobj->dispoffset, affects ordering but not drawing
|
||||||
} vissprite_t;
|
} vissprite_t;
|
||||||
|
|
||||||
extern UINT32 visspritecount;
|
extern UINT32 visspritecount, numvisiblesprites;
|
||||||
|
|
||||||
void R_ClipSprites(drawseg_t* dsstart, portal_t* portal);
|
void R_ClipSprites(drawseg_t* dsstart, portal_t* portal);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#define SRB2VERSION "2.2.12"/* this must be the first line, for cmake !! */
|
#define SRB2VERSION "2.2.13"/* this must be the first line, for cmake !! */
|
||||||
|
|
||||||
// The Modification ID; must be obtained from a Master Server Admin ( https://mb.srb2.org/members/?key=ms_admin ).
|
// The Modification ID; must be obtained from a Master Server Admin ( https://mb.srb2.org/members/?key=ms_admin ).
|
||||||
// DO NOT try to set this otherwise, or your modification will be unplayable through the Master Server.
|
// DO NOT try to set this otherwise, or your modification will be unplayable through the Master Server.
|
||||||
|
@ -9,7 +9,7 @@
|
||||||
// it's only for detection of the version the player is using so the MS can alert them of an update.
|
// it's only for detection of the version the player is using so the MS can alert them of an update.
|
||||||
// Only set it higher, not lower, obviously.
|
// Only set it higher, not lower, obviously.
|
||||||
// Note that we use this to help keep internal testing in check; this is why v2.2.0 is not version "1".
|
// Note that we use this to help keep internal testing in check; this is why v2.2.0 is not version "1".
|
||||||
#define MODVERSION 53
|
#define MODVERSION 54
|
||||||
|
|
||||||
// Define this as a prerelease version suffix (pre#, RC#)
|
// Define this as a prerelease version suffix (pre#, RC#)
|
||||||
//#define BETAVERSION "pre1"
|
//#define BETAVERSION "pre1"
|
||||||
|
|
|
@ -77,8 +77,8 @@ END
|
||||||
#include "../doomdef.h" // Needed for version string
|
#include "../doomdef.h" // Needed for version string
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 2,2,12,0
|
FILEVERSION 2,2,13,0
|
||||||
PRODUCTVERSION 2,2,12,0
|
PRODUCTVERSION 2,2,13,0
|
||||||
FILEFLAGSMASK 0x3fL
|
FILEFLAGSMASK 0x3fL
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
|
|
Loading…
Reference in a new issue