mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 12:32:34 +00:00
Merge remote-tracking branch 'gzdoom/modern' into hw_postprocess
This commit is contained in:
commit
a7529ce3b4
47 changed files with 233 additions and 69 deletions
|
@ -764,7 +764,7 @@ void D_Display ()
|
||||||
//
|
//
|
||||||
|
|
||||||
// Check for the presence of dynamic lights at the start of the frame once.
|
// Check for the presence of dynamic lights at the start of the frame once.
|
||||||
if (gl_lights)
|
if ((gl_lights && vid_rendermode == 4) || (r_dynlights && vid_rendermode != 4))
|
||||||
{
|
{
|
||||||
TThinkerIterator<ADynamicLight> it(STAT_DLIGHT);
|
TThinkerIterator<ADynamicLight> it(STAT_DLIGHT);
|
||||||
level.HasDynamicLights = !!it.Next();
|
level.HasDynamicLights = !!it.Next();
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include "actor.h"
|
#include "actor.h"
|
||||||
#include "cycler.h"
|
#include "cycler.h"
|
||||||
|
|
||||||
|
EXTERN_CVAR(Bool, r_dynlights)
|
||||||
EXTERN_CVAR(Bool, gl_lights)
|
EXTERN_CVAR(Bool, gl_lights)
|
||||||
EXTERN_CVAR(Bool, gl_attachedlights)
|
EXTERN_CVAR(Bool, gl_attachedlights)
|
||||||
|
|
||||||
|
|
|
@ -1567,7 +1567,11 @@ DBaseStatusBar *CreateCustomStatusBar(int scriptno)
|
||||||
auto script = SBarInfoScript[scriptno];
|
auto script = SBarInfoScript[scriptno];
|
||||||
if (script == nullptr) return nullptr;
|
if (script == nullptr) return nullptr;
|
||||||
|
|
||||||
auto sbar = (DBaseStatusBar*)PClass::FindClass("SBarInfoWrapper")->CreateNew();
|
PClass *sbarclass = PClass::FindClass("SBarInfoWrapper");
|
||||||
|
assert(sbarclass != nullptr);
|
||||||
|
assert(sbarclass->IsDescendantOf(RUNTIME_CLASS(DBaseStatusBar)));
|
||||||
|
auto sbar = (DBaseStatusBar*)sbarclass->CreateNew();
|
||||||
|
|
||||||
auto core = new DSBarInfo(sbar, script);
|
auto core = new DSBarInfo(sbar, script);
|
||||||
sbar->PointerVar<DSBarInfo>("core") = core;
|
sbar->PointerVar<DSBarInfo>("core") = core;
|
||||||
sbar->SetSize(script->height, script->_resW, script->_resH);
|
sbar->SetSize(script->height, script->_resW, script->_resH);
|
||||||
|
|
|
@ -247,6 +247,31 @@ static void CreateBaseStatusBar()
|
||||||
StatusBar->SetSize(0);
|
StatusBar->SetSize(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void CreateGameInfoStatusBar(bool &shouldWarn)
|
||||||
|
{
|
||||||
|
auto cls = PClass::FindClass(gameinfo.statusbarclass);
|
||||||
|
if (cls == nullptr)
|
||||||
|
{
|
||||||
|
if (shouldWarn)
|
||||||
|
{
|
||||||
|
Printf(TEXTCOLOR_RED "Unknown status bar class \"%s\"\n", gameinfo.statusbarclass.GetChars());
|
||||||
|
shouldWarn = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (cls->IsDescendantOf(RUNTIME_CLASS(DBaseStatusBar)))
|
||||||
|
{
|
||||||
|
StatusBar = (DBaseStatusBar *)cls->CreateNew();
|
||||||
|
}
|
||||||
|
else if (shouldWarn)
|
||||||
|
{
|
||||||
|
Printf(TEXTCOLOR_RED "Status bar class \"%s\" is not derived from BaseStatusBar\n", gameinfo.statusbarclass.GetChars());
|
||||||
|
shouldWarn = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ST_CreateStatusBar(bool bTitleLevel)
|
void ST_CreateStatusBar(bool bTitleLevel)
|
||||||
{
|
{
|
||||||
if (StatusBar != NULL)
|
if (StatusBar != NULL)
|
||||||
|
@ -255,6 +280,8 @@ void ST_CreateStatusBar(bool bTitleLevel)
|
||||||
StatusBar = NULL;
|
StatusBar = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool shouldWarn = true;
|
||||||
|
|
||||||
if (bTitleLevel)
|
if (bTitleLevel)
|
||||||
{
|
{
|
||||||
CreateBaseStatusBar();
|
CreateBaseStatusBar();
|
||||||
|
@ -268,11 +295,7 @@ void ST_CreateStatusBar(bool bTitleLevel)
|
||||||
int sbarinfofile = Wads.GetLumpFile(sbarinfolump);
|
int sbarinfofile = Wads.GetLumpFile(sbarinfolump);
|
||||||
if (gameinfo.statusbarclassfile >= gameinfo.statusbarfile && gameinfo.statusbarclassfile >= sbarinfofile)
|
if (gameinfo.statusbarclassfile >= gameinfo.statusbarfile && gameinfo.statusbarclassfile >= sbarinfofile)
|
||||||
{
|
{
|
||||||
auto cls = PClass::FindClass(gameinfo.statusbarclass);
|
CreateGameInfoStatusBar(shouldWarn);
|
||||||
if (cls != nullptr)
|
|
||||||
{
|
|
||||||
StatusBar = (DBaseStatusBar *)cls->CreateNew();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (StatusBar == nullptr && SBarInfoScript[SCRIPT_CUSTOM] != nullptr)
|
if (StatusBar == nullptr && SBarInfoScript[SCRIPT_CUSTOM] != nullptr)
|
||||||
|
@ -291,11 +314,7 @@ void ST_CreateStatusBar(bool bTitleLevel)
|
||||||
// SBARINFO failed so try the current statusbarclass again.
|
// SBARINFO failed so try the current statusbarclass again.
|
||||||
if (StatusBar == nullptr)
|
if (StatusBar == nullptr)
|
||||||
{
|
{
|
||||||
auto cls = PClass::FindClass(gameinfo.statusbarclass);
|
CreateGameInfoStatusBar(shouldWarn);
|
||||||
if (cls != nullptr)
|
|
||||||
{
|
|
||||||
StatusBar = (DBaseStatusBar *)cls->CreateNew();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (StatusBar == nullptr)
|
if (StatusBar == nullptr)
|
||||||
|
@ -311,6 +330,7 @@ void ST_CreateStatusBar(bool bTitleLevel)
|
||||||
auto cls = PClass::FindClass(defname);
|
auto cls = PClass::FindClass(defname);
|
||||||
if (cls != nullptr)
|
if (cls != nullptr)
|
||||||
{
|
{
|
||||||
|
assert(cls->IsDescendantOf(RUNTIME_CLASS(DBaseStatusBar)));
|
||||||
StatusBar = (DBaseStatusBar *)cls->CreateNew();
|
StatusBar = (DBaseStatusBar *)cls->CreateNew();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,6 @@
|
||||||
|
|
||||||
void FDrawInfo::SetupSubsectorLights(GLFlat *flat, int pass, subsector_t * sub, int *dli)
|
void FDrawInfo::SetupSubsectorLights(GLFlat *flat, int pass, subsector_t * sub, int *dli)
|
||||||
{
|
{
|
||||||
if (isFullbrightScene()) return;
|
|
||||||
if (dli != NULL && *dli != -1)
|
if (dli != NULL && *dli != -1)
|
||||||
{
|
{
|
||||||
gl_RenderState.ApplyLightIndex(GLRenderer->mLights->GetIndex(*dli));
|
gl_RenderState.ApplyLightIndex(GLRenderer->mLights->GetIndex(*dli));
|
||||||
|
@ -84,7 +83,6 @@ void FDrawInfo::SetupSubsectorLights(GLFlat *flat, int pass, subsector_t * sub,
|
||||||
|
|
||||||
void FDrawInfo::SetupSectorLights(GLFlat *flat, int pass, int *dli)
|
void FDrawInfo::SetupSectorLights(GLFlat *flat, int pass, int *dli)
|
||||||
{
|
{
|
||||||
if (isFullbrightScene()) return;
|
|
||||||
if (dli != NULL && *dli != -1)
|
if (dli != NULL && *dli != -1)
|
||||||
{
|
{
|
||||||
gl_RenderState.ApplyLightIndex(GLRenderer->mLights->GetIndex(*dli));
|
gl_RenderState.ApplyLightIndex(GLRenderer->mLights->GetIndex(*dli));
|
||||||
|
@ -303,6 +301,7 @@ void FDrawInfo::DrawFlat(GLFlat *flat, int pass, bool trans) // trans only has m
|
||||||
int rel = getExtraLight();
|
int rel = getExtraLight();
|
||||||
|
|
||||||
auto &plane = flat->plane;
|
auto &plane = flat->plane;
|
||||||
|
auto processLights = level.HasDynamicLights && !isFullbrightScene();
|
||||||
gl_RenderState.SetNormal(plane.plane.Normal().X, plane.plane.Normal().Z, plane.plane.Normal().Y);
|
gl_RenderState.SetNormal(plane.plane.Normal().X, plane.plane.Normal().Z, plane.plane.Normal().Y);
|
||||||
|
|
||||||
switch (pass)
|
switch (pass)
|
||||||
|
@ -316,19 +315,19 @@ void FDrawInfo::DrawFlat(GLFlat *flat, int pass, bool trans) // trans only has m
|
||||||
{
|
{
|
||||||
gl_RenderState.SetMaterial(flat->gltexture, CLAMP_NONE, 0, -1, false);
|
gl_RenderState.SetMaterial(flat->gltexture, CLAMP_NONE, 0, -1, false);
|
||||||
gl_RenderState.SetPlaneTextureRotation(&plane, flat->gltexture);
|
gl_RenderState.SetPlaneTextureRotation(&plane, flat->gltexture);
|
||||||
DrawSubsectors(flat, pass, (pass == GLPASS_ALL || flat->dynlightindex > -1), false);
|
DrawSubsectors(flat, pass, processLights && (gl.lightmethod == LM_DIRECT || flat->dynlightindex > -1), false);
|
||||||
gl_RenderState.EnableTextureMatrix(false);
|
gl_RenderState.EnableTextureMatrix(false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gl_RenderState.SetMaterial(flat->gltexture, CLAMP_XY, 0, -1, false);
|
gl_RenderState.SetMaterial(flat->gltexture, CLAMP_XY, 0, -1, false);
|
||||||
DrawSkyboxSector(flat, pass, (pass == GLPASS_ALL || flat->dynlightindex > -1));
|
DrawSkyboxSector(flat, pass, processLights && (gl.lightmethod == LM_DIRECT || flat->dynlightindex > -1));
|
||||||
}
|
}
|
||||||
gl_RenderState.SetObjectColor(0xffffffff);
|
gl_RenderState.SetObjectColor(0xffffffff);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GLPASS_LIGHTSONLY:
|
case GLPASS_LIGHTSONLY:
|
||||||
if (!trans || flat->gltexture)
|
if ((!trans || flat->gltexture) && processLights)
|
||||||
{
|
{
|
||||||
ProcessLights(flat, trans);
|
ProcessLights(flat, trans);
|
||||||
}
|
}
|
||||||
|
@ -353,7 +352,7 @@ void FDrawInfo::DrawFlat(GLFlat *flat, int pass, bool trans) // trans only has m
|
||||||
else gl_RenderState.AlphaFunc(GL_GEQUAL, 0.f);
|
else gl_RenderState.AlphaFunc(GL_GEQUAL, 0.f);
|
||||||
gl_RenderState.SetMaterial(flat->gltexture, CLAMP_NONE, 0, -1, false);
|
gl_RenderState.SetMaterial(flat->gltexture, CLAMP_NONE, 0, -1, false);
|
||||||
gl_RenderState.SetPlaneTextureRotation(&plane, flat->gltexture);
|
gl_RenderState.SetPlaneTextureRotation(&plane, flat->gltexture);
|
||||||
DrawSubsectors(flat, pass, (gl.lightmethod == LM_DIRECT || flat->dynlightindex > -1), true);
|
DrawSubsectors(flat, pass, processLights && (gl.lightmethod == LM_DIRECT || flat->dynlightindex > -1), true);
|
||||||
gl_RenderState.EnableTextureMatrix(false);
|
gl_RenderState.EnableTextureMatrix(false);
|
||||||
}
|
}
|
||||||
if (flat->renderstyle==STYLE_Add) gl_RenderState.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
if (flat->renderstyle==STYLE_Add) gl_RenderState.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
|
@ -151,6 +151,7 @@ public:
|
||||||
void SightCheck::P_SightOpening(SightOpening &open, const line_t *linedef, double x, double y)
|
void SightCheck::P_SightOpening(SightOpening &open, const line_t *linedef, double x, double y)
|
||||||
{
|
{
|
||||||
open.portalflags = 0;
|
open.portalflags = 0;
|
||||||
|
open.bottom = open.top = 0;
|
||||||
sector_t *front = linedef->frontsector;
|
sector_t *front = linedef->frontsector;
|
||||||
sector_t *back = linedef->backsector;
|
sector_t *back = linedef->backsector;
|
||||||
|
|
||||||
|
@ -159,8 +160,10 @@ void SightCheck::P_SightOpening(SightOpening &open, const line_t *linedef, doubl
|
||||||
// single sided line
|
// single sided line
|
||||||
if (linedef->flags & ML_PORTALCONNECT)
|
if (linedef->flags & ML_PORTALCONNECT)
|
||||||
{
|
{
|
||||||
if (!front->PortalBlocksSight(sector_t::ceiling)) open.portalflags |= SO_TOPFRONT;
|
if (!front->PortalBlocksSight(sector_t::ceiling)) open.top = LINEOPEN_MAX, open.portalflags |= SO_TOPFRONT;
|
||||||
if (!front->PortalBlocksSight(sector_t::floor)) open.portalflags |= SO_BOTTOMFRONT;
|
if (!front->PortalBlocksSight(sector_t::floor)) open.bottom = LINEOPEN_MIN, open.portalflags |= SO_BOTTOMFRONT;
|
||||||
|
if (open.top == 0) open.top = front->floorplane.ZatPoint(x, y);
|
||||||
|
if (open.bottom == 0) open.bottom = front->ceilingplane.ZatPoint(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
open.range = 0;
|
open.range = 0;
|
||||||
|
@ -224,7 +227,7 @@ bool SightCheck::PTR_SightTraverse (intercept_t *in)
|
||||||
{
|
{
|
||||||
// This may not skip P_SightOpening, but only reduce the open range to 0.
|
// This may not skip P_SightOpening, but only reduce the open range to 0.
|
||||||
open.range = 0;
|
open.range = 0;
|
||||||
open.bottom = open.top;
|
if (open.bottom != LINEOPEN_MIN) open.bottom = open.top;
|
||||||
}
|
}
|
||||||
|
|
||||||
FLinePortal *lport = li->getPortal();
|
FLinePortal *lport = li->getPortal();
|
||||||
|
|
|
@ -56,7 +56,7 @@ PolyModelRenderer::PolyModelRenderer(PolyRenderThread *thread, const Mat4f &worl
|
||||||
|
|
||||||
void PolyModelRenderer::AddLights(AActor *actor)
|
void PolyModelRenderer::AddLights(AActor *actor)
|
||||||
{
|
{
|
||||||
if (gl_lights && actor)
|
if (r_dynlights && actor)
|
||||||
{
|
{
|
||||||
auto &addedLights = Thread->AddedLightsArray;
|
auto &addedLights = Thread->AddedLightsArray;
|
||||||
|
|
||||||
|
|
|
@ -269,6 +269,12 @@ void RenderPolyPlane::SetLightLevel(PolyRenderThread *thread, PolyDrawArgs &args
|
||||||
|
|
||||||
void RenderPolyPlane::SetDynLights(PolyRenderThread *thread, PolyDrawArgs &args, subsector_t *sub, bool ceiling)
|
void RenderPolyPlane::SetDynLights(PolyRenderThread *thread, PolyDrawArgs &args, subsector_t *sub, bool ceiling)
|
||||||
{
|
{
|
||||||
|
if (!r_dynlights)
|
||||||
|
{
|
||||||
|
args.SetLights(nullptr, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
FLightNode *light_list = sub->lighthead;
|
FLightNode *light_list = sub->lighthead;
|
||||||
|
|
||||||
auto cameraLight = PolyCameraLight::Instance();
|
auto cameraLight = PolyCameraLight::Instance();
|
||||||
|
|
|
@ -374,6 +374,12 @@ void RenderPolyWall::Render(PolyRenderThread *thread)
|
||||||
|
|
||||||
void RenderPolyWall::SetDynLights(PolyRenderThread *thread, PolyDrawArgs &args)
|
void RenderPolyWall::SetDynLights(PolyRenderThread *thread, PolyDrawArgs &args)
|
||||||
{
|
{
|
||||||
|
if (!r_dynlights)
|
||||||
|
{
|
||||||
|
args.SetLights(nullptr, 0);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
FLightNode *light_list = (LineSeg && LineSeg->sidedef) ? LineSeg->sidedef->lighthead : nullptr;
|
FLightNode *light_list = (LineSeg && LineSeg->sidedef) ? LineSeg->sidedef->lighthead : nullptr;
|
||||||
|
|
||||||
auto cameraLight = PolyCameraLight::Instance();
|
auto cameraLight = PolyCameraLight::Instance();
|
||||||
|
|
|
@ -83,8 +83,6 @@ protected:
|
||||||
void SetFullscreenMode();
|
void SetFullscreenMode();
|
||||||
void SetWindowedMode();
|
void SetWindowedMode();
|
||||||
|
|
||||||
void InitializeState();
|
|
||||||
|
|
||||||
void SwapBuffers();
|
void SwapBuffers();
|
||||||
|
|
||||||
void SetGammaTable(uint16_t* table);
|
void SetGammaTable(uint16_t* table);
|
||||||
|
|
|
@ -555,11 +555,13 @@ void ProcessKeyboardEvent(NSEvent* theEvent)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool isARepeat = [theEvent isARepeat];
|
||||||
|
|
||||||
if (k_allowfullscreentoggle
|
if (k_allowfullscreentoggle
|
||||||
&& (kVK_ANSI_F == keyCode)
|
&& (kVK_ANSI_F == keyCode)
|
||||||
&& (NSCommandKeyMask & [theEvent modifierFlags])
|
&& (NSCommandKeyMask & [theEvent modifierFlags])
|
||||||
&& (NSKeyDown == [theEvent type])
|
&& (NSKeyDown == [theEvent type])
|
||||||
&& ![theEvent isARepeat])
|
&& !isARepeat)
|
||||||
{
|
{
|
||||||
ToggleFullscreen = !ToggleFullscreen;
|
ToggleFullscreen = !ToggleFullscreen;
|
||||||
return;
|
return;
|
||||||
|
@ -569,7 +571,7 @@ void ProcessKeyboardEvent(NSEvent* theEvent)
|
||||||
{
|
{
|
||||||
ProcessKeyboardEventInMenu(theEvent);
|
ProcessKeyboardEventInMenu(theEvent);
|
||||||
}
|
}
|
||||||
else
|
else if (!isARepeat)
|
||||||
{
|
{
|
||||||
event_t event = {};
|
event_t event = {};
|
||||||
|
|
||||||
|
|
|
@ -152,6 +152,7 @@ static void I_DetectOS()
|
||||||
case 11: name = "OS X El Capitan"; break;
|
case 11: name = "OS X El Capitan"; break;
|
||||||
case 12: name = "macOS Sierra"; break;
|
case 12: name = "macOS Sierra"; break;
|
||||||
case 13: name = "macOS High Sierra"; break;
|
case 13: name = "macOS High Sierra"; break;
|
||||||
|
case 14: name = "macOS Mojave"; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
char release[16] = "unknown";
|
char release[16] = "unknown";
|
||||||
|
|
|
@ -319,6 +319,9 @@ NSOpenGLPixelFormat* CreatePixelFormat(const NSOpenGLPixelFormatAttribute profil
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
static SystemGLFrameBuffer* frameBuffer;
|
||||||
|
|
||||||
|
|
||||||
SystemGLFrameBuffer::SystemGLFrameBuffer(void*, const bool fullscreen)
|
SystemGLFrameBuffer::SystemGLFrameBuffer(void*, const bool fullscreen)
|
||||||
: DFrameBuffer(vid_defwidth, vid_defheight)
|
: DFrameBuffer(vid_defwidth, vid_defheight)
|
||||||
, m_window(CreateWindow(STYLE_MASK_WINDOWED))
|
, m_window(CreateWindow(STYLE_MASK_WINDOWED))
|
||||||
|
@ -383,6 +386,8 @@ SystemGLFrameBuffer::SystemGLFrameBuffer(void*, const bool fullscreen)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
frameBuffer = this;
|
||||||
|
|
||||||
FConsoleWindow::GetInstance().Show(false);
|
FConsoleWindow::GetInstance().Show(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -417,10 +422,6 @@ void SystemGLFrameBuffer::SetVSync(bool vsync)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SystemGLFrameBuffer::InitializeState()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemGLFrameBuffer::SwapBuffers()
|
void SystemGLFrameBuffer::SwapBuffers()
|
||||||
{
|
{
|
||||||
[[NSOpenGLContext currentContext] flushBuffer];
|
[[NSOpenGLContext currentContext] flushBuffer];
|
||||||
|
@ -532,24 +533,19 @@ void SystemGLFrameBuffer::SetMode(const bool fullscreen, const bool hiDPI)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static SystemGLFrameBuffer* GetSystemFrameBuffer()
|
|
||||||
{
|
|
||||||
return static_cast<SystemGLFrameBuffer*>(screen);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemGLFrameBuffer::UseHiDPI(const bool hiDPI)
|
void SystemGLFrameBuffer::UseHiDPI(const bool hiDPI)
|
||||||
{
|
{
|
||||||
if (auto fb = GetSystemFrameBuffer())
|
if (frameBuffer != nullptr)
|
||||||
{
|
{
|
||||||
fb->SetMode(fb->m_fullscreen, hiDPI);
|
frameBuffer->SetMode(frameBuffer->m_fullscreen, hiDPI);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SystemGLFrameBuffer::SetCursor(NSCursor* cursor)
|
void SystemGLFrameBuffer::SetCursor(NSCursor* cursor)
|
||||||
{
|
{
|
||||||
if (auto fb = GetSystemFrameBuffer())
|
if (frameBuffer != nullptr)
|
||||||
{
|
{
|
||||||
NSWindow* const window = fb->m_window;
|
NSWindow* const window = frameBuffer->m_window;
|
||||||
CocoaView* const view = [window contentView];
|
CocoaView* const view = [window contentView];
|
||||||
|
|
||||||
[view setCursor:cursor];
|
[view setCursor:cursor];
|
||||||
|
@ -559,15 +555,15 @@ void SystemGLFrameBuffer::SetCursor(NSCursor* cursor)
|
||||||
|
|
||||||
void SystemGLFrameBuffer::SetWindowVisible(bool visible)
|
void SystemGLFrameBuffer::SetWindowVisible(bool visible)
|
||||||
{
|
{
|
||||||
if (auto fb = GetSystemFrameBuffer())
|
if (frameBuffer != nullptr)
|
||||||
{
|
{
|
||||||
if (visible)
|
if (visible)
|
||||||
{
|
{
|
||||||
[fb->m_window orderFront:nil];
|
[frameBuffer->m_window orderFront:nil];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
[fb->m_window orderOut:nil];
|
[frameBuffer->m_window orderOut:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
I_SetNativeMouse(!visible);
|
I_SetNativeMouse(!visible);
|
||||||
|
@ -576,11 +572,11 @@ void SystemGLFrameBuffer::SetWindowVisible(bool visible)
|
||||||
|
|
||||||
void SystemGLFrameBuffer::SetWindowTitle(const char* title)
|
void SystemGLFrameBuffer::SetWindowTitle(const char* title)
|
||||||
{
|
{
|
||||||
if (auto fb = GetSystemFrameBuffer())
|
if (frameBuffer != nullptr)
|
||||||
{
|
{
|
||||||
NSString* const nsTitle = nullptr == title ? nil :
|
NSString* const nsTitle = nullptr == title ? nil :
|
||||||
[NSString stringWithCString:title encoding:NSISOLatin1StringEncoding];
|
[NSString stringWithCString:title encoding:NSISOLatin1StringEncoding];
|
||||||
[fb->m_window setTitle:nsTitle];
|
[frameBuffer->m_window setTitle:nsTitle];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,6 @@ public:
|
||||||
protected:
|
protected:
|
||||||
void SetGammaTable(uint16_t *tbl);
|
void SetGammaTable(uint16_t *tbl);
|
||||||
void ResetGammaTable();
|
void ResetGammaTable();
|
||||||
void InitializeState();
|
|
||||||
|
|
||||||
SystemGLFrameBuffer () {}
|
SystemGLFrameBuffer () {}
|
||||||
uint8_t GammaTable[3][256];
|
uint8_t GammaTable[3][256];
|
||||||
|
|
|
@ -65,6 +65,10 @@ void I_ShutdownGraphics ()
|
||||||
|
|
||||||
void I_InitGraphics ()
|
void I_InitGraphics ()
|
||||||
{
|
{
|
||||||
|
#ifdef __APPLE__
|
||||||
|
SDL_SetHint(SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES, "0");
|
||||||
|
#endif // __APPLE__
|
||||||
|
|
||||||
if (SDL_InitSubSystem (SDL_INIT_VIDEO) < 0)
|
if (SDL_InitSubSystem (SDL_INIT_VIDEO) < 0)
|
||||||
{
|
{
|
||||||
I_FatalError ("Could not initialize SDL video:\n%s\n", SDL_GetError());
|
I_FatalError ("Could not initialize SDL video:\n%s\n", SDL_GetError());
|
||||||
|
|
|
@ -62,8 +62,6 @@ EXTERN_CVAR (Bool, fullscreen)
|
||||||
extern int WaitingForKey, chatmodeon;
|
extern int WaitingForKey, chatmodeon;
|
||||||
extern constate_e ConsoleState;
|
extern constate_e ConsoleState;
|
||||||
|
|
||||||
static bool DownState[SDL_NUM_SCANCODES];
|
|
||||||
|
|
||||||
static const SDL_Keycode DIKToKeySym[256] =
|
static const SDL_Keycode DIKToKeySym[256] =
|
||||||
{
|
{
|
||||||
0, SDLK_ESCAPE, SDLK_1, SDLK_2, SDLK_3, SDLK_4, SDLK_5, SDLK_6,
|
0, SDLK_ESCAPE, SDLK_1, SDLK_2, SDLK_3, SDLK_4, SDLK_5, SDLK_6,
|
||||||
|
@ -188,10 +186,6 @@ static void I_CheckGUICapture ()
|
||||||
if (wantCapt != GUICapture)
|
if (wantCapt != GUICapture)
|
||||||
{
|
{
|
||||||
GUICapture = wantCapt;
|
GUICapture = wantCapt;
|
||||||
if (wantCapt)
|
|
||||||
{
|
|
||||||
memset (DownState, 0, sizeof(DownState));
|
|
||||||
}
|
|
||||||
ResetButtonStates();
|
ResetButtonStates();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -393,6 +387,11 @@ void MessagePump (const SDL_Event &sev)
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
if (!GUICapture)
|
if (!GUICapture)
|
||||||
{
|
{
|
||||||
|
if (sev.key.repeat)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
event.type = sev.type == SDL_KEYDOWN ? EV_KeyDown : EV_KeyUp;
|
event.type = sev.type == SDL_KEYDOWN ? EV_KeyDown : EV_KeyUp;
|
||||||
|
|
||||||
// Try to look up our key mapped key for conversion to DirectInput.
|
// Try to look up our key mapped key for conversion to DirectInput.
|
||||||
|
@ -422,17 +421,9 @@ void MessagePump (const SDL_Event &sev)
|
||||||
((kmod & KMOD_CTRL) ? GKM_CTRL : 0) |
|
((kmod & KMOD_CTRL) ? GKM_CTRL : 0) |
|
||||||
((kmod & KMOD_ALT) ? GKM_ALT : 0);
|
((kmod & KMOD_ALT) ? GKM_ALT : 0);
|
||||||
|
|
||||||
if (event.subtype == EV_GUI_KeyDown)
|
if (event.subtype == EV_GUI_KeyDown && sev.key.repeat)
|
||||||
{
|
{
|
||||||
if (DownState[sev.key.keysym.scancode])
|
event.subtype = EV_GUI_KeyRepeat;
|
||||||
{
|
|
||||||
event.subtype = EV_GUI_KeyRepeat;
|
|
||||||
}
|
|
||||||
DownState[sev.key.keysym.scancode] = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DownState[sev.key.keysym.scancode] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (sev.key.keysym.sym)
|
switch (sev.key.keysym.sym)
|
||||||
|
|
|
@ -273,12 +273,6 @@ SystemGLFrameBuffer::~SystemGLFrameBuffer ()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void SystemGLFrameBuffer::InitializeState()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void SystemGLFrameBuffer::SetGammaTable(uint16_t *tbl)
|
void SystemGLFrameBuffer::SetGammaTable(uint16_t *tbl)
|
||||||
{
|
{
|
||||||
if (m_supportsGamma)
|
if (m_supportsGamma)
|
||||||
|
|
|
@ -188,6 +188,17 @@ bool FWadFile::Open(bool quiet)
|
||||||
Lumps[i].Namespace = ns_global;
|
Lumps[i].Namespace = ns_global;
|
||||||
Lumps[i].Flags = Lumps[i].Compressed? LUMPF_COMPRESSED : 0;
|
Lumps[i].Flags = Lumps[i].Compressed? LUMPF_COMPRESSED : 0;
|
||||||
Lumps[i].FullName = NULL;
|
Lumps[i].FullName = NULL;
|
||||||
|
|
||||||
|
// Check if the lump is within the WAD file and print a warning if not.
|
||||||
|
if (Lumps[i].Position + Lumps[i].LumpSize > wadSize || Lumps[i].Position < 0 || Lumps[i].LumpSize < 0)
|
||||||
|
{
|
||||||
|
if (Lumps[i].LumpSize != 0)
|
||||||
|
{
|
||||||
|
Printf(PRINT_HIGH, "%s: Lump %s contains invalid positioning info and will be ignored\n", Filename, Lumps[i].Name);
|
||||||
|
Lumps[i].Name[0] = 0;
|
||||||
|
}
|
||||||
|
Lumps[i].LumpSize = Lumps[i].Position = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
delete[] fileinfo;
|
delete[] fileinfo;
|
||||||
|
|
|
@ -98,7 +98,7 @@ namespace swrenderer
|
||||||
|
|
||||||
void SWModelRenderer::AddLights(AActor *actor)
|
void SWModelRenderer::AddLights(AActor *actor)
|
||||||
{
|
{
|
||||||
if (gl_lights && actor)
|
if (r_dynlights && actor)
|
||||||
{
|
{
|
||||||
auto &addedLights = Thread->AddedLightsArray;
|
auto &addedLights = Thread->AddedLightsArray;
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@ F84AB4557464A383E93F37CD3A82AC48 // MM2 map03
|
||||||
71C2E6D9CFA3D8750C6A9599FB2453BD // Hacx map03: There are some switches behind
|
71C2E6D9CFA3D8750C6A9599FB2453BD // Hacx map03: There are some switches behind
|
||||||
96368EB950E33AF62EA6423434E3CEF7 // HacX map17: shootable covers in these levels
|
96368EB950E33AF62EA6423434E3CEF7 // HacX map17: shootable covers in these levels
|
||||||
BA530202AF0BA0C6CBAE6A0C7076FB72 // Requiem map04
|
BA530202AF0BA0C6CBAE6A0C7076FB72 // Requiem map04
|
||||||
|
E2819F69CB79BA66E0ACBCD7DE652F9D // Hell to Pay MAP32: Exit switch pressable through lasers
|
||||||
{
|
{
|
||||||
useblocking
|
useblocking
|
||||||
}
|
}
|
||||||
|
|
|
@ -598,6 +598,27 @@ CC_SPIDER = "THE SPIDER MASTERMIND";
|
||||||
CC_CYBER = "THE CYBERDEMON";
|
CC_CYBER = "THE CYBERDEMON";
|
||||||
CC_HERO = "OUR HERO";
|
CC_HERO = "OUR HERO";
|
||||||
|
|
||||||
|
// Friendly names
|
||||||
|
FN_ZOMBIE = "Zombieman";
|
||||||
|
FN_SHOTGUN = "Sergeant";
|
||||||
|
FN_HEAVY = "Chaingunner";
|
||||||
|
FN_IMP = "Imp";
|
||||||
|
FN_DEMON = "Demon";
|
||||||
|
FN_SPECTRE = "Spectre";
|
||||||
|
FN_LOST = "Lost Soul";
|
||||||
|
FN_CACO = "Cacodemon";
|
||||||
|
FN_HELL = "Hell Knight";
|
||||||
|
FN_BARON = "Baron of Hell";
|
||||||
|
FN_ARACH = "Arachnotron";
|
||||||
|
FN_PAIN = "Pain Elemental";
|
||||||
|
FN_REVEN = "Revenant";
|
||||||
|
FN_MANCU = "Mancubus";
|
||||||
|
FN_ARCH = "Arch-vile";
|
||||||
|
FN_SPIDER = "Spider Mastermind";
|
||||||
|
FN_CYBER = "Cyberdemon";
|
||||||
|
FN_WOLFSS = "Nazi";
|
||||||
|
FN_DOG = "Dog";
|
||||||
|
|
||||||
// New strings from BOOM
|
// New strings from BOOM
|
||||||
PD_BLUEC = "You need a blue card to open this door";
|
PD_BLUEC = "You need a blue card to open this door";
|
||||||
PD_REDC = "You need a red card to open this door";
|
PD_REDC = "You need a red card to open this door";
|
||||||
|
@ -1300,6 +1321,20 @@ TXT_IMTIME = "TIME";
|
||||||
|
|
||||||
RAVENQUITMSG = "ARE YOU SURE YOU WANT TO QUIT?";
|
RAVENQUITMSG = "ARE YOU SURE YOU WANT TO QUIT?";
|
||||||
|
|
||||||
|
// Friendly names
|
||||||
|
FN_CHICKEN = "Chicken";
|
||||||
|
FN_BEAST = "Weredragon";
|
||||||
|
FN_CLINK = "Sabreclaw";
|
||||||
|
FN_DSPARIL = "D'Sparil";
|
||||||
|
FN_HERETICIMP = "Gargoyle";
|
||||||
|
FN_IRONLICH = "Ironlich";
|
||||||
|
FN_BONEKNIGHT = "Undead Warrior";
|
||||||
|
FN_MINOTAUR = "Maulotaur";
|
||||||
|
FN_MUMMY = "Golem";
|
||||||
|
FN_MUMMYLEADER = "Nitrogolem";
|
||||||
|
FN_SNAKE = "Ophidian";
|
||||||
|
FN_WIZARD = "Wizard";
|
||||||
|
|
||||||
// Hexen strings
|
// Hexen strings
|
||||||
|
|
||||||
// Mana
|
// Mana
|
||||||
|
|
|
@ -21,6 +21,7 @@ class Arachnotron : Actor
|
||||||
DeathSound "baby/death";
|
DeathSound "baby/death";
|
||||||
ActiveSound "baby/active";
|
ActiveSound "baby/active";
|
||||||
Obituary "$OB_BABY";
|
Obituary "$OB_BABY";
|
||||||
|
Tag "$FN_ARACH";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,6 +25,7 @@ class Archvile : Actor
|
||||||
ActiveSound "vile/active";
|
ActiveSound "vile/active";
|
||||||
MeleeSound "vile/stop";
|
MeleeSound "vile/stop";
|
||||||
Obituary "$OB_VILE";
|
Obituary "$OB_VILE";
|
||||||
|
Tag "$FN_ARCH";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,6 +22,7 @@ class BaronOfHell : Actor
|
||||||
ActiveSound "baron/active";
|
ActiveSound "baron/active";
|
||||||
Obituary "$OB_BARON";
|
Obituary "$OB_BARON";
|
||||||
HitObituary "$OB_BARONHIT";
|
HitObituary "$OB_BARONHIT";
|
||||||
|
Tag "$FN_BARON";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
@ -72,6 +73,7 @@ class HellKnight : BaronOfHell
|
||||||
DeathSound "knight/death";
|
DeathSound "knight/death";
|
||||||
HitObituary "$OB_KNIGHTHIT";
|
HitObituary "$OB_KNIGHTHIT";
|
||||||
Obituary "$OB_KNIGHT";
|
Obituary "$OB_KNIGHT";
|
||||||
|
Tag "$FN_HELL";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,6 +21,7 @@ class Cacodemon : Actor
|
||||||
ActiveSound "caco/active";
|
ActiveSound "caco/active";
|
||||||
Obituary "$OB_CACO";
|
Obituary "$OB_CACO";
|
||||||
HitObituary "$OB_CACOHIT";
|
HitObituary "$OB_CACOHIT";
|
||||||
|
Tag "$FN_CACO";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,6 +27,7 @@ class Cyberdemon : Actor
|
||||||
DeathSound "cyber/death";
|
DeathSound "cyber/death";
|
||||||
ActiveSound "cyber/active";
|
ActiveSound "cyber/active";
|
||||||
Obituary "$OB_CYBORG";
|
Obituary "$OB_CYBORG";
|
||||||
|
Tag "$FN_CYBER";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,6 +21,7 @@ class Demon : Actor
|
||||||
DeathSound "demon/death";
|
DeathSound "demon/death";
|
||||||
ActiveSound "demon/active";
|
ActiveSound "demon/active";
|
||||||
Obituary "$OB_DEMONHIT";
|
Obituary "$OB_DEMONHIT";
|
||||||
|
Tag "$FN_DEMON";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
@ -71,6 +72,7 @@ class Spectre : Demon
|
||||||
DeathSound "spectre/death";
|
DeathSound "spectre/death";
|
||||||
ActiveSound "spectre/active";
|
ActiveSound "spectre/active";
|
||||||
HitObituary "$OB_SPECTREHIT";
|
HitObituary "$OB_SPECTREHIT";
|
||||||
|
Tag "$FN_SPECTRE";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ class DoomImp : Actor
|
||||||
ActiveSound "imp/active";
|
ActiveSound "imp/active";
|
||||||
HitObituary "$OB_IMPHIT";
|
HitObituary "$OB_IMPHIT";
|
||||||
Obituary "$OB_IMP";
|
Obituary "$OB_IMP";
|
||||||
|
Tag "$FN_IMP";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,6 +21,7 @@ class Fatso : Actor
|
||||||
DeathSound "fatso/death";
|
DeathSound "fatso/death";
|
||||||
ActiveSound "fatso/active";
|
ActiveSound "fatso/active";
|
||||||
Obituary "$OB_FATSO";
|
Obituary "$OB_FATSO";
|
||||||
|
Tag "$FN_MANCU";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,6 +22,7 @@ class LostSoul : Actor
|
||||||
ActiveSound "skull/active";
|
ActiveSound "skull/active";
|
||||||
RenderStyle "SoulTrans";
|
RenderStyle "SoulTrans";
|
||||||
Obituary "$OB_SKULL";
|
Obituary "$OB_SKULL";
|
||||||
|
Tag "$FN_LOST";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,6 +20,7 @@ class PainElemental : Actor
|
||||||
PainSound "pain/pain";
|
PainSound "pain/pain";
|
||||||
DeathSound "pain/death";
|
DeathSound "pain/death";
|
||||||
ActiveSound "pain/active";
|
ActiveSound "pain/active";
|
||||||
|
Tag "$FN_PAIN";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,6 +21,7 @@ class ZombieMan : Actor
|
||||||
DeathSound "grunt/death";
|
DeathSound "grunt/death";
|
||||||
ActiveSound "grunt/active";
|
ActiveSound "grunt/active";
|
||||||
Obituary "$OB_ZOMBIE";
|
Obituary "$OB_ZOMBIE";
|
||||||
|
Tag "$FN_ZOMBIE";
|
||||||
DropItem "Clip";
|
DropItem "Clip";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
@ -84,6 +85,7 @@ class ShotgunGuy : Actor
|
||||||
DeathSound "shotguy/death";
|
DeathSound "shotguy/death";
|
||||||
ActiveSound "shotguy/active";
|
ActiveSound "shotguy/active";
|
||||||
Obituary "$OB_SHOTGUY";
|
Obituary "$OB_SHOTGUY";
|
||||||
|
Tag "$FN_SHOTGUN";
|
||||||
DropItem "Shotgun";
|
DropItem "Shotgun";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
@ -147,6 +149,7 @@ class ChaingunGuy : Actor
|
||||||
ActiveSound "chainguy/active";
|
ActiveSound "chainguy/active";
|
||||||
AttackSound "chainguy/attack";
|
AttackSound "chainguy/attack";
|
||||||
Obituary "$OB_CHAINGUY";
|
Obituary "$OB_CHAINGUY";
|
||||||
|
Tag "$FN_HEAVY";
|
||||||
Dropitem "Chaingun";
|
Dropitem "Chaingun";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
@ -209,6 +212,7 @@ class WolfensteinSS : Actor
|
||||||
ActiveSound "wolfss/active";
|
ActiveSound "wolfss/active";
|
||||||
AttackSound "wolfss/attack";
|
AttackSound "wolfss/attack";
|
||||||
Obituary "$OB_WOLFSS";
|
Obituary "$OB_WOLFSS";
|
||||||
|
Tag "$FN_WOLFSS";
|
||||||
Dropitem "Clip";
|
Dropitem "Clip";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
|
|
@ -24,6 +24,7 @@ class Revenant : Actor
|
||||||
MeleeSound "skeleton/melee";
|
MeleeSound "skeleton/melee";
|
||||||
HitObituary "$OB_UNDEADHIT";
|
HitObituary "$OB_UNDEADHIT";
|
||||||
Obituary "$OB_UNDEAD";
|
Obituary "$OB_UNDEAD";
|
||||||
|
Tag "$FN_REVEN";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,7 @@ class SpiderMastermind : Actor
|
||||||
DeathSound "spider/death";
|
DeathSound "spider/death";
|
||||||
ActiveSound "spider/active";
|
ActiveSound "spider/active";
|
||||||
Obituary "$OB_SPIDER";
|
Obituary "$OB_SPIDER";
|
||||||
|
Tag "$FN_SPIDER";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,6 +19,7 @@ class Beast : Actor
|
||||||
DeathSound "beast/death";
|
DeathSound "beast/death";
|
||||||
ActiveSound "beast/active";
|
ActiveSound "beast/active";
|
||||||
Obituary "$OB_BEAST";
|
Obituary "$OB_BEAST";
|
||||||
|
Tag "$FN_BEAST";
|
||||||
DropItem "CrossbowAmmo", 84, 10;
|
DropItem "CrossbowAmmo", 84, 10;
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
|
|
@ -256,6 +256,7 @@ class Chicken : MorphedMonster
|
||||||
DeathSound "chicken/death";
|
DeathSound "chicken/death";
|
||||||
ActiveSound "chicken/active";
|
ActiveSound "chicken/active";
|
||||||
Obituary "$OB_CHICKEN";
|
Obituary "$OB_CHICKEN";
|
||||||
|
Tag "$FN_CHICKEN";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,6 +17,7 @@ class Clink : Actor
|
||||||
DeathSound "clink/death";
|
DeathSound "clink/death";
|
||||||
ActiveSound "clink/active";
|
ActiveSound "clink/active";
|
||||||
Obituary "$OB_CLINK";
|
Obituary "$OB_CLINK";
|
||||||
|
Tag "$FN_CLINK";
|
||||||
DropItem "SkullRodAmmo", 84, 20;
|
DropItem "SkullRodAmmo", 84, 20;
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
|
|
@ -36,6 +36,7 @@ class Sorcerer1 : Actor
|
||||||
ActiveSound "dsparilserpent/active";
|
ActiveSound "dsparilserpent/active";
|
||||||
Obituary "$OB_DSPARIL1";
|
Obituary "$OB_DSPARIL1";
|
||||||
HitObituary "$OB_DSPARIL1HIT";
|
HitObituary "$OB_DSPARIL1HIT";
|
||||||
|
Tag "$FN_DSPARIL";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -237,6 +238,7 @@ class Sorcerer2 : Actor
|
||||||
ActiveSound "dsparil/active";
|
ActiveSound "dsparil/active";
|
||||||
Obituary "$OB_DSPARIL2";
|
Obituary "$OB_DSPARIL2";
|
||||||
HitObituary "$OB_DSPARIL2HIT";
|
HitObituary "$OB_DSPARIL2HIT";
|
||||||
|
Tag "$FN_DSPARIL";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,7 @@ class HereticImp : Actor
|
||||||
ActiveSound "himp/active";
|
ActiveSound "himp/active";
|
||||||
Obituary "$OB_HERETICIMP";
|
Obituary "$OB_HERETICIMP";
|
||||||
HitObituary "$OB_HERETICIMPHIT";
|
HitObituary "$OB_HERETICIMPHIT";
|
||||||
|
Tag "$FN_HERETICIMP";
|
||||||
}
|
}
|
||||||
|
|
||||||
States
|
States
|
||||||
|
|
|
@ -23,6 +23,7 @@ class Ironlich : Actor
|
||||||
ActiveSound "ironlich/active";
|
ActiveSound "ironlich/active";
|
||||||
Obituary "$OB_IRONLICH";
|
Obituary "$OB_IRONLICH";
|
||||||
HitObituary "$OB_IRONLICHHIT";
|
HitObituary "$OB_IRONLICHHIT";
|
||||||
|
Tag "$FN_IRONLICH";
|
||||||
DropItem "BlasterAmmo", 84, 10;
|
DropItem "BlasterAmmo", 84, 10;
|
||||||
DropItem "ArtiEgg", 51, 0;
|
DropItem "ArtiEgg", 51, 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ class Knight : Actor
|
||||||
ActiveSound "hknight/active";
|
ActiveSound "hknight/active";
|
||||||
Obituary "$OB_BONEKNIGHT";
|
Obituary "$OB_BONEKNIGHT";
|
||||||
HitObituary "$OB_BONEKNIGHTHIT";
|
HitObituary "$OB_BONEKNIGHTHIT";
|
||||||
|
Tag "$FN_BONEKNIGHT";
|
||||||
DropItem "CrossbowAmmo", 84, 5;
|
DropItem "CrossbowAmmo", 84, 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ class Mummy : Actor
|
||||||
DeathSound "mummy/death";
|
DeathSound "mummy/death";
|
||||||
ActiveSound "mummy/active";
|
ActiveSound "mummy/active";
|
||||||
HitObituary "$OB_MUMMY";
|
HitObituary "$OB_MUMMY";
|
||||||
|
Tag "$FN_MUMMY";
|
||||||
DropItem "GoldWandAmmo", 84, 3;
|
DropItem "GoldWandAmmo", 84, 3;
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
@ -60,6 +61,7 @@ class MummyLeader : Mummy
|
||||||
Health 100;
|
Health 100;
|
||||||
Painchance 64;
|
Painchance 64;
|
||||||
Obituary "$OB_MUMMYLEADER";
|
Obituary "$OB_MUMMYLEADER";
|
||||||
|
Tag "$FN_MUMMYLEADER";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,6 +16,7 @@ class Snake : Actor
|
||||||
DeathSound "snake/death";
|
DeathSound "snake/death";
|
||||||
ActiveSound "snake/active";
|
ActiveSound "snake/active";
|
||||||
Obituary "$OB_SNAKE";
|
Obituary "$OB_SNAKE";
|
||||||
|
Tag "$FN_SNAKE";
|
||||||
DropItem "PhoenixRodAmmo", 84, 5;
|
DropItem "PhoenixRodAmmo", 84, 5;
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
|
|
|
@ -22,6 +22,7 @@ class Wizard : Actor
|
||||||
ActiveSound "wizard/active";
|
ActiveSound "wizard/active";
|
||||||
Obituary "$OB_WIZARD";
|
Obituary "$OB_WIZARD";
|
||||||
HitObituary "$OB_WIZARDHIT";
|
HitObituary "$OB_WIZARDHIT";
|
||||||
|
Tag "$FN_WIZARD";
|
||||||
DropItem "BlasterAmmo", 84, 10;
|
DropItem "BlasterAmmo", 84, 10;
|
||||||
DropItem "ArtiTomeOfPower", 4, 0;
|
DropItem "ArtiTomeOfPower", 4, 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -401,6 +401,26 @@ class LevelCompatibility play
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case '915409A89746D6BFD92C7956BE6A0A2D': // Doom II: BFG Edition MAP33
|
||||||
|
{
|
||||||
|
// Missing textures on sector with a Super Shotgun at map start.
|
||||||
|
TextureID rock2 = TexMan.CheckForTexture("ROCK2", TexMan.Type_Wall);
|
||||||
|
for(int i=0; i<4; i++)
|
||||||
|
{
|
||||||
|
SetWallTextureID(567+i, Line.front, Side.bottom, ROCK2);
|
||||||
|
SetWallTextureID(567+i, Line.back, Side.top, ROCK2);
|
||||||
|
}
|
||||||
|
// Tags the linedefs on the teleporter at the end of the level so that
|
||||||
|
// it's possible to leave the room near the yellow keycard door.
|
||||||
|
for(int i=0; i<2; i++)
|
||||||
|
{
|
||||||
|
SetLineSpecial(400+i, Teleport, 0, 36);
|
||||||
|
SetLineSpecial(559+i, Teleport, 0, 36);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 'ABC4EB5A1535ECCD0061AD14F3547908': // Plutonia Experiment, map26
|
case 'ABC4EB5A1535ECCD0061AD14F3547908': // Plutonia Experiment, map26
|
||||||
{
|
{
|
||||||
SetSectorSpecial(156, 0);
|
SetSectorSpecial(156, 0);
|
||||||
|
@ -702,6 +722,47 @@ class LevelCompatibility play
|
||||||
GetDefaultActor('WolfensteinSS').bActivateMCross = true;
|
GetDefaultActor('WolfensteinSS').bActivateMCross = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'D67CECE3F60083383DF992B8C824E4AC': // Icarus: Alien Vanuguard MAP13
|
||||||
|
{
|
||||||
|
// Moves sector special to platform with Berserk powerup. The
|
||||||
|
// map's only secret can now be scored.
|
||||||
|
SetSectorSpecial(119, 0);
|
||||||
|
SetSectorSpecial(122, 1024);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '61373587339A768854E2912CC99A4781': // Icarus: Alien Vanuguard MAP15
|
||||||
|
{
|
||||||
|
// Can press use on the lift to reveal the secret Shotgun,
|
||||||
|
// making 100% secrets possible.
|
||||||
|
SetLineSpecial(222, Plat_DownWaitUpStayLip, 11, 64, 105, 0);
|
||||||
|
SetLineActivation(222, SPAC_Use);
|
||||||
|
SetLineFlags(222, Line.ML_REPEAT_SPECIAL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '9F66B0797925A09D4DC0725540F8EEF7': // Icarus: Alien Vanuguard MAP16
|
||||||
|
{
|
||||||
|
// Can press use on the walls at the secret Rocket Launcher in
|
||||||
|
// case of getting stuck.
|
||||||
|
for(int i=0; i<7; i++)
|
||||||
|
{
|
||||||
|
SetLineSpecial(703+i, Plat_DownWaitUpStayLip, 14, 64, 105, 0);
|
||||||
|
SetLineActivation(703+i, SPAC_Use);
|
||||||
|
SetLineFlags(703+i, Line.ML_REPEAT_SPECIAL);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case '09645D198010BF634EF0DE3EFCB0052C': // Flashback to Hell MAP12
|
||||||
|
{
|
||||||
|
// Can press use behind bookshelf in case of getting stuck.
|
||||||
|
SetLineSpecial(4884, Plat_DownWaitUpStayLip, 15, 32, 105, 0);
|
||||||
|
SetLineActivation(4884, SPAC_UseBack);
|
||||||
|
SetLineFlags(4884, Line.ML_REPEAT_SPECIAL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ class Minotaur : Actor
|
||||||
DropItem "PhoenixRodAmmo", 84, 10;
|
DropItem "PhoenixRodAmmo", 84, 10;
|
||||||
Obituary "$OB_MINOTAUR";
|
Obituary "$OB_MINOTAUR";
|
||||||
HitObituary "$OB_MINOTAURHIT";
|
HitObituary "$OB_MINOTAURHIT";
|
||||||
|
Tag "$FN_MINOTAUR";
|
||||||
}
|
}
|
||||||
|
|
||||||
States
|
States
|
||||||
|
|
|
@ -16,6 +16,7 @@ class MBFHelperDog : Actor
|
||||||
PainSound "dog/pain";
|
PainSound "dog/pain";
|
||||||
SeeSound "dog/sight";
|
SeeSound "dog/sight";
|
||||||
Obituary "$OB_DOG";
|
Obituary "$OB_DOG";
|
||||||
|
Tag "$FN_DOG";
|
||||||
}
|
}
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue