mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2025-02-27 21:50:47 +00:00
Merge tag 'g2.3.2'
# Conflicts: # src/p_effect.cpp # src/p_secnodes.cpp # src/r_draw.cpp # src/r_things.cpp # src/win32/win32video.cpp
This commit is contained in:
commit
4521f9eabc
30 changed files with 141 additions and 52 deletions
|
@ -258,5 +258,6 @@ DEFINE_SPECIAL(Ceiling_LowerByTexture, 269, 2, 4, 4)
|
||||||
DEFINE_SPECIAL(Stairs_BuildDownDoom, 270, 5, 5, 5)
|
DEFINE_SPECIAL(Stairs_BuildDownDoom, 270, 5, 5, 5)
|
||||||
DEFINE_SPECIAL(Stairs_BuildUpDoomSync, 271, 4, 4, 4)
|
DEFINE_SPECIAL(Stairs_BuildUpDoomSync, 271, 4, 4, 4)
|
||||||
DEFINE_SPECIAL(Stairs_BuildDownDoomSync, 272, 4, 4, 4)
|
DEFINE_SPECIAL(Stairs_BuildDownDoomSync, 272, 4, 4, 4)
|
||||||
|
DEFINE_SPECIAL(Stairs_BuildUpDoomCrush, 273, 5, 5, 5)
|
||||||
|
|
||||||
#undef DEFINE_SPECIAL
|
#undef DEFINE_SPECIAL
|
||||||
|
|
|
@ -1040,7 +1040,11 @@ FString BuildString (int argc, FString *argv)
|
||||||
|
|
||||||
for (arg = 0; arg < argc; arg++)
|
for (arg = 0; arg < argc; arg++)
|
||||||
{
|
{
|
||||||
if (strchr(argv[arg], '"'))
|
if (argv[arg][0] == '\0')
|
||||||
|
{ // It's an empty argument, we need to convert it to '""'
|
||||||
|
buf << "\"\" ";
|
||||||
|
}
|
||||||
|
else if (strchr(argv[arg], '"'))
|
||||||
{ // If it contains one or more quotes, we need to escape them.
|
{ // If it contains one or more quotes, we need to escape them.
|
||||||
buf << '"';
|
buf << '"';
|
||||||
long substr_start = 0, quotepos;
|
long substr_start = 0, quotepos;
|
||||||
|
|
|
@ -675,6 +675,9 @@ DThinker *FThinkerIterator::Next (bool exact)
|
||||||
{
|
{
|
||||||
return thinker;
|
return thinker;
|
||||||
}
|
}
|
||||||
|
// This can actually happen when a Destroy call on 'thinker' happens to destroy 'm_CurrThinker'.
|
||||||
|
// In that case there is no chance to recover, we have to terminate the iteration of this list.
|
||||||
|
if (m_CurrThinker == nullptr) break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((m_SearchingFresh = !m_SearchingFresh))
|
if ((m_SearchingFresh = !m_SearchingFresh))
|
||||||
|
|
|
@ -644,6 +644,8 @@ void AInventory::BecomeItem ()
|
||||||
RemoveFromHash ();
|
RemoveFromHash ();
|
||||||
flags &= ~MF_SPECIAL;
|
flags &= ~MF_SPECIAL;
|
||||||
ChangeStatNum(STAT_INVENTORY);
|
ChangeStatNum(STAT_INVENTORY);
|
||||||
|
// stop all sounds this item is playing.
|
||||||
|
for(int i = 1;i<=7;i++) S_StopSound(this, i);
|
||||||
SetState (FindState("Held"));
|
SetState (FindState("Held"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -307,6 +307,9 @@ void FMapInfoParser::ParseGameInfo()
|
||||||
GAMEINFOKEY_STRINGARRAY(finalePages, "finalePage", 8, true)
|
GAMEINFOKEY_STRINGARRAY(finalePages, "finalePage", 8, true)
|
||||||
GAMEINFOKEY_STRINGARRAY(infoPages, "addinfoPage", 8, false)
|
GAMEINFOKEY_STRINGARRAY(infoPages, "addinfoPage", 8, false)
|
||||||
GAMEINFOKEY_STRINGARRAY(infoPages, "infoPage", 8, true)
|
GAMEINFOKEY_STRINGARRAY(infoPages, "infoPage", 8, true)
|
||||||
|
GAMEINFOKEY_STRINGARRAY(PrecachedClasses, "precacheclasses", 0, false)
|
||||||
|
GAMEINFOKEY_STRINGARRAY(PrecachedTextures, "precachetextures", 0, false)
|
||||||
|
GAMEINFOKEY_STRINGARRAY(PrecachedSounds, "precachesounds", 0, false)
|
||||||
GAMEINFOKEY_STRING(PauseSign, "pausesign")
|
GAMEINFOKEY_STRING(PauseSign, "pausesign")
|
||||||
GAMEINFOKEY_STRING(quitSound, "quitSound")
|
GAMEINFOKEY_STRING(quitSound, "quitSound")
|
||||||
GAMEINFOKEY_STRING(BorderFlat, "borderFlat")
|
GAMEINFOKEY_STRING(BorderFlat, "borderFlat")
|
||||||
|
|
5
src/gi.h
5
src/gi.h
|
@ -36,6 +36,7 @@
|
||||||
|
|
||||||
#include "basictypes.h"
|
#include "basictypes.h"
|
||||||
#include "zstring.h"
|
#include "zstring.h"
|
||||||
|
#include "s_sound.h"
|
||||||
|
|
||||||
// Flags are not user configurable and only depend on the standard IWADs
|
// Flags are not user configurable and only depend on the standard IWADs
|
||||||
#define GI_MAPxx 0x00000001
|
#define GI_MAPxx 0x00000001
|
||||||
|
@ -120,6 +121,10 @@ struct gameinfo_t
|
||||||
TArray<FName> DefaultWeaponSlots[10];
|
TArray<FName> DefaultWeaponSlots[10];
|
||||||
TArray<FName> PlayerClasses;
|
TArray<FName> PlayerClasses;
|
||||||
|
|
||||||
|
TArray<FName> PrecachedClasses;
|
||||||
|
TArray<FString> PrecachedTextures;
|
||||||
|
TArray<FSoundID> PrecachedSounds;
|
||||||
|
|
||||||
FString titleMusic;
|
FString titleMusic;
|
||||||
int titleOrder;
|
int titleOrder;
|
||||||
float titleTime;
|
float titleTime;
|
||||||
|
|
|
@ -184,7 +184,9 @@ void FLightDefaults::ApplyProperties(ADynamicLight * light) const
|
||||||
if (m_additive) light->flags4 |= MF4_ADDITIVE;
|
if (m_additive) light->flags4 |= MF4_ADDITIVE;
|
||||||
if (m_dontlightself) light->flags4 |= MF4_DONTLIGHTSELF;
|
if (m_dontlightself) light->flags4 |= MF4_DONTLIGHTSELF;
|
||||||
light->m_tickCount = 0;
|
light->m_tickCount = 0;
|
||||||
if (m_type == PulseLight)
|
switch (m_type)
|
||||||
|
{
|
||||||
|
case PulseLight:
|
||||||
{
|
{
|
||||||
float pulseTime = float(m_Param / TICRATE);
|
float pulseTime = float(m_Param / TICRATE);
|
||||||
|
|
||||||
|
@ -193,6 +195,36 @@ void FLightDefaults::ApplyProperties(ADynamicLight * light) const
|
||||||
light->m_cycler.ShouldCycle(true);
|
light->m_cycler.ShouldCycle(true);
|
||||||
light->m_cycler.SetCycleType(CYCLE_Sin);
|
light->m_cycler.SetCycleType(CYCLE_Sin);
|
||||||
light->m_currentRadius = light->m_cycler.GetVal();
|
light->m_currentRadius = light->m_cycler.GetVal();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case FlickerLight:
|
||||||
|
case RandomFlickerLight:
|
||||||
|
{
|
||||||
|
float minrad = float(MIN(light->m_Radius[0], light->m_Radius[1]));
|
||||||
|
float maxrad = float(MAX(light->m_Radius[0], light->m_Radius[1]));
|
||||||
|
light->m_currentRadius = clamp(light->m_currentRadius, minrad, maxrad);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case PointLight:
|
||||||
|
light->m_currentRadius = float(light->m_Radius[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SectorLight:
|
||||||
|
{
|
||||||
|
float intensity;
|
||||||
|
float scale = light->args[LIGHT_SCALE] / 8.f;
|
||||||
|
|
||||||
|
if (scale == 0.f) scale = 1.f;
|
||||||
|
|
||||||
|
intensity = light->Sector->lightlevel * scale;
|
||||||
|
intensity = clamp<float>(intensity, 0.f, 255.f);
|
||||||
|
|
||||||
|
light->m_currentRadius = intensity;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (m_attenuate)
|
switch (m_attenuate)
|
||||||
|
|
|
@ -1108,6 +1108,9 @@ bool DPlayerMenu::MouseEvent(int type, int x, int y)
|
||||||
SendNewColor (RPART(color), GPART(color), v);
|
SendNewColor (RPART(color), GPART(color), v);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case NAME_Autoaim:
|
||||||
|
AutoaimChanged(li);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
|
|
@ -272,7 +272,7 @@ void P_ThinkParticles ()
|
||||||
auto oldtrans = particle->alpha;
|
auto oldtrans = particle->alpha;
|
||||||
particle->alpha -= particle->fadestep;
|
particle->alpha -= particle->fadestep;
|
||||||
particle->size += particle->sizestep;
|
particle->size += particle->sizestep;
|
||||||
if (oldtrans < particle->alpha || --particle->ttl <= 0 || (particle->size <= 0))
|
if (particle->alpha <= 0 || oldtrans < particle->alpha || --particle->ttl <= 0 || (particle->size <= 0))
|
||||||
{ // The particle has expired, so free it
|
{ // The particle has expired, so free it
|
||||||
memset (particle, 0, sizeof(particle_t));
|
memset (particle, 0, sizeof(particle_t));
|
||||||
if (prev)
|
if (prev)
|
||||||
|
@ -763,7 +763,7 @@ void P_DrawRailTrail(AActor *source, TArray<SPortalHit> &portalhits, int color1,
|
||||||
int spiralduration = (duration == 0) ? 35 : duration;
|
int spiralduration = (duration == 0) ? 35 : duration;
|
||||||
|
|
||||||
p->alpha = 1.f;
|
p->alpha = 1.f;
|
||||||
p->ttl = duration;
|
p->ttl = spiralduration;
|
||||||
p->fadestep = FADEFROMTTL(spiralduration);
|
p->fadestep = FADEFROMTTL(spiralduration);
|
||||||
p->size = 3;
|
p->size = 3;
|
||||||
p->bright = fullbright;
|
p->bright = fullbright;
|
||||||
|
|
|
@ -626,7 +626,7 @@ bool EV_BuildStairs (int tag, DFloor::EStair type, line_t *line,
|
||||||
floor->m_PauseTime = 0;
|
floor->m_PauseTime = 0;
|
||||||
floor->m_StepTime = floor->m_PerStepTime = persteptime;
|
floor->m_StepTime = floor->m_PerStepTime = persteptime;
|
||||||
|
|
||||||
floor->m_Crush = (!(usespecials & DFloor::stairUseSpecials) && speed == 4) ? 10 : -1; //jff 2/27/98 fix uninitialized crush field
|
floor->m_Crush = (usespecials & DFloor::stairCrush) ? 10 : -1; //jff 2/27/98 fix uninitialized crush field
|
||||||
floor->m_Hexencrush = false;
|
floor->m_Hexencrush = false;
|
||||||
|
|
||||||
floor->m_Speed = speed;
|
floor->m_Speed = speed;
|
||||||
|
|
|
@ -591,6 +591,13 @@ FUNC(LS_Stairs_BuildUpDoom)
|
||||||
arg2, SPEED(arg1), TICS(arg3), arg4, 0, 0);
|
arg2, SPEED(arg1), TICS(arg3), arg4, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FUNC(LS_Stairs_BuildUpDoomCrush)
|
||||||
|
// Stairs_BuildUpDoom (tag, speed, height, delay, reset)
|
||||||
|
{
|
||||||
|
return EV_BuildStairs(arg0, DFloor::buildUp, ln,
|
||||||
|
arg2, SPEED(arg1), TICS(arg3), arg4, 0, DFloor::stairCrush);
|
||||||
|
}
|
||||||
|
|
||||||
FUNC(LS_Stairs_BuildDownDoom)
|
FUNC(LS_Stairs_BuildDownDoom)
|
||||||
// Stair_BuildDownDoom (tag, speed, height, delay, reset)
|
// Stair_BuildDownDoom (tag, speed, height, delay, reset)
|
||||||
{
|
{
|
||||||
|
@ -3582,6 +3589,7 @@ static lnSpecFunc LineSpecials[] =
|
||||||
/* 270 */ LS_Stairs_BuildDownDoom,
|
/* 270 */ LS_Stairs_BuildDownDoom,
|
||||||
/* 271 */ LS_Stairs_BuildUpDoomSync,
|
/* 271 */ LS_Stairs_BuildUpDoomSync,
|
||||||
/* 272 */ LS_Stairs_BuildDownDoomSync,
|
/* 272 */ LS_Stairs_BuildDownDoomSync,
|
||||||
|
/* 273 */ LS_Stairs_BuildUpDoomCrush,
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -3379,6 +3379,11 @@ static void P_PrecacheLevel()
|
||||||
actorhitlist[actor->GetClass()] = true;
|
actorhitlist[actor->GetClass()] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto n : gameinfo.PrecachedClasses)
|
||||||
|
{
|
||||||
|
PClassActor *cls = PClass::FindActor(n);
|
||||||
|
if (cls != NULL) actorhitlist[cls] = true;
|
||||||
|
}
|
||||||
for (unsigned i = 0; i < level.info->PrecacheClasses.Size(); i++)
|
for (unsigned i = 0; i < level.info->PrecacheClasses.Size(); i++)
|
||||||
{
|
{
|
||||||
// level.info can only store names, no class pointers.
|
// level.info can only store names, no class pointers.
|
||||||
|
@ -3415,6 +3420,11 @@ static void P_PrecacheLevel()
|
||||||
hitlist[sky2texture.GetIndex()] |= FTextureManager::HIT_Sky;
|
hitlist[sky2texture.GetIndex()] |= FTextureManager::HIT_Sky;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (auto n : gameinfo.PrecachedTextures)
|
||||||
|
{
|
||||||
|
FTextureID tex = TexMan.CheckForTexture(n, FTexture::TEX_Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_TryAny | FTextureManager::TEXMAN_ReturnFirst);
|
||||||
|
if (tex.Exists()) hitlist[tex.GetIndex()] |= FTextureManager::HIT_Wall;
|
||||||
|
}
|
||||||
for (unsigned i = 0; i < level.info->PrecacheTextures.Size(); i++)
|
for (unsigned i = 0; i < level.info->PrecacheTextures.Size(); i++)
|
||||||
{
|
{
|
||||||
FTextureID tex = TexMan.CheckForTexture(level.info->PrecacheTextures[i], FTexture::TEX_Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_TryAny | FTextureManager::TEXMAN_ReturnFirst);
|
FTextureID tex = TexMan.CheckForTexture(level.info->PrecacheTextures[i], FTexture::TEX_Wall, FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_TryAny | FTextureManager::TEXMAN_ReturnFirst);
|
||||||
|
|
|
@ -116,6 +116,7 @@ public:
|
||||||
sightend = t2->PosRelative(task->portalgroup);
|
sightend = t2->PosRelative(task->portalgroup);
|
||||||
sightstart.Z += t1->Height * 0.75;
|
sightstart.Z += t1->Height * 0.75;
|
||||||
|
|
||||||
|
portalgroup = task->portalgroup;
|
||||||
Startfrac = task->Frac;
|
Startfrac = task->Frac;
|
||||||
Trace = { sightstart.X, sightstart.Y, sightend.X - sightstart.X, sightend.Y - sightstart.Y };
|
Trace = { sightstart.X, sightstart.Y, sightend.X - sightstart.X, sightend.Y - sightstart.Y };
|
||||||
Lastztop = Lastzbottom = sightstart.Z;
|
Lastztop = Lastzbottom = sightstart.Z;
|
||||||
|
@ -790,6 +791,7 @@ sightcounts[2]++;
|
||||||
|
|
||||||
bool traverseres = P_SightTraverseIntercepts ( );
|
bool traverseres = P_SightTraverseIntercepts ( );
|
||||||
if (itres == -1) return false; // if the iterator had an early out there was no line of sight. The traverser was only called to collect more portals.
|
if (itres == -1) return false; // if the iterator had an early out there was no line of sight. The traverser was only called to collect more portals.
|
||||||
|
if (seeingthing->Sector->PortalGroup != portalgroup) return false; // We are in a different group than the seeingthing, so this trace cannot determine visibility alone.
|
||||||
return traverseres;
|
return traverseres;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -504,7 +504,8 @@ public:
|
||||||
enum EStairType
|
enum EStairType
|
||||||
{
|
{
|
||||||
stairUseSpecials = 1,
|
stairUseSpecials = 1,
|
||||||
stairSync = 2
|
stairSync = 2,
|
||||||
|
stairCrush = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
DFloor (sector_t *sec);
|
DFloor (sector_t *sec);
|
||||||
|
|
|
@ -481,6 +481,10 @@ void S_PrecacheLevel ()
|
||||||
{
|
{
|
||||||
actor->MarkPrecacheSounds();
|
actor->MarkPrecacheSounds();
|
||||||
}
|
}
|
||||||
|
for (auto i : gameinfo.PrecachedSounds)
|
||||||
|
{
|
||||||
|
level.info->PrecacheSounds[i].MarkUsed();
|
||||||
|
}
|
||||||
// Precache all extra sounds requested by this map.
|
// Precache all extra sounds requested by this map.
|
||||||
for (i = 0; i < level.info->PrecacheSounds.Size(); ++i)
|
for (i = 0; i < level.info->PrecacheSounds.Size(); ++i)
|
||||||
{
|
{
|
||||||
|
|
|
@ -2336,6 +2336,7 @@ void ZCCCompiler::CompileFunction(ZCC_StructWork *c, ZCC_FuncDeclarator *f, bool
|
||||||
sym->Variants[0].Implementation->DefaultArgs = std::move(argdefaults);
|
sym->Variants[0].Implementation->DefaultArgs = std::move(argdefaults);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PClass *clstype = static_cast<PClass *>(c->Type());
|
||||||
if (varflags & VARF_Virtual)
|
if (varflags & VARF_Virtual)
|
||||||
{
|
{
|
||||||
if (sym->Variants[0].Implementation == nullptr)
|
if (sym->Variants[0].Implementation == nullptr)
|
||||||
|
@ -2349,7 +2350,6 @@ void ZCCCompiler::CompileFunction(ZCC_StructWork *c, ZCC_FuncDeclarator *f, bool
|
||||||
}
|
}
|
||||||
if (forclass)
|
if (forclass)
|
||||||
{
|
{
|
||||||
PClass *clstype = static_cast<PClass *>(c->Type());
|
|
||||||
int vindex = clstype->FindVirtualIndex(sym->SymbolName, sym->Variants[0].Proto);
|
int vindex = clstype->FindVirtualIndex(sym->SymbolName, sym->Variants[0].Proto);
|
||||||
// specifying 'override' is necessary to prevent one of the biggest problem spots with virtual inheritance: Mismatching argument types.
|
// specifying 'override' is necessary to prevent one of the biggest problem spots with virtual inheritance: Mismatching argument types.
|
||||||
if (varflags & VARF_Override)
|
if (varflags & VARF_Override)
|
||||||
|
@ -2383,6 +2383,14 @@ void ZCCCompiler::CompileFunction(ZCC_StructWork *c, ZCC_FuncDeclarator *f, bool
|
||||||
Error(p, "Virtual functions can only be defined for classes");
|
Error(p, "Virtual functions can only be defined for classes");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (forclass)
|
||||||
|
{
|
||||||
|
int vindex = clstype->FindVirtualIndex(sym->SymbolName, sym->Variants[0].Proto);
|
||||||
|
if (vindex != -1)
|
||||||
|
{
|
||||||
|
Error(f, "Function %s attempts to override parent function without 'override' qualifier", FName(f->Name).GetChars());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -407,7 +407,7 @@ public:
|
||||||
virtual FString GetStats()
|
virtual FString GetStats()
|
||||||
{
|
{
|
||||||
FString stats;
|
FString stats;
|
||||||
size_t pos, len;
|
size_t pos = 0, len = 0;
|
||||||
ALfloat volume;
|
ALfloat volume;
|
||||||
ALint offset;
|
ALint offset;
|
||||||
ALint processed;
|
ALint processed;
|
||||||
|
@ -429,28 +429,34 @@ public:
|
||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
pos = Decoder->getSampleOffset();
|
if (Decoder != nullptr)
|
||||||
len = Decoder->getSampleLength();
|
{
|
||||||
|
pos = Decoder->getSampleOffset();
|
||||||
|
len = Decoder->getSampleLength();
|
||||||
|
}
|
||||||
lock.unlock();
|
lock.unlock();
|
||||||
|
|
||||||
stats = (state == AL_INITIAL) ? "Buffering" : (state == AL_STOPPED) ? "Underrun" :
|
stats = (state == AL_INITIAL) ? "Buffering" : (state == AL_STOPPED) ? "Underrun" :
|
||||||
(state == AL_PLAYING || state == AL_PAUSED) ? "Ready" : "Unknown state";
|
(state == AL_PLAYING || state == AL_PAUSED) ? "Ready" : "Unknown state";
|
||||||
|
|
||||||
if(state == AL_STOPPED)
|
if (Decoder != nullptr)
|
||||||
offset = BufferCount * (Data.Size()/FrameSize);
|
{
|
||||||
else
|
if (state == AL_STOPPED)
|
||||||
{
|
offset = BufferCount * (Data.Size() / FrameSize);
|
||||||
size_t rem = queued*(Data.Size()/FrameSize) - offset;
|
else
|
||||||
if(pos > rem) pos -= rem;
|
{
|
||||||
else if(len > 0) pos += len - rem;
|
size_t rem = queued*(Data.Size() / FrameSize) - offset;
|
||||||
else pos = 0;
|
if (pos > rem) pos -= rem;
|
||||||
}
|
else if (len > 0) pos += len - rem;
|
||||||
pos = (size_t)(pos * 1000.0 / SampleRate);
|
else pos = 0;
|
||||||
len = (size_t)(len * 1000.0 / SampleRate);
|
}
|
||||||
stats.AppendFormat(",%3u%% buffered", 100 - 100*offset/(BufferCount*(Data.Size()/FrameSize)));
|
pos = (size_t)(pos * 1000.0 / SampleRate);
|
||||||
stats.AppendFormat(", %zu.%03zu", pos/1000, pos%1000);
|
len = (size_t)(len * 1000.0 / SampleRate);
|
||||||
if(len > 0)
|
stats.AppendFormat(",%3u%% buffered", 100 - 100 * offset / (BufferCount*(Data.Size() / FrameSize)));
|
||||||
stats.AppendFormat(" / %zu.%03zu", len/1000, len%1000);
|
stats.AppendFormat(", %zu.%03zu", pos / 1000, pos % 1000);
|
||||||
|
if (len > 0)
|
||||||
|
stats.AppendFormat(" / %zu.%03zu", len / 1000, len % 1000);
|
||||||
|
}
|
||||||
if(state == AL_PAUSED)
|
if(state == AL_PAUSED)
|
||||||
stats += ", paused";
|
stats += ", paused";
|
||||||
if(state == AL_PLAYING)
|
if(state == AL_PLAYING)
|
||||||
|
|
|
@ -41,12 +41,12 @@ const char *GetVersionString();
|
||||||
|
|
||||||
/** Lots of different version numbers **/
|
/** Lots of different version numbers **/
|
||||||
|
|
||||||
#define VERSIONSTR "2.3pre"
|
#define VERSIONSTR "2.3.2"
|
||||||
|
|
||||||
// The version as seen in the Windows resource
|
// The version as seen in the Windows resource
|
||||||
#define RC_FILEVERSION 2,3,9999,0
|
#define RC_FILEVERSION 2,3,2,0
|
||||||
#define RC_PRODUCTVERSION 2,3,9999,0
|
#define RC_PRODUCTVERSION 2,3,2,0
|
||||||
#define RC_PRODUCTVERSION2 "2.3pre"
|
#define RC_PRODUCTVERSION2 "2.3.2"
|
||||||
|
|
||||||
// Version identifier for network games.
|
// Version identifier for network games.
|
||||||
// Bump it every time you do a release unless you're certain you
|
// Bump it every time you do a release unless you're certain you
|
||||||
|
|
|
@ -352,6 +352,11 @@ DFrameBuffer *Win32GLVideo::CreateFrameBuffer(int width, int height, bool fs, DF
|
||||||
{
|
{
|
||||||
Win32GLFrameBuffer *fb;
|
Win32GLFrameBuffer *fb;
|
||||||
|
|
||||||
|
if (fs)
|
||||||
|
{
|
||||||
|
I_ClosestResolution(&width, &height, 32);
|
||||||
|
}
|
||||||
|
|
||||||
m_DisplayWidth = width;
|
m_DisplayWidth = width;
|
||||||
m_DisplayHeight = height;
|
m_DisplayHeight = height;
|
||||||
m_DisplayBits = 32;
|
m_DisplayBits = 32;
|
||||||
|
|
|
@ -1779,7 +1779,6 @@ DSPLYMNU_SCREENSIZE = "Screen size";
|
||||||
DSPLYMNU_BRIGHTNESS = "Brightness";
|
DSPLYMNU_BRIGHTNESS = "Brightness";
|
||||||
DSPLYMNU_VSYNC = "Vertical Sync";
|
DSPLYMNU_VSYNC = "Vertical Sync";
|
||||||
DSPLYMNU_CAPFPS = "Rendering Interpolation";
|
DSPLYMNU_CAPFPS = "Rendering Interpolation";
|
||||||
DSPLYMNU_COLUMNMETHOD = "Column render mode";
|
|
||||||
DSPLYMNU_WIPETYPE = "Screen wipe style";
|
DSPLYMNU_WIPETYPE = "Screen wipe style";
|
||||||
DSPLYMNU_SHOWENDOOM = "Show ENDOOM screen";
|
DSPLYMNU_SHOWENDOOM = "Show ENDOOM screen";
|
||||||
DSPLYMNU_BLOODFADE = "Blood Flash Intensity";
|
DSPLYMNU_BLOODFADE = "Blood Flash Intensity";
|
||||||
|
|
|
@ -594,12 +594,6 @@ OptionMenu "JoystickConfigMenu"
|
||||||
//
|
//
|
||||||
//-------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
OptionValue ColumnMethods
|
|
||||||
{
|
|
||||||
0.0, "$OPTVAL_ORIGINAL"
|
|
||||||
1.0, "$OPTVAL_OPTIMIZED"
|
|
||||||
}
|
|
||||||
|
|
||||||
OptionValue SkyModes
|
OptionValue SkyModes
|
||||||
{
|
{
|
||||||
0.0, "$OPTVAL_NORMAL"
|
0.0, "$OPTVAL_NORMAL"
|
||||||
|
@ -684,7 +678,6 @@ OptionMenu "VideoOptions"
|
||||||
Slider "$DSPLYMNU_BLOODFADE", "blood_fade_scalar", 0.0, 1.0, 0.05, 2
|
Slider "$DSPLYMNU_BLOODFADE", "blood_fade_scalar", 0.0, 1.0, 0.05, 2
|
||||||
Slider "$DSPLYMNU_PICKUPFADE", "pickup_fade_scalar", 0.0, 1.0, 0.05, 2
|
Slider "$DSPLYMNU_PICKUPFADE", "pickup_fade_scalar", 0.0, 1.0, 0.05, 2
|
||||||
Slider "$DSPLYMNU_WATERFADE", "underwater_fade_scalar", 0.0, 1.0, 0.05, 2
|
Slider "$DSPLYMNU_WATERFADE", "underwater_fade_scalar", 0.0, 1.0, 0.05, 2
|
||||||
Option "$DSPLYMNU_COLUMNMETHOD", "r_columnmethod", "ColumnMethods"
|
|
||||||
|
|
||||||
StaticText " "
|
StaticText " "
|
||||||
Option "$DSPLYMNU_WIPETYPE", "wipetype", "Wipes"
|
Option "$DSPLYMNU_WIPETYPE", "wipetype", "Wipes"
|
||||||
|
|
|
@ -99,7 +99,7 @@ include "xlat/defines.i"
|
||||||
97 = WALK|REP|MONST, Teleport (0, tag)
|
97 = WALK|REP|MONST, Teleport (0, tag)
|
||||||
98 = WALK|REP, Floor_LowerToHighest (tag, F_FAST, 136)
|
98 = WALK|REP, Floor_LowerToHighest (tag, F_FAST, 136)
|
||||||
99 = USE|REP, Door_LockedRaise (tag, D_FAST, 0, BCard | CardIsSkull)
|
99 = USE|REP, Door_LockedRaise (tag, D_FAST, 0, BCard | CardIsSkull)
|
||||||
100 = WALK, Stairs_BuildUpDoom (tag, ST_TURBO, 16, 0, 0)
|
100 = WALK, Stairs_BuildUpDoomCrush (tag, ST_TURBO, 16, 0, 0)
|
||||||
101 = USE, Floor_RaiseToLowestCeiling (tag, F_SLOW)
|
101 = USE, Floor_RaiseToLowestCeiling (tag, F_SLOW)
|
||||||
102 = USE, Floor_LowerToHighest (tag, F_SLOW, 128)
|
102 = USE, Floor_LowerToHighest (tag, F_SLOW, 128)
|
||||||
103 = USE, Door_Open (tag, D_SLOW)
|
103 = USE, Door_Open (tag, D_SLOW)
|
||||||
|
@ -126,7 +126,7 @@ include "xlat/defines.i"
|
||||||
124 = WALK, Exit_Secret (0)
|
124 = WALK, Exit_Secret (0)
|
||||||
125 = MONWALK, Teleport (0, tag)
|
125 = MONWALK, Teleport (0, tag)
|
||||||
126 = MONWALK|REP, Teleport (0, tag)
|
126 = MONWALK|REP, Teleport (0, tag)
|
||||||
127 = USE, Stairs_BuildUpDoom (tag, ST_TURBO, 16, 0, 0)
|
127 = USE, Stairs_BuildUpDoomCrush (tag, ST_TURBO, 16, 0, 0)
|
||||||
128 = WALK|REP, Floor_RaiseToNearest (tag, F_SLOW)
|
128 = WALK|REP, Floor_RaiseToNearest (tag, F_SLOW)
|
||||||
129 = WALK|REP, Floor_RaiseToNearest (tag, F_FAST)
|
129 = WALK|REP, Floor_RaiseToNearest (tag, F_FAST)
|
||||||
130 = WALK, Floor_RaiseToNearest (tag, F_FAST)
|
130 = WALK, Floor_RaiseToNearest (tag, F_FAST)
|
||||||
|
@ -259,9 +259,9 @@ include "xlat/defines.i"
|
||||||
254 = 0, Scroll_Texture_Model (lineid, 0)
|
254 = 0, Scroll_Texture_Model (lineid, 0)
|
||||||
255 = 0, Scroll_Texture_Offsets ()
|
255 = 0, Scroll_Texture_Offsets ()
|
||||||
256 = WALK|REP, Stairs_BuildUpDoom (tag, ST_SLOW, 8, 0, 0)
|
256 = WALK|REP, Stairs_BuildUpDoom (tag, ST_SLOW, 8, 0, 0)
|
||||||
257 = WALK|REP, Stairs_BuildUpDoom (tag, ST_TURBO, 16, 0, 0)
|
257 = WALK|REP, Stairs_BuildUpDoomCrush (tag, ST_TURBO, 16, 0, 0)
|
||||||
258 = USE|REP, Stairs_BuildUpDoom (tag, ST_SLOW, 8, 0, 0)
|
258 = USE|REP, Stairs_BuildUpDoom (tag, ST_SLOW, 8, 0, 0)
|
||||||
259 = USE|REP, Stairs_BuildUpDoom (tag, ST_TURBO, 16, 0, 0)
|
259 = USE|REP, Stairs_BuildUpDoomCrush (tag, ST_TURBO, 16, 0, 0)
|
||||||
260 = 0, TranslucentLine (lineid, 168) // Changed to better reflect the BOOM default
|
260 = 0, TranslucentLine (lineid, 168) // Changed to better reflect the BOOM default
|
||||||
261 = 0, Transfer_CeilingLight (tag)
|
261 = 0, Transfer_CeilingLight (tag)
|
||||||
262 = WALK|MONST, Teleport_Line (tag, tag, 1)
|
262 = WALK|MONST, Teleport_Line (tag, tag, 1)
|
||||||
|
|
|
@ -120,7 +120,7 @@ RetailOnly = 121
|
||||||
104 = WALK, Light_MinNeighbor (tag)
|
104 = WALK, Light_MinNeighbor (tag)
|
||||||
108 = WALK, Door_Raise (tag, D_FAST, VDOORWAIT)
|
108 = WALK, Door_Raise (tag, D_FAST, VDOORWAIT)
|
||||||
109 = WALK, Door_Open (tag, D_FAST)
|
109 = WALK, Door_Open (tag, D_FAST)
|
||||||
100 = WALK, Stairs_BuildUpDoom (tag, ST_TURBO, 16, 0, 0)
|
100 = WALK, Stairs_BuildUpDoomCrush (tag, ST_TURBO, 16, 0, 0)
|
||||||
197 = WALK|REP, ACS_ExecuteAlways (0, 0, 197, tag)
|
197 = WALK|REP, ACS_ExecuteAlways (0, 0, 197, tag)
|
||||||
110 = WALK, Door_Close (tag, D_FAST)
|
110 = WALK, Door_Close (tag, D_FAST)
|
||||||
119 = WALK, Floor_RaiseToNearest (tag, F_SLOW)
|
119 = WALK, Floor_RaiseToNearest (tag, F_SLOW)
|
||||||
|
@ -255,7 +255,7 @@ RetailOnly = 121
|
||||||
112 = USE, Door_Open (tag, D_FAST)
|
112 = USE, Door_Open (tag, D_FAST)
|
||||||
113 = USE, Door_Close (tag, D_FAST)
|
113 = USE, Door_Close (tag, D_FAST)
|
||||||
122 = USE, Plat_DownWaitUpStayLip (tag, P_TURBO, PLATWAIT, 0)
|
122 = USE, Plat_DownWaitUpStayLip (tag, P_TURBO, PLATWAIT, 0)
|
||||||
127 = USE, Stairs_BuildUpDoom (tag, ST_TURBO, 16, 0, 0)
|
127 = USE, Stairs_BuildUpDoomCrush (tag, ST_TURBO, 16, 0, 0)
|
||||||
131 = USE, Floor_RaiseToNearest (tag, F_FAST)
|
131 = USE, Floor_RaiseToNearest (tag, F_FAST)
|
||||||
133 = USE, Door_LockedRaise (tag, D_FAST, 0, 4)
|
133 = USE, Door_LockedRaise (tag, D_FAST, 0, 4)
|
||||||
135 = USE, Door_LockedRaise (tag, D_FAST, 0, 11)
|
135 = USE, Door_LockedRaise (tag, D_FAST, 0, 11)
|
||||||
|
|
|
@ -66,7 +66,7 @@ Class ArtiTomeOfPower : PowerupGiver
|
||||||
Loop;
|
Loop;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Use (bool pickup)
|
override bool Use (bool pickup)
|
||||||
{
|
{
|
||||||
Playerinfo p = Owner.player;
|
Playerinfo p = Owner.player;
|
||||||
if (p && p.morphTics && (p.MorphStyle & MRF_UNDOBYTOMEOFPOWER))
|
if (p && p.morphTics && (p.MorphStyle & MRF_UNDOBYTOMEOFPOWER))
|
||||||
|
|
|
@ -220,7 +220,7 @@ class Ripper : Actor
|
||||||
Stop;
|
Stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DoSpecialDamage (Actor target, int damage, Name damagetype)
|
override int DoSpecialDamage (Actor target, int damage, Name damagetype)
|
||||||
{
|
{
|
||||||
if (target is "Ironlich")
|
if (target is "Ironlich")
|
||||||
{ // Less damage to Ironlich bosses
|
{ // Less damage to Ironlich bosses
|
||||||
|
|
|
@ -311,7 +311,7 @@ class PhoenixFX2 : Actor
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int DoSpecialDamage (Actor target, int damage, Name damagetype)
|
override int DoSpecialDamage (Actor target, int damage, Name damagetype)
|
||||||
{
|
{
|
||||||
if (target.player && Random[PhoenixFX2]() < 128)
|
if (target.player && Random[PhoenixFX2]() < 128)
|
||||||
{ // Freeze player for a bit
|
{ // Freeze player for a bit
|
||||||
|
|
|
@ -402,7 +402,7 @@ class RainPillar : Actor
|
||||||
|
|
||||||
// Rain pillar 1 ------------------------------------------------------------
|
// Rain pillar 1 ------------------------------------------------------------
|
||||||
|
|
||||||
int DoSpecialDamage (Actor target, int damage, Name damagetype)
|
override int DoSpecialDamage (Actor target, int damage, Name damagetype)
|
||||||
{
|
{
|
||||||
if (target.bBoss)
|
if (target.bBoss)
|
||||||
{ // Decrease damage for bosses
|
{ // Decrease damage for bosses
|
||||||
|
|
|
@ -112,7 +112,7 @@ class Heresiarch : Actor
|
||||||
Stop;
|
Stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Die (Actor source, Actor inflictor, int dmgflags)
|
override void Die (Actor source, Actor inflictor, int dmgflags)
|
||||||
{
|
{
|
||||||
// The heresiarch just executes a script instead of a special upon death
|
// The heresiarch just executes a script instead of a special upon death
|
||||||
int script = special;
|
int script = special;
|
||||||
|
@ -698,8 +698,8 @@ class SorcBall2 : SorcBall
|
||||||
|
|
||||||
Actor parent = target;
|
Actor parent = target;
|
||||||
Actor mo = Spawn("SorcFX2", Pos + (0, 0, parent.Floorclip + Heresiarch.SORC_DEFENSE_HEIGHT), ALLOW_REPLACE);
|
Actor mo = Spawn("SorcFX2", Pos + (0, 0, parent.Floorclip + Heresiarch.SORC_DEFENSE_HEIGHT), ALLOW_REPLACE);
|
||||||
bReflective = true;
|
parent.bReflective = true;
|
||||||
bInvulnerable = true;
|
parent.bInvulnerable = true;
|
||||||
parent.args[0] = Heresiarch.SORC_DEFENSE_TIME;
|
parent.args[0] = Heresiarch.SORC_DEFENSE_TIME;
|
||||||
if (mo) mo.target = parent;
|
if (mo) mo.target = parent;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ class FadeSetter : Actor
|
||||||
RenderStyle "None";
|
RenderStyle "None";
|
||||||
}
|
}
|
||||||
|
|
||||||
void PostBeginPlay()
|
override void PostBeginPlay()
|
||||||
{
|
{
|
||||||
Super.PostBeginPlay();
|
Super.PostBeginPlay();
|
||||||
CurSector.SetFade(color(args[0], args[1], args[2]));
|
CurSector.SetFade(color(args[0], args[1], args[2]));
|
||||||
|
|
|
@ -241,7 +241,7 @@ class PhosphorousFire : Actor
|
||||||
Stop;
|
Stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DoSpecialDamage (Actor target, int damage, Name damagetype)
|
override int DoSpecialDamage (Actor target, int damage, Name damagetype)
|
||||||
{
|
{
|
||||||
if (target.bNoBlood)
|
if (target.bNoBlood)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue