mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-15 09:11:48 +00:00
Merge remote-tracking branch 'aaaaaaaa/next' into gametype-clownery
This commit is contained in:
commit
3622829504
28 changed files with 1615 additions and 1206 deletions
20
src/d_main.c
20
src/d_main.c
|
@ -274,7 +274,10 @@ static void D_Display(void)
|
||||||
&& wipetypepre != UINT8_MAX)
|
&& wipetypepre != UINT8_MAX)
|
||||||
{
|
{
|
||||||
F_WipeStartScreen();
|
F_WipeStartScreen();
|
||||||
F_WipeColorFill(31);
|
// Check for Mega Genesis fade
|
||||||
|
wipestyleflags = WSF_FADEOUT;
|
||||||
|
if (F_TryColormapFade(31))
|
||||||
|
wipetypepost = -1; // Don't run the fade below this one
|
||||||
F_WipeEndScreen();
|
F_WipeEndScreen();
|
||||||
F_RunWipe(wipetypepre, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
|
F_RunWipe(wipetypepre, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
|
||||||
}
|
}
|
||||||
|
@ -488,6 +491,7 @@ static void D_Display(void)
|
||||||
if (rendermode != render_none)
|
if (rendermode != render_none)
|
||||||
{
|
{
|
||||||
F_WipeEndScreen();
|
F_WipeEndScreen();
|
||||||
|
|
||||||
// Funny.
|
// Funny.
|
||||||
if (WipeStageTitle && st_overlay)
|
if (WipeStageTitle && st_overlay)
|
||||||
{
|
{
|
||||||
|
@ -497,6 +501,14 @@ static void D_Display(void)
|
||||||
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, levelfadecol);
|
V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, levelfadecol);
|
||||||
F_WipeStartScreen();
|
F_WipeStartScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for Mega Genesis fade
|
||||||
|
if (F_ShouldColormapFade())
|
||||||
|
{
|
||||||
|
wipestyleflags |= WSF_FADEIN;
|
||||||
|
wipestyleflags &= ~WSF_FADEOUT;
|
||||||
|
}
|
||||||
|
|
||||||
F_RunWipe(wipetypepost, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
|
F_RunWipe(wipetypepost, gamestate != GS_TIMEATTACK && gamestate != GS_TITLESCREEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -562,9 +574,6 @@ void D_SRB2Loop(void)
|
||||||
|
|
||||||
// Pushing of + parameters is now done back in D_SRB2Main, not here.
|
// Pushing of + parameters is now done back in D_SRB2Main, not here.
|
||||||
|
|
||||||
CONS_Printf("I_StartupKeyboard()...\n");
|
|
||||||
I_StartupKeyboard();
|
|
||||||
|
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
CONS_Printf("I_StartupMouse()...\n");
|
CONS_Printf("I_StartupMouse()...\n");
|
||||||
I_DoStartupMouse();
|
I_DoStartupMouse();
|
||||||
|
@ -1288,9 +1297,10 @@ void D_SRB2Main(void)
|
||||||
I_StartupSound();
|
I_StartupSound();
|
||||||
I_InitMusic();
|
I_InitMusic();
|
||||||
S_InitSfxChannels(cv_soundvolume.value);
|
S_InitSfxChannels(cv_soundvolume.value);
|
||||||
S_InitMusicDefs();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
S_InitMusicDefs();
|
||||||
|
|
||||||
CONS_Printf("ST_Init(): Init status bar.\n");
|
CONS_Printf("ST_Init(): Init status bar.\n");
|
||||||
ST_Init();
|
ST_Init();
|
||||||
|
|
||||||
|
|
|
@ -1740,10 +1740,27 @@ static void readlevelheader(MYFILE *f, INT32 num)
|
||||||
deh_warning("Level header %d: invalid bonus type number %d", num, i);
|
deh_warning("Level header %d: invalid bonus type number %d", num, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Title card
|
||||||
|
else if (fastcmp(word, "TITLECARDZIGZAG"))
|
||||||
|
{
|
||||||
|
deh_strlcpy(mapheaderinfo[num-1]->ltzzpatch, word2,
|
||||||
|
sizeof(mapheaderinfo[num-1]->ltzzpatch), va("Level header %d: title card zigzag patch name", num));
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLECARDZIGZAGTEXT"))
|
||||||
|
{
|
||||||
|
deh_strlcpy(mapheaderinfo[num-1]->ltzztext, word2,
|
||||||
|
sizeof(mapheaderinfo[num-1]->ltzztext), va("Level header %d: title card zigzag text patch name", num));
|
||||||
|
}
|
||||||
|
else if (fastcmp(word, "TITLECARDACTDIAMOND"))
|
||||||
|
{
|
||||||
|
deh_strlcpy(mapheaderinfo[num-1]->ltactdiamond, word2,
|
||||||
|
sizeof(mapheaderinfo[num-1]->ltactdiamond), va("Level header %d: title card act diamond patch name", num));
|
||||||
|
}
|
||||||
|
|
||||||
else if (fastcmp(word, "MAXBONUSLIVES"))
|
else if (fastcmp(word, "MAXBONUSLIVES"))
|
||||||
mapheaderinfo[num-1]->maxbonuslives = (SINT8)i;
|
mapheaderinfo[num-1]->maxbonuslives = (SINT8)i;
|
||||||
else if (fastcmp(word, "LEVELFLAGS"))
|
else if (fastcmp(word, "LEVELFLAGS"))
|
||||||
mapheaderinfo[num-1]->levelflags = (UINT8)i;
|
mapheaderinfo[num-1]->levelflags = (UINT16)i;
|
||||||
else if (fastcmp(word, "MENUFLAGS"))
|
else if (fastcmp(word, "MENUFLAGS"))
|
||||||
mapheaderinfo[num-1]->menuflags = (UINT8)i;
|
mapheaderinfo[num-1]->menuflags = (UINT8)i;
|
||||||
|
|
||||||
|
@ -4714,20 +4731,34 @@ static void DEH_LoadDehackedFile(MYFILE *f, boolean mainfile)
|
||||||
ignorelines(f);
|
ignorelines(f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Last I heard this crashes the game if you try to use it
|
else if (fastcmp(word, "SRB2"))
|
||||||
// so this is disabled for now
|
|
||||||
// -- Monster Iestyn
|
|
||||||
/* else if (fastcmp(word, "SRB2"))
|
|
||||||
{
|
{
|
||||||
INT32 ver = searchvalue(strtok(NULL, "\n"));
|
if (isdigit(word2[0]))
|
||||||
if (ver != PATCHVERSION)
|
{
|
||||||
deh_warning("Patch is for SRB2 version %d,\nonly version %d is supported", ver, PATCHVERSION);
|
i = atoi(word2);
|
||||||
|
if (i != PATCHVERSION)
|
||||||
|
{
|
||||||
|
deh_warning(
|
||||||
|
"Patch is for SRB2 version %d, "
|
||||||
|
"only version %d is supported",
|
||||||
|
i,
|
||||||
|
PATCHVERSION
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
deh_warning(
|
||||||
|
"SRB2 version definition has incorrect format, "
|
||||||
|
"use \"SRB2 %d\"",
|
||||||
|
PATCHVERSION
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// Clear all data in certain locations (mostly for unlocks)
|
// Clear all data in certain locations (mostly for unlocks)
|
||||||
// Unless you REALLY want to piss people off,
|
// Unless you REALLY want to piss people off,
|
||||||
// define a custom gamedata /before/ doing this!!
|
// define a custom gamedata /before/ doing this!!
|
||||||
// (then again, modifiedgame will prevent game data saving anyway)
|
// (then again, modifiedgame will prevent game data saving anyway)
|
||||||
*/
|
|
||||||
else if (fastcmp(word, "CLEAR"))
|
else if (fastcmp(word, "CLEAR"))
|
||||||
{
|
{
|
||||||
boolean clearall = (fastcmp(word2, "ALL"));
|
boolean clearall = (fastcmp(word2, "ALL"));
|
||||||
|
|
|
@ -47,7 +47,7 @@ extern const char *superactions[MAXRECURSION];
|
||||||
extern UINT8 superstack;
|
extern UINT8 superstack;
|
||||||
|
|
||||||
// If the dehacked patch does not match this version, we throw a warning
|
// If the dehacked patch does not match this version, we throw a warning
|
||||||
#define PATCHVERSION 210
|
#define PATCHVERSION 220
|
||||||
|
|
||||||
#define MAXLINELEN 1024
|
#define MAXLINELEN 1024
|
||||||
|
|
||||||
|
|
|
@ -127,6 +127,7 @@
|
||||||
|
|
||||||
#ifdef LOGMESSAGES
|
#ifdef LOGMESSAGES
|
||||||
extern FILE *logstream;
|
extern FILE *logstream;
|
||||||
|
extern char logfilename[1024];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3
|
//#define DEVELOP // Disable this for release builds to remove excessive cheat commands and enable MD5 checking and stuff, all in one go. :3
|
||||||
|
|
|
@ -313,12 +313,17 @@ typedef struct
|
||||||
SINT8 bonustype; ///< What type of bonus does this level have? (-1 for null.)
|
SINT8 bonustype; ///< What type of bonus does this level have? (-1 for null.)
|
||||||
SINT8 maxbonuslives; ///< How many bonus lives to award at Intermission? (-1 for unlimited.)
|
SINT8 maxbonuslives; ///< How many bonus lives to award at Intermission? (-1 for unlimited.)
|
||||||
|
|
||||||
UINT8 levelflags; ///< LF_flags: merged booleans into one UINT8 for space, see below
|
UINT16 levelflags; ///< LF_flags: merged booleans into one UINT16 for space, see below
|
||||||
UINT8 menuflags; ///< LF2_flags: options that affect record attack / nights mode menus
|
UINT8 menuflags; ///< LF2_flags: options that affect record attack / nights mode menus
|
||||||
|
|
||||||
char selectheading[22]; ///< Level select heading. Allows for controllable grouping.
|
char selectheading[22]; ///< Level select heading. Allows for controllable grouping.
|
||||||
UINT16 startrings; ///< Number of rings players start with.
|
UINT16 startrings; ///< Number of rings players start with.
|
||||||
|
|
||||||
|
// Title card.
|
||||||
|
char ltzzpatch[8]; ///< Zig zag patch.
|
||||||
|
char ltzztext[8]; ///< Zig zag text.
|
||||||
|
char ltactdiamond[8]; ///< Act diamond.
|
||||||
|
|
||||||
// Freed animals stuff.
|
// Freed animals stuff.
|
||||||
UINT8 numFlickies; ///< Internal. For freed flicky support.
|
UINT8 numFlickies; ///< Internal. For freed flicky support.
|
||||||
mobjtype_t *flickies; ///< List of freeable flickies in this level. Allocated dynamically for space reasons. Be careful.
|
mobjtype_t *flickies; ///< List of freeable flickies in this level. Allocated dynamically for space reasons. Be careful.
|
||||||
|
|
|
@ -917,8 +917,9 @@ void F_IntroDrawer(void)
|
||||||
{
|
{
|
||||||
if (rendermode != render_none)
|
if (rendermode != render_none)
|
||||||
{
|
{
|
||||||
|
wipestyleflags = WSF_FADEOUT;
|
||||||
F_WipeStartScreen();
|
F_WipeStartScreen();
|
||||||
F_WipeColorFill(31);
|
F_TryColormapFade(31);
|
||||||
F_WipeEndScreen();
|
F_WipeEndScreen();
|
||||||
F_RunWipe(99,true);
|
F_RunWipe(99,true);
|
||||||
}
|
}
|
||||||
|
@ -927,12 +928,11 @@ void F_IntroDrawer(void)
|
||||||
}
|
}
|
||||||
else if (intro_scenenum == 10)
|
else if (intro_scenenum == 10)
|
||||||
{
|
{
|
||||||
// The only fade to white in the entire damn game.
|
|
||||||
// (not true)
|
|
||||||
if (rendermode != render_none)
|
if (rendermode != render_none)
|
||||||
{
|
{
|
||||||
|
wipestyleflags = (WSF_FADEOUT|WSF_TOWHITE);
|
||||||
F_WipeStartScreen();
|
F_WipeStartScreen();
|
||||||
F_WipeColorFill(0);
|
F_TryColormapFade(0);
|
||||||
F_WipeEndScreen();
|
F_WipeEndScreen();
|
||||||
F_RunWipe(99,true);
|
F_RunWipe(99,true);
|
||||||
}
|
}
|
||||||
|
@ -941,8 +941,9 @@ void F_IntroDrawer(void)
|
||||||
{
|
{
|
||||||
if (rendermode != render_none)
|
if (rendermode != render_none)
|
||||||
{
|
{
|
||||||
|
wipestyleflags = WSF_FADEOUT;
|
||||||
F_WipeStartScreen();
|
F_WipeStartScreen();
|
||||||
F_WipeColorFill(31);
|
F_TryColormapFade(31);
|
||||||
F_WipeEndScreen();
|
F_WipeEndScreen();
|
||||||
F_RunWipe(99,true);
|
F_RunWipe(99,true);
|
||||||
}
|
}
|
||||||
|
@ -977,6 +978,7 @@ void F_IntroDrawer(void)
|
||||||
|
|
||||||
F_WipeStartScreen();
|
F_WipeStartScreen();
|
||||||
wipegamestate = -1;
|
wipegamestate = -1;
|
||||||
|
wipestyleflags = WSF_CROSSFADE;
|
||||||
animtimer = stoptimer = 0;
|
animtimer = stoptimer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3596,6 +3598,8 @@ void F_StartContinue(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wipestyleflags = WSF_FADEOUT;
|
||||||
|
F_TryColormapFade(31);
|
||||||
G_SetGamestate(GS_CONTINUING);
|
G_SetGamestate(GS_CONTINUING);
|
||||||
gameaction = ga_nothing;
|
gameaction = ga_nothing;
|
||||||
|
|
||||||
|
|
|
@ -146,7 +146,7 @@ extern boolean WipeStageTitle;
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
WIPESTYLE_NORMAL,
|
WIPESTYLE_NORMAL,
|
||||||
WIPESTYLE_LEVEL
|
WIPESTYLE_COLORMAP
|
||||||
} wipestyle_t;
|
} wipestyle_t;
|
||||||
extern wipestyle_t wipestyle;
|
extern wipestyle_t wipestyle;
|
||||||
|
|
||||||
|
@ -159,6 +159,11 @@ typedef enum
|
||||||
} wipestyleflags_t;
|
} wipestyleflags_t;
|
||||||
extern wipestyleflags_t wipestyleflags;
|
extern wipestyleflags_t wipestyleflags;
|
||||||
|
|
||||||
|
// Even my function names are borderline
|
||||||
|
boolean F_ShouldColormapFade(void);
|
||||||
|
boolean F_TryColormapFade(UINT8 wipecolor);
|
||||||
|
void F_DecideWipeStyle(void);
|
||||||
|
|
||||||
#define FADECOLORMAPDIV 8
|
#define FADECOLORMAPDIV 8
|
||||||
#define FADECOLORMAPROWS (256/FADECOLORMAPDIV)
|
#define FADECOLORMAPROWS (256/FADECOLORMAPDIV)
|
||||||
|
|
||||||
|
|
224
src/f_wipe.c
224
src/f_wipe.c
|
@ -56,7 +56,7 @@ UINT8 wipedefs[NUMWIPEDEFS] = {
|
||||||
|
|
||||||
0, // wipe_level_toblack
|
0, // wipe_level_toblack
|
||||||
UINT8_MAX, // wipe_intermission_toblack
|
UINT8_MAX, // wipe_intermission_toblack
|
||||||
UINT8_MAX, // wipe_continuing_toblack
|
0, // wipe_continuing_toblack
|
||||||
0, // wipe_titlescreen_toblack
|
0, // wipe_titlescreen_toblack
|
||||||
0, // wipe_timeattack_toblack
|
0, // wipe_timeattack_toblack
|
||||||
99, // wipe_credits_toblack
|
99, // wipe_credits_toblack
|
||||||
|
@ -161,7 +161,7 @@ static fademask_t *F_GetFadeMask(UINT8 masknum, UINT8 scrnnum) {
|
||||||
{
|
{
|
||||||
// Determine pixel to use from fademask
|
// Determine pixel to use from fademask
|
||||||
pcolor = &pMasterPalette[*lump++];
|
pcolor = &pMasterPalette[*lump++];
|
||||||
if (wipestyle == WIPESTYLE_LEVEL)
|
if (wipestyle == WIPESTYLE_COLORMAP)
|
||||||
*mask++ = pcolor->s.red / FADECOLORMAPDIV;
|
*mask++ = pcolor->s.red / FADECOLORMAPDIV;
|
||||||
else
|
else
|
||||||
*mask++ = FixedDiv((pcolor->s.red+1)<<FRACBITS, paldiv)>>FRACBITS;
|
*mask++ = FixedDiv((pcolor->s.red+1)<<FRACBITS, paldiv)>>FRACBITS;
|
||||||
|
@ -191,7 +191,7 @@ void F_WipeStageTitle(void)
|
||||||
{
|
{
|
||||||
// draw level title
|
// draw level title
|
||||||
if ((WipeStageTitle && st_overlay)
|
if ((WipeStageTitle && st_overlay)
|
||||||
&& (wipestyle == WIPESTYLE_LEVEL)
|
&& (wipestyle == WIPESTYLE_COLORMAP)
|
||||||
&& !(mapheaderinfo[gamemap-1]->levelflags & LF_NOTITLECARD)
|
&& !(mapheaderinfo[gamemap-1]->levelflags & LF_NOTITLECARD)
|
||||||
&& *mapheaderinfo[gamemap-1]->lvlttl != '\0')
|
&& *mapheaderinfo[gamemap-1]->lvlttl != '\0')
|
||||||
{
|
{
|
||||||
|
@ -282,7 +282,7 @@ static void F_DoWipe(fademask_t *fademask)
|
||||||
relativepos += vid.width;
|
relativepos += vid.width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (*mask >= ((wipestyle == WIPESTYLE_LEVEL) ? FADECOLORMAPROWS : 10))
|
else if (*mask >= 10)
|
||||||
{
|
{
|
||||||
// shortcut - memcpy target to work
|
// shortcut - memcpy target to work
|
||||||
while (draw_linestogo--)
|
while (draw_linestogo--)
|
||||||
|
@ -292,26 +292,9 @@ static void F_DoWipe(fademask_t *fademask)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
if (wipestyle == WIPESTYLE_LEVEL)
|
|
||||||
{
|
|
||||||
int nmask;
|
|
||||||
UINT8 *fade = fadecolormap;
|
|
||||||
|
|
||||||
if (wipestyleflags & WSF_TOWHITE)
|
|
||||||
fade = fadecolormap + (FADECOLORMAPROWS * 256);
|
|
||||||
|
|
||||||
nmask = *mask;
|
|
||||||
if (wipestyleflags & WSF_FADEIN)
|
|
||||||
nmask = (FADECOLORMAPROWS-1) - nmask;
|
|
||||||
|
|
||||||
transtbl = fade + (nmask * 256);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
// pointer to transtable that this mask would use
|
// pointer to transtable that this mask would use
|
||||||
transtbl = transtables + ((9 - *mask)<<FF_TRANSSHIFT);
|
transtbl = transtables + ((9 - *mask)<<FF_TRANSSHIFT);
|
||||||
}
|
|
||||||
|
|
||||||
// DRAWING LOOP
|
// DRAWING LOOP
|
||||||
while (draw_linestogo--)
|
while (draw_linestogo--)
|
||||||
|
@ -321,16 +304,113 @@ static void F_DoWipe(fademask_t *fademask)
|
||||||
e = e_base + relativepos;
|
e = e_base + relativepos;
|
||||||
draw_rowstogo = draw_rowend - draw_rowstart;
|
draw_rowstogo = draw_rowend - draw_rowstart;
|
||||||
|
|
||||||
if (wipestyle == WIPESTYLE_LEVEL)
|
|
||||||
{
|
|
||||||
while (draw_rowstogo--)
|
while (draw_rowstogo--)
|
||||||
*w++ = transtbl[*e++];
|
*w++ = transtbl[ ( *e++ << 8 ) + *s++ ];
|
||||||
|
|
||||||
|
relativepos += vid.width;
|
||||||
|
}
|
||||||
|
// END DRAWING LOOP
|
||||||
|
}
|
||||||
|
|
||||||
|
if (++maskx >= fademask->width)
|
||||||
|
++masky, maskx = 0;
|
||||||
|
} while (++mask < maskend);
|
||||||
|
|
||||||
|
free(scrxpos);
|
||||||
|
free(scrypos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void F_DoColormapWipe(fademask_t *fademask, UINT8 *colormap)
|
||||||
|
{
|
||||||
|
// Lactozilla: F_DoWipe for WIPESTYLE_COLORMAP
|
||||||
|
{
|
||||||
|
// wipe screen, start, end
|
||||||
|
UINT8 *w = wipe_scr;
|
||||||
|
const UINT8 *s = wipe_scr_start;
|
||||||
|
const UINT8 *e = wipe_scr_end;
|
||||||
|
|
||||||
|
// first pixel for each screen
|
||||||
|
UINT8 *w_base = w;
|
||||||
|
const UINT8 *s_base = s;
|
||||||
|
const UINT8 *e_base = e;
|
||||||
|
|
||||||
|
// mask data, end
|
||||||
|
UINT8 *transtbl;
|
||||||
|
const UINT8 *mask = fademask->mask;
|
||||||
|
const UINT8 *maskend = mask + fademask->size;
|
||||||
|
|
||||||
|
// rectangle draw hints
|
||||||
|
UINT32 draw_linestart, draw_rowstart;
|
||||||
|
UINT32 draw_lineend, draw_rowend;
|
||||||
|
UINT32 draw_linestogo, draw_rowstogo;
|
||||||
|
|
||||||
|
// rectangle coordinates, etc.
|
||||||
|
UINT16* scrxpos = (UINT16*)malloc((fademask->width + 1) * sizeof(UINT16));
|
||||||
|
UINT16* scrypos = (UINT16*)malloc((fademask->height + 1) * sizeof(UINT16));
|
||||||
|
UINT16 maskx, masky;
|
||||||
|
UINT32 relativepos;
|
||||||
|
|
||||||
|
// ---
|
||||||
|
// Screw it, we do the fixed point math ourselves up front.
|
||||||
|
scrxpos[0] = 0;
|
||||||
|
for (relativepos = 0, maskx = 1; maskx < fademask->width; ++maskx)
|
||||||
|
scrxpos[maskx] = (relativepos += fademask->xscale)>>FRACBITS;
|
||||||
|
scrxpos[fademask->width] = vid.width;
|
||||||
|
|
||||||
|
scrypos[0] = 0;
|
||||||
|
for (relativepos = 0, masky = 1; masky < fademask->height; ++masky)
|
||||||
|
scrypos[masky] = (relativepos += fademask->yscale)>>FRACBITS;
|
||||||
|
scrypos[fademask->height] = vid.height;
|
||||||
|
// ---
|
||||||
|
|
||||||
|
maskx = masky = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
draw_rowstart = scrxpos[maskx];
|
||||||
|
draw_rowend = scrxpos[maskx + 1];
|
||||||
|
draw_linestart = scrypos[masky];
|
||||||
|
draw_lineend = scrypos[masky + 1];
|
||||||
|
|
||||||
|
relativepos = (draw_linestart * vid.width) + draw_rowstart;
|
||||||
|
draw_linestogo = draw_lineend - draw_linestart;
|
||||||
|
|
||||||
|
if (*mask == 0)
|
||||||
|
{
|
||||||
|
// shortcut - memcpy source to work
|
||||||
|
while (draw_linestogo--)
|
||||||
|
{
|
||||||
|
M_Memcpy(w_base+relativepos, s_base+relativepos, draw_rowend-draw_rowstart);
|
||||||
|
relativepos += vid.width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (*mask >= FADECOLORMAPROWS)
|
||||||
|
{
|
||||||
|
// shortcut - memcpy target to work
|
||||||
|
while (draw_linestogo--)
|
||||||
|
{
|
||||||
|
M_Memcpy(w_base+relativepos, e_base+relativepos, draw_rowend-draw_rowstart);
|
||||||
|
relativepos += vid.width;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
int nmask = *mask;
|
||||||
|
if (wipestyleflags & WSF_FADEIN)
|
||||||
|
nmask = (FADECOLORMAPROWS-1) - nmask;
|
||||||
|
|
||||||
|
transtbl = colormap + (nmask * 256);
|
||||||
|
|
||||||
|
// DRAWING LOOP
|
||||||
|
while (draw_linestogo--)
|
||||||
|
{
|
||||||
|
w = w_base + relativepos;
|
||||||
|
s = s_base + relativepos;
|
||||||
|
e = e_base + relativepos;
|
||||||
|
draw_rowstogo = draw_rowend - draw_rowstart;
|
||||||
|
|
||||||
while (draw_rowstogo--)
|
while (draw_rowstogo--)
|
||||||
*w++ = transtbl[ ( *e++ << 8 ) + *s++ ];
|
*w++ = transtbl[*e++];
|
||||||
}
|
|
||||||
|
|
||||||
relativepos += vid.width;
|
relativepos += vid.width;
|
||||||
}
|
}
|
||||||
|
@ -382,6 +462,62 @@ void F_WipeEndScreen(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Verifies every condition for a colormapped fade.
|
||||||
|
*/
|
||||||
|
boolean F_ShouldColormapFade(void)
|
||||||
|
{
|
||||||
|
if ((wipestyleflags & (WSF_FADEIN|WSF_FADEOUT)) // only if one of those wipestyleflags are actually set
|
||||||
|
&& !(wipestyleflags & WSF_CROSSFADE)) // and if not crossfading
|
||||||
|
{
|
||||||
|
// World
|
||||||
|
return (gamestate == GS_LEVEL
|
||||||
|
|| gamestate == GS_TITLESCREEN
|
||||||
|
// Finales
|
||||||
|
|| gamestate == GS_CONTINUING
|
||||||
|
|| gamestate == GS_CREDITS
|
||||||
|
|| gamestate == GS_EVALUATION
|
||||||
|
|| gamestate == GS_INTRO
|
||||||
|
|| gamestate == GS_ENDING
|
||||||
|
// Menus
|
||||||
|
|| gamestate == GS_TIMEATTACK);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Decides what wipe style to use.
|
||||||
|
*/
|
||||||
|
void F_DecideWipeStyle(void)
|
||||||
|
{
|
||||||
|
// Set default wipe style
|
||||||
|
wipestyle = WIPESTYLE_NORMAL;
|
||||||
|
|
||||||
|
// Check for colormap wipe style
|
||||||
|
if (F_ShouldColormapFade())
|
||||||
|
wipestyle = WIPESTYLE_COLORMAP;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Attempt to run a colormap fade,
|
||||||
|
provided all the conditionals were properly met.
|
||||||
|
Returns true if so.
|
||||||
|
I demand you call F_RunWipe after this function.
|
||||||
|
*/
|
||||||
|
boolean F_TryColormapFade(UINT8 wipecolor)
|
||||||
|
{
|
||||||
|
if (F_ShouldColormapFade())
|
||||||
|
{
|
||||||
|
#ifdef HWRENDER
|
||||||
|
if (rendermode == render_opengl)
|
||||||
|
F_WipeColorFill(wipecolor);
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
F_WipeColorFill(wipecolor);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** After setting up the screens you want to wipe,
|
/** After setting up the screens you want to wipe,
|
||||||
* calling this will do a 'typical' wipe.
|
* calling this will do a 'typical' wipe.
|
||||||
*/
|
*/
|
||||||
|
@ -399,18 +535,10 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu)
|
||||||
paldiv = FixedDiv(257<<FRACBITS, 11<<FRACBITS);
|
paldiv = FixedDiv(257<<FRACBITS, 11<<FRACBITS);
|
||||||
|
|
||||||
// Init the wipe
|
// Init the wipe
|
||||||
|
F_DecideWipeStyle();
|
||||||
WipeInAction = true;
|
WipeInAction = true;
|
||||||
wipe_scr = screens[0];
|
wipe_scr = screens[0];
|
||||||
|
|
||||||
// don't know where else to put this.
|
|
||||||
// this any good?
|
|
||||||
if ((gamestate == GS_LEVEL || gamestate == GS_TITLESCREEN)
|
|
||||||
&& (wipestyleflags & (WSF_FADEIN|WSF_FADEOUT)) // only if one of those wipestyleflags are actually set
|
|
||||||
&& !(wipestyleflags & WSF_CROSSFADE)) // and if not crossfading
|
|
||||||
wipestyle = WIPESTYLE_LEVEL;
|
|
||||||
else
|
|
||||||
wipestyle = WIPESTYLE_NORMAL;
|
|
||||||
|
|
||||||
// lastwipetic should either be 0 or the tic we last wiped
|
// lastwipetic should either be 0 or the tic we last wiped
|
||||||
// on for fade-to-black
|
// on for fade-to-black
|
||||||
for (;;)
|
for (;;)
|
||||||
|
@ -425,21 +553,39 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu)
|
||||||
I_Sleep();
|
I_Sleep();
|
||||||
lastwipetic = nowtime;
|
lastwipetic = nowtime;
|
||||||
|
|
||||||
|
// Wipe styles
|
||||||
|
if (wipestyle == WIPESTYLE_COLORMAP)
|
||||||
|
{
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
if (rendermode == render_opengl)
|
if (rendermode == render_opengl)
|
||||||
{
|
{
|
||||||
// send in the wipe type and wipe frame because we need to cache the graphic
|
// send in the wipe type and wipe frame because we need to cache the graphic
|
||||||
if (wipestyle == WIPESTYLE_LEVEL)
|
|
||||||
HWR_DoTintedWipe(wipetype, wipeframe-1);
|
HWR_DoTintedWipe(wipetype, wipeframe-1);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
UINT8 *colormap = fadecolormap;
|
||||||
|
if (wipestyleflags & WSF_TOWHITE)
|
||||||
|
colormap += (FADECOLORMAPROWS * 256);
|
||||||
|
F_DoColormapWipe(fmask, colormap);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw the title card above the wipe
|
||||||
|
F_WipeStageTitle();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifdef HWRENDER
|
||||||
|
if (rendermode == render_opengl)
|
||||||
|
{
|
||||||
|
// send in the wipe type and wipe frame because we need to cache the graphic
|
||||||
HWR_DoWipe(wipetype, wipeframe-1);
|
HWR_DoWipe(wipetype, wipeframe-1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
F_DoWipe(fmask);
|
F_DoWipe(fmask);
|
||||||
|
}
|
||||||
if (wipestyle == WIPESTYLE_LEVEL)
|
|
||||||
F_WipeStageTitle();
|
|
||||||
|
|
||||||
I_OsPolling();
|
I_OsPolling();
|
||||||
I_UpdateNoBlit();
|
I_UpdateNoBlit();
|
||||||
|
|
|
@ -1890,9 +1890,6 @@ void G_DoLoadLevel(boolean resetplayer)
|
||||||
//
|
//
|
||||||
void G_StartTitleCard(void)
|
void G_StartTitleCard(void)
|
||||||
{
|
{
|
||||||
wipestyleflags |= WSF_FADEIN;
|
|
||||||
wipestyleflags &= ~WSF_FADEOUT;
|
|
||||||
|
|
||||||
// The title card has been disabled for this map.
|
// The title card has been disabled for this map.
|
||||||
// Oh well.
|
// Oh well.
|
||||||
if (!G_IsTitleCardAvailable())
|
if (!G_IsTitleCardAvailable())
|
||||||
|
@ -1936,6 +1933,8 @@ void G_PreLevelTitleCard(void)
|
||||||
if (takescreenshot) // Only take screenshots after drawing.
|
if (takescreenshot) // Only take screenshots after drawing.
|
||||||
M_DoScreenShot();
|
M_DoScreenShot();
|
||||||
}
|
}
|
||||||
|
if (!cv_showhud.value)
|
||||||
|
wipestyleflags = WSF_CROSSFADE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -963,7 +963,7 @@ static void HWR_GetBlendedTexture(GLPatch_t *gpatch, GLPatch_t *blendgpatch, INT
|
||||||
for (grmip = gpatch->mipmap; grmip->nextcolormap; )
|
for (grmip = gpatch->mipmap; grmip->nextcolormap; )
|
||||||
{
|
{
|
||||||
grmip = grmip->nextcolormap;
|
grmip = grmip->nextcolormap;
|
||||||
if (grmip->colormap == colormap || grmip->tcindex == skinnum)
|
if (grmip->colormap == colormap || (skinnum < TC_DEFAULT && grmip->tcindex == skinnum))
|
||||||
{
|
{
|
||||||
if (grmip->downloaded && grmip->grInfo.data)
|
if (grmip->downloaded && grmip->grInfo.data)
|
||||||
{
|
{
|
||||||
|
|
|
@ -184,10 +184,6 @@ void I_StartupMouse(void);
|
||||||
*/
|
*/
|
||||||
void I_StartupMouse2(void);
|
void I_StartupMouse2(void);
|
||||||
|
|
||||||
/** \brief keyboard startup, shutdown, handler
|
|
||||||
*/
|
|
||||||
void I_StartupKeyboard(void);
|
|
||||||
|
|
||||||
/** \brief setup timer irq and user timer routine.
|
/** \brief setup timer irq and user timer routine.
|
||||||
*/
|
*/
|
||||||
void I_StartupTimer(void);
|
void I_StartupTimer(void);
|
||||||
|
|
|
@ -2071,6 +2071,12 @@ static int mapheaderinfo_get(lua_State *L)
|
||||||
lua_pushinteger(L, header->levelselect);
|
lua_pushinteger(L, header->levelselect);
|
||||||
else if (fastcmp(field,"bonustype"))
|
else if (fastcmp(field,"bonustype"))
|
||||||
lua_pushinteger(L, header->bonustype);
|
lua_pushinteger(L, header->bonustype);
|
||||||
|
else if (fastcmp(field,"ltzzpatch"))
|
||||||
|
lua_pushstring(L, header->ltzzpatch);
|
||||||
|
else if (fastcmp(field,"ltzztext"))
|
||||||
|
lua_pushstring(L, header->ltzztext);
|
||||||
|
else if (fastcmp(field,"ltactdiamond"))
|
||||||
|
lua_pushstring(L, header->ltactdiamond);
|
||||||
else if (fastcmp(field,"maxbonuslives"))
|
else if (fastcmp(field,"maxbonuslives"))
|
||||||
lua_pushinteger(L, header->maxbonuslives);
|
lua_pushinteger(L, header->maxbonuslives);
|
||||||
else if (fastcmp(field,"levelflags"))
|
else if (fastcmp(field,"levelflags"))
|
||||||
|
|
|
@ -20,6 +20,10 @@
|
||||||
#include "i_video.h"
|
#include "i_video.h"
|
||||||
#include "m_misc.h"
|
#include "m_misc.h"
|
||||||
|
|
||||||
|
#ifdef HWRENDER
|
||||||
|
#include "hardware/hw_main.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// GIFs are always little-endian
|
// GIFs are always little-endian
|
||||||
#include "byteptr.h"
|
#include "byteptr.h"
|
||||||
|
|
||||||
|
@ -29,6 +33,7 @@ consvar_t cv_gif_downscale = {"gif_downscale", "On", CV_SAVE, CV_OnOff, NULL, 0
|
||||||
#ifdef HAVE_ANIGIF
|
#ifdef HAVE_ANIGIF
|
||||||
static boolean gif_optimize = false; // So nobody can do something dumb
|
static boolean gif_optimize = false; // So nobody can do something dumb
|
||||||
static boolean gif_downscale = false; // like changing cvars mid output
|
static boolean gif_downscale = false; // like changing cvars mid output
|
||||||
|
static RGBA_t *gif_palette = NULL;
|
||||||
|
|
||||||
static FILE *gif_out = NULL;
|
static FILE *gif_out = NULL;
|
||||||
static INT32 gif_frames = 0;
|
static INT32 gif_frames = 0;
|
||||||
|
@ -428,10 +433,7 @@ static void GIF_headwrite(void)
|
||||||
|
|
||||||
// write color table
|
// write color table
|
||||||
{
|
{
|
||||||
RGBA_t *pal = ((cv_screenshot_colorprofile.value)
|
RGBA_t *pal = gif_palette;
|
||||||
? pLocalPalette
|
|
||||||
: pMasterPalette);
|
|
||||||
|
|
||||||
for (i = 0; i < 256; i++)
|
for (i = 0; i < 256; i++)
|
||||||
{
|
{
|
||||||
WRITEUINT8(p, pal[i].s.red);
|
WRITEUINT8(p, pal[i].s.red);
|
||||||
|
@ -457,6 +459,32 @@ const UINT8 gifframe_gchead[4] = {0x21,0xF9,0x04,0x04}; // GCE, bytes, packed by
|
||||||
static UINT8 *gifframe_data = NULL;
|
static UINT8 *gifframe_data = NULL;
|
||||||
static size_t gifframe_size = 8192;
|
static size_t gifframe_size = 8192;
|
||||||
|
|
||||||
|
#ifdef HWRENDER
|
||||||
|
static void hwrconvert(void)
|
||||||
|
{
|
||||||
|
UINT8 *linear = HWR_GetScreenshot();
|
||||||
|
UINT8 *dest = screens[2];
|
||||||
|
UINT8 r, g, b;
|
||||||
|
INT32 x, y;
|
||||||
|
size_t i = 0;
|
||||||
|
|
||||||
|
InitColorLUT(gif_palette);
|
||||||
|
|
||||||
|
for (y = 0; y < vid.height; y++)
|
||||||
|
{
|
||||||
|
for (x = 0; x < vid.width; x++, i += 3)
|
||||||
|
{
|
||||||
|
r = (UINT8)linear[i];
|
||||||
|
g = (UINT8)linear[i + 1];
|
||||||
|
b = (UINT8)linear[i + 2];
|
||||||
|
dest[(y * vid.width) + x] = colorlookup[r >> SHIFTCOLORBITS][g >> SHIFTCOLORBITS][b >> SHIFTCOLORBITS];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
free(linear);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// GIF_framewrite
|
// GIF_framewrite
|
||||||
// writes a frame into the file.
|
// writes a frame into the file.
|
||||||
|
@ -482,7 +510,12 @@ static void GIF_framewrite(void)
|
||||||
GIF_optimizeregion(cur_screen, movie_screen, &blitx, &blity, &blitw, &blith);
|
GIF_optimizeregion(cur_screen, movie_screen, &blitx, &blity, &blitw, &blith);
|
||||||
|
|
||||||
// blit to temp screen
|
// blit to temp screen
|
||||||
|
if (rendermode == render_soft)
|
||||||
I_ReadScreen(movie_screen);
|
I_ReadScreen(movie_screen);
|
||||||
|
#ifdef HWRENDER
|
||||||
|
else if (rendermode == render_opengl)
|
||||||
|
hwrconvert();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -491,7 +524,18 @@ static void GIF_framewrite(void)
|
||||||
blith = vid.height;
|
blith = vid.height;
|
||||||
|
|
||||||
if (gif_frames == 0)
|
if (gif_frames == 0)
|
||||||
|
{
|
||||||
|
if (rendermode == render_soft)
|
||||||
I_ReadScreen(movie_screen);
|
I_ReadScreen(movie_screen);
|
||||||
|
#ifdef HWRENDER
|
||||||
|
else if (rendermode == render_opengl)
|
||||||
|
{
|
||||||
|
hwrconvert();
|
||||||
|
VID_BlitLinearScreen(screens[2], screens[0], vid.width*vid.bpp, vid.height, vid.width*vid.bpp, vid.rowbytes);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
movie_screen = screens[0];
|
movie_screen = screens[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,7 +624,7 @@ static void GIF_framewrite(void)
|
||||||
//
|
//
|
||||||
INT32 GIF_open(const char *filename)
|
INT32 GIF_open(const char *filename)
|
||||||
{
|
{
|
||||||
#ifdef HWRENDER
|
#if 0
|
||||||
if (rendermode != render_soft)
|
if (rendermode != render_soft)
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("GIFs cannot be taken in non-software modes!\n"));
|
CONS_Alert(CONS_WARNING, M_GetText("GIFs cannot be taken in non-software modes!\n"));
|
||||||
|
@ -594,6 +638,16 @@ INT32 GIF_open(const char *filename)
|
||||||
|
|
||||||
gif_optimize = (!!cv_gif_optimize.value);
|
gif_optimize = (!!cv_gif_optimize.value);
|
||||||
gif_downscale = (!!cv_gif_downscale.value);
|
gif_downscale = (!!cv_gif_downscale.value);
|
||||||
|
|
||||||
|
// GIF color table
|
||||||
|
// In hardware mode, uses the master palette
|
||||||
|
gif_palette = ((cv_screenshot_colorprofile.value
|
||||||
|
#ifdef HWRENDER
|
||||||
|
&& (rendermode == render_soft)
|
||||||
|
#endif
|
||||||
|
) ? pLocalPalette
|
||||||
|
: pMasterPalette);
|
||||||
|
|
||||||
GIF_headwrite();
|
GIF_headwrite();
|
||||||
gif_frames = 0;
|
gif_frames = 0;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
16
src/m_menu.c
16
src/m_menu.c
|
@ -1309,18 +1309,18 @@ static menuitem_t OP_OpenGLOptionsMenu[] =
|
||||||
{IT_STRING|IT_CVAR, NULL, "Model lighting", &cv_grmodellighting, 32},
|
{IT_STRING|IT_CVAR, NULL, "Model lighting", &cv_grmodellighting, 32},
|
||||||
|
|
||||||
{IT_HEADER, NULL, "General", NULL, 51},
|
{IT_HEADER, NULL, "General", NULL, 51},
|
||||||
{IT_STRING|IT_CVAR, NULL, "Field of view", &cv_grfov, 62},
|
{IT_STRING|IT_CVAR, NULL, "Field of view", &cv_grfov, 63},
|
||||||
{IT_STRING|IT_CVAR, NULL, "Quality", &cv_scr_depth, 72},
|
{IT_STRING|IT_CVAR, NULL, "Quality", &cv_scr_depth, 73},
|
||||||
{IT_STRING|IT_CVAR, NULL, "Texture Filter", &cv_grfiltermode, 82},
|
{IT_STRING|IT_CVAR, NULL, "Texture Filter", &cv_grfiltermode, 83},
|
||||||
{IT_STRING|IT_CVAR, NULL, "Anisotropic", &cv_granisotropicmode,92},
|
{IT_STRING|IT_CVAR, NULL, "Anisotropic", &cv_granisotropicmode,93},
|
||||||
|
|
||||||
{IT_HEADER, NULL, "Miscellaneous", NULL, 111},
|
{IT_HEADER, NULL, "Miscellaneous", NULL, 112},
|
||||||
{IT_SUBMENU|IT_STRING, NULL, "Fog...", &OP_OpenGLFogDef, 123},
|
{IT_SUBMENU|IT_STRING, NULL, "Fog...", &OP_OpenGLFogDef, 124},
|
||||||
#ifdef ALAM_LIGHTING
|
#ifdef ALAM_LIGHTING
|
||||||
{IT_SUBMENU|IT_STRING, NULL, "Lighting...", &OP_OpenGLLightingDef, 133},
|
{IT_SUBMENU|IT_STRING, NULL, "Lighting...", &OP_OpenGLLightingDef, 134},
|
||||||
#endif
|
#endif
|
||||||
#if defined (_WINDOWS) && (!((defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON) || defined (HAVE_SDL)))
|
#if defined (_WINDOWS) && (!((defined (__unix__) && !defined (MSDOS)) || defined (UNIXCOMMON) || defined (HAVE_SDL)))
|
||||||
{IT_STRING|IT_CVAR, NULL, "Fullscreen", &cv_fullscreen, 143},
|
{IT_STRING|IT_CVAR, NULL, "Fullscreen", &cv_fullscreen, 144},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1161,12 +1161,8 @@ void M_StartMovie(void)
|
||||||
switch (cv_moviemode.value)
|
switch (cv_moviemode.value)
|
||||||
{
|
{
|
||||||
case MM_GIF:
|
case MM_GIF:
|
||||||
if (rendermode == render_soft)
|
|
||||||
{
|
|
||||||
moviemode = M_StartMovieGIF(pathname);
|
moviemode = M_StartMovieGIF(pathname);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
/* FALLTHRU */
|
|
||||||
case MM_APNG:
|
case MM_APNG:
|
||||||
moviemode = M_StartMovieAPNG(pathname);
|
moviemode = M_StartMovieAPNG(pathname);
|
||||||
break;
|
break;
|
||||||
|
|
1129
src/p_mobj.c
1129
src/p_mobj.c
File diff suppressed because it is too large
Load diff
|
@ -213,6 +213,9 @@ static void P_ClearSingleMapHeaderInfo(INT16 i)
|
||||||
mapheaderinfo[num]->lvlttl[0] = '\0';
|
mapheaderinfo[num]->lvlttl[0] = '\0';
|
||||||
mapheaderinfo[num]->selectheading[0] = '\0';
|
mapheaderinfo[num]->selectheading[0] = '\0';
|
||||||
mapheaderinfo[num]->subttl[0] = '\0';
|
mapheaderinfo[num]->subttl[0] = '\0';
|
||||||
|
mapheaderinfo[num]->ltzzpatch[0] = '\0';
|
||||||
|
mapheaderinfo[num]->ltzztext[0] = '\0';
|
||||||
|
mapheaderinfo[num]->ltactdiamond[0] = '\0';
|
||||||
mapheaderinfo[num]->actnum = 0;
|
mapheaderinfo[num]->actnum = 0;
|
||||||
mapheaderinfo[num]->typeoflevel = 0;
|
mapheaderinfo[num]->typeoflevel = 0;
|
||||||
mapheaderinfo[num]->nextlevel = (INT16)(i + 1);
|
mapheaderinfo[num]->nextlevel = (INT16)(i + 1);
|
||||||
|
|
|
@ -536,9 +536,7 @@ static UINT8 *R_GenerateTexture(size_t texnum)
|
||||||
}
|
}
|
||||||
|
|
||||||
// multi-patch textures (or 'composite')
|
// multi-patch textures (or 'composite')
|
||||||
#ifndef NO_PNG_LUMPS
|
|
||||||
multipatch:
|
multipatch:
|
||||||
#endif
|
|
||||||
texture->holes = false;
|
texture->holes = false;
|
||||||
texture->flip = 0;
|
texture->flip = 0;
|
||||||
blocksize = (texture->width * 4) + (texture->width * texture->height);
|
blocksize = (texture->width * 4) + (texture->width * texture->height);
|
||||||
|
|
|
@ -171,6 +171,8 @@ const char *R_NameForColormap(extracolormap_t *extra_colormap);
|
||||||
#define R_PutRgbaRGB(r, g, b) (R_PutRgbaR(r) + R_PutRgbaG(g) + R_PutRgbaB(b))
|
#define R_PutRgbaRGB(r, g, b) (R_PutRgbaR(r) + R_PutRgbaG(g) + R_PutRgbaB(b))
|
||||||
#define R_PutRgbaRGBA(r, g, b, a) (R_PutRgbaRGB(r, g, b) + R_PutRgbaA(a))
|
#define R_PutRgbaRGBA(r, g, b, a) (R_PutRgbaRGB(r, g, b) + R_PutRgbaA(a))
|
||||||
|
|
||||||
|
UINT8 NearestColor(UINT8 r, UINT8 g, UINT8 b);
|
||||||
|
|
||||||
extern INT32 numtextures;
|
extern INT32 numtextures;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -788,6 +788,8 @@ static UINT8 *R_GetTextureFlat(levelflat_t *levelflat, boolean leveltexture, boo
|
||||||
patch_t *patch = NULL;
|
patch_t *patch = NULL;
|
||||||
boolean texturechanged = (leveltexture ? (levelflat->u.texture.num != levelflat->u.texture.lastnum) : false);
|
boolean texturechanged = (leveltexture ? (levelflat->u.texture.num != levelflat->u.texture.lastnum) : false);
|
||||||
|
|
||||||
|
(void)ispng;
|
||||||
|
|
||||||
// Check if the texture changed.
|
// Check if the texture changed.
|
||||||
if (leveltexture && (!texturechanged))
|
if (leveltexture && (!texturechanged))
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,6 +47,7 @@ extern int SDL_main(int argc, char *argv[]);
|
||||||
|
|
||||||
#ifdef LOGMESSAGES
|
#ifdef LOGMESSAGES
|
||||||
FILE *logstream = NULL;
|
FILE *logstream = NULL;
|
||||||
|
char logfilename[1024];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef DOXYGEN
|
#ifndef DOXYGEN
|
||||||
|
@ -116,7 +117,6 @@ int main(int argc, char **argv)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
const char *logdir = NULL;
|
const char *logdir = NULL;
|
||||||
char logfile[MAX_WADPATH];
|
|
||||||
myargc = argc;
|
myargc = argc;
|
||||||
myargv = argv; /// \todo pull out path to exe from this string
|
myargv = argv; /// \todo pull out path to exe from this string
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ int main(int argc, char **argv)
|
||||||
timeinfo = localtime(&my_time);
|
timeinfo = localtime(&my_time);
|
||||||
|
|
||||||
strftime(buf, 26, "%Y-%m-%d %H-%M-%S", timeinfo);
|
strftime(buf, 26, "%Y-%m-%d %H-%M-%S", timeinfo);
|
||||||
strcpy(logfile, va("log-%s.txt", buf));
|
strcpy(logfilename, va("log-%s.txt", buf));
|
||||||
|
|
||||||
#ifdef DEFAULTDIR
|
#ifdef DEFAULTDIR
|
||||||
if (logdir)
|
if (logdir)
|
||||||
|
@ -149,14 +149,16 @@ int main(int argc, char **argv)
|
||||||
// Create dirs here because D_SRB2Main() is too late.
|
// Create dirs here because D_SRB2Main() is too late.
|
||||||
I_mkdir(va("%s%s"DEFAULTDIR, logdir, PATHSEP), 0755);
|
I_mkdir(va("%s%s"DEFAULTDIR, logdir, PATHSEP), 0755);
|
||||||
I_mkdir(va("%s%s"DEFAULTDIR"%slogs",logdir, PATHSEP, PATHSEP), 0755);
|
I_mkdir(va("%s%s"DEFAULTDIR"%slogs",logdir, PATHSEP, PATHSEP), 0755);
|
||||||
logstream = fopen(va("%s%s"DEFAULTDIR"%slogs%s%s",logdir, PATHSEP, PATHSEP, PATHSEP, logfile), "wt");
|
strcpy(logfilename, va("%s%s"DEFAULTDIR"%slogs%s%s",logdir, PATHSEP, PATHSEP, PATHSEP, logfilename));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
I_mkdir("."PATHSEP"logs"PATHSEP, 0755);
|
I_mkdir("."PATHSEP"logs"PATHSEP, 0755);
|
||||||
logstream = fopen(va("."PATHSEP"logs"PATHSEP"%s", logfile), "wt");
|
strcpy(logfilename, va("."PATHSEP"logs"PATHSEP"%s", logfilename));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logstream = fopen(logfilename, "wt");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -181,12 +183,13 @@ int main(int argc, char **argv)
|
||||||
#endif
|
#endif
|
||||||
MakeCodeWritable();
|
MakeCodeWritable();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// startup SRB2
|
// startup SRB2
|
||||||
CONS_Printf("Setting up SRB2...\n");
|
CONS_Printf("Setting up SRB2...\n");
|
||||||
D_SRB2Main();
|
D_SRB2Main();
|
||||||
#ifdef LOGMESSAGES
|
#ifdef LOGMESSAGES
|
||||||
if (!M_CheckParm("-nolog"))
|
if (!M_CheckParm("-nolog"))
|
||||||
CONS_Printf("Logfile: %s\n", logfile);
|
CONS_Printf("Logfile: %s\n", logfilename);
|
||||||
#endif
|
#endif
|
||||||
CONS_Printf("Entering main game loop...\n");
|
CONS_Printf("Entering main game loop...\n");
|
||||||
// never return
|
// never return
|
||||||
|
|
|
@ -102,6 +102,12 @@ typedef LPVOID (WINAPI *p_MapViewOfFile) (HANDLE, DWORD, DWORD, DWORD, SIZE_T);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if (defined (__unix__) && !defined (_MSDOS)) || defined (UNIXCOMMON)
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
#define NEWSIGNALHANDLER
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef NOMUMBLE
|
#ifndef NOMUMBLE
|
||||||
#ifdef __linux__ // need -lrt
|
#ifdef __linux__ // need -lrt
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
@ -229,13 +235,11 @@ SDL_bool framebuffer = SDL_FALSE;
|
||||||
|
|
||||||
UINT8 keyboard_started = false;
|
UINT8 keyboard_started = false;
|
||||||
|
|
||||||
FUNCNORETURN static ATTRNORETURN void signal_handler(INT32 num)
|
static void I_ReportSignal(int num, int coredumped)
|
||||||
{
|
{
|
||||||
//static char msg[] = "oh no! back to reality!\r\n";
|
//static char msg[] = "oh no! back to reality!\r\n";
|
||||||
const char * sigmsg;
|
const char * sigmsg;
|
||||||
char sigdef[32];
|
char msg[128];
|
||||||
|
|
||||||
D_QuitNetGame(); // Fix server freezes
|
|
||||||
|
|
||||||
switch (num)
|
switch (num)
|
||||||
{
|
{
|
||||||
|
@ -261,20 +265,41 @@ FUNCNORETURN static ATTRNORETURN void signal_handler(INT32 num)
|
||||||
sigmsg = "SIGABRT - abnormal termination triggered by abort call";
|
sigmsg = "SIGABRT - abnormal termination triggered by abort call";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
sprintf(sigdef,"signal number %d", num);
|
sprintf(msg,"signal number %d", num);
|
||||||
sigmsg = sigdef;
|
if (coredumped)
|
||||||
|
sigmsg = 0;
|
||||||
|
else
|
||||||
|
sigmsg = msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
I_OutputMsg("\nsignal_handler() error: %s\n", sigmsg);
|
if (coredumped)
|
||||||
|
{
|
||||||
|
if (sigmsg)
|
||||||
|
sprintf(msg, "%s (core dumped)", sigmsg);
|
||||||
|
else
|
||||||
|
strcat(msg, " (core dumped)");
|
||||||
|
|
||||||
|
sigmsg = msg;
|
||||||
|
}
|
||||||
|
|
||||||
|
I_OutputMsg("\nProcess killed by signal: %s\n\n", sigmsg);
|
||||||
|
|
||||||
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
|
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
|
||||||
"Signal caught",
|
"Process killed by signal",
|
||||||
sigmsg, NULL);
|
sigmsg, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef NEWSIGNALHANDLER
|
||||||
|
FUNCNORETURN static ATTRNORETURN void signal_handler(INT32 num)
|
||||||
|
{
|
||||||
|
D_QuitNetGame(); // Fix server freezes
|
||||||
|
I_ReportSignal(num, 0);
|
||||||
I_ShutdownSystem();
|
I_ShutdownSystem();
|
||||||
signal(num, SIG_DFL); //default signal action
|
signal(num, SIG_DFL); //default signal action
|
||||||
raise(num);
|
raise(num);
|
||||||
I_Quit();
|
I_Quit();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
FUNCNORETURN static ATTRNORETURN void quit_handler(int num)
|
FUNCNORETURN static ATTRNORETURN void quit_handler(int num)
|
||||||
{
|
{
|
||||||
|
@ -650,7 +675,7 @@ static inline void I_ShutdownConsole(void){}
|
||||||
//
|
//
|
||||||
// StartupKeyboard
|
// StartupKeyboard
|
||||||
//
|
//
|
||||||
void I_StartupKeyboard (void)
|
static void I_RegisterSignals (void)
|
||||||
{
|
{
|
||||||
#ifdef SIGINT
|
#ifdef SIGINT
|
||||||
signal(SIGINT , quit_handler);
|
signal(SIGINT , quit_handler);
|
||||||
|
@ -664,10 +689,12 @@ void I_StartupKeyboard (void)
|
||||||
|
|
||||||
// If these defines don't exist,
|
// If these defines don't exist,
|
||||||
// then compilation would have failed above us...
|
// then compilation would have failed above us...
|
||||||
|
#ifndef NEWSIGNALHANDLER
|
||||||
signal(SIGILL , signal_handler);
|
signal(SIGILL , signal_handler);
|
||||||
signal(SIGSEGV , signal_handler);
|
signal(SIGSEGV , signal_handler);
|
||||||
signal(SIGABRT , signal_handler);
|
signal(SIGABRT , signal_handler);
|
||||||
signal(SIGFPE , signal_handler);
|
signal(SIGFPE , signal_handler);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -2139,6 +2166,85 @@ void I_Sleep(void)
|
||||||
SDL_Delay(cv_sleep.value);
|
SDL_Delay(cv_sleep.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef NEWSIGNALHANDLER
|
||||||
|
static void newsignalhandler_Warn(const char *pr)
|
||||||
|
{
|
||||||
|
char text[128];
|
||||||
|
|
||||||
|
snprintf(text, sizeof text,
|
||||||
|
"Error while setting up signal reporting: %s: %s",
|
||||||
|
pr,
|
||||||
|
strerror(errno)
|
||||||
|
);
|
||||||
|
|
||||||
|
I_OutputMsg("%s\n", text);
|
||||||
|
|
||||||
|
SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
|
||||||
|
"Startup error",
|
||||||
|
text, NULL);
|
||||||
|
|
||||||
|
I_ShutdownConsole();
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void I_Fork(void)
|
||||||
|
{
|
||||||
|
int child;
|
||||||
|
int status;
|
||||||
|
int signum;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
child = fork();
|
||||||
|
|
||||||
|
switch (child)
|
||||||
|
{
|
||||||
|
case -1:
|
||||||
|
newsignalhandler_Warn("fork()");
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (logstream)
|
||||||
|
fclose(logstream);/* the child has this */
|
||||||
|
|
||||||
|
c = wait(&status);
|
||||||
|
|
||||||
|
#ifdef LOGMESSAGES
|
||||||
|
/* By the way, exit closes files. */
|
||||||
|
logstream = fopen(logfilename, "at");
|
||||||
|
#else
|
||||||
|
logstream = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (c == -1)
|
||||||
|
{
|
||||||
|
kill(child, SIGKILL);
|
||||||
|
newsignalhandler_Warn("wait()");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (WIFSIGNALED (status))
|
||||||
|
{
|
||||||
|
signum = WTERMSIG (status);
|
||||||
|
#ifdef WCOREDUMP
|
||||||
|
I_ReportSignal(signum, WCOREDUMP (status));
|
||||||
|
#else
|
||||||
|
I_ReportSignal(signum, 0);
|
||||||
|
#endif
|
||||||
|
status = 128 + signum;
|
||||||
|
}
|
||||||
|
else if (WIFEXITED (status))
|
||||||
|
{
|
||||||
|
status = WEXITSTATUS (status);
|
||||||
|
}
|
||||||
|
|
||||||
|
I_ShutdownConsole();
|
||||||
|
exit(status);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif/*NEWSIGNALHANDLER*/
|
||||||
|
|
||||||
INT32 I_StartupSystem(void)
|
INT32 I_StartupSystem(void)
|
||||||
{
|
{
|
||||||
SDL_version SDLcompiled;
|
SDL_version SDLcompiled;
|
||||||
|
@ -2146,6 +2252,10 @@ INT32 I_StartupSystem(void)
|
||||||
SDL_VERSION(&SDLcompiled)
|
SDL_VERSION(&SDLcompiled)
|
||||||
SDL_GetVersion(&SDLlinked);
|
SDL_GetVersion(&SDLlinked);
|
||||||
I_StartupConsole();
|
I_StartupConsole();
|
||||||
|
#ifdef NEWSIGNALHANDLER
|
||||||
|
I_Fork();
|
||||||
|
#endif
|
||||||
|
I_RegisterSignals();
|
||||||
I_OutputMsg("Compiled for SDL version: %d.%d.%d\n",
|
I_OutputMsg("Compiled for SDL version: %d.%d.%d\n",
|
||||||
SDLcompiled.major, SDLcompiled.minor, SDLcompiled.patch);
|
SDLcompiled.major, SDLcompiled.minor, SDLcompiled.patch);
|
||||||
I_OutputMsg("Linked with SDL version: %d.%d.%d\n",
|
I_OutputMsg("Linked with SDL version: %d.%d.%d\n",
|
||||||
|
@ -2169,7 +2279,6 @@ void I_Quit(void)
|
||||||
if (quiting) goto death;
|
if (quiting) goto death;
|
||||||
SDLforceUngrabMouse();
|
SDLforceUngrabMouse();
|
||||||
quiting = SDL_FALSE;
|
quiting = SDL_FALSE;
|
||||||
I_ShutdownConsole();
|
|
||||||
M_SaveConfig(NULL); //save game config, cvars..
|
M_SaveConfig(NULL); //save game config, cvars..
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
D_SaveBan(); // save the ban list
|
D_SaveBan(); // save the ban list
|
||||||
|
@ -2287,8 +2396,6 @@ void I_Error(const char *error, ...)
|
||||||
I_OutputMsg("\nI_Error(): %s\n", buffer);
|
I_OutputMsg("\nI_Error(): %s\n", buffer);
|
||||||
// ---
|
// ---
|
||||||
|
|
||||||
I_ShutdownConsole();
|
|
||||||
|
|
||||||
M_SaveConfig(NULL); // save game config, cvars..
|
M_SaveConfig(NULL); // save game config, cvars..
|
||||||
#ifndef NONET
|
#ifndef NONET
|
||||||
D_SaveBan(); // save the ban list
|
D_SaveBan(); // save the ban list
|
||||||
|
@ -2388,6 +2495,10 @@ void I_ShutdownSystem(void)
|
||||||
{
|
{
|
||||||
INT32 c;
|
INT32 c;
|
||||||
|
|
||||||
|
#ifndef NEWSIGNALHANDLER
|
||||||
|
I_ShutdownConsole();
|
||||||
|
#endif
|
||||||
|
|
||||||
for (c = MAX_QUIT_FUNCS-1; c >= 0; c--)
|
for (c = MAX_QUIT_FUNCS-1; c >= 0; c--)
|
||||||
if (quit_funcs[c])
|
if (quit_funcs[c])
|
||||||
(*quit_funcs[c])();
|
(*quit_funcs[c])();
|
||||||
|
|
|
@ -1441,6 +1441,7 @@ INT32 VID_SetMode(INT32 modeNum)
|
||||||
//Impl_SetWindowName("SRB2 "VERSIONSTRING);
|
//Impl_SetWindowName("SRB2 "VERSIONSTRING);
|
||||||
|
|
||||||
SDLSetMode(vid.width, vid.height, USE_FULLSCREEN);
|
SDLSetMode(vid.width, vid.height, USE_FULLSCREEN);
|
||||||
|
Impl_VideoSetupBuffer();
|
||||||
|
|
||||||
if (rendermode == render_soft)
|
if (rendermode == render_soft)
|
||||||
{
|
{
|
||||||
|
@ -1449,8 +1450,6 @@ INT32 VID_SetMode(INT32 modeNum)
|
||||||
SDL_FreeSurface(bufSurface);
|
SDL_FreeSurface(bufSurface);
|
||||||
bufSurface = NULL;
|
bufSurface = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Impl_VideoSetupBuffer();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return SDL_TRUE;
|
return SDL_TRUE;
|
||||||
|
@ -1573,7 +1572,7 @@ static void Impl_VideoSetupSDLBuffer(void)
|
||||||
static void Impl_VideoSetupBuffer(void)
|
static void Impl_VideoSetupBuffer(void)
|
||||||
{
|
{
|
||||||
// Set up game's software render buffer
|
// Set up game's software render buffer
|
||||||
if (rendermode == render_soft)
|
//if (rendermode == render_soft)
|
||||||
{
|
{
|
||||||
vid.rowbytes = vid.width * vid.bpp;
|
vid.rowbytes = vid.width * vid.bpp;
|
||||||
vid.direct = NULL;
|
vid.direct = NULL;
|
||||||
|
|
|
@ -9,6 +9,26 @@
|
||||||
/// \file
|
/// \file
|
||||||
/// \brief SDL Mixer interface for sound
|
/// \brief SDL Mixer interface for sound
|
||||||
|
|
||||||
|
#ifdef HAVE_LIBGME
|
||||||
|
#ifdef HAVE_ZLIB
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#ifndef _LARGEFILE64_SOURCE
|
||||||
|
#define _LARGEFILE64_SOURCE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _LFS64_LARGEFILE
|
||||||
|
#define _LFS64_LARGEFILE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _FILE_OFFSET_BITS
|
||||||
|
#define _FILE_OFFSET_BITS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <zlib.h>
|
||||||
|
#endif // HAVE_ZLIB
|
||||||
|
#endif // HAVE_LIBGME
|
||||||
|
|
||||||
#include "../doomdef.h"
|
#include "../doomdef.h"
|
||||||
#include "../doomstat.h" // menuactive
|
#include "../doomstat.h" // menuactive
|
||||||
|
|
||||||
|
@ -57,24 +77,6 @@
|
||||||
#include "gme/gme.h"
|
#include "gme/gme.h"
|
||||||
#define GME_TREBLE 5.0f
|
#define GME_TREBLE 5.0f
|
||||||
#define GME_BASS 1.0f
|
#define GME_BASS 1.0f
|
||||||
|
|
||||||
#ifdef HAVE_ZLIB
|
|
||||||
#ifndef _MSC_VER
|
|
||||||
#ifndef _LARGEFILE64_SOURCE
|
|
||||||
#define _LARGEFILE64_SOURCE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _LFS64_LARGEFILE
|
|
||||||
#define _LFS64_LARGEFILE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _FILE_OFFSET_BITS
|
|
||||||
#define _FILE_OFFSET_BITS 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "zlib.h"
|
|
||||||
#endif // HAVE_ZLIB
|
|
||||||
#endif // HAVE_LIBGME
|
#endif // HAVE_LIBGME
|
||||||
|
|
||||||
static UINT16 BUFFERSIZE = 2048;
|
static UINT16 BUFFERSIZE = 2048;
|
||||||
|
|
|
@ -1177,21 +1177,33 @@ tic_t lt_exitticker = 0, lt_endtime = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Load the graphics for the title card.
|
// Load the graphics for the title card.
|
||||||
|
// Don't let LJ see this
|
||||||
//
|
//
|
||||||
static void ST_cacheLevelTitle(void)
|
static void ST_cacheLevelTitle(void)
|
||||||
{
|
{
|
||||||
if (!(mapheaderinfo[gamemap-1]->levelflags & LF_WARNINGTITLE))
|
#define SETPATCH(default, warning, custom, idx) \
|
||||||
{
|
{ \
|
||||||
lt_patches[0] = (patch_t *)W_CachePatchName("LTACTBLU", PU_HUDGFX);
|
lumpnum_t patlumpnum = LUMPERROR; \
|
||||||
lt_patches[1] = (patch_t *)W_CachePatchName("LTZIGZAG", PU_HUDGFX);
|
if (mapheaderinfo[gamemap-1]->custom[0] != '\0') \
|
||||||
lt_patches[2] = (patch_t *)W_CachePatchName("LTZZTEXT", PU_HUDGFX);
|
{ \
|
||||||
}
|
patlumpnum = W_CheckNumForName(mapheaderinfo[gamemap-1]->custom); \
|
||||||
else // boss map
|
if (patlumpnum != LUMPERROR) \
|
||||||
{
|
lt_patches[idx] = (patch_t *)W_CachePatchNum(patlumpnum, PU_HUDGFX); \
|
||||||
lt_patches[0] = (patch_t *)W_CachePatchName("LTACTRED", PU_HUDGFX);
|
} \
|
||||||
lt_patches[1] = (patch_t *)W_CachePatchName("LTZIGRED", PU_HUDGFX);
|
if (patlumpnum == LUMPERROR) \
|
||||||
lt_patches[2] = (patch_t *)W_CachePatchName("LTZZWARN", PU_HUDGFX);
|
{ \
|
||||||
|
if (!(mapheaderinfo[gamemap-1]->levelflags & LF_WARNINGTITLE)) \
|
||||||
|
lt_patches[idx] = (patch_t *)W_CachePatchName(default, PU_HUDGFX); \
|
||||||
|
else \
|
||||||
|
lt_patches[idx] = (patch_t *)W_CachePatchName(warning, PU_HUDGFX); \
|
||||||
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SETPATCH("LTACTBLU", "LTACTRED", ltactdiamond, 0)
|
||||||
|
SETPATCH("LTZIGZAG", "LTZIGRED", ltzzpatch, 1)
|
||||||
|
SETPATCH("LTZZTEXT", "LTZZWARN", ltzztext, 2)
|
||||||
|
|
||||||
|
#undef SETPATCH
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -3244,6 +3244,29 @@ Unoptimized version
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Taken from my videos-in-SRB2 project
|
||||||
|
// Generates a color look-up table
|
||||||
|
// which has up to 64 colors at each channel
|
||||||
|
// (see the defines in v_video.h)
|
||||||
|
|
||||||
|
UINT8 colorlookup[CLUTSIZE][CLUTSIZE][CLUTSIZE];
|
||||||
|
|
||||||
|
void InitColorLUT(RGBA_t *palette)
|
||||||
|
{
|
||||||
|
UINT8 r, g, b;
|
||||||
|
static boolean clutinit = false;
|
||||||
|
static RGBA_t *lastpalette = NULL;
|
||||||
|
if ((!clutinit) || (lastpalette != palette))
|
||||||
|
{
|
||||||
|
for (r = 0; r < CLUTSIZE; r++)
|
||||||
|
for (g = 0; g < CLUTSIZE; g++)
|
||||||
|
for (b = 0; b < CLUTSIZE; b++)
|
||||||
|
colorlookup[r][g][b] = NearestColor(r << SHIFTCOLORBITS, g << SHIFTCOLORBITS, b << SHIFTCOLORBITS);
|
||||||
|
clutinit = true;
|
||||||
|
lastpalette = palette;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// V_Init
|
// V_Init
|
||||||
// old software stuff, buffers are allocated at video mode setup
|
// old software stuff, buffers are allocated at video mode setup
|
||||||
// here we set the screens[x] pointers accordingly
|
// here we set the screens[x] pointers accordingly
|
||||||
|
@ -3255,13 +3278,9 @@ void V_Init(void)
|
||||||
const INT32 screensize = vid.rowbytes * vid.height;
|
const INT32 screensize = vid.rowbytes * vid.height;
|
||||||
|
|
||||||
LoadMapPalette();
|
LoadMapPalette();
|
||||||
// hardware modes do not use screens[] pointers
|
|
||||||
for (i = 0; i < NUMSCREENS; i++)
|
for (i = 0; i < NUMSCREENS; i++)
|
||||||
screens[i] = NULL;
|
screens[i] = NULL;
|
||||||
if (rendermode != render_soft)
|
|
||||||
{
|
|
||||||
return; // be sure to cause a NULL read/write error so we detect it, in case of..
|
|
||||||
}
|
|
||||||
|
|
||||||
// start address of NUMSCREENS * width*height vidbuffers
|
// start address of NUMSCREENS * width*height vidbuffers
|
||||||
if (base)
|
if (base)
|
||||||
|
|
|
@ -37,6 +37,18 @@ cv_allcaps;
|
||||||
// Allocates buffer screens, call before R_Init.
|
// Allocates buffer screens, call before R_Init.
|
||||||
void V_Init(void);
|
void V_Init(void);
|
||||||
|
|
||||||
|
// Taken from my videos-in-SRB2 project
|
||||||
|
// Generates a color look-up table
|
||||||
|
// which has up to 64 colors at each channel
|
||||||
|
|
||||||
|
#define COLORBITS 6
|
||||||
|
#define SHIFTCOLORBITS (8-COLORBITS)
|
||||||
|
#define CLUTSIZE (1<<COLORBITS)
|
||||||
|
|
||||||
|
extern UINT8 colorlookup[CLUTSIZE][CLUTSIZE][CLUTSIZE];
|
||||||
|
|
||||||
|
void InitColorLUT(RGBA_t *palette);
|
||||||
|
|
||||||
// Set the current RGB palette lookup to use for palettized graphics
|
// Set the current RGB palette lookup to use for palettized graphics
|
||||||
void V_SetPalette(INT32 palettenum);
|
void V_SetPalette(INT32 palettenum);
|
||||||
|
|
||||||
|
|
52
src/w_wad.c
52
src/w_wad.c
|
@ -11,6 +11,24 @@
|
||||||
/// \file w_wad.c
|
/// \file w_wad.c
|
||||||
/// \brief Handles WAD file header, directory, lump I/O
|
/// \brief Handles WAD file header, directory, lump I/O
|
||||||
|
|
||||||
|
#ifdef HAVE_ZLIB
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#ifndef _LARGEFILE64_SOURCE
|
||||||
|
#define _LARGEFILE64_SOURCE
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _LFS64_LARGEFILE
|
||||||
|
#define _LFS64_LARGEFILE
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef _FILE_OFFSET_BITS
|
||||||
|
#define _FILE_OFFSET_BITS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <zlib.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -22,22 +40,6 @@
|
||||||
#include "lzf.h"
|
#include "lzf.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _FILE_OFFSET_BITS
|
|
||||||
#define _FILE_OFFSET_BITS 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _LARGEFILE64_SOURCE
|
|
||||||
#define _LARGEFILE64_SOURCE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _LFS64_LARGEFILE
|
|
||||||
#define _LFS64_LARGEFILE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//#ifdef HAVE_ZLIB
|
|
||||||
#include "zlib.h"
|
|
||||||
//#endif // HAVE_ZLIB
|
|
||||||
|
|
||||||
#include "doomdef.h"
|
#include "doomdef.h"
|
||||||
#include "doomstat.h"
|
#include "doomstat.h"
|
||||||
#include "doomtype.h"
|
#include "doomtype.h"
|
||||||
|
@ -77,24 +79,6 @@ int snprintf(char *str, size_t n, const char *fmt, ...);
|
||||||
#define O_BINARY 0
|
#define O_BINARY 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_ZLIB
|
|
||||||
#ifndef _MSC_VER
|
|
||||||
#ifndef _LARGEFILE64_SOURCE
|
|
||||||
#define _LARGEFILE64_SOURCE
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _LFS64_LARGEFILE
|
|
||||||
#define _LFS64_LARGEFILE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef _FILE_OFFSET_BITS
|
|
||||||
#define _FILE_OFFSET_BITS 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "zlib.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue