- Replaced WALLF_AUTOCONTRAST with WALLF_NOFAKECONTRAST so that the

default setting for the flags is 0.
- Added: doom2day's smoothlighting
- Added: dontincrement argument to A_CheckForReload.


SVN r1179 (trunk)
This commit is contained in:
Christoph Oelckers 2008-08-21 08:04:21 +00:00
parent f64862fe75
commit 76cb09d546
12 changed files with 64 additions and 27 deletions

View file

@ -1,4 +1,8 @@
August 21, 2008 (Changes by Graf Zahl) August 21, 2008 (Changes by Graf Zahl)
- Replaced WALLF_AUTOCONTRAST with WALLF_NOFAKECONTRAST so that the
default setting for the flags is 0.
- Added: doom2day's smoothlighting
- Added: dontincrement argument to A_CheckForReload.
- Fixed: The UDMF parser wrote class filter bits into SkillFilter. - Fixed: The UDMF parser wrote class filter bits into SkillFilter.
- Fixed: (SBARINFO patch) DrawInventoryBar has a missing argument in - Fixed: (SBARINFO patch) DrawInventoryBar has a missing argument in
one of its drawgraphic calls. one of its drawgraphic calls.
@ -58,14 +62,14 @@ August 12, 2008 (Changes by Graf Zahl)
- Removed code related to internal ActorInfo definitions from dobjtype.cpp. - Removed code related to internal ActorInfo definitions from dobjtype.cpp.
- removed unneeded file dehackedactions.h - removed unneeded file dehackedactions.h
August 11, 2008 August 11, 2008
- Ported asm_x86_64/tmap3.nas to AT&T syntax so it can be compiled with gas. - Ported asm_x86_64/tmap3.nas to AT&T syntax so it can be compiled with gas.
After finding out that gas does have directives to describe the .eh_frame After finding out that gas does have directives to describe the .eh_frame
metadata, I figured that would be significantly easier and quicker than metadata, I figured that would be significantly easier and quicker than
trying to locate all the scattered docs needed to construct it by hand. trying to locate all the scattered docs needed to construct it by hand.
Unfortunately, this now means I have to maintain two versions of exactly Unfortunately, this now means I have to maintain two versions of exactly
the same code. :( the same code. :(
August 11, 2008 (Changes by Graf Zahl) August 11, 2008 (Changes by Graf Zahl)
- Removed 'eval' modifier from DECORATE. All int, float and bool parameters are - Removed 'eval' modifier from DECORATE. All int, float and bool parameters are
'eval' now by default. 'eval' now by default.

View file

@ -278,6 +278,7 @@ static const char *MapInfoMapLevel[] =
"lightning", "lightning",
"fadetable", "fadetable",
"evenlighting", "evenlighting",
"smoothlighting",
"noautosequences", "noautosequences",
"forcenoskystretch", "forcenoskystretch",
"allowfreelook", "allowfreelook",
@ -429,6 +430,7 @@ MapHandlers[] =
{ MITYPE_SETFLAG, LEVEL_STARTLIGHTNING, 0 }, { MITYPE_SETFLAG, LEVEL_STARTLIGHTNING, 0 },
{ MITYPE_LUMPNAME, lioffset(fadetable), 0 }, { MITYPE_LUMPNAME, lioffset(fadetable), 0 },
{ MITYPE_CLRBYTES, lioffset(WallVertLight), lioffset(WallHorizLight) }, { MITYPE_CLRBYTES, lioffset(WallVertLight), lioffset(WallHorizLight) },
{ MITYPE_SETFLAG, LEVEL_SMOOTHLIGHTING, 0 },
{ MITYPE_SETFLAG, LEVEL_SNDSEQTOTALCTRL, 0 }, { MITYPE_SETFLAG, LEVEL_SNDSEQTOTALCTRL, 0 },
{ MITYPE_SETFLAG, LEVEL_FORCENOSKYSTRETCH, 0 }, { MITYPE_SETFLAG, LEVEL_FORCENOSKYSTRETCH, 0 },
{ MITYPE_SCFLAGS, LEVEL_FREELOOK_YES, ~LEVEL_FREELOOK_NO }, { MITYPE_SCFLAGS, LEVEL_FREELOOK_YES, ~LEVEL_FREELOOK_NO },

View file

@ -122,6 +122,8 @@
#define LEVEL_DUMMYSWITCHES UCONST64(0x40000000000000) #define LEVEL_DUMMYSWITCHES UCONST64(0x40000000000000)
#define LEVEL_HEXENHACK UCONST64(0x80000000000000) // Level was defined in a Hexen style MAPINFO #define LEVEL_HEXENHACK UCONST64(0x80000000000000) // Level was defined in a Hexen style MAPINFO
#define LEVEL_SMOOTHLIGHTING UCONST64(0x100000000000000) // Level uses the smooth lighting feature.
struct acsdefered_s; struct acsdefered_s;

View file

@ -405,5 +405,6 @@ xx(offsety_bottom)
xx(light) xx(light)
xx(lightabsolute) xx(lightabsolute)
xx(nofakecontrast) xx(nofakecontrast)
xx(smoothlighting)
xx(Renderstyle) xx(Renderstyle)

View file

@ -2177,7 +2177,7 @@ void P_LoadSideDefs2 (MapData * map)
sd->SetTextureXOffset(LittleShort(msd->textureoffset)<<FRACBITS); sd->SetTextureXOffset(LittleShort(msd->textureoffset)<<FRACBITS);
sd->SetTextureYOffset(LittleShort(msd->rowoffset)<<FRACBITS); sd->SetTextureYOffset(LittleShort(msd->rowoffset)<<FRACBITS);
sd->linenum = NO_INDEX; sd->linenum = NO_INDEX;
sd->Flags = WALLF_AUTOCONTRAST; sd->Flags = 0;
// killough 4/4/98: allow sidedef texture names to be overloaded // killough 4/4/98: allow sidedef texture names to be overloaded
// killough 4/11/98: refined to allow colormaps to work as wall // killough 4/11/98: refined to allow colormaps to work as wall

View file

@ -765,20 +765,18 @@ DWallLightTransfer::DWallLightTransfer (sector_t *srcSec, int target, BYTE flags
Flags = flags; Flags = flags;
DoTransfer (LastLight = srcSec->lightlevel, target, Flags); DoTransfer (LastLight = srcSec->lightlevel, target, Flags);
if (!(flags&WLF_NOFAKECONTRAST)) wallflags = WALLF_AUTOCONTRAST|WALLF_ABSLIGHTING; if (!(flags&WLF_NOFAKECONTRAST)) wallflags = WALLF_ABSLIGHTING;
else wallflags = WALLF_ABSLIGHTING; else wallflags = WALLF_NOFAKECONTRAST|WALLF_ABSLIGHTING;
for (linenum = -1; (linenum = P_FindLineFromID (target, linenum)) >= 0; ) for (linenum = -1; (linenum = P_FindLineFromID (target, linenum)) >= 0; )
{ {
if (flags & WLF_SIDE1 && lines[linenum].sidenum[0]!=NO_SIDE) if (flags & WLF_SIDE1 && lines[linenum].sidenum[0]!=NO_SIDE)
{ {
sides[lines[linenum].sidenum[0]].Flags &= ~WALLF_AUTOCONTRAST;
sides[lines[linenum].sidenum[0]].Flags |= wallflags; sides[lines[linenum].sidenum[0]].Flags |= wallflags;
} }
if (flags & WLF_SIDE2 && lines[linenum].sidenum[1]!=NO_SIDE) if (flags & WLF_SIDE2 && lines[linenum].sidenum[1]!=NO_SIDE)
{ {
sides[lines[linenum].sidenum[0]].Flags &= ~WALLF_AUTOCONTRAST;
sides[lines[linenum].sidenum[1]].Flags |= wallflags; sides[lines[linenum].sidenum[1]].Flags |= wallflags;
} }
} }

View file

@ -733,13 +733,18 @@ struct UDMFParser
break; break;
case NAME_lightabsolute: case NAME_lightabsolute:
if (CheckBool(key)) sd->Flags|=WALLF_ABSLIGHTING; if (CheckBool(key)) sd->Flags |= WALLF_ABSLIGHTING;
else sd->Flags&=~WALLF_ABSLIGHTING; else sd->Flags &= ~WALLF_ABSLIGHTING;
break; break;
case NAME_nofakecontrast: case NAME_nofakecontrast:
if (CheckBool(key)) sd->Flags&=~WALLF_AUTOCONTRAST; if (CheckBool(key)) sd->Flags |= WALLF_NOFAKECONTRAST;
else sd->Flags|=WALLF_AUTOCONTRAST; else sd->Flags &= WALLF_NOFAKECONTRAST;
break;
case NAME_smoothlighting:
if (CheckBool(key)) sd->Flags |= WALLF_SMOOTHLIGHTING;
else sd->Flags &= ~WALLF_SMOOTHLIGHTING;
break; break;
default: default:

View file

@ -622,7 +622,8 @@ enum
{ {
WALLF_ABSLIGHTING = 1, // Light is absolute instead of relative WALLF_ABSLIGHTING = 1, // Light is absolute instead of relative
WALLF_NOAUTODECALS = 2, // Do not attach impact decals to this wall WALLF_NOAUTODECALS = 2, // Do not attach impact decals to this wall
WALLF_AUTOCONTRAST = 4, // Automatically handle fake contrast in side_t::GetLightLevel WALLF_NOFAKECONTRAST = 4, // Don't do fake contrast for this wall in side_t::GetLightLevel
WALLF_SMOOTHLIGHTING = 8, // Similar to autocontrast but applies to all angles.
}; };
struct side_t struct side_t

View file

@ -1421,6 +1421,8 @@ void R_NewWall (bool needlights)
} }
} }
CVAR(Bool, r_smoothlighting, false, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
int side_t::GetLightLevel (bool foggy, int baselight) const int side_t::GetLightLevel (bool foggy, int baselight) const
{ {
if (Flags & WALLF_ABSLIGHTING) if (Flags & WALLF_ABSLIGHTING)
@ -1431,10 +1433,22 @@ int side_t::GetLightLevel (bool foggy, int baselight) const
if (!foggy) // Don't do relative lighting in foggy sectors if (!foggy) // Don't do relative lighting in foggy sectors
{ {
if (Flags & WALLF_AUTOCONTRAST) if (!(Flags & WALLF_NOFAKECONTRAST))
{ {
baselight += lines[linenum].dx==0? level.WallVertLight : if((level.flags & LEVEL_SMOOTHLIGHTING) || (Flags & WALLF_SMOOTHLIGHTING) || r_smoothlighting)
lines[linenum].dy==0? level.WallHorizLight : 0; {
baselight += int // OMG LEE KILLOUGH LIVES! :/
(
(float(level.WallHorizLight)
+abs(atan(float(linedef->dy)/float(linedef->dx))/float(1.57079))
*float(level.WallVertLight - level.WallHorizLight))
);
}
else
{
baselight += lines[linenum].dx==0? level.WallVertLight :
lines[linenum].dy==0? level.WallHorizLight : 0;
}
} }
if (!(Flags & WALLF_ABSLIGHTING)) if (!(Flags & WALLF_ABSLIGHTING))
{ {

View file

@ -2192,13 +2192,20 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CheckForReload)
ACTION_PARAM_START(2); ACTION_PARAM_START(2);
ACTION_PARAM_INT(count, 0); ACTION_PARAM_INT(count, 0);
ACTION_PARAM_STATE(jump, 1); ACTION_PARAM_STATE(jump, 1);
ACTION_PARAM_BOOL(dontincrement, 2)
if (count <= 0) return;
AWeapon *weapon = self->player->ReadyWeapon; AWeapon *weapon = self->player->ReadyWeapon;
weapon->ReloadCounter = (weapon->ReloadCounter+1) % count; int ReloadCounter = weapon->ReloadCounter;
if(!dontincrement || ReloadCounter != 0)
ReloadCounter = (weapon->ReloadCounter+1) % count;
else // 0 % 1 = 1? So how do we check if the weapon was never fired? We should only do this when we're not incrementing the counter though.
ReloadCounter = 1;
// If we have not made our last shot... // If we have not made our last shot...
if (weapon->ReloadCounter != 0) if (ReloadCounter != 0)
{ {
// Go back to the refire frames, instead of continuing on to the reload frames. // Go back to the refire frames, instead of continuing on to the reload frames.
ACTION_JUMP(jump); ACTION_JUMP(jump);
@ -2208,6 +2215,9 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_CheckForReload)
// We need to reload. However, don't reload if we're out of ammo. // We need to reload. However, don't reload if we're out of ammo.
weapon->CheckAmmo( false, false ); weapon->CheckAmmo( false, false );
} }
if(!dontincrement)
weapon->ReloadCounter = ReloadCounter;
} }
//=========================================================================== //===========================================================================

View file

@ -75,7 +75,7 @@
// SAVESIG should match SAVEVER. // SAVESIG should match SAVEVER.
// MINSAVEVER is the minimum level snapshot version that can be loaded. // MINSAVEVER is the minimum level snapshot version that can be loaded.
#define MINSAVEVER 1129 #define MINSAVEVER 1179
#if SVN_REVISION_NUMBER < MINSAVEVER #if SVN_REVISION_NUMBER < MINSAVEVER
// Never write a savegame with a version lower than what we need // Never write a savegame with a version lower than what we need

View file

@ -38,7 +38,7 @@ ACTOR Inventory native
action native A_CheckReload(); action native A_CheckReload();
action native A_GunFlash(); action native A_GunFlash();
action native A_Saw(sound fullsound = "weapons/sawfull", sound hitsound = "weapons/sawhit", int damage = 2, class<Actor> pufftype = "BulletPuff"); action native A_Saw(sound fullsound = "weapons/sawfull", sound hitsound = "weapons/sawhit", int damage = 2, class<Actor> pufftype = "BulletPuff");
action native A_CheckForReload(int counter, state label); action native A_CheckForReload(int counter, state label, bool dontincrement = false);
action native A_ResetReloadCounter(); action native A_ResetReloadCounter();
action native A_RestoreSpecialPosition(); action native A_RestoreSpecialPosition();
action native A_RestoreSpecialDoomThing(); action native A_RestoreSpecialDoomThing();