mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-01-18 07:22:28 +00:00
Merge branch 'public_next'
# Conflicts: # src/p_mobj.c
This commit is contained in:
commit
31b9e762e1
13 changed files with 149 additions and 261 deletions
22
README.md
Normal file
22
README.md
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# Sonic Robo Blast 2
|
||||||
|
|
||||||
|
[![Build status](https://ci.appveyor.com/api/projects/status/399d4hcw9yy7hg2y?svg=true)](https://ci.appveyor.com/project/STJr/srb2)
|
||||||
|
[![Build status](https://travis-ci.org/STJr/SRB2.svg?branch=master)](https://travis-ci.org/STJr/SRB2)
|
||||||
|
|
||||||
|
[Sonic Robo Blast 2](https://srb2.org/) is a 3D Sonic the Hedgehog fangame based on a modified version of [Doom Legacy](http://doomlegacy.sourceforge.net/).
|
||||||
|
|
||||||
|
## Dependencies
|
||||||
|
- NASM (x86 builds only)
|
||||||
|
- SDL2 (Linux/OS X only)
|
||||||
|
- SDL2-Mixer (Linux/OS X only)
|
||||||
|
- libupnp (Linux/OS X only)
|
||||||
|
- libgme (Linux/OS X only)
|
||||||
|
|
||||||
|
Warning: 64-bit builds are not netgame compatible with 32-bit builds. Use at your own risk.
|
||||||
|
|
||||||
|
## Compiling
|
||||||
|
|
||||||
|
See [SRB2 Wiki/Source code compiling](http://wiki.srb2.org/wiki/Source_code_compiling)
|
||||||
|
|
||||||
|
## Disclaimer
|
||||||
|
Sonic Team Junior is in no way affiliated with SEGA or Sonic Team. We do not claim ownership of any of SEGA's intellectual property used in SRB2.
|
155
readme.txt
155
readme.txt
|
@ -1,155 +0,0 @@
|
||||||
Here it is! SRB2 v2.1.14 source code!
|
|
||||||
(why do we keep the version number up to date
|
|
||||||
when everything else in this file is hilariously old?
|
|
||||||
- Inuyasha)
|
|
||||||
|
|
||||||
|
|
||||||
Win32 with Visual C (6SP6+Processor Pack OR 7)
|
|
||||||
~~~
|
|
||||||
|
|
||||||
2 VC++ 6.0 project files are included:
|
|
||||||
|
|
||||||
Win32/DirectX/FMOD
|
|
||||||
src\win32\wLegacy.dsw
|
|
||||||
You'll need FMOD to compile this version (www.fmod.org)
|
|
||||||
or
|
|
||||||
Win32/SDL/SDL_mixer
|
|
||||||
src\sdl\Win32SDL.dsp
|
|
||||||
You'll need SDL and SDL_mixer for this version (www.libsdl.org)
|
|
||||||
|
|
||||||
Both needs NASM (http://sourceforge.net/projects/nasm)
|
|
||||||
For PNG screenshot, libPNG, and Zlib (from http://gnuwin32.sourceforge.net/)
|
|
||||||
|
|
||||||
No warranty, support, etc. of any kind is offered,
|
|
||||||
just plain old as is.
|
|
||||||
Some bits of code are still really scary.
|
|
||||||
Go nuts!
|
|
||||||
|
|
||||||
|
|
||||||
Win32 with Dev-C++ (http://bloodshed.net/ free!)
|
|
||||||
~~~
|
|
||||||
2 Dev-C++ project files are included:
|
|
||||||
|
|
||||||
Win32/DirectX/FMOD
|
|
||||||
src\win32\SRB2.dev
|
|
||||||
or
|
|
||||||
Win32/SDL/SDL_mixer
|
|
||||||
src\sdl\Win32SDL.dev
|
|
||||||
You'll need SDL and SDL_mixer for this version (www.libsdl.org)
|
|
||||||
libPNG and Zlib (from http://gnuwin32.sourceforge.net/)
|
|
||||||
Note there are precompiled libpng.a and libz.a for Mingw
|
|
||||||
|
|
||||||
you will need NASM for both SDL/SDL_mixer and DirectX/FMOD
|
|
||||||
and you need DirectX 6 (or up) Dev-Paks to compile DirectX version
|
|
||||||
|
|
||||||
GNU/Linux
|
|
||||||
~~~
|
|
||||||
|
|
||||||
Dependencies:
|
|
||||||
SDL 1.2.7 or better (from libsdl.org)
|
|
||||||
SDL_Mixer 1.2.2(.7 for file-less music playback) (from libsdl.org)
|
|
||||||
Nasm (use NOASM=1 if you don't have it or have an non-i386 system, I think)
|
|
||||||
libPNG 1.2.7
|
|
||||||
Zlib 1.2.3
|
|
||||||
The Xiph.org libogg and libvorbis libraries
|
|
||||||
The OpenGL headers (from Mesa, usually shipped with your X.org or XFree
|
|
||||||
installation, so you needn't worry, most likely)
|
|
||||||
GCC 3.x toolchain and binutils
|
|
||||||
GNU Make
|
|
||||||
|
|
||||||
Build instructions:
|
|
||||||
|
|
||||||
make -C src LINUX=1
|
|
||||||
|
|
||||||
Build instructions (64 bit):
|
|
||||||
|
|
||||||
make -C src LINUX64=1
|
|
||||||
|
|
||||||
Build instructions to build for Wii Linux/SRB2Wii on a PowerPC system,
|
|
||||||
follow cross-compiling instructions for cross-compiling on a x86 system:
|
|
||||||
|
|
||||||
make -C src LINUX=1 WIILINUX=1
|
|
||||||
|
|
||||||
Build instructions to build for Pandora (Linux) on a ARM system,
|
|
||||||
follow cross-compiling instructions for cross-compiling on a x86 system:
|
|
||||||
|
|
||||||
make -C src PANDORA=1
|
|
||||||
|
|
||||||
Solaris
|
|
||||||
~~~
|
|
||||||
|
|
||||||
Dependencies:
|
|
||||||
SDL 1.2.5 or better (from libsdl.org)
|
|
||||||
SDL_Mixer 1.2.2(.7 for file-less music playback) (from libsdl.org)
|
|
||||||
libPNG 1.2.7
|
|
||||||
Zlib 1.2.3
|
|
||||||
The Xiph.org libogg and libvorbis libraries
|
|
||||||
The OpenGL headers (from Mesa, usually shipped with your X.org or XFree
|
|
||||||
installation, so you needn't worry, most likely)
|
|
||||||
GCC 3.x toolchain and binutils
|
|
||||||
GNU Make
|
|
||||||
|
|
||||||
You can get all these programs/libraries from the Companion CD (except SDL_mixer and OpenGL)
|
|
||||||
|
|
||||||
Build instructions:
|
|
||||||
|
|
||||||
gmake -C src SOLARIS=1
|
|
||||||
|
|
||||||
FreeBSD
|
|
||||||
~~~
|
|
||||||
|
|
||||||
Dependencies:
|
|
||||||
SDL 1.2.7 or better (from libsdl.org)
|
|
||||||
SDL_Mixer 1.2.2(.7 for file-less music playback) (from libsdl.org)
|
|
||||||
Nasm (use NOASM=1 if you don't have it or have an non-i386 system, I think)
|
|
||||||
libPNG 1.2.7
|
|
||||||
Zlib 1.2.3
|
|
||||||
The Xiph.org libogg and libvorbis libraries
|
|
||||||
The OpenGL headers (from Mesa, usually shipped with your X.org or XFree
|
|
||||||
installation, so you needn't worry, most likely)
|
|
||||||
GCC 3.x toolchain and binutils
|
|
||||||
GNU Make
|
|
||||||
|
|
||||||
Build instructions:
|
|
||||||
|
|
||||||
gmake -C src FREEBSD=1
|
|
||||||
|
|
||||||
DJGPP/DOS
|
|
||||||
~~~
|
|
||||||
|
|
||||||
Dependencies:
|
|
||||||
Allegro 3.12 game programming library, (from
|
|
||||||
http://alleg.sourceforge.net/index.html)
|
|
||||||
Nasm (use NOASM=1 if you don't have it)
|
|
||||||
libsocket (from http://homepages.nildram.co.uk/~phekda/richdawe/lsck/) or
|
|
||||||
Watt-32 (from http://www.bgnett.no/~giva/)
|
|
||||||
GCC 3.x toolchain and binutils
|
|
||||||
GNU Make
|
|
||||||
|
|
||||||
Build instructions:
|
|
||||||
|
|
||||||
make -C src # to link with Watt-32, add WATTCP=1
|
|
||||||
# for remote debugging over the COM port, add RDB=1
|
|
||||||
|
|
||||||
Notes:
|
|
||||||
use tools\djgpp\all313.diff to update Allegro to a "more usable" version ;)
|
|
||||||
Example: E:\djgpp\allegro>patch -p# < D:\SRB2Code\1.1\srb2\tools\djgpp\all313.diff
|
|
||||||
|
|
||||||
Windows CE
|
|
||||||
~~~
|
|
||||||
|
|
||||||
Dependencies:
|
|
||||||
SDL 1.27
|
|
||||||
|
|
||||||
Build instructions:
|
|
||||||
|
|
||||||
use src\SDL\WinCE\SRB2CE.vcw
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
binaries will turn in up in bin/
|
|
||||||
|
|
||||||
note: read the src/makefile for more options
|
|
||||||
|
|
||||||
- Sonic Team Junior
|
|
||||||
http://www.srb2.org
|
|
|
@ -60,6 +60,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
|
#define NONET
|
||||||
#if !defined (HWRENDER) && !defined (NOHW)
|
#if !defined (HWRENDER) && !defined (NOHW)
|
||||||
#define HWRENDER
|
#define HWRENDER
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1727,6 +1727,7 @@ static void F_AdvanceToNextScene(void)
|
||||||
|
|
||||||
void F_EndCutScene(void)
|
void F_EndCutScene(void)
|
||||||
{
|
{
|
||||||
|
cutsceneover = true; // do this first, just in case Y_EndGame or something wants to turn it back false later
|
||||||
if (runningprecutscene)
|
if (runningprecutscene)
|
||||||
{
|
{
|
||||||
if (server)
|
if (server)
|
||||||
|
@ -1743,7 +1744,6 @@ void F_EndCutScene(void)
|
||||||
else
|
else
|
||||||
Y_EndGame();
|
Y_EndGame();
|
||||||
}
|
}
|
||||||
cutsceneover = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void F_StartCustomCutscene(INT32 cutscenenum, boolean precutscene, boolean resetplayer)
|
void F_StartCustomCutscene(INT32 cutscenenum, boolean precutscene, boolean resetplayer)
|
||||||
|
|
|
@ -711,6 +711,10 @@ void G_SetGameModified(boolean silent)
|
||||||
|
|
||||||
if (!silent)
|
if (!silent)
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("Game must be restarted to record statistics.\n"));
|
CONS_Alert(CONS_NOTICE, M_GetText("Game must be restarted to record statistics.\n"));
|
||||||
|
|
||||||
|
// If in record attack recording, cancel it.
|
||||||
|
if (modeattacking)
|
||||||
|
M_EndModeAttackRun();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Builds an original game map name from a map number.
|
/** Builds an original game map name from a map number.
|
||||||
|
|
|
@ -56,7 +56,9 @@
|
||||||
//#define NONET
|
//#define NONET
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NONET
|
#ifdef NONET
|
||||||
|
#undef HAVE_MINIUPNPC
|
||||||
|
#else
|
||||||
#ifdef USE_WINSOCK1
|
#ifdef USE_WINSOCK1
|
||||||
#include <winsock.h>
|
#include <winsock.h>
|
||||||
#elif !defined (SCOUW2) && !defined (SCOUW7) && !defined (__OS2__)
|
#elif !defined (SCOUW2) && !defined (SCOUW7) && !defined (__OS2__)
|
||||||
|
|
13
src/m_menu.c
13
src/m_menu.c
|
@ -705,7 +705,7 @@ static menuitem_t SP_TimeAttackMenu[] =
|
||||||
{IT_DISABLED, NULL, "Guest Option...", &SP_GuestReplayDef, 100},
|
{IT_DISABLED, NULL, "Guest Option...", &SP_GuestReplayDef, 100},
|
||||||
{IT_DISABLED, NULL, "Replay...", &SP_ReplayDef, 110},
|
{IT_DISABLED, NULL, "Replay...", &SP_ReplayDef, 110},
|
||||||
{IT_DISABLED, NULL, "Ghosts...", &SP_GhostDef, 120},
|
{IT_DISABLED, NULL, "Ghosts...", &SP_GhostDef, 120},
|
||||||
{IT_WHITESTRING|IT_CALL, NULL, "Start", M_ChooseTimeAttack, 130},
|
{IT_WHITESTRING|IT_CALL|IT_CALL_NOTMODIFIED, NULL, "Start", M_ChooseTimeAttack, 130},
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -797,7 +797,7 @@ static menuitem_t SP_NightsAttackMenu[] =
|
||||||
{IT_DISABLED, NULL, "Guest Option...", &SP_NightsGuestReplayDef, 108},
|
{IT_DISABLED, NULL, "Guest Option...", &SP_NightsGuestReplayDef, 108},
|
||||||
{IT_DISABLED, NULL, "Replay...", &SP_NightsReplayDef, 118},
|
{IT_DISABLED, NULL, "Replay...", &SP_NightsReplayDef, 118},
|
||||||
{IT_DISABLED, NULL, "Ghosts...", &SP_NightsGhostDef, 128},
|
{IT_DISABLED, NULL, "Ghosts...", &SP_NightsGhostDef, 128},
|
||||||
{IT_WHITESTRING|IT_CALL, NULL, "Start", M_ChooseNightsAttack, 138},
|
{IT_WHITESTRING|IT_CALL|IT_CALL_NOTMODIFIED, NULL, "Start", M_ChooseNightsAttack, 138},
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
@ -3702,6 +3702,11 @@ static void M_DrawMessageMenu(void)
|
||||||
|
|
||||||
mlines = currentMenu->lastOn>>8;
|
mlines = currentMenu->lastOn>>8;
|
||||||
max = (INT16)((UINT8)(currentMenu->lastOn & 0xFF)*8);
|
max = (INT16)((UINT8)(currentMenu->lastOn & 0xFF)*8);
|
||||||
|
|
||||||
|
// hack: draw RA background in RA menus
|
||||||
|
if (gamestate == GS_TIMEATTACK)
|
||||||
|
V_DrawPatchFill(W_CachePatchName("SRB2BACK", PU_CACHE));
|
||||||
|
|
||||||
M_DrawTextBox(currentMenu->x, y - 8, (max+7)>>3, mlines);
|
M_DrawTextBox(currentMenu->x, y - 8, (max+7)>>3, mlines);
|
||||||
|
|
||||||
while (*(msg+start))
|
while (*(msg+start))
|
||||||
|
@ -4310,9 +4315,9 @@ static void M_SinglePlayerMenu(INT32 choice)
|
||||||
{
|
{
|
||||||
(void)choice;
|
(void)choice;
|
||||||
SP_MainMenu[sprecordattack].status =
|
SP_MainMenu[sprecordattack].status =
|
||||||
(M_SecretUnlocked(SECRET_RECORDATTACK)) ? IT_CALL|IT_STRING|IT_CALL_NOTMODIFIED : IT_SECRET;
|
(M_SecretUnlocked(SECRET_RECORDATTACK)) ? IT_CALL|IT_STRING : IT_SECRET;
|
||||||
SP_MainMenu[spnightsmode].status =
|
SP_MainMenu[spnightsmode].status =
|
||||||
(M_SecretUnlocked(SECRET_NIGHTSMODE)) ? IT_CALL|IT_STRING|IT_CALL_NOTMODIFIED : IT_SECRET;
|
(M_SecretUnlocked(SECRET_NIGHTSMODE)) ? IT_CALL|IT_STRING : IT_SECRET;
|
||||||
|
|
||||||
M_SetupNextMenu(&SP_MainDef);
|
M_SetupNextMenu(&SP_MainDef);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1192,7 +1192,7 @@ static boolean PIT_CheckLine(line_t *ld)
|
||||||
}
|
}
|
||||||
|
|
||||||
// set openrange, opentop, openbottom
|
// set openrange, opentop, openbottom
|
||||||
P_LineOpening(ld);
|
P_LineOpening(ld, tmthing);
|
||||||
|
|
||||||
// adjust floor / ceiling heights
|
// adjust floor / ceiling heights
|
||||||
if (opentop < tmceilingz)
|
if (opentop < tmceilingz)
|
||||||
|
@ -1310,7 +1310,7 @@ boolean P_CheckPosition(mobj_t *thing, fixed_t x, fixed_t y)
|
||||||
topheight = P_GetFOFTopZ(thing, newsubsec->sector, rover, x, y, NULL);
|
topheight = P_GetFOFTopZ(thing, newsubsec->sector, rover, x, y, NULL);
|
||||||
bottomheight = P_GetFOFBottomZ(thing, newsubsec->sector, rover, x, y, NULL);
|
bottomheight = P_GetFOFBottomZ(thing, newsubsec->sector, rover, x, y, NULL);
|
||||||
|
|
||||||
if (rover->flags & FF_GOOWATER && !(thing->flags & MF_NOGRAVITY))
|
if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER) && !(thing->flags & MF_NOGRAVITY))
|
||||||
{
|
{
|
||||||
// If you're inside goowater and slowing down
|
// If you're inside goowater and slowing down
|
||||||
fixed_t sinklevel = FixedMul(thing->info->height/6, thing->scale);
|
fixed_t sinklevel = FixedMul(thing->info->height/6, thing->scale);
|
||||||
|
@ -2624,7 +2624,7 @@ static boolean PTR_SlideTraverse(intercept_t *in)
|
||||||
}
|
}
|
||||||
|
|
||||||
// set openrange, opentop, openbottom
|
// set openrange, opentop, openbottom
|
||||||
P_LineOpening(li);
|
P_LineOpening(li, slidemo);
|
||||||
|
|
||||||
if (openrange < slidemo->height)
|
if (openrange < slidemo->height)
|
||||||
goto isblocking; // doesn't fit
|
goto isblocking; // doesn't fit
|
||||||
|
|
|
@ -489,7 +489,7 @@ void P_CameraLineOpening(line_t *linedef)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void P_LineOpening(line_t *linedef)
|
void P_LineOpening(line_t *linedef, mobj_t *mobj)
|
||||||
{
|
{
|
||||||
sector_t *front, *back;
|
sector_t *front, *back;
|
||||||
|
|
||||||
|
@ -520,8 +520,8 @@ void P_LineOpening(line_t *linedef)
|
||||||
{ // Set open and high/low values here
|
{ // Set open and high/low values here
|
||||||
fixed_t frontheight, backheight;
|
fixed_t frontheight, backheight;
|
||||||
|
|
||||||
frontheight = P_GetCeilingZ(tmthing, front, tmx, tmy, linedef);
|
frontheight = P_GetCeilingZ(mobj, front, tmx, tmy, linedef);
|
||||||
backheight = P_GetCeilingZ(tmthing, back, tmx, tmy, linedef);
|
backheight = P_GetCeilingZ(mobj, back, tmx, tmy, linedef);
|
||||||
|
|
||||||
if (frontheight < backheight)
|
if (frontheight < backheight)
|
||||||
{
|
{
|
||||||
|
@ -540,8 +540,8 @@ void P_LineOpening(line_t *linedef)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
frontheight = P_GetFloorZ(tmthing, front, tmx, tmy, linedef);
|
frontheight = P_GetFloorZ(mobj, front, tmx, tmy, linedef);
|
||||||
backheight = P_GetFloorZ(tmthing, back, tmx, tmy, linedef);
|
backheight = P_GetFloorZ(mobj, back, tmx, tmy, linedef);
|
||||||
|
|
||||||
if (frontheight > backheight)
|
if (frontheight > backheight)
|
||||||
{
|
{
|
||||||
|
@ -561,12 +561,14 @@ void P_LineOpening(line_t *linedef)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tmthing)
|
if (mobj)
|
||||||
{
|
{
|
||||||
fixed_t thingtop = tmthing->z + tmthing->height;
|
fixed_t thingtop = mobj->z + mobj->height;
|
||||||
|
|
||||||
// Check for collision with front side's midtexture if Effect 4 is set
|
// Check for collision with front side's midtexture if Effect 4 is set
|
||||||
if (linedef->flags & ML_EFFECT4) {
|
if (linedef->flags & ML_EFFECT4
|
||||||
|
&& !linedef->polyobj // don't do anything for polyobjects! ...for now
|
||||||
|
) {
|
||||||
side_t *side = &sides[linedef->sidenum[0]];
|
side_t *side = &sides[linedef->sidenum[0]];
|
||||||
fixed_t textop, texbottom, texheight;
|
fixed_t textop, texbottom, texheight;
|
||||||
fixed_t texmid, delta1, delta2;
|
fixed_t texmid, delta1, delta2;
|
||||||
|
@ -575,30 +577,38 @@ void P_LineOpening(line_t *linedef)
|
||||||
texheight = textures[texturetranslation[side->midtexture]]->height << FRACBITS;
|
texheight = textures[texturetranslation[side->midtexture]]->height << FRACBITS;
|
||||||
|
|
||||||
// Set texbottom and textop to the Z coordinates of the texture's boundaries
|
// Set texbottom and textop to the Z coordinates of the texture's boundaries
|
||||||
#ifdef POLYOBJECTS
|
#if 0 // #ifdef POLYOBJECTS
|
||||||
|
// don't remove this code unless solid midtextures
|
||||||
|
// on non-solid polyobjects should NEVER happen in the future
|
||||||
if (linedef->polyobj && (linedef->polyobj->flags & POF_TESTHEIGHT)) {
|
if (linedef->polyobj && (linedef->polyobj->flags & POF_TESTHEIGHT)) {
|
||||||
if (linedef->flags & ML_DONTPEGBOTTOM) {
|
if (linedef->flags & ML_EFFECT5 && !side->repeatcnt) { // "infinite" repeat
|
||||||
|
texbottom = back->floorheight + side->rowoffset;
|
||||||
|
textop = back->ceilingheight + side->rowoffset;
|
||||||
|
} else if (!!(linedef->flags & ML_DONTPEGBOTTOM) ^ !!(linedef->flags & ML_EFFECT3)) {
|
||||||
texbottom = back->floorheight + side->rowoffset;
|
texbottom = back->floorheight + side->rowoffset;
|
||||||
textop = texbottom + texheight*(side->repeatcnt+1);
|
textop = texbottom + texheight*(side->repeatcnt+1);
|
||||||
} else {
|
} else {
|
||||||
textop = back->ceilingheight - side->rowoffset;
|
textop = back->ceilingheight + side->rowoffset;
|
||||||
texbottom = textop - texheight*(side->repeatcnt+1);
|
texbottom = textop - texheight*(side->repeatcnt+1);
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (linedef->flags & ML_DONTPEGBOTTOM) {
|
if (linedef->flags & ML_EFFECT5 && !side->repeatcnt) { // "infinite" repeat
|
||||||
|
texbottom = openbottom + side->rowoffset;
|
||||||
|
textop = opentop + side->rowoffset;
|
||||||
|
} else if (!!(linedef->flags & ML_DONTPEGBOTTOM) ^ !!(linedef->flags & ML_EFFECT3)) {
|
||||||
texbottom = openbottom + side->rowoffset;
|
texbottom = openbottom + side->rowoffset;
|
||||||
textop = texbottom + texheight*(side->repeatcnt+1);
|
textop = texbottom + texheight*(side->repeatcnt+1);
|
||||||
} else {
|
} else {
|
||||||
textop = opentop - side->rowoffset;
|
textop = opentop + side->rowoffset;
|
||||||
texbottom = textop - texheight*(side->repeatcnt+1);
|
texbottom = textop - texheight*(side->repeatcnt+1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
texmid = texbottom+(textop-texbottom)/2;
|
texmid = texbottom+(textop-texbottom)/2;
|
||||||
|
|
||||||
delta1 = abs(tmthing->z - texmid);
|
delta1 = abs(mobj->z - texmid);
|
||||||
delta2 = abs(thingtop - texmid);
|
delta2 = abs(thingtop - texmid);
|
||||||
|
|
||||||
if (delta1 > delta2) { // Below
|
if (delta1 > delta2) { // Below
|
||||||
|
@ -636,16 +646,16 @@ void P_LineOpening(line_t *linedef)
|
||||||
if (!(rover->flags & FF_EXISTS))
|
if (!(rover->flags & FF_EXISTS))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (tmthing->player && (P_CheckSolidLava(tmthing, rover) || P_CanRunOnWater(tmthing->player, rover)))
|
if (mobj->player && (P_CheckSolidLava(mobj, rover) || P_CanRunOnWater(mobj->player, rover)))
|
||||||
;
|
;
|
||||||
else if (!((rover->flags & FF_BLOCKPLAYER && tmthing->player)
|
else if (!((rover->flags & FF_BLOCKPLAYER && mobj->player)
|
||||||
|| (rover->flags & FF_BLOCKOTHERS && !tmthing->player)))
|
|| (rover->flags & FF_BLOCKOTHERS && !mobj->player)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
topheight = P_GetFOFTopZ(tmthing, front, rover, tmx, tmy, linedef);
|
topheight = P_GetFOFTopZ(mobj, front, rover, tmx, tmy, linedef);
|
||||||
bottomheight = P_GetFOFBottomZ(tmthing, front, rover, tmx, tmy, linedef);
|
bottomheight = P_GetFOFBottomZ(mobj, front, rover, tmx, tmy, linedef);
|
||||||
|
|
||||||
delta1 = abs(tmthing->z - (bottomheight + ((topheight - bottomheight)/2)));
|
delta1 = abs(mobj->z - (bottomheight + ((topheight - bottomheight)/2)));
|
||||||
delta2 = abs(thingtop - (bottomheight + ((topheight - bottomheight)/2)));
|
delta2 = abs(thingtop - (bottomheight + ((topheight - bottomheight)/2)));
|
||||||
|
|
||||||
if (delta1 >= delta2 && !(rover->flags & FF_PLATFORM)) // thing is below FOF
|
if (delta1 >= delta2 && !(rover->flags & FF_PLATFORM)) // thing is below FOF
|
||||||
|
@ -680,16 +690,16 @@ void P_LineOpening(line_t *linedef)
|
||||||
if (!(rover->flags & FF_EXISTS))
|
if (!(rover->flags & FF_EXISTS))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (tmthing->player && (P_CheckSolidLava(tmthing, rover) || P_CanRunOnWater(tmthing->player, rover)))
|
if (mobj->player && (P_CheckSolidLava(mobj, rover) || P_CanRunOnWater(mobj->player, rover)))
|
||||||
;
|
;
|
||||||
else if (!((rover->flags & FF_BLOCKPLAYER && tmthing->player)
|
else if (!((rover->flags & FF_BLOCKPLAYER && mobj->player)
|
||||||
|| (rover->flags & FF_BLOCKOTHERS && !tmthing->player)))
|
|| (rover->flags & FF_BLOCKOTHERS && !mobj->player)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
topheight = P_GetFOFTopZ(tmthing, back, rover, tmx, tmy, linedef);
|
topheight = P_GetFOFTopZ(mobj, back, rover, tmx, tmy, linedef);
|
||||||
bottomheight = P_GetFOFBottomZ(tmthing, back, rover, tmx, tmy, linedef);
|
bottomheight = P_GetFOFBottomZ(mobj, back, rover, tmx, tmy, linedef);
|
||||||
|
|
||||||
delta1 = abs(tmthing->z - (bottomheight + ((topheight - bottomheight)/2)));
|
delta1 = abs(mobj->z - (bottomheight + ((topheight - bottomheight)/2)));
|
||||||
delta2 = abs(thingtop - (bottomheight + ((topheight - bottomheight)/2)));
|
delta2 = abs(thingtop - (bottomheight + ((topheight - bottomheight)/2)));
|
||||||
|
|
||||||
if (delta1 >= delta2 && !(rover->flags & FF_PLATFORM)) // thing is below FOF
|
if (delta1 >= delta2 && !(rover->flags & FF_PLATFORM)) // thing is below FOF
|
||||||
|
@ -723,7 +733,7 @@ void P_LineOpening(line_t *linedef)
|
||||||
{
|
{
|
||||||
const sector_t *polysec = linedef->backsector;
|
const sector_t *polysec = linedef->backsector;
|
||||||
|
|
||||||
delta1 = abs(tmthing->z - (polysec->floorheight + ((polysec->ceilingheight - polysec->floorheight)/2)));
|
delta1 = abs(mobj->z - (polysec->floorheight + ((polysec->ceilingheight - polysec->floorheight)/2)));
|
||||||
delta2 = abs(thingtop - (polysec->floorheight + ((polysec->ceilingheight - polysec->floorheight)/2)));
|
delta2 = abs(thingtop - (polysec->floorheight + ((polysec->ceilingheight - polysec->floorheight)/2)));
|
||||||
if (polysec->floorheight < lowestceiling && delta1 >= delta2) {
|
if (polysec->floorheight < lowestceiling && delta1 >= delta2) {
|
||||||
lowestceiling = polysec->floorheight;
|
lowestceiling = polysec->floorheight;
|
||||||
|
|
|
@ -59,7 +59,7 @@ extern fixed_t opentop, openbottom, openrange, lowfloor, highceiling;
|
||||||
extern pslope_t *opentopslope, *openbottomslope;
|
extern pslope_t *opentopslope, *openbottomslope;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void P_LineOpening(line_t *plinedef);
|
void P_LineOpening(line_t *plinedef, mobj_t *mobj);
|
||||||
|
|
||||||
boolean P_BlockLinesIterator(INT32 x, INT32 y, boolean(*func)(line_t *));
|
boolean P_BlockLinesIterator(INT32 x, INT32 y, boolean(*func)(line_t *));
|
||||||
boolean P_BlockThingsIterator(INT32 x, INT32 y, boolean(*func)(mobj_t *));
|
boolean P_BlockThingsIterator(INT32 x, INT32 y, boolean(*func)(mobj_t *));
|
||||||
|
|
63
src/p_mobj.c
63
src/p_mobj.c
|
@ -1465,15 +1465,15 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
||||||
|
|
||||||
for (rover = mo->subsector->sector->ffloors; rover; rover = rover->next)
|
for (rover = mo->subsector->sector->ffloors; rover; rover = rover->next)
|
||||||
{
|
{
|
||||||
if (!(rover->flags & FF_EXISTS))
|
if (!(rover->flags & FF_EXISTS) || !P_InsideANonSolidFFloor(mo, rover)) // P_InsideANonSolidFFloor checks for FF_EXISTS itself, but let's not always call this function
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (P_InsideANonSolidFFloor(mo, rover))
|
|
||||||
{
|
|
||||||
if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER))
|
if ((rover->flags & (FF_SWIMMABLE|FF_GOOWATER)) == (FF_SWIMMABLE|FF_GOOWATER))
|
||||||
goopgravity = true;
|
goopgravity = true;
|
||||||
if (rover->master->frontsector->gravity)
|
|
||||||
{
|
if (!(rover->master->frontsector->gravity))
|
||||||
|
continue;
|
||||||
|
|
||||||
gravityadd = -FixedMul(gravity,
|
gravityadd = -FixedMul(gravity,
|
||||||
(FixedDiv(*rover->master->frontsector->gravity>>FRACBITS, 1000)));
|
(FixedDiv(*rover->master->frontsector->gravity>>FRACBITS, 1000)));
|
||||||
|
|
||||||
|
@ -1484,8 +1484,6 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (no3dfloorgrav)
|
if (no3dfloorgrav)
|
||||||
{
|
{
|
||||||
|
@ -1505,28 +1503,20 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
||||||
|
|
||||||
if (mo->player)
|
if (mo->player)
|
||||||
{
|
{
|
||||||
if (mo->player->charability == CA_FLY && (mo->player->powers[pw_tailsfly]
|
if ((mo->player->pflags & PF_GLIDING)
|
||||||
|| mo->state-states == S_PLAY_FLY_TIRED))
|
|| (mo->player->charability == CA_FLY && (mo->player->powers[pw_tailsfly]
|
||||||
gravityadd = gravityadd/3; // less gravity while flying
|
|| mo->state-states == S_PLAY_FLY_TIRED)))
|
||||||
if (mo->player->pflags & PF_GLIDING)
|
gravityadd = gravityadd/3; // less gravity while flying/gliding
|
||||||
gravityadd = gravityadd/3; // less gravity while gliding
|
if (mo->player->climbing || (mo->player->pflags & PF_NIGHTSMODE))
|
||||||
if (mo->player->climbing)
|
|
||||||
gravityadd = 0;
|
|
||||||
if (mo->player->pflags & PF_NIGHTSMODE)
|
|
||||||
gravityadd = 0;
|
gravityadd = 0;
|
||||||
|
|
||||||
{
|
if (!(mo->flags2 & MF2_OBJECTFLIP) != !(mo->player->powers[pw_gravityboots])) // negated to turn numeric into bool - would be double negated, but not needed if both would be
|
||||||
UINT8 bits = 0;
|
|
||||||
if (mo->flags2 & MF2_OBJECTFLIP)
|
|
||||||
bits ^= 1;
|
|
||||||
if (mo->player->powers[pw_gravityboots])
|
|
||||||
bits ^= 1;
|
|
||||||
if (bits & 1)
|
|
||||||
{
|
{
|
||||||
gravityadd = -gravityadd;
|
gravityadd = -gravityadd;
|
||||||
mo->eflags ^= MFE_VERTICALFLIP;
|
mo->eflags ^= MFE_VERTICALFLIP;
|
||||||
}
|
}
|
||||||
}
|
if (wasflip == !(mo->eflags & MFE_VERTICALFLIP)) // note!! == ! is not equivalent to != here - turns numeric into bool this way
|
||||||
|
P_PlayerFlip(mo);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1534,10 +1524,10 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
||||||
if (mo->flags2 & MF2_OBJECTFLIP)
|
if (mo->flags2 & MF2_OBJECTFLIP)
|
||||||
{
|
{
|
||||||
mo->eflags |= MFE_VERTICALFLIP;
|
mo->eflags |= MFE_VERTICALFLIP;
|
||||||
if (gravityadd < 0) // Don't sink, only rise up
|
|
||||||
gravityadd *= -1;
|
|
||||||
if (mo->z + mo->height >= mo->ceilingz)
|
if (mo->z + mo->height >= mo->ceilingz)
|
||||||
gravityadd = 0;
|
gravityadd = 0;
|
||||||
|
else if (gravityadd < 0) // Don't sink, only rise up
|
||||||
|
gravityadd *= -1;
|
||||||
}
|
}
|
||||||
else //Otherwise, sort through the other exceptions.
|
else //Otherwise, sort through the other exceptions.
|
||||||
{
|
{
|
||||||
|
@ -1583,9 +1573,6 @@ fixed_t P_GetMobjGravity(mobj_t *mo)
|
||||||
if (goopgravity)
|
if (goopgravity)
|
||||||
gravityadd = -gravityadd/5;
|
gravityadd = -gravityadd/5;
|
||||||
|
|
||||||
if (mo->player && !!(mo->eflags & MFE_VERTICALFLIP) != wasflip)
|
|
||||||
P_PlayerFlip(mo);
|
|
||||||
|
|
||||||
gravityadd = FixedMul(gravityadd, mo->scale);
|
gravityadd = FixedMul(gravityadd, mo->scale);
|
||||||
|
|
||||||
return gravityadd;
|
return gravityadd;
|
||||||
|
@ -1740,6 +1727,7 @@ static void P_PushableCheckBustables(mobj_t *mo)
|
||||||
if (node->m_sector->ffloors)
|
if (node->m_sector->ffloors)
|
||||||
{
|
{
|
||||||
ffloor_t *rover;
|
ffloor_t *rover;
|
||||||
|
fixed_t topheight, bottomheight;
|
||||||
|
|
||||||
for (rover = node->m_sector->ffloors; rover; rover = rover->next)
|
for (rover = node->m_sector->ffloors; rover; rover = rover->next)
|
||||||
{
|
{
|
||||||
|
@ -1752,37 +1740,39 @@ static void P_PushableCheckBustables(mobj_t *mo)
|
||||||
|
|
||||||
if (!rover->master->frontsector->crumblestate)
|
if (!rover->master->frontsector->crumblestate)
|
||||||
{
|
{
|
||||||
|
topheight = P_GetFOFTopZ(mo, node->m_sector, rover, mo->x, mo->y, NULL);
|
||||||
|
bottomheight = P_GetFOFBottomZ(mo, node->m_sector, rover, mo->x, mo->y, NULL);
|
||||||
// Height checks
|
// Height checks
|
||||||
if (rover->flags & FF_SHATTERBOTTOM)
|
if (rover->flags & FF_SHATTERBOTTOM)
|
||||||
{
|
{
|
||||||
if (mo->z+mo->momz + mo->height < *rover->bottomheight)
|
if (mo->z+mo->momz + mo->height < bottomheight)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (mo->z+mo->height > *rover->bottomheight)
|
if (mo->z+mo->height > bottomheight)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (rover->flags & FF_SPINBUST)
|
else if (rover->flags & FF_SPINBUST)
|
||||||
{
|
{
|
||||||
if (mo->z+mo->momz > *rover->topheight)
|
if (mo->z+mo->momz > topheight)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (mo->z+mo->height < *rover->bottomheight)
|
if (mo->z+mo->height < bottomheight)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (rover->flags & FF_SHATTER)
|
else if (rover->flags & FF_SHATTER)
|
||||||
{
|
{
|
||||||
if (mo->z+mo->momz > *rover->topheight)
|
if (mo->z+mo->momz > topheight)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (mo->z+mo->momz + mo->height < *rover->bottomheight)
|
if (mo->z+mo->momz + mo->height < bottomheight)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (mo->z >= *rover->topheight)
|
if (mo->z >= topheight)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (mo->z+mo->height < *rover->bottomheight)
|
if (mo->z+mo->height < bottomheight)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7125,6 +7115,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
{
|
{
|
||||||
mobj->flags &= ~MF_NOGRAVITY;
|
mobj->flags &= ~MF_NOGRAVITY;
|
||||||
P_SetMobjState(mobj, S_NIGHTSDRONE1);
|
P_SetMobjState(mobj, S_NIGHTSDRONE1);
|
||||||
|
mobj->flags2 |= MF2_DONTDRAW;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (mobj->tracer && mobj->tracer->player)
|
else if (mobj->tracer && mobj->tracer->player)
|
||||||
|
|
42
src/p_user.c
42
src/p_user.c
|
@ -1693,6 +1693,7 @@ static void P_CheckBustableBlocks(player_t *player)
|
||||||
if (node->m_sector->ffloors)
|
if (node->m_sector->ffloors)
|
||||||
{
|
{
|
||||||
ffloor_t *rover;
|
ffloor_t *rover;
|
||||||
|
fixed_t topheight, bottomheight;
|
||||||
|
|
||||||
for (rover = node->m_sector->ffloors; rover; rover = rover->next)
|
for (rover = node->m_sector->ffloors; rover; rover = rover->next)
|
||||||
{
|
{
|
||||||
|
@ -1718,42 +1719,45 @@ static void P_CheckBustableBlocks(player_t *player)
|
||||||
if (!(rover->flags & FF_SHATTER) && (rover->flags & FF_ONLYKNUX) && !(player->charability == CA_GLIDEANDCLIMB))
|
if (!(rover->flags & FF_SHATTER) && (rover->flags & FF_ONLYKNUX) && !(player->charability == CA_GLIDEANDCLIMB))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
topheight = P_GetFOFTopZ(player->mo, node->m_sector, rover, player->mo->x, player->mo->y, NULL);
|
||||||
|
bottomheight = P_GetFOFBottomZ(player->mo, node->m_sector, rover, player->mo->x, player->mo->y, NULL);
|
||||||
|
|
||||||
// Height checks
|
// Height checks
|
||||||
if (rover->flags & FF_SHATTERBOTTOM)
|
if (rover->flags & FF_SHATTERBOTTOM)
|
||||||
{
|
{
|
||||||
if (player->mo->z+player->mo->momz + player->mo->height < *rover->bottomheight)
|
if (player->mo->z+player->mo->momz + player->mo->height < bottomheight)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (player->mo->z+player->mo->height > *rover->bottomheight)
|
if (player->mo->z+player->mo->height > bottomheight)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (rover->flags & FF_SPINBUST)
|
else if (rover->flags & FF_SPINBUST)
|
||||||
{
|
{
|
||||||
if (player->mo->z+player->mo->momz > *rover->topheight)
|
if (player->mo->z+player->mo->momz > topheight)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (player->mo->z + player->mo->height < *rover->bottomheight)
|
if (player->mo->z + player->mo->height < bottomheight)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (rover->flags & FF_SHATTER)
|
else if (rover->flags & FF_SHATTER)
|
||||||
{
|
{
|
||||||
if (player->mo->z + player->mo->momz > *rover->topheight)
|
if (player->mo->z + player->mo->momz > topheight)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (player->mo->z+player->mo->momz + player->mo->height < *rover->bottomheight)
|
if (player->mo->z+player->mo->momz + player->mo->height < bottomheight)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (player->mo->z >= *rover->topheight)
|
if (player->mo->z >= topheight)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (player->mo->z + player->mo->height < *rover->bottomheight)
|
if (player->mo->z + player->mo->height < bottomheight)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Impede the player's fall a bit
|
// Impede the player's fall a bit
|
||||||
if (((rover->flags & FF_SPINBUST) || (rover->flags & FF_SHATTER)) && player->mo->z >= *rover->topheight)
|
if (((rover->flags & FF_SPINBUST) || (rover->flags & FF_SHATTER)) && player->mo->z >= topheight)
|
||||||
player->mo->momz >>= 1;
|
player->mo->momz >>= 1;
|
||||||
else if (rover->flags & FF_SHATTER)
|
else if (rover->flags & FF_SHATTER)
|
||||||
{
|
{
|
||||||
|
@ -7021,6 +7025,7 @@ static void P_MovePlayer(player_t *player)
|
||||||
msecnode_t *node; // only place it's being used in P_MovePlayer now
|
msecnode_t *node; // only place it's being used in P_MovePlayer now
|
||||||
fixed_t oldx;
|
fixed_t oldx;
|
||||||
fixed_t oldy;
|
fixed_t oldy;
|
||||||
|
fixed_t floorz, ceilingz;
|
||||||
|
|
||||||
oldx = player->mo->x;
|
oldx = player->mo->x;
|
||||||
oldy = player->mo->y;
|
oldy = player->mo->y;
|
||||||
|
@ -7038,14 +7043,16 @@ static void P_MovePlayer(player_t *player)
|
||||||
if (node->m_sector->ffloors)
|
if (node->m_sector->ffloors)
|
||||||
{
|
{
|
||||||
ffloor_t *rover;
|
ffloor_t *rover;
|
||||||
|
fixed_t topheight, bottomheight;
|
||||||
|
|
||||||
for (rover = node->m_sector->ffloors; rover; rover = rover->next)
|
for (rover = node->m_sector->ffloors; rover; rover = rover->next)
|
||||||
{
|
{
|
||||||
if (!(rover->flags & FF_EXISTS)) continue;
|
if (!(rover->flags & FF_EXISTS) || !(rover->flags & FF_BLOCKPLAYER))
|
||||||
|
continue;
|
||||||
|
|
||||||
if ((rover->flags & FF_BLOCKPLAYER))
|
topheight = P_GetFOFTopZ(player->mo, node->m_sector, rover, player->mo->x, player->mo->y, NULL);
|
||||||
{
|
bottomheight = P_GetFOFBottomZ(player->mo, node->m_sector, rover, player->mo->x, player->mo->y, NULL);
|
||||||
if (*rover->topheight > player->mo->z && *rover->bottomheight < player->mo->z)
|
if (topheight > player->mo->z && bottomheight < player->mo->z)
|
||||||
{
|
{
|
||||||
P_ResetPlayer(player);
|
P_ResetPlayer(player);
|
||||||
S_StartSound(player->mo, sfx_s3k4a);
|
S_StartSound(player->mo, sfx_s3k4a);
|
||||||
|
@ -7055,14 +7062,15 @@ static void P_MovePlayer(player_t *player)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (player->mo->z+player->mo->height > node->m_sector->ceilingheight
|
floorz = P_GetFloorZ(player->mo, node->m_sector, player->mo->x, player->mo->y, NULL);
|
||||||
|
ceilingz = P_GetCeilingZ(player->mo, node->m_sector, player->mo->x, player->mo->y, NULL);
|
||||||
|
|
||||||
|
if (player->mo->z+player->mo->height > ceilingz
|
||||||
&& node->m_sector->ceilingpic == skyflatnum)
|
&& node->m_sector->ceilingpic == skyflatnum)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (node->m_sector->floorheight > player->mo->z
|
if (floorz > player->mo->z || ceilingz < player->mo->z)
|
||||||
|| node->m_sector->ceilingheight < player->mo->z)
|
|
||||||
{
|
{
|
||||||
P_ResetPlayer(player);
|
P_ResetPlayer(player);
|
||||||
S_StartSound(player->mo, sfx_s3k4a);
|
S_StartSound(player->mo, sfx_s3k4a);
|
||||||
|
|
|
@ -974,7 +974,7 @@ static void ST_drawNiGHTSHUD(void)
|
||||||
if (cv_debug & DBG_NIGHTSBASIC)
|
if (cv_debug & DBG_NIGHTSBASIC)
|
||||||
minlink = 0;
|
minlink = 0;
|
||||||
|
|
||||||
// Cheap hack: don't display when the score is showing
|
// Cheap hack: don't display when the score is showing (it popping up for a split second when exiting a map is intentional)
|
||||||
if (stplyr->texttimer && stplyr->textvar == 4)
|
if (stplyr->texttimer && stplyr->textvar == 4)
|
||||||
minlink = INT32_MAX;
|
minlink = INT32_MAX;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue