mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-24 04:51:19 +00:00
- Added simulation of Strife's startup screen.
- Switched from a 14-pixel tall VGA font to a 16-pixel tall one for the Heretic loading screen (and ENDOOM). SVN r443 (trunk)
This commit is contained in:
parent
79a4bfbdf0
commit
6b1bf235fd
5 changed files with 305 additions and 34 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
January 6, 2007
|
||||||
|
- Added simulation of Strife's startup screen.
|
||||||
|
- Switched from a 14-pixel tall VGA font to a 16-pixel tall one for the
|
||||||
|
Heretic loading screen (and ENDOOM).
|
||||||
|
|
||||||
January 6, 2007 (Changes by Graf Zahl)
|
January 6, 2007 (Changes by Graf Zahl)
|
||||||
- Added ENDOOM screen. It will only be shown when the game is exited via the
|
- Added ENDOOM screen. It will only be shown when the game is exited via the
|
||||||
main menu and there is an option to switch it off for those who don't want
|
main menu and there is an option to switch it off for those who don't want
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
|
|
||||||
// MACROS ------------------------------------------------------------------
|
// MACROS ------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Hexen startup screen
|
||||||
#define ST_MAX_NOTCHES 32
|
#define ST_MAX_NOTCHES 32
|
||||||
#define ST_NOTCH_WIDTH 16
|
#define ST_NOTCH_WIDTH 16
|
||||||
#define ST_NOTCH_HEIGHT 23
|
#define ST_NOTCH_HEIGHT 23
|
||||||
|
@ -67,8 +68,7 @@
|
||||||
#define ST_NETNOTCH_HEIGHT 16
|
#define ST_NETNOTCH_HEIGHT 16
|
||||||
#define ST_MAX_NETNOTCHES 8
|
#define ST_MAX_NETNOTCHES 8
|
||||||
|
|
||||||
#define TEXT_FONT_HEIGHT 14
|
// Heretic startup screen
|
||||||
#define TEXT_FONT_NAME "vga-rom-font.14"
|
|
||||||
#define HERETIC_MINOR_VERSION '3' // Since we're based on Heretic 1.3
|
#define HERETIC_MINOR_VERSION '3' // Since we're based on Heretic 1.3
|
||||||
|
|
||||||
#define THERM_X 14
|
#define THERM_X 14
|
||||||
|
@ -76,26 +76,51 @@
|
||||||
#define THERM_LEN 51
|
#define THERM_LEN 51
|
||||||
#define THERM_COLOR 0xAA // light green
|
#define THERM_COLOR 0xAA // light green
|
||||||
|
|
||||||
|
// Strife startup screen
|
||||||
|
#define PEASANT_INDEX 0
|
||||||
|
#define LASER_INDEX 4
|
||||||
|
#define BOT_INDEX 6
|
||||||
|
|
||||||
|
#define ST_LASERSPACE_X 60
|
||||||
|
#define ST_LASERSPACE_Y 156
|
||||||
|
#define ST_LASERSPACE_WIDTH 200
|
||||||
|
#define ST_LASER_WIDTH 16
|
||||||
|
#define ST_LASER_HEIGHT 16
|
||||||
|
|
||||||
|
#define ST_BOT_X 14
|
||||||
|
#define ST_BOT_Y 138
|
||||||
|
#define ST_BOT_WIDTH 48
|
||||||
|
#define ST_BOT_HEIGHT 48
|
||||||
|
|
||||||
|
#define ST_PEASANT_X 262
|
||||||
|
#define ST_PEASANT_Y 136
|
||||||
|
#define ST_PEASANT_WIDTH 32
|
||||||
|
#define ST_PEASANT_HEIGHT 64
|
||||||
|
|
||||||
// Text mode color values
|
// Text mode color values
|
||||||
#define LO 85
|
#define LO 85
|
||||||
#define MD 170
|
#define MD 170
|
||||||
#define HI 255
|
#define HI 255
|
||||||
|
|
||||||
|
#define TEXT_FONT_NAME "vga-rom-font.16"
|
||||||
|
|
||||||
// TYPES -------------------------------------------------------------------
|
// TYPES -------------------------------------------------------------------
|
||||||
|
|
||||||
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
// EXTERNAL FUNCTION PROTOTYPES --------------------------------------------
|
||||||
|
|
||||||
void RestoreConView();
|
void RestoreConView();
|
||||||
|
|
||||||
bool ST_Util_CreateStartupWindow ();
|
bool ST_Util_CreateStartupWindow ();
|
||||||
void ST_Util_SizeWindowForBitmap ();
|
void ST_Util_SizeWindowForBitmap (int scale);
|
||||||
BITMAPINFO *ST_Util_CreateBitmap (int width, int height, int color_bits);
|
BITMAPINFO *ST_Util_CreateBitmap (int width, int height, int color_bits);
|
||||||
BYTE *ST_Util_BitsForBitmap (BITMAPINFO *bitmap_info);
|
BYTE *ST_Util_BitsForBitmap (BITMAPINFO *bitmap_info);
|
||||||
void ST_Util_FreeBitmap (BITMAPINFO *bitmap_info);
|
void ST_Util_FreeBitmap (BITMAPINFO *bitmap_info);
|
||||||
|
void ST_Util_BitmapColorsFromPlaypal (BITMAPINFO *bitmap_info);
|
||||||
void ST_Util_PlanarToChunky4 (BYTE *dest, const BYTE *src, int width, int height);
|
void ST_Util_PlanarToChunky4 (BYTE *dest, const BYTE *src, int width, int height);
|
||||||
void ST_Util_DrawBlock (BYTE *dest, const BYTE *src, int bytewidth, int height, int destpitch);
|
void ST_Util_DrawBlock (BITMAPINFO *bitmap_info, const BYTE *src, int x, int y, int bytewidth, int height);
|
||||||
void ST_Util_ClearBlock (BYTE *dest, BYTE fill, int bytewidth, int height, int destpitch);
|
void ST_Util_ClearBlock (BITMAPINFO *bitmap_info, BYTE fill, int x, int y, int bytewidth, int height);
|
||||||
void ST_Util_InvalidateRect (HWND hwnd, BITMAPINFO *bitmap_info, int left, int top, int right, int bottom);
|
void ST_Util_InvalidateRect (HWND hwnd, BITMAPINFO *bitmap_info, int left, int top, int right, int bottom);
|
||||||
BYTE *ST_Util_LoadFont (const char *filename, int height);
|
BYTE *ST_Util_LoadFont (const char *filename);
|
||||||
void ST_Util_FreeFont (BYTE *font);
|
void ST_Util_FreeFont (BYTE *font);
|
||||||
BITMAPINFO *ST_Util_AllocTextBitmap (const BYTE *font);
|
BITMAPINFO *ST_Util_AllocTextBitmap (const BYTE *font);
|
||||||
void ST_Util_DrawTextScreen (BITMAPINFO *bitmap_info, const BYTE *text_screen, const BYTE *font);
|
void ST_Util_DrawTextScreen (BITMAPINFO *bitmap_info, const BYTE *text_screen, const BYTE *font);
|
||||||
|
@ -123,6 +148,11 @@ static void ST_Hexen_Progress ();
|
||||||
static void ST_Heretic_Init ();
|
static void ST_Heretic_Init ();
|
||||||
static void ST_Heretic_Progress ();
|
static void ST_Heretic_Progress ();
|
||||||
|
|
||||||
|
static void ST_Strife_Init ();
|
||||||
|
static void ST_Strife_Done ();
|
||||||
|
static void ST_Strife_Progress ();
|
||||||
|
static void ST_Strife_DrawStuff (int old_laser, int new_laser);
|
||||||
|
|
||||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||||
|
|
||||||
extern HINSTANCE g_hInst;
|
extern HINSTANCE g_hInst;
|
||||||
|
@ -141,12 +171,28 @@ bool (*ST_NetLoop)(bool (*timer_callback)(void *), void *userdata);
|
||||||
|
|
||||||
BITMAPINFO *StartupBitmap;
|
BITMAPINFO *StartupBitmap;
|
||||||
|
|
||||||
|
CVAR(Bool, showendoom, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
||||||
|
|
||||||
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
// PRIVATE DATA DEFINITIONS ------------------------------------------------
|
||||||
|
|
||||||
static int MaxPos, CurPos, NotchPos;
|
static int MaxPos, CurPos, NotchPos;
|
||||||
static int NetMaxPos, NetCurPos;
|
static int NetMaxPos, NetCurPos;
|
||||||
static LRESULT NetMarqueeMode;
|
static LRESULT NetMarqueeMode;
|
||||||
static int ThermX, ThermY, ThermWidth, ThermHeight;
|
static int ThermX, ThermY, ThermWidth, ThermHeight;
|
||||||
|
static BYTE *StrifeStartupPics[4+2+1];
|
||||||
|
|
||||||
|
static const char *StrifeStartupPicNames[4+2+1] =
|
||||||
|
{
|
||||||
|
"STRTPA1", "STRTPB1", "STRTPC1", "STRTPD1",
|
||||||
|
"STRTLZ1", "STRTLZ2",
|
||||||
|
"STRTBOT"
|
||||||
|
};
|
||||||
|
static const int StrifeStartupPicSizes[4+2+1] =
|
||||||
|
{
|
||||||
|
2048, 2048, 2048, 2048,
|
||||||
|
256, 256,
|
||||||
|
2304
|
||||||
|
};
|
||||||
|
|
||||||
static const RGBQUAD TextModePalette[16] =
|
static const RGBQUAD TextModePalette[16] =
|
||||||
{
|
{
|
||||||
|
@ -243,6 +289,10 @@ void ST_Init(int maxProgress)
|
||||||
{
|
{
|
||||||
ST_Heretic_Init ();
|
ST_Heretic_Init ();
|
||||||
}
|
}
|
||||||
|
else if (gameinfo.gametype == GAME_Strife)
|
||||||
|
{
|
||||||
|
ST_Strife_Init ();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ST_Basic_Init ();
|
ST_Basic_Init ();
|
||||||
|
@ -581,7 +631,7 @@ static void ST_Hexen_Init ()
|
||||||
// of biPlanes in the BITMAPINFOHEADER.
|
// of biPlanes in the BITMAPINFOHEADER.
|
||||||
ST_Util_PlanarToChunky4 (ST_Util_BitsForBitmap(StartupBitmap), startup_screen + 48, 640, 480);
|
ST_Util_PlanarToChunky4 (ST_Util_BitsForBitmap(StartupBitmap), startup_screen + 48, 640, 480);
|
||||||
|
|
||||||
ST_Util_SizeWindowForBitmap ();
|
ST_Util_SizeWindowForBitmap (1);
|
||||||
LayoutMainWindow (Window, NULL);
|
LayoutMainWindow (Window, NULL);
|
||||||
InvalidateRect (StartupScreen, NULL, TRUE);
|
InvalidateRect (StartupScreen, NULL, TRUE);
|
||||||
|
|
||||||
|
@ -643,9 +693,7 @@ static void ST_Hexen_Progress()
|
||||||
{
|
{
|
||||||
x = ST_PROGRESS_X + ST_NOTCH_WIDTH * NotchPos;
|
x = ST_PROGRESS_X + ST_NOTCH_WIDTH * NotchPos;
|
||||||
y = ST_PROGRESS_Y;
|
y = ST_PROGRESS_Y;
|
||||||
ST_Util_DrawBlock (ST_Util_BitsForBitmap(StartupBitmap) + x / 2 + y * 320,
|
ST_Util_DrawBlock (StartupBitmap, NotchBits, x, y, ST_NOTCH_WIDTH / 2, ST_NOTCH_HEIGHT);
|
||||||
NotchBits, ST_NOTCH_WIDTH / 2, ST_NOTCH_HEIGHT, 320);
|
|
||||||
ST_Util_InvalidateRect (StartupScreen, StartupBitmap, x, y, x + ST_NOTCH_WIDTH, y + ST_NOTCH_HEIGHT);
|
|
||||||
}
|
}
|
||||||
S_Sound (CHAN_BODY, "StartupTick", 1, ATTN_NONE);
|
S_Sound (CHAN_BODY, "StartupTick", 1, ATTN_NONE);
|
||||||
}
|
}
|
||||||
|
@ -657,7 +705,7 @@ static void ST_Hexen_Progress()
|
||||||
//
|
//
|
||||||
// ST_Heretic_Init
|
// ST_Heretic_Init
|
||||||
//
|
//
|
||||||
// Shows the Hexen startup screen. If the screen doesn't appear to be
|
// Shows the Heretic startup screen. If the screen doesn't appear to be
|
||||||
// valid, it falls back to ST_Basic_Init.
|
// valid, it falls back to ST_Basic_Init.
|
||||||
//
|
//
|
||||||
// The loading screen is an 80x25 text screen with character data and
|
// The loading screen is an 80x25 text screen with character data and
|
||||||
|
@ -677,7 +725,7 @@ static void ST_Heretic_Init ()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
font = ST_Util_LoadFont (TEXT_FONT_NAME, TEXT_FONT_HEIGHT);
|
font = ST_Util_LoadFont (TEXT_FONT_NAME);
|
||||||
if (font == NULL)
|
if (font == NULL)
|
||||||
{
|
{
|
||||||
DestroyWindow (StartupScreen);
|
DestroyWindow (StartupScreen);
|
||||||
|
@ -695,17 +743,18 @@ static void ST_Heretic_Init ()
|
||||||
// Draw the loading screen to a bitmap.
|
// Draw the loading screen to a bitmap.
|
||||||
StartupBitmap = ST_Util_AllocTextBitmap (font);
|
StartupBitmap = ST_Util_AllocTextBitmap (font);
|
||||||
ST_Util_DrawTextScreen (StartupBitmap, loading_screen, font);
|
ST_Util_DrawTextScreen (StartupBitmap, loading_screen, font);
|
||||||
|
|
||||||
|
ThermX = THERM_X * 8;
|
||||||
|
ThermY = THERM_Y * font[0];
|
||||||
|
ThermWidth = THERM_LEN * 8 - 4;
|
||||||
|
ThermHeight = font[0];
|
||||||
|
|
||||||
ST_Util_FreeFont (font);
|
ST_Util_FreeFont (font);
|
||||||
|
|
||||||
ST_Util_SizeWindowForBitmap ();
|
ST_Util_SizeWindowForBitmap (1);
|
||||||
LayoutMainWindow (Window, NULL);
|
LayoutMainWindow (Window, NULL);
|
||||||
InvalidateRect (StartupScreen, NULL, TRUE);
|
InvalidateRect (StartupScreen, NULL, TRUE);
|
||||||
|
|
||||||
ThermX = THERM_X * 4;
|
|
||||||
ThermY = THERM_Y * TEXT_FONT_HEIGHT;
|
|
||||||
ThermWidth = THERM_LEN * 4;
|
|
||||||
ThermHeight = TEXT_FONT_HEIGHT;
|
|
||||||
|
|
||||||
ST_Done = ST_Hexen_Done;
|
ST_Done = ST_Hexen_Done;
|
||||||
ST_Progress = ST_Heretic_Progress;
|
ST_Progress = ST_Heretic_Progress;
|
||||||
ST_NetInit = ST_Basic_NetInit;
|
ST_NetInit = ST_Basic_NetInit;
|
||||||
|
@ -737,14 +786,178 @@ static void ST_Heretic_Progress()
|
||||||
int top = ThermY;
|
int top = ThermY;
|
||||||
int right = notch_pos + ThermX;
|
int right = notch_pos + ThermX;
|
||||||
int bottom = top + ThermHeight;
|
int bottom = top + ThermHeight;
|
||||||
ST_Util_ClearBlock (ST_Util_BitsForBitmap(StartupBitmap) + left + top * 320, THERM_COLOR, right - left, bottom - top, 320);
|
ST_Util_ClearBlock (StartupBitmap, THERM_COLOR, left, top, right - left, bottom - top);
|
||||||
ST_Util_InvalidateRect (StartupScreen, StartupBitmap, left*2, top, right*2, bottom);
|
|
||||||
NotchPos = notch_pos;
|
NotchPos = notch_pos;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
I_GetEvent ();
|
I_GetEvent ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// ST_Strife_Init
|
||||||
|
//
|
||||||
|
// Shows the Strife startup screen. If the screen doesn't appear to be
|
||||||
|
// valid, it falls back to ST_Basic_Init.
|
||||||
|
//
|
||||||
|
// The startup background is a raw 320x200 image, however Strife only
|
||||||
|
// actually uses 95 rows from it, starting at row 57. The rest of the image
|
||||||
|
// is discarded. (What a shame.)
|
||||||
|
//
|
||||||
|
// The peasants are raw 32x64 images. The laser dots are raw 16x16 images.
|
||||||
|
// The bot is a raw 48x48 image. All use the standard PLAYPAL.
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
static void ST_Strife_Init ()
|
||||||
|
{
|
||||||
|
int startup_lump = Wads.CheckNumForName ("STARTUP0");
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (startup_lump < 0 || Wads.LumpLength (startup_lump) != 64000 || !ST_Util_CreateStartupWindow())
|
||||||
|
{
|
||||||
|
ST_Basic_Init ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
StartupBitmap = ST_Util_CreateBitmap (320, 200, 8);
|
||||||
|
ST_Util_BitmapColorsFromPlaypal (StartupBitmap);
|
||||||
|
|
||||||
|
// Fill bitmap with the startup image.
|
||||||
|
memset (ST_Util_BitsForBitmap(StartupBitmap), 0xF0, 64000);
|
||||||
|
FWadLump lumpr = Wads.OpenLumpNum (startup_lump);
|
||||||
|
lumpr.Seek (57 * 320, SEEK_SET);
|
||||||
|
lumpr.Read (ST_Util_BitsForBitmap(StartupBitmap) + 41 * 320, 95 * 320);
|
||||||
|
|
||||||
|
// Load the animated overlays.
|
||||||
|
for (i = 0; i < 4+2+1; ++i)
|
||||||
|
{
|
||||||
|
int lumpnum = Wads.CheckNumForName (StrifeStartupPicNames[i]);
|
||||||
|
int lumplen;
|
||||||
|
|
||||||
|
if (lumpnum < 0 || (lumplen = Wads.LumpLength (lumpnum)) != StrifeStartupPicSizes[i])
|
||||||
|
{
|
||||||
|
StrifeStartupPics[i] = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FWadLump lumpr = Wads.OpenLumpNum (lumpnum);
|
||||||
|
StrifeStartupPics[i] = new BYTE[lumplen];
|
||||||
|
lumpr.Read (StrifeStartupPics[i], lumplen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make the startup image appear.
|
||||||
|
ST_Strife_DrawStuff (0, 0);
|
||||||
|
ST_Util_SizeWindowForBitmap (2);
|
||||||
|
LayoutMainWindow (Window, NULL);
|
||||||
|
InvalidateRect (StartupScreen, NULL, TRUE);
|
||||||
|
|
||||||
|
ST_Done = ST_Strife_Done;
|
||||||
|
ST_Progress = ST_Strife_Progress;
|
||||||
|
ST_NetInit = ST_Basic_NetInit;
|
||||||
|
ST_NetProgress = ST_Basic_NetProgress;
|
||||||
|
ST_NetMessage = ST_Basic_NetMessage;
|
||||||
|
ST_NetDone = ST_Basic_NetDone;
|
||||||
|
ST_NetLoop = ST_Basic_NetLoop;
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// ST_Strife_Done
|
||||||
|
//
|
||||||
|
// Called just before entering graphics mode to deconstruct the startup
|
||||||
|
// screen.
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
static void ST_Strife_Done()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 4+2+1; ++i)
|
||||||
|
{
|
||||||
|
if (StrifeStartupPics[i] != NULL)
|
||||||
|
{
|
||||||
|
delete[] StrifeStartupPics[i];
|
||||||
|
}
|
||||||
|
StrifeStartupPics[i] = NULL;
|
||||||
|
}
|
||||||
|
if (StartupScreen != NULL)
|
||||||
|
{
|
||||||
|
DestroyWindow (StartupScreen);
|
||||||
|
StartupScreen = NULL;
|
||||||
|
}
|
||||||
|
if (StartupBitmap != NULL)
|
||||||
|
{
|
||||||
|
ST_Util_FreeBitmap (StartupBitmap);
|
||||||
|
StartupBitmap = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// ST_Strife_Progress
|
||||||
|
//
|
||||||
|
// Bumps the progress meter one notch.
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
static void ST_Strife_Progress()
|
||||||
|
{
|
||||||
|
int notch_pos;
|
||||||
|
|
||||||
|
if (CurPos < MaxPos)
|
||||||
|
{
|
||||||
|
CurPos++;
|
||||||
|
notch_pos = (CurPos * (ST_LASERSPACE_WIDTH - ST_LASER_WIDTH)) / MaxPos;
|
||||||
|
if (notch_pos != NotchPos)
|
||||||
|
{ // Time to update.
|
||||||
|
ST_Strife_DrawStuff (NotchPos, notch_pos);
|
||||||
|
NotchPos = notch_pos;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
I_GetEvent ();
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// ST_Strife_DrawStuff
|
||||||
|
//
|
||||||
|
// Draws all the moving parts of Strife's startup screen. If you're
|
||||||
|
// running off a slow drive, it can look kind of good. Otherwise, it
|
||||||
|
// borders on crazy insane fast.
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
static void ST_Strife_DrawStuff (int old_laser, int new_laser)
|
||||||
|
{
|
||||||
|
int y;
|
||||||
|
|
||||||
|
// Clear old laser
|
||||||
|
ST_Util_ClearBlock (StartupBitmap, 0xF0, ST_LASERSPACE_X + old_laser,
|
||||||
|
ST_LASERSPACE_Y, ST_LASER_WIDTH, ST_LASER_HEIGHT);
|
||||||
|
// Draw new laser
|
||||||
|
ST_Util_DrawBlock (StartupBitmap, StrifeStartupPics[LASER_INDEX + (new_laser & 1)],
|
||||||
|
ST_LASERSPACE_X + new_laser, ST_LASERSPACE_Y, ST_LASER_WIDTH, ST_LASER_HEIGHT);
|
||||||
|
|
||||||
|
// The bot jumps up and down like crazy.
|
||||||
|
y = MAX(0, new_laser % 5 - 2);
|
||||||
|
if (y > 0)
|
||||||
|
{
|
||||||
|
ST_Util_ClearBlock (StartupBitmap, 0xF0, ST_BOT_X, ST_BOT_Y, ST_BOT_WIDTH, y);
|
||||||
|
}
|
||||||
|
ST_Util_DrawBlock (StartupBitmap, StrifeStartupPics[BOT_INDEX], ST_BOT_X, ST_BOT_Y + y, ST_BOT_WIDTH, ST_BOT_HEIGHT);
|
||||||
|
if (y < (5 - 1) - 2)
|
||||||
|
{
|
||||||
|
ST_Util_ClearBlock (StartupBitmap, 0xF0, ST_BOT_X, ST_BOT_Y + ST_BOT_HEIGHT + y, ST_BOT_WIDTH, 2 - y);
|
||||||
|
}
|
||||||
|
|
||||||
|
// The peasant desperately runs in place, trying to get away from the laser.
|
||||||
|
// Yet, despite all his limb flailing, he never manages to get anywhere.
|
||||||
|
ST_Util_DrawBlock (StartupBitmap, StrifeStartupPics[PEASANT_INDEX + (new_laser & 3)],
|
||||||
|
ST_PEASANT_X, ST_PEASANT_Y, ST_PEASANT_WIDTH, ST_PEASANT_HEIGHT);
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
|
@ -753,7 +966,6 @@ static void ST_Heretic_Progress()
|
||||||
// Shows an ENDOOM text screen
|
// Shows an ENDOOM text screen
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
CVAR(Bool, showendoom, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
|
|
||||||
|
|
||||||
void ST_Endoom()
|
void ST_Endoom()
|
||||||
{
|
{
|
||||||
|
@ -773,7 +985,7 @@ void ST_Endoom()
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
font = ST_Util_LoadFont (TEXT_FONT_NAME, TEXT_FONT_HEIGHT);
|
font = ST_Util_LoadFont (TEXT_FONT_NAME);
|
||||||
if (font == NULL)
|
if (font == NULL)
|
||||||
{
|
{
|
||||||
exit(0);
|
exit(0);
|
||||||
|
@ -797,7 +1009,7 @@ void ST_Endoom()
|
||||||
ST_Util_DrawTextScreen (StartupBitmap, endoom_screen, font);
|
ST_Util_DrawTextScreen (StartupBitmap, endoom_screen, font);
|
||||||
ST_Util_FreeFont (font);
|
ST_Util_FreeFont (font);
|
||||||
|
|
||||||
ST_Util_SizeWindowForBitmap ();
|
ST_Util_SizeWindowForBitmap (1);
|
||||||
LayoutMainWindow (Window, NULL);
|
LayoutMainWindow (Window, NULL);
|
||||||
InvalidateRect (StartupScreen, NULL, TRUE);
|
InvalidateRect (StartupScreen, NULL, TRUE);
|
||||||
|
|
||||||
|
@ -844,19 +1056,20 @@ bool ST_Util_CreateStartupWindow ()
|
||||||
//
|
//
|
||||||
// ST_Util_SizeWindowForBitmap
|
// ST_Util_SizeWindowForBitmap
|
||||||
//
|
//
|
||||||
// Resizes the main window so that the startup bitmap will be draw 1:1.
|
// Resizes the main window so that the startup bitmap will be drawn
|
||||||
|
// at the desired scale.
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void ST_Util_SizeWindowForBitmap ()
|
void ST_Util_SizeWindowForBitmap (int scale)
|
||||||
{
|
{
|
||||||
DEVMODE displaysettings;
|
DEVMODE displaysettings;
|
||||||
int w, h, cx, cy, x, y;
|
int w, h, cx, cy, x, y;
|
||||||
RECT rect;
|
RECT rect;
|
||||||
|
|
||||||
GetClientRect (GameTitleWindow, &rect);
|
GetClientRect (GameTitleWindow, &rect);
|
||||||
w = StartupBitmap->bmiHeader.biWidth + GetSystemMetrics (SM_CXSIZEFRAME)*2;
|
w = StartupBitmap->bmiHeader.biWidth * scale + GetSystemMetrics (SM_CXSIZEFRAME)*2;
|
||||||
h = StartupBitmap->bmiHeader.biHeight + rect.bottom
|
h = StartupBitmap->bmiHeader.biHeight * scale + rect.bottom
|
||||||
+ GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYCAPTION);
|
+ GetSystemMetrics (SM_CYSIZEFRAME) * 2 + GetSystemMetrics (SM_CYCAPTION);
|
||||||
|
|
||||||
// Resize the window, but keep its center point the same, unless that
|
// Resize the window, but keep its center point the same, unless that
|
||||||
|
@ -938,8 +1151,14 @@ void ST_Util_PlanarToChunky4 (BYTE *dest, const BYTE *src, int width, int height
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void ST_Util_DrawBlock (BYTE *dest, const BYTE *src, int bytewidth, int height, int destpitch)
|
void ST_Util_DrawBlock (BITMAPINFO *bitmap_info, const BYTE *src, int x, int y, int bytewidth, int height)
|
||||||
{
|
{
|
||||||
|
int pitchshift = int(bitmap_info->bmiHeader.biBitCount == 4);
|
||||||
|
int destpitch = bitmap_info->bmiHeader.biWidth >> pitchshift;
|
||||||
|
BYTE *dest = ST_Util_BitsForBitmap(bitmap_info) + (x >> pitchshift) + y * destpitch;
|
||||||
|
|
||||||
|
ST_Util_InvalidateRect (StartupScreen, bitmap_info, x, y, x + (bytewidth << pitchshift), y + height);
|
||||||
|
|
||||||
if (bytewidth == 8)
|
if (bytewidth == 8)
|
||||||
{ // progress notches
|
{ // progress notches
|
||||||
for (; height > 0; --height)
|
for (; height > 0; --height)
|
||||||
|
@ -959,6 +1178,15 @@ void ST_Util_DrawBlock (BYTE *dest, const BYTE *src, int bytewidth, int height,
|
||||||
src += 2;
|
src += 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (; height > 0; --height)
|
||||||
|
{
|
||||||
|
memcpy (dest, src, bytewidth);
|
||||||
|
dest += destpitch;
|
||||||
|
src += bytewidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -967,8 +1195,14 @@ void ST_Util_DrawBlock (BYTE *dest, const BYTE *src, int bytewidth, int height,
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void ST_Util_ClearBlock (BYTE *dest, BYTE fill, int bytewidth, int height, int destpitch)
|
void ST_Util_ClearBlock (BITMAPINFO *bitmap_info, BYTE fill, int x, int y, int bytewidth, int height)
|
||||||
{
|
{
|
||||||
|
int pitchshift = int(bitmap_info->bmiHeader.biBitCount == 4);
|
||||||
|
int destpitch = bitmap_info->bmiHeader.biWidth >> pitchshift;
|
||||||
|
BYTE *dest = ST_Util_BitsForBitmap(bitmap_info) + (x >> pitchshift) + y * destpitch;
|
||||||
|
|
||||||
|
ST_Util_InvalidateRect (StartupScreen, bitmap_info, x, y, x + (bytewidth << pitchshift), y + height);
|
||||||
|
|
||||||
while (height > 0)
|
while (height > 0)
|
||||||
{
|
{
|
||||||
memset (dest, fill, bytewidth);
|
memset (dest, fill, bytewidth);
|
||||||
|
@ -1039,6 +1273,32 @@ void ST_Util_FreeBitmap (BITMAPINFO *bitmap_info)
|
||||||
free (bitmap_info);
|
free (bitmap_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// ST_Util_BitmapColorsFromPlaypal
|
||||||
|
//
|
||||||
|
// Fills the bitmap palette from the PLAYPAL lump.
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
void ST_Util_BitmapColorsFromPlaypal (BITMAPINFO *bitmap_info)
|
||||||
|
{
|
||||||
|
BYTE playpal[768];
|
||||||
|
int i;
|
||||||
|
|
||||||
|
{
|
||||||
|
FWadLump lumpr = Wads.OpenLumpName ("PLAYPAL");
|
||||||
|
lumpr.Read (playpal, 768);
|
||||||
|
}
|
||||||
|
for (i = 0; i < 256; ++i)
|
||||||
|
{
|
||||||
|
bitmap_info->bmiColors[i].rgbBlue = playpal[i*3+2];
|
||||||
|
bitmap_info->bmiColors[i].rgbGreen = playpal[i*3+1];
|
||||||
|
bitmap_info->bmiColors[i].rgbRed = playpal[i*3];
|
||||||
|
bitmap_info->bmiColors[i].rgbReserved = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// ST_Util_InvalidateRect
|
// ST_Util_InvalidateRect
|
||||||
|
@ -1065,13 +1325,14 @@ void ST_Util_InvalidateRect (HWND hwnd, BITMAPINFO *bitmap_info, int left, int t
|
||||||
// ST_Util_LoadFont
|
// ST_Util_LoadFont
|
||||||
//
|
//
|
||||||
// Loads a monochrome fixed-width font. Every character is one byte
|
// Loads a monochrome fixed-width font. Every character is one byte
|
||||||
// (eight pixels) wide.
|
// (eight pixels) wide, so we can deduce the height of each character
|
||||||
|
// by looking at the size of the font data.
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
BYTE *ST_Util_LoadFont (const char *filename, int height)
|
BYTE *ST_Util_LoadFont (const char *filename)
|
||||||
{
|
{
|
||||||
int lumpnum, lumplen;
|
int lumpnum, lumplen, height;
|
||||||
BYTE *font;
|
BYTE *font;
|
||||||
|
|
||||||
lumpnum = Wads.CheckNumForFullName (filename);
|
lumpnum = Wads.CheckNumForFullName (filename);
|
||||||
|
@ -1080,10 +1341,15 @@ BYTE *ST_Util_LoadFont (const char *filename, int height)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
lumplen = Wads.LumpLength (lumpnum);
|
lumplen = Wads.LumpLength (lumpnum);
|
||||||
if (lumplen != height << 8)
|
height = lumplen / 256;
|
||||||
|
if (height * 256 != lumplen)
|
||||||
{ // font is a bad size
|
{ // font is a bad size
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (height < 6 || height > 36)
|
||||||
|
{ // let's be reasonable here
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
font = new BYTE[lumplen + 1];
|
font = new BYTE[lumplen + 1];
|
||||||
font[0] = height; // Store font height in the first byte.
|
font[0] = height; // Store font height in the first byte.
|
||||||
Wads.ReadLump (lumpnum, font + 1);
|
Wads.ReadLump (lumpnum, font + 1);
|
||||||
|
|
Binary file not shown.
BIN
wadsrc/vga-rom.f16
Normal file
BIN
wadsrc/vga-rom.f16
Normal file
Binary file not shown.
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
@zdoom.pk3
|
@zdoom.pk3
|
||||||
|
|
||||||
vga-rom-font.14 vga-rom.f14
|
vga-rom-font.16 vga-rom.f16
|
||||||
|
|
||||||
graphics/invgemr2.lmp invgemr2.lmp
|
graphics/invgemr2.lmp invgemr2.lmp
|
||||||
graphics/invgemr1.lmp invgemr1.lmp
|
graphics/invgemr1.lmp invgemr1.lmp
|
||||||
|
|
Loading…
Reference in a new issue