mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-02-26 13:51:09 +00:00
- Fixed: SECSPAC_EyesSurface and SECSPAC_EyesDive did not trigger due to
crouching motion. - Fixed: The keypress for nightmare mode verification appeared in the console if the fullscreen console was open while using the menu. - Added support for scaling down large console fonts in the customize controls menu. - Fixed: Joining a negative team was possible. SVN r590 (trunk)
This commit is contained in:
parent
1225071f78
commit
6a00173a12
9 changed files with 95 additions and 28 deletions
|
@ -1,4 +1,11 @@
|
||||||
December 8, 2007
|
December 8, 2007
|
||||||
|
- Fixed: SECSPAC_EyesSurface and SECSPAC_EyesDive did not trigger due to
|
||||||
|
crouching motion.
|
||||||
|
- Fixed: The keypress for nightmare mode verification appeared in the console
|
||||||
|
if the fullscreen console was open while using the menu.
|
||||||
|
- Added support for scaling down large console fonts in the customize
|
||||||
|
controls menu.
|
||||||
|
- Fixed: Joining a negative team was possible.
|
||||||
- Fixed: Skill level confirmation only worked with Doom. Also fixed parsing
|
- Fixed: Skill level confirmation only worked with Doom. Also fixed parsing
|
||||||
of MustConfirm: It looked for TK_String when it should have used TK_StringConst.
|
of MustConfirm: It looked for TK_String when it should have used TK_StringConst.
|
||||||
- Fixed: When travelling to a new non-hub map, any items being carried with
|
- Fixed: When travelling to a new non-hub map, any items being carried with
|
||||||
|
|
|
@ -250,6 +250,10 @@ static void UpdateTeam (int pnum, int team, bool update)
|
||||||
userinfo_t *info = &players[pnum].userinfo;
|
userinfo_t *info = &players[pnum].userinfo;
|
||||||
int oldteam;
|
int oldteam;
|
||||||
|
|
||||||
|
if (team < 0)
|
||||||
|
{
|
||||||
|
team = TEAM_None;
|
||||||
|
}
|
||||||
oldteam = info->team;
|
oldteam = info->team;
|
||||||
info->team = team;
|
info->team = team;
|
||||||
|
|
||||||
|
|
|
@ -1733,7 +1733,7 @@ void M_VerifyNightmare (int ch)
|
||||||
{
|
{
|
||||||
gamestate = GS_HIDECONSOLE;
|
gamestate = GS_HIDECONSOLE;
|
||||||
gameaction = ga_newgame;
|
gameaction = ga_newgame;
|
||||||
}
|
}
|
||||||
M_ClearMenus ();
|
M_ClearMenus ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2716,6 +2716,10 @@ bool M_Responder (event_t *ev)
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (ev->subtype == EV_GUI_Char && messageToPrint && messageNeedsInput)
|
||||||
|
{
|
||||||
|
ch = ev->data1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (OptionsActive && !chatmodeon)
|
if (OptionsActive && !chatmodeon)
|
||||||
|
@ -2763,10 +2767,23 @@ bool M_Responder (event_t *ev)
|
||||||
if (messageToPrint)
|
if (messageToPrint)
|
||||||
{
|
{
|
||||||
ch = tolower (ch);
|
ch = tolower (ch);
|
||||||
if (messageNeedsInput &&
|
if (messageNeedsInput)
|
||||||
ch != ' ' && ch != 'n' && ch != 'y' && ch != GK_ESCAPE)
|
|
||||||
{
|
{
|
||||||
return false;
|
// For each printable keystroke, both EV_GUI_KeyDown and
|
||||||
|
// EV_GUI_Char will be generated, in that order. If we close
|
||||||
|
// the menu after the first event arrives and the fullscreen
|
||||||
|
// console is up, the console will get the EV_GUI_Char event
|
||||||
|
// next. Therefore, the message input should only respond to
|
||||||
|
// EV_GUI_Char events (sans Escape, which only generates
|
||||||
|
// EV_GUI_KeyDown.)
|
||||||
|
if (ev->subtype != EV_GUI_Char && ch != GK_ESCAPE)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (ch != ' ' && ch != 'n' && ch != 'y' && ch != GK_ESCAPE)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
menuactive = messageLastMenuActive;
|
menuactive = messageLastMenuActive;
|
||||||
|
|
|
@ -1358,6 +1358,22 @@ CCMD (sizeup)
|
||||||
S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE);
|
S_Sound (CHAN_VOICE, "menu/change", 1, ATTN_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Draws a string in the console font, scaled to the 8x8 cells
|
||||||
|
// used by the default console font.
|
||||||
|
static void M_DrawConText (int color, int x, int y, const char *str)
|
||||||
|
{
|
||||||
|
int len = (int)strlen(str);
|
||||||
|
|
||||||
|
screen->SetFont (ConFont);
|
||||||
|
x = (x - 160) * CleanXfac + screen->GetWidth() / 2;
|
||||||
|
y = (y - 100) * CleanYfac + screen->GetHeight() / 2;
|
||||||
|
screen->DrawText (color, x, y, str,
|
||||||
|
DTA_CellX, 8 * CleanXfac,
|
||||||
|
DTA_CellY, 8 * CleanYfac,
|
||||||
|
TAG_DONE);
|
||||||
|
screen->SetFont (SmallFont);
|
||||||
|
}
|
||||||
|
|
||||||
void M_BuildKeyList (menuitem_t *item, int numitems)
|
void M_BuildKeyList (menuitem_t *item, int numitems)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -1426,10 +1442,8 @@ void M_DrawSlider (int x, int y, float min, float max, float cur)
|
||||||
|
|
||||||
cur -= min;
|
cur -= min;
|
||||||
|
|
||||||
screen->SetFont (ConFont);
|
M_DrawConText(CR_WHITE, x, y, "\x10\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x12");
|
||||||
screen->DrawText (CR_WHITE, x, y, "\x10\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x12", DTA_Clean, true, TAG_DONE);
|
M_DrawConText(CR_ORANGE, x + 5 + (int)((cur * 78.f) / range), y, "\x13");
|
||||||
screen->DrawText (CR_ORANGE, x + 5 + (int)((cur * 78.f) / range), y, "\x13", DTA_Clean, true, TAG_DONE);
|
|
||||||
screen->SetFont (SmallFont);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int M_FindCurVal (float cur, value_t *values, int numvals)
|
int M_FindCurVal (float cur, value_t *values, int numvals)
|
||||||
|
@ -1676,10 +1690,7 @@ void M_OptDrawer ()
|
||||||
char description[64];
|
char description[64];
|
||||||
|
|
||||||
C_NameKeys (description, item->b.key1, item->c.key2);
|
C_NameKeys (description, item->b.key1, item->c.key2);
|
||||||
screen->SetFont (ConFont);
|
M_DrawConText(CR_WHITE, CurrentMenu->indent + 14, y-1+labelofs, description);
|
||||||
screen->DrawText (CR_WHITE,
|
|
||||||
CurrentMenu->indent + 14, y-1+labelofs, description, DTA_Clean, true, TAG_DONE);
|
|
||||||
screen->SetFont (SmallFont);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1768,10 +1779,7 @@ void M_OptDrawer ()
|
||||||
i == CurrentItem &&
|
i == CurrentItem &&
|
||||||
(skullAnimCounter < 6 || menuactive == MENU_WaitKey))
|
(skullAnimCounter < 6 || menuactive == MENU_WaitKey))
|
||||||
{
|
{
|
||||||
screen->SetFont (ConFont);
|
M_DrawConText(CR_RED, CurrentMenu->indent + 3, y-1+labelofs, "\xd");
|
||||||
screen->DrawText (CR_RED, CurrentMenu->indent + 3, y-1+labelofs, "\xd",
|
|
||||||
DTA_Clean, true, TAG_DONE);
|
|
||||||
screen->SetFont (SmallFont);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -1799,10 +1807,7 @@ void M_OptDrawer ()
|
||||||
|
|
||||||
if (i == CurrentItem && ((item->a.selmode != -1 && (skullAnimCounter < 6 || menuactive == MENU_WaitKey)) || testingmode))
|
if (i == CurrentItem && ((item->a.selmode != -1 && (skullAnimCounter < 6 || menuactive == MENU_WaitKey)) || testingmode))
|
||||||
{
|
{
|
||||||
screen->SetFont (ConFont);
|
M_DrawConText(CR_RED, item->a.selmode * 104 + 8, y-1 + labelofs, "\xd");
|
||||||
screen->DrawText (CR_RED, item->a.selmode * 104 + 8, y-1 + labelofs, "\xd",
|
|
||||||
DTA_Clean, true, TAG_DONE);
|
|
||||||
screen->SetFont (SmallFont);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1811,16 +1816,14 @@ void M_OptDrawer ()
|
||||||
CanScrollDown = (i < CurrentMenu->numitems);
|
CanScrollDown = (i < CurrentMenu->numitems);
|
||||||
VisBottom = i - 1;
|
VisBottom = i - 1;
|
||||||
|
|
||||||
screen->SetFont (ConFont);
|
|
||||||
if (CanScrollUp)
|
if (CanScrollUp)
|
||||||
{
|
{
|
||||||
screen->DrawText (CR_ORANGE, 3, ytop + labelofs, "\x1a", DTA_Clean, true, TAG_DONE);
|
M_DrawConText(CR_ORANGE, 3, ytop + labelofs, "\x1a");
|
||||||
}
|
}
|
||||||
if (CanScrollDown)
|
if (CanScrollDown)
|
||||||
{
|
{
|
||||||
screen->DrawText (CR_ORANGE, 3, y - 8 + labelofs, "\x1b", DTA_Clean, true, TAG_DONE);
|
M_DrawConText(CR_ORANGE, 3, y - 8 + labelofs, "\x1b");
|
||||||
}
|
}
|
||||||
screen->SetFont (SmallFont);
|
|
||||||
|
|
||||||
if (flagsvar)
|
if (flagsvar)
|
||||||
{
|
{
|
||||||
|
|
|
@ -117,7 +117,7 @@ AActor *P_SpawnPlayerMissile (AActor* source, const PClass *type);
|
||||||
AActor *P_SpawnPlayerMissile (AActor *source, const PClass *type, angle_t angle);
|
AActor *P_SpawnPlayerMissile (AActor *source, const PClass *type, angle_t angle);
|
||||||
AActor *P_SpawnPlayerMissile (AActor *source, fixed_t x, fixed_t y, fixed_t z, const PClass *type, angle_t angle);
|
AActor *P_SpawnPlayerMissile (AActor *source, fixed_t x, fixed_t y, fixed_t z, const PClass *type, angle_t angle);
|
||||||
|
|
||||||
void P_CheckFakeFloorTriggers (AActor *mo, fixed_t oldz);
|
void P_CheckFakeFloorTriggers (AActor *mo, fixed_t oldz, bool oldz_has_viewheight=false);
|
||||||
|
|
||||||
//
|
//
|
||||||
// [RH] P_THINGS
|
// [RH] P_THINGS
|
||||||
|
|
|
@ -2058,7 +2058,7 @@ void P_ZMovement (AActor *mo)
|
||||||
P_CheckFakeFloorTriggers (mo, oldz);
|
P_CheckFakeFloorTriggers (mo, oldz);
|
||||||
}
|
}
|
||||||
|
|
||||||
void P_CheckFakeFloorTriggers (AActor *mo, fixed_t oldz)
|
void P_CheckFakeFloorTriggers (AActor *mo, fixed_t oldz, bool oldz_has_viewheight)
|
||||||
{
|
{
|
||||||
if (mo->player && (mo->player->cheats & CF_PREDICTING))
|
if (mo->player && (mo->player->cheats & CF_PREDICTING))
|
||||||
{
|
{
|
||||||
|
@ -2092,7 +2092,10 @@ void P_CheckFakeFloorTriggers (AActor *mo, fixed_t oldz)
|
||||||
}
|
}
|
||||||
|
|
||||||
newz = mo->z + viewheight;
|
newz = mo->z + viewheight;
|
||||||
oldz += viewheight;
|
if (!oldz_has_viewheight)
|
||||||
|
{
|
||||||
|
oldz += viewheight;
|
||||||
|
}
|
||||||
|
|
||||||
if (oldz <= waterz && newz > waterz)
|
if (oldz <= waterz && newz > waterz)
|
||||||
{ // View went above fake floor
|
{ // View went above fake floor
|
||||||
|
|
|
@ -1833,6 +1833,7 @@ void P_CrouchMove(player_t * player, int direction)
|
||||||
fixed_t defaultheight = player->mo->GetDefault()->height;
|
fixed_t defaultheight = player->mo->GetDefault()->height;
|
||||||
fixed_t savedheight = player->mo->height;
|
fixed_t savedheight = player->mo->height;
|
||||||
fixed_t crouchspeed = direction * CROUCHSPEED;
|
fixed_t crouchspeed = direction * CROUCHSPEED;
|
||||||
|
fixed_t oldheight = player->viewheight;
|
||||||
|
|
||||||
player->crouchdir = (signed char) direction;
|
player->crouchdir = (signed char) direction;
|
||||||
player->crouchfactor += crouchspeed;
|
player->crouchfactor += crouchspeed;
|
||||||
|
@ -1854,6 +1855,9 @@ void P_CrouchMove(player_t * player, int direction)
|
||||||
player->crouchfactor = clamp<fixed_t>(player->crouchfactor, FRACUNIT/2, FRACUNIT);
|
player->crouchfactor = clamp<fixed_t>(player->crouchfactor, FRACUNIT/2, FRACUNIT);
|
||||||
player->viewheight = FixedMul(player->mo->ViewHeight, player->crouchfactor);
|
player->viewheight = FixedMul(player->mo->ViewHeight, player->crouchfactor);
|
||||||
player->crouchviewdelta = player->viewheight - player->mo->ViewHeight;
|
player->crouchviewdelta = player->viewheight - player->mo->ViewHeight;
|
||||||
|
|
||||||
|
// Check for eyes going above/below fake floor due to crouching motion.
|
||||||
|
P_CheckFakeFloorTriggers(player->mo, player->mo->z + oldheight, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
|
|
@ -98,6 +98,7 @@ void STACK_ARGS DCanvas::DrawText (int normalcolor, int x, int y, const char *st
|
||||||
int boldcolor;
|
int boldcolor;
|
||||||
const BYTE *range;
|
const BYTE *range;
|
||||||
int height;
|
int height;
|
||||||
|
int forcedwidth = 0;
|
||||||
int scalex, scaley;
|
int scalex, scaley;
|
||||||
int kerning;
|
int kerning;
|
||||||
FTexture *pic;
|
FTexture *pic;
|
||||||
|
@ -147,12 +148,14 @@ void STACK_ARGS DCanvas::DrawText (int normalcolor, int x, int y, const char *st
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// We don't handle these. :(
|
||||||
case DTA_DestWidth:
|
case DTA_DestWidth:
|
||||||
case DTA_DestHeight:
|
case DTA_DestHeight:
|
||||||
*(DWORD *)tags = TAG_IGNORE;
|
*(DWORD *)tags = TAG_IGNORE;
|
||||||
data = va_arg (tags, DWORD);
|
data = va_arg (tags, DWORD);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// Translation is specified explicitly by the text.
|
||||||
case DTA_Translation:
|
case DTA_Translation:
|
||||||
*(DWORD *)tags = TAG_IGNORE;
|
*(DWORD *)tags = TAG_IGNORE;
|
||||||
ptrval = va_arg (tags, void*);
|
ptrval = va_arg (tags, void*);
|
||||||
|
@ -186,6 +189,14 @@ void STACK_ARGS DCanvas::DrawText (int normalcolor, int x, int y, const char *st
|
||||||
case DTA_TextLen:
|
case DTA_TextLen:
|
||||||
maxstrlen = va_arg (tags, int);
|
maxstrlen = va_arg (tags, int);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DTA_CellX:
|
||||||
|
forcedwidth = va_arg (tags, int);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DTA_CellY:
|
||||||
|
height = va_arg (tags, int);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
tag = va_arg (tags, DWORD);
|
tag = va_arg (tags, DWORD);
|
||||||
}
|
}
|
||||||
|
@ -219,7 +230,21 @@ void STACK_ARGS DCanvas::DrawText (int normalcolor, int x, int y, const char *st
|
||||||
{
|
{
|
||||||
va_list taglist;
|
va_list taglist;
|
||||||
va_start (taglist, string);
|
va_start (taglist, string);
|
||||||
DrawTexture (pic, cx, cy, DTA_Translation, range, TAG_MORE, &taglist);
|
if (forcedwidth)
|
||||||
|
{
|
||||||
|
w = forcedwidth;
|
||||||
|
DrawTexture (pic, cx, cy,
|
||||||
|
DTA_Translation, range,
|
||||||
|
DTA_DestWidth, forcedwidth,
|
||||||
|
DTA_DestHeight, height,
|
||||||
|
TAG_MORE, &taglist);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DrawTexture (pic, cx, cy,
|
||||||
|
DTA_Translation, range,
|
||||||
|
TAG_MORE, &taglist);
|
||||||
|
}
|
||||||
va_end (taglist);
|
va_end (taglist);
|
||||||
}
|
}
|
||||||
cx += (w + kerning) * scalex;
|
cx += (w + kerning) * scalex;
|
||||||
|
|
|
@ -102,6 +102,10 @@ enum
|
||||||
DTA_KeepRatio, // doesn't adjust screen size for DTA_Virtual* if the aspect ratio is not 4:3
|
DTA_KeepRatio, // doesn't adjust screen size for DTA_Virtual* if the aspect ratio is not 4:3
|
||||||
DTA_TextLen, // for DrawText: stop after this many characters, even if \0 not hit
|
DTA_TextLen, // for DrawText: stop after this many characters, even if \0 not hit
|
||||||
DTA_RenderStyle, // same as render style for actors
|
DTA_RenderStyle, // same as render style for actors
|
||||||
|
|
||||||
|
// For DrawText calls:
|
||||||
|
DTA_CellX, // horizontal size of character cell
|
||||||
|
DTA_CellY, // vertical size of character cell
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
enum
|
||||||
|
|
Loading…
Reference in a new issue