mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-15 09:11:48 +00:00
Merge branch 'next' of https://git.magicalgirl.moe/STJr/SRB2.git into marathonmode
# Conflicts: # src/doomdef.h
This commit is contained in:
commit
2aa542d2bf
21 changed files with 122 additions and 71 deletions
|
@ -1690,7 +1690,7 @@ static void CL_LoadReceivedSavegame(void)
|
||||||
// load a base level
|
// load a base level
|
||||||
if (P_LoadNetGame())
|
if (P_LoadNetGame())
|
||||||
{
|
{
|
||||||
const INT32 actnum = mapheaderinfo[gamemap-1]->actnum;
|
const UINT8 actnum = mapheaderinfo[gamemap-1]->actnum;
|
||||||
CONS_Printf(M_GetText("Map is now \"%s"), G_BuildMapName(gamemap));
|
CONS_Printf(M_GetText("Map is now \"%s"), G_BuildMapName(gamemap));
|
||||||
if (strcmp(mapheaderinfo[gamemap-1]->lvlttl, ""))
|
if (strcmp(mapheaderinfo[gamemap-1]->lvlttl, ""))
|
||||||
{
|
{
|
||||||
|
|
|
@ -125,6 +125,9 @@ boolean advancedemo;
|
||||||
INT32 debugload = 0;
|
INT32 debugload = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
char savegamename[256];
|
||||||
|
char liveeventbackup[256];
|
||||||
|
|
||||||
char srb2home[256] = ".";
|
char srb2home[256] = ".";
|
||||||
char srb2path[256] = ".";
|
char srb2path[256] = ".";
|
||||||
boolean usehome = true;
|
boolean usehome = true;
|
||||||
|
|
|
@ -239,7 +239,8 @@ typedef enum
|
||||||
CR_MACESPIN,
|
CR_MACESPIN,
|
||||||
CR_MINECART,
|
CR_MINECART,
|
||||||
CR_ROLLOUT,
|
CR_ROLLOUT,
|
||||||
CR_PTERABYTE
|
CR_PTERABYTE,
|
||||||
|
CR_DUSTDEVIL
|
||||||
} carrytype_t; // pw_carry
|
} carrytype_t; // pw_carry
|
||||||
|
|
||||||
// Player powers. (don't edit this comment)
|
// Player powers. (don't edit this comment)
|
||||||
|
|
|
@ -1557,7 +1557,7 @@ static void readlevelheader(MYFILE *f, INT32 num)
|
||||||
}
|
}
|
||||||
else if (fastcmp(word, "ACT"))
|
else if (fastcmp(word, "ACT"))
|
||||||
{
|
{
|
||||||
if (i >= 0 && i < 20) // 0 for no act number, TTL1 through TTL19
|
if (i >= 0 && i <= 99) // 0 for no act number
|
||||||
mapheaderinfo[num-1]->actnum = (UINT8)i;
|
mapheaderinfo[num-1]->actnum = (UINT8)i;
|
||||||
else
|
else
|
||||||
deh_warning("Level header %d: invalid act number %d", num, i);
|
deh_warning("Level header %d: invalid act number %d", num, i);
|
||||||
|
@ -9521,6 +9521,7 @@ struct {
|
||||||
{"CR_MINECART",CR_MINECART},
|
{"CR_MINECART",CR_MINECART},
|
||||||
{"CR_ROLLOUT",CR_ROLLOUT},
|
{"CR_ROLLOUT",CR_ROLLOUT},
|
||||||
{"CR_PTERABYTE",CR_PTERABYTE},
|
{"CR_PTERABYTE",CR_PTERABYTE},
|
||||||
|
{"CR_DUSTDEVIL",CR_DUSTDEVIL},
|
||||||
|
|
||||||
// Ring weapons (ringweapons_t)
|
// Ring weapons (ringweapons_t)
|
||||||
// Useful for A_GiveWeapon
|
// Useful for A_GiveWeapon
|
||||||
|
|
|
@ -458,8 +458,8 @@ void CONS_Debug(INT32 debugflags, const char *fmt, ...) FUNCDEBUG;
|
||||||
|
|
||||||
// Things that used to be in dstrings.h
|
// Things that used to be in dstrings.h
|
||||||
#define SAVEGAMENAME "srb2sav"
|
#define SAVEGAMENAME "srb2sav"
|
||||||
char savegamename[256];
|
extern char savegamename[256];
|
||||||
char liveeventbackup[256];
|
extern char liveeventbackup[256];
|
||||||
|
|
||||||
// m_misc.h
|
// m_misc.h
|
||||||
#ifdef GETTEXT
|
#ifdef GETTEXT
|
||||||
|
|
|
@ -557,7 +557,7 @@ extern recorddata_t *mainrecords[NUMMAPS];
|
||||||
extern UINT8 mapvisited[NUMMAPS];
|
extern UINT8 mapvisited[NUMMAPS];
|
||||||
|
|
||||||
// Temporary holding place for nights data for the current map
|
// Temporary holding place for nights data for the current map
|
||||||
nightsdata_t ntemprecords;
|
extern nightsdata_t ntemprecords;
|
||||||
|
|
||||||
extern UINT32 token; ///< Number of tokens collected in a level
|
extern UINT32 token; ///< Number of tokens collected in a level
|
||||||
extern UINT32 tokenlist; ///< List of tokens collected
|
extern UINT32 tokenlist; ///< List of tokens collected
|
||||||
|
|
|
@ -4681,7 +4681,7 @@ char *G_BuildMapTitle(INT32 mapnum)
|
||||||
{
|
{
|
||||||
size_t len = 1;
|
size_t len = 1;
|
||||||
const char *zonetext = NULL;
|
const char *zonetext = NULL;
|
||||||
const INT32 actnum = mapheaderinfo[mapnum-1]->actnum;
|
const UINT8 actnum = mapheaderinfo[mapnum-1]->actnum;
|
||||||
|
|
||||||
len += strlen(mapheaderinfo[mapnum-1]->lvlttl);
|
len += strlen(mapheaderinfo[mapnum-1]->lvlttl);
|
||||||
if (!(mapheaderinfo[mapnum-1]->levelflags & LF_NOZONE))
|
if (!(mapheaderinfo[mapnum-1]->levelflags & LF_NOZONE))
|
||||||
|
|
|
@ -68,7 +68,7 @@ patch_t *nightsnum[10]; // 0-9
|
||||||
// Level title and credits fonts
|
// Level title and credits fonts
|
||||||
patch_t *lt_font[LT_FONTSIZE];
|
patch_t *lt_font[LT_FONTSIZE];
|
||||||
patch_t *cred_font[CRED_FONTSIZE];
|
patch_t *cred_font[CRED_FONTSIZE];
|
||||||
patch_t *ttlnum[20]; // act numbers (0-19)
|
patch_t *ttlnum[10]; // act numbers (0-9)
|
||||||
|
|
||||||
// Name tag fonts
|
// Name tag fonts
|
||||||
patch_t *ntb_font[NT_FONTSIZE];
|
patch_t *ntb_font[NT_FONTSIZE];
|
||||||
|
@ -243,7 +243,7 @@ void HU_LoadGraphics(void)
|
||||||
tallinfin = (patch_t *)W_CachePatchName("STTINFIN", PU_HUDGFX);
|
tallinfin = (patch_t *)W_CachePatchName("STTINFIN", PU_HUDGFX);
|
||||||
|
|
||||||
// cache act numbers for level titles
|
// cache act numbers for level titles
|
||||||
for (i = 0; i < 20; i++)
|
for (i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
sprintf(buffer, "TTL%.2d", i);
|
sprintf(buffer, "TTL%.2d", i);
|
||||||
ttlnum[i] = (patch_t *)W_CachePatchName(buffer, PU_HUDGFX);
|
ttlnum[i] = (patch_t *)W_CachePatchName(buffer, PU_HUDGFX);
|
||||||
|
|
|
@ -85,7 +85,7 @@ extern patch_t *lt_font[LT_FONTSIZE];
|
||||||
extern patch_t *cred_font[CRED_FONTSIZE];
|
extern patch_t *cred_font[CRED_FONTSIZE];
|
||||||
extern patch_t *ntb_font[NT_FONTSIZE];
|
extern patch_t *ntb_font[NT_FONTSIZE];
|
||||||
extern patch_t *nto_font[NT_FONTSIZE];
|
extern patch_t *nto_font[NT_FONTSIZE];
|
||||||
extern patch_t *ttlnum[20];
|
extern patch_t *ttlnum[10];
|
||||||
extern patch_t *emeraldpics[3][8];
|
extern patch_t *emeraldpics[3][8];
|
||||||
extern patch_t *rflagico;
|
extern patch_t *rflagico;
|
||||||
extern patch_t *bflagico;
|
extern patch_t *bflagico;
|
||||||
|
|
|
@ -490,29 +490,28 @@ 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;
|
||||||
|
|
||||||
|
//
|
||||||
|
// GIF_rgbconvert
|
||||||
|
// converts an RGB frame to a frame with a palette.
|
||||||
|
//
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
static void hwrconvert(void)
|
static void GIF_rgbconvert(UINT8 *linear, UINT8 *scr)
|
||||||
{
|
{
|
||||||
UINT8 *linear = HWR_GetScreenshot();
|
|
||||||
UINT8 *dest = screens[2];
|
|
||||||
UINT8 r, g, b;
|
UINT8 r, g, b;
|
||||||
INT32 x, y;
|
size_t src = 0, dest = 0;
|
||||||
size_t i = 0;
|
size_t size = (vid.width * vid.height * 3);
|
||||||
|
|
||||||
InitColorLUT(gif_framepalette);
|
InitColorLUT(gif_framepalette);
|
||||||
|
|
||||||
for (y = 0; y < vid.height; y++)
|
while (src < size)
|
||||||
{
|
{
|
||||||
for (x = 0; x < vid.width; x++, i += 3)
|
r = (UINT8)linear[src];
|
||||||
{
|
g = (UINT8)linear[src + 1];
|
||||||
r = (UINT8)linear[i];
|
b = (UINT8)linear[src + 2];
|
||||||
g = (UINT8)linear[i + 1];
|
scr[dest] = colorlookup[r >> SHIFTCOLORBITS][g >> SHIFTCOLORBITS][b >> SHIFTCOLORBITS];
|
||||||
b = (UINT8)linear[i + 2];
|
src += (3 * scrbuf_downscaleamt);
|
||||||
dest[(y * vid.width) + x] = colorlookup[r >> SHIFTCOLORBITS][g >> SHIFTCOLORBITS][b >> SHIFTCOLORBITS];
|
dest += scrbuf_downscaleamt;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free(linear);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -556,7 +555,11 @@ static void GIF_framewrite(void)
|
||||||
I_ReadScreen(movie_screen);
|
I_ReadScreen(movie_screen);
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
else if (rendermode == render_opengl)
|
else if (rendermode == render_opengl)
|
||||||
hwrconvert();
|
{
|
||||||
|
UINT8 *linear = HWR_GetScreenshot();
|
||||||
|
GIF_rgbconvert(linear, movie_screen);
|
||||||
|
free(linear);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -565,18 +568,20 @@ static void GIF_framewrite(void)
|
||||||
blitw = vid.width;
|
blitw = vid.width;
|
||||||
blith = vid.height;
|
blith = vid.height;
|
||||||
|
|
||||||
if (gif_frames == 0)
|
|
||||||
{
|
|
||||||
if (rendermode == render_soft)
|
|
||||||
I_ReadScreen(movie_screen);
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
else if (rendermode == render_opengl)
|
// Copy the current OpenGL frame into the base screen
|
||||||
{
|
if (rendermode == render_opengl)
|
||||||
hwrconvert();
|
{
|
||||||
VID_BlitLinearScreen(screens[2], screens[0], vid.width*vid.bpp, vid.height, vid.width*vid.bpp, vid.rowbytes);
|
UINT8 *linear = HWR_GetScreenshot();
|
||||||
}
|
GIF_rgbconvert(linear, screens[0]);
|
||||||
#endif
|
free(linear);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Copy the first frame into the movie screen
|
||||||
|
// OpenGL already does the same above.
|
||||||
|
if (gif_frames == 0 && rendermode == render_soft)
|
||||||
|
I_ReadScreen(movie_screen);
|
||||||
|
|
||||||
movie_screen = screens[0];
|
movie_screen = screens[0];
|
||||||
}
|
}
|
||||||
|
|
|
@ -5237,7 +5237,7 @@ static boolean M_PrepareLevelPlatter(INT32 gt, boolean nextmappick)
|
||||||
{
|
{
|
||||||
if (M_CanShowLevelOnPlatter(mapnum, gt))
|
if (M_CanShowLevelOnPlatter(mapnum, gt))
|
||||||
{
|
{
|
||||||
const INT32 actnum = mapheaderinfo[mapnum]->actnum;
|
const UINT8 actnum = mapheaderinfo[mapnum]->actnum;
|
||||||
const boolean headingisname = (fastcmp(mapheaderinfo[mapnum]->selectheading, mapheaderinfo[mapnum]->lvlttl));
|
const boolean headingisname = (fastcmp(mapheaderinfo[mapnum]->selectheading, mapheaderinfo[mapnum]->lvlttl));
|
||||||
const boolean wide = (mapheaderinfo[mapnum]->menuflags & LF2_WIDEICON);
|
const boolean wide = (mapheaderinfo[mapnum]->menuflags & LF2_WIDEICON);
|
||||||
|
|
||||||
|
|
|
@ -68,7 +68,7 @@ extern consvar_t cv_masterserver, cv_servername;
|
||||||
// < 0 to not connect (usually -1) (offline mode)
|
// < 0 to not connect (usually -1) (offline mode)
|
||||||
// == 0 to show all rooms, not a valid hosting room
|
// == 0 to show all rooms, not a valid hosting room
|
||||||
// anything else is whatever room the MS assigns to that number (online mode)
|
// anything else is whatever room the MS assigns to that number (online mode)
|
||||||
INT16 ms_RoomId;
|
extern INT16 ms_RoomId;
|
||||||
|
|
||||||
const char *GetMasterServerPort(void);
|
const char *GetMasterServerPort(void);
|
||||||
const char *GetMasterServerIP(void);
|
const char *GetMasterServerIP(void);
|
||||||
|
|
|
@ -13369,8 +13369,9 @@ static boolean PIT_DustDevilLaunch(mobj_t *thing)
|
||||||
P_ResetPlayer(player);
|
P_ResetPlayer(player);
|
||||||
A_PlayActiveSound(dustdevil);
|
A_PlayActiveSound(dustdevil);
|
||||||
}
|
}
|
||||||
|
player->powers[pw_carry] = CR_DUSTDEVIL;
|
||||||
player->powers[pw_nocontrol] = 2;
|
player->powers[pw_nocontrol] = 2;
|
||||||
player->drawangle += ANG20;
|
P_SetTarget(&thing->tracer, dustdevil);
|
||||||
P_SetPlayerMobjState(thing, S_PLAY_PAIN);
|
P_SetPlayerMobjState(thing, S_PLAY_PAIN);
|
||||||
|
|
||||||
if (dist > dragamount)
|
if (dist > dragamount)
|
||||||
|
@ -13390,7 +13391,9 @@ static boolean PIT_DustDevilLaunch(mobj_t *thing)
|
||||||
P_ResetPlayer(player);
|
P_ResetPlayer(player);
|
||||||
thing->z = dustdevil->z + dustdevil->height;
|
thing->z = dustdevil->z + dustdevil->height;
|
||||||
thrust = 20 * FRACUNIT;
|
thrust = 20 * FRACUNIT;
|
||||||
|
player->powers[pw_carry] = CR_NONE;
|
||||||
player->powers[pw_nocontrol] = 0;
|
player->powers[pw_nocontrol] = 0;
|
||||||
|
P_SetTarget(&thing->tracer, NULL);
|
||||||
S_StartSound(thing, sfx_wdjump);
|
S_StartSound(thing, sfx_wdjump);
|
||||||
P_SetPlayerMobjState(thing, S_PLAY_FALL);
|
P_SetPlayerMobjState(thing, S_PLAY_FALL);
|
||||||
}
|
}
|
||||||
|
|
16
src/p_user.c
16
src/p_user.c
|
@ -11918,6 +11918,9 @@ void P_PlayerThink(player_t *player)
|
||||||
factor = 4;
|
factor = 4;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case CR_DUSTDEVIL:
|
||||||
|
player->drawangle += ANG20;
|
||||||
|
break;
|
||||||
/* -- in case we wanted to have the camera freely movable during zoom tubes
|
/* -- in case we wanted to have the camera freely movable during zoom tubes
|
||||||
case CR_ZOOMTUBE:*/
|
case CR_ZOOMTUBE:*/
|
||||||
case CR_ROPEHANG:
|
case CR_ROPEHANG:
|
||||||
|
@ -12690,6 +12693,19 @@ void P_PlayerAfterThink(player_t *player)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case CR_DUSTDEVIL:
|
||||||
|
{
|
||||||
|
mobj_t *mo = player->mo, *dustdevil = player->mo->tracer;
|
||||||
|
|
||||||
|
if (abs(mo->x - dustdevil->x) > dustdevil->radius || abs(mo->y - dustdevil->y) > dustdevil->radius)
|
||||||
|
{
|
||||||
|
P_SetTarget(&player->mo->tracer, NULL);
|
||||||
|
player->powers[pw_carry] = CR_NONE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
case CR_ROLLOUT:
|
case CR_ROLLOUT:
|
||||||
{
|
{
|
||||||
mobj_t *mo = player->mo, *rock = player->mo->tracer;
|
mobj_t *mo = player->mo, *rock = player->mo->tracer;
|
||||||
|
|
|
@ -134,6 +134,7 @@ consvar_t cv_playmusicifunfocused = {"playmusicifunfocused", "No", CV_SAVE, CV_Y
|
||||||
consvar_t cv_playsoundsifunfocused = {"playsoundsifunfocused", "No", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_playsoundsifunfocused = {"playsoundsifunfocused", "No", CV_SAVE, CV_YesNo, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
#ifdef HAVE_OPENMPT
|
#ifdef HAVE_OPENMPT
|
||||||
|
openmpt_module *openmpt_mhandle = NULL;
|
||||||
static CV_PossibleValue_t interpolationfilter_cons_t[] = {{0, "Default"}, {1, "None"}, {2, "Linear"}, {4, "Cubic"}, {8, "Windowed sinc"}, {0, NULL}};
|
static CV_PossibleValue_t interpolationfilter_cons_t[] = {{0, "Default"}, {1, "None"}, {2, "Linear"}, {4, "Cubic"}, {8, "Windowed sinc"}, {0, NULL}};
|
||||||
consvar_t cv_modfilter = {"modfilter", "0", CV_SAVE|CV_CALL, interpolationfilter_cons_t, ModFilter_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_modfilter = {"modfilter", "0", CV_SAVE|CV_CALL, interpolationfilter_cons_t, ModFilter_OnChange, 0, NULL, NULL, 0, 0, NULL};
|
||||||
#endif
|
#endif
|
||||||
|
@ -1910,6 +1911,10 @@ UINT32 S_GetMusicPosition(void)
|
||||||
/// In this section: mazmazz doesn't know how to do dynamic arrays or struct pointers!
|
/// In this section: mazmazz doesn't know how to do dynamic arrays or struct pointers!
|
||||||
/// ------------------------
|
/// ------------------------
|
||||||
|
|
||||||
|
char music_stack_nextmusname[7];
|
||||||
|
boolean music_stack_noposition = false;
|
||||||
|
UINT32 music_stack_fadeout = 0;
|
||||||
|
UINT32 music_stack_fadein = 0;
|
||||||
static musicstack_t *music_stacks = NULL;
|
static musicstack_t *music_stacks = NULL;
|
||||||
static musicstack_t *last_music_stack = NULL;
|
static musicstack_t *last_music_stack = NULL;
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
|
|
||||||
#ifdef HAVE_OPENMPT
|
#ifdef HAVE_OPENMPT
|
||||||
#include "libopenmpt/libopenmpt.h"
|
#include "libopenmpt/libopenmpt.h"
|
||||||
openmpt_module *openmpt_mhandle;
|
extern openmpt_module *openmpt_mhandle;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// mask used to indicate sound origin is player item pickup
|
// mask used to indicate sound origin is player item pickup
|
||||||
|
@ -262,10 +262,10 @@ typedef struct musicstack_s
|
||||||
struct musicstack_s *next;
|
struct musicstack_s *next;
|
||||||
} musicstack_t;
|
} musicstack_t;
|
||||||
|
|
||||||
char music_stack_nextmusname[7];
|
extern char music_stack_nextmusname[7];
|
||||||
boolean music_stack_noposition;
|
extern boolean music_stack_noposition;
|
||||||
UINT32 music_stack_fadeout;
|
extern UINT32 music_stack_fadeout;
|
||||||
UINT32 music_stack_fadein;
|
extern UINT32 music_stack_fadein;
|
||||||
|
|
||||||
void S_SetStackAdjustmentStart(void);
|
void S_SetStackAdjustmentStart(void);
|
||||||
void S_AdjustMusicStackTics(void);
|
void S_AdjustMusicStackTics(void);
|
||||||
|
@ -333,7 +333,7 @@ void S_StopSoundByNum(sfxenum_t sfxnum);
|
||||||
#ifdef MUSICSLOT_COMPATIBILITY
|
#ifdef MUSICSLOT_COMPATIBILITY
|
||||||
// For compatibility with code/scripts relying on older versions
|
// For compatibility with code/scripts relying on older versions
|
||||||
// This is a list of all the "special" slot names and their associated numbers
|
// This is a list of all the "special" slot names and their associated numbers
|
||||||
const char *compat_special_music_slots[16];
|
extern const char *compat_special_music_slots[16];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -217,7 +217,6 @@ static void SDLSetMode(INT32 width, INT32 height, SDL_bool fullscreen, SDL_bool
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Impl_CreateWindow(fullscreen);
|
Impl_CreateWindow(fullscreen);
|
||||||
Impl_SetWindowIcon();
|
|
||||||
wasfullscreen = fullscreen;
|
wasfullscreen = fullscreen;
|
||||||
SDL_SetWindowSize(window, width, height);
|
SDL_SetWindowSize(window, width, height);
|
||||||
if (fullscreen)
|
if (fullscreen)
|
||||||
|
@ -1635,12 +1634,15 @@ static SDL_bool Impl_CreateWindow(SDL_bool fullscreen)
|
||||||
window = SDL_CreateWindow("SRB2 "VERSIONSTRING, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
|
window = SDL_CreateWindow("SRB2 "VERSIONSTRING, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
|
||||||
realwidth, realheight, flags);
|
realwidth, realheight, flags);
|
||||||
|
|
||||||
|
|
||||||
if (window == NULL)
|
if (window == NULL)
|
||||||
{
|
{
|
||||||
CONS_Printf(M_GetText("Couldn't create window: %s\n"), SDL_GetError());
|
CONS_Printf(M_GetText("Couldn't create window: %s\n"), SDL_GetError());
|
||||||
return SDL_FALSE;
|
return SDL_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Impl_SetWindowIcon();
|
||||||
|
|
||||||
return Impl_CreateContext();
|
return Impl_CreateContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1657,12 +1659,8 @@ static void Impl_SetWindowName(const char *title)
|
||||||
|
|
||||||
static void Impl_SetWindowIcon(void)
|
static void Impl_SetWindowIcon(void)
|
||||||
{
|
{
|
||||||
if (window == NULL || icoSurface == NULL)
|
if (window && icoSurface)
|
||||||
{
|
SDL_SetWindowIcon(window, icoSurface);
|
||||||
return;
|
|
||||||
}
|
|
||||||
//SDL2STUB(); // Monster Iestyn: why is this stubbed?
|
|
||||||
SDL_SetWindowIcon(window, icoSurface);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Impl_VideoSetupSDLBuffer(void)
|
static void Impl_VideoSetupSDLBuffer(void)
|
||||||
|
@ -1769,6 +1767,11 @@ void I_StartupGraphics(void)
|
||||||
VID_StartupOpenGL();
|
VID_StartupOpenGL();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Window icon
|
||||||
|
#ifdef HAVE_IMAGE
|
||||||
|
icoSurface = IMG_ReadXPMFromArray(SDL_icon_xpm);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Fury: we do window initialization after GL setup to allow
|
// Fury: we do window initialization after GL setup to allow
|
||||||
// SDL_GL_LoadLibrary to work well on Windows
|
// SDL_GL_LoadLibrary to work well on Windows
|
||||||
|
|
||||||
|
@ -1787,11 +1790,6 @@ void I_StartupGraphics(void)
|
||||||
#ifdef HAVE_TTF
|
#ifdef HAVE_TTF
|
||||||
I_ShutdownTTF();
|
I_ShutdownTTF();
|
||||||
#endif
|
#endif
|
||||||
// Window icon
|
|
||||||
#ifdef HAVE_IMAGE
|
|
||||||
icoSurface = IMG_ReadXPMFromArray(SDL_icon_xpm);
|
|
||||||
#endif
|
|
||||||
Impl_SetWindowIcon();
|
|
||||||
|
|
||||||
VID_SetMode(VID_GetModeForSize(BASEVIDWIDTH, BASEVIDHEIGHT));
|
VID_SetMode(VID_GetModeForSize(BASEVIDWIDTH, BASEVIDHEIGHT));
|
||||||
|
|
||||||
|
|
|
@ -1325,7 +1325,7 @@ void ST_drawTitleCard(void)
|
||||||
{
|
{
|
||||||
char *lvlttl = mapheaderinfo[gamemap-1]->lvlttl;
|
char *lvlttl = mapheaderinfo[gamemap-1]->lvlttl;
|
||||||
char *subttl = mapheaderinfo[gamemap-1]->subttl;
|
char *subttl = mapheaderinfo[gamemap-1]->subttl;
|
||||||
INT32 actnum = mapheaderinfo[gamemap-1]->actnum;
|
UINT8 actnum = mapheaderinfo[gamemap-1]->actnum;
|
||||||
INT32 lvlttlxpos, ttlnumxpos, zonexpos;
|
INT32 lvlttlxpos, ttlnumxpos, zonexpos;
|
||||||
INT32 subttlxpos = BASEVIDWIDTH/2;
|
INT32 subttlxpos = BASEVIDWIDTH/2;
|
||||||
INT32 ttlscroll = FixedInt(lt_scroll);
|
INT32 ttlscroll = FixedInt(lt_scroll);
|
||||||
|
@ -1382,7 +1382,12 @@ void ST_drawTitleCard(void)
|
||||||
if (actnum)
|
if (actnum)
|
||||||
{
|
{
|
||||||
if (!splitscreen)
|
if (!splitscreen)
|
||||||
V_DrawMappedPatch(ttlnumxpos + ttlscroll, 104 - ttlscroll, 0, actpat, colormap);
|
{
|
||||||
|
if (actnum > 9) // slightly offset the act diamond for two-digit act numbers
|
||||||
|
V_DrawMappedPatch(ttlnumxpos + (V_LevelActNumWidth(actnum)/4) + ttlscroll, 104 - ttlscroll, 0, actpat, colormap);
|
||||||
|
else
|
||||||
|
V_DrawMappedPatch(ttlnumxpos + ttlscroll, 104 - ttlscroll, 0, actpat, colormap);
|
||||||
|
}
|
||||||
V_DrawLevelActNum(ttlnumxpos + ttlscroll, 104, V_PERPLAYER, actnum);
|
V_DrawLevelActNum(ttlnumxpos + ttlscroll, 104, V_PERPLAYER, actnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2958,13 +2958,19 @@ void V_DrawPaddedTallNum(INT32 x, INT32 y, INT32 flags, INT32 num, INT32 digits)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw an act number for a level title
|
// Draw an act number for a level title
|
||||||
// Todo: actually draw two-digit numbers as two act num patches
|
void V_DrawLevelActNum(INT32 x, INT32 y, INT32 flags, UINT8 num)
|
||||||
void V_DrawLevelActNum(INT32 x, INT32 y, INT32 flags, INT32 num)
|
|
||||||
{
|
{
|
||||||
if (num < 0 || num > 19)
|
if (num > 99)
|
||||||
return; // not supported
|
return; // not supported
|
||||||
|
|
||||||
V_DrawScaledPatch(x, y, flags, ttlnum[num]);
|
while (num > 0)
|
||||||
|
{
|
||||||
|
if (num > 9) // if there are two digits, draw second digit first
|
||||||
|
V_DrawScaledPatch(x + (V_LevelActNumWidth(num) - V_LevelActNumWidth(num%10)), y, flags, ttlnum[num%10]);
|
||||||
|
else
|
||||||
|
V_DrawScaledPatch(x, y, flags, ttlnum[num]);
|
||||||
|
num = num/10;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write a string using the credit font
|
// Write a string using the credit font
|
||||||
|
@ -3345,13 +3351,21 @@ INT32 V_LevelNameHeight(const char *string)
|
||||||
}
|
}
|
||||||
|
|
||||||
// For ST_drawTitleCard
|
// For ST_drawTitleCard
|
||||||
// Returns the width of the act num patch
|
// Returns the width of the act num patch(es)
|
||||||
INT32 V_LevelActNumWidth(INT32 num)
|
INT16 V_LevelActNumWidth(UINT8 num)
|
||||||
{
|
{
|
||||||
if (num < 0 || num > 19)
|
INT16 result = 0;
|
||||||
return 0; // not a valid number
|
|
||||||
|
|
||||||
return SHORT(ttlnum[num]->width);
|
if (num == 0)
|
||||||
|
result = SHORT(ttlnum[num]->width);
|
||||||
|
|
||||||
|
while (num > 0 && num <= 99)
|
||||||
|
{
|
||||||
|
result = result + SHORT(ttlnum[num%10]->width);
|
||||||
|
num = num/10;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -238,12 +238,12 @@ void V_DrawRightAlignedSmallThinStringAtFixed(fixed_t x, fixed_t y, INT32 option
|
||||||
// Draw tall nums, used for menu, HUD, intermission
|
// Draw tall nums, used for menu, HUD, intermission
|
||||||
void V_DrawTallNum(INT32 x, INT32 y, INT32 flags, INT32 num);
|
void V_DrawTallNum(INT32 x, INT32 y, INT32 flags, INT32 num);
|
||||||
void V_DrawPaddedTallNum(INT32 x, INT32 y, INT32 flags, INT32 num, INT32 digits);
|
void V_DrawPaddedTallNum(INT32 x, INT32 y, INT32 flags, INT32 num, INT32 digits);
|
||||||
void V_DrawLevelActNum(INT32 x, INT32 y, INT32 flags, INT32 num);
|
void V_DrawLevelActNum(INT32 x, INT32 y, INT32 flags, UINT8 num);
|
||||||
|
|
||||||
// Find string width from lt_font chars
|
// Find string width from lt_font chars
|
||||||
INT32 V_LevelNameWidth(const char *string);
|
INT32 V_LevelNameWidth(const char *string);
|
||||||
INT32 V_LevelNameHeight(const char *string);
|
INT32 V_LevelNameHeight(const char *string);
|
||||||
INT32 V_LevelActNumWidth(INT32 num); // act number width
|
INT16 V_LevelActNumWidth(UINT8 num); // act number width
|
||||||
|
|
||||||
void V_DrawCreditString(fixed_t x, fixed_t y, INT32 option, const char *string);
|
void V_DrawCreditString(fixed_t x, fixed_t y, INT32 option, const char *string);
|
||||||
INT32 V_CreditStringWidth(const char *string);
|
INT32 V_CreditStringWidth(const char *string);
|
||||||
|
|
|
@ -73,7 +73,7 @@ typedef union
|
||||||
UINT32 score, total; // fake score, total
|
UINT32 score, total; // fake score, total
|
||||||
UINT32 tics; // time
|
UINT32 tics; // time
|
||||||
|
|
||||||
INT32 actnum; // act number being displayed
|
UINT8 actnum; // act number being displayed
|
||||||
patch_t *ptotal; // TOTAL
|
patch_t *ptotal; // TOTAL
|
||||||
UINT8 gotlife; // Number of extra lives obtained
|
UINT8 gotlife; // Number of extra lives obtained
|
||||||
} coop;
|
} coop;
|
||||||
|
|
Loading…
Reference in a new issue