mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-01-14 22:00:50 +00:00
Allow entering a title for replays on save
This commit is contained in:
parent
b2cbe3ed6d
commit
2a9dd8e1f9
7 changed files with 101 additions and 4 deletions
|
@ -248,6 +248,12 @@ void D_ProcessEvents(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (demo.savemode == DSM_TITLEENTRY)
|
||||||
|
{
|
||||||
|
if (G_DemoTitleResponder(ev))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Menu input
|
// Menu input
|
||||||
if (M_Responder(ev))
|
if (M_Responder(ev))
|
||||||
continue; // menu ate the event
|
continue; // menu ate the event
|
||||||
|
|
51
src/g_game.c
51
src/g_game.c
|
@ -7603,7 +7603,7 @@ boolean G_CheckDemoStatus(void)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (demo.recording && (!multiplayer || cv_recordmultiplayerdemos.value == 2))
|
if (demo.recording && demo.savemode != DSM_NOTSAVING)
|
||||||
{
|
{
|
||||||
G_SaveDemo();
|
G_SaveDemo();
|
||||||
return true;
|
return true;
|
||||||
|
@ -7684,6 +7684,55 @@ void G_SaveDemo(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean G_DemoTitleResponder(event_t *ev)
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
INT32 ch;
|
||||||
|
|
||||||
|
if (ev->type != ev_keydown)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
ch = (INT32)ev->data1;
|
||||||
|
|
||||||
|
// Only ESC and non-keyboard keys abort connection
|
||||||
|
if (ch == KEY_ESCAPE)
|
||||||
|
{
|
||||||
|
demo.savemode = (cv_recordmultiplayerdemos.value == 2) ? DSM_WILLAUTOSAVE : DSM_NOTSAVING;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ch == KEY_ENTER || ch >= KEY_MOUSE1)
|
||||||
|
{
|
||||||
|
demo.savemode = DSM_WILLSAVE;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ch >= HU_FONTSTART && ch <= HU_FONTEND && hu_font[ch-HU_FONTSTART])
|
||||||
|
|| ch == ' ') // Allow spaces, of course
|
||||||
|
{
|
||||||
|
len = strlen(demo.titlename);
|
||||||
|
if (len < 64)
|
||||||
|
{
|
||||||
|
demo.titlename[len+1] = 0;
|
||||||
|
demo.titlename[len] = CON_ShiftChar(ch);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ch == KEY_BACKSPACE)
|
||||||
|
{
|
||||||
|
if (shiftdown)
|
||||||
|
memset(demo.titlename, 0, sizeof(demo.titlename));
|
||||||
|
else
|
||||||
|
{
|
||||||
|
len = strlen(demo.titlename);
|
||||||
|
|
||||||
|
if (len > 0)
|
||||||
|
demo.titlename[len-1] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// G_SetGamestate
|
// G_SetGamestate
|
||||||
//
|
//
|
||||||
|
|
|
@ -230,6 +230,7 @@ ATTRNORETURN void FUNCNORETURN G_StopMetalRecording(void);
|
||||||
void G_StopDemo(void);
|
void G_StopDemo(void);
|
||||||
boolean G_CheckDemoStatus(void);
|
boolean G_CheckDemoStatus(void);
|
||||||
void G_SaveDemo(void);
|
void G_SaveDemo(void);
|
||||||
|
boolean G_DemoTitleResponder(event_t *ev);
|
||||||
|
|
||||||
boolean G_IsSpecialStage(INT32 mapnum);
|
boolean G_IsSpecialStage(INT32 mapnum);
|
||||||
boolean G_GametypeUsesLives(void);
|
boolean G_GametypeUsesLives(void);
|
||||||
|
|
|
@ -733,7 +733,7 @@ void P_Ticker(boolean run)
|
||||||
G_WriteAllGhostTics();
|
G_WriteAllGhostTics();
|
||||||
|
|
||||||
if (demo.savebutton && demo.savebutton + 3*TICRATE < leveltime && InputDown(gc_lookback, 1))
|
if (demo.savebutton && demo.savebutton + 3*TICRATE < leveltime && InputDown(gc_lookback, 1))
|
||||||
demo.savemode = DSM_WILLSAVE; // DSM_TITLEENTRY
|
demo.savemode = DSM_TITLEENTRY;
|
||||||
}
|
}
|
||||||
if (demo.playback) // Use Ghost data for consistency checks.
|
if (demo.playback) // Use Ghost data for consistency checks.
|
||||||
{
|
{
|
||||||
|
|
|
@ -2024,13 +2024,17 @@ static void ST_overlayDrawer(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DSM_WILLAUTOSAVE:
|
case DSM_WILLAUTOSAVE:
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|(G_BattleGametype() ? V_REDMAP : V_SKYMAP), "Replay will be saved." /*" (Look Backward: Change title)"*/);
|
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|(G_BattleGametype() ? V_REDMAP : V_SKYMAP), "Replay will be saved. (Look Backward: Change title)");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DSM_WILLSAVE:
|
case DSM_WILLSAVE:
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|(G_BattleGametype() ? V_REDMAP : V_SKYMAP), "Replay will be saved.");
|
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_HUDTRANS|V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|(G_BattleGametype() ? V_REDMAP : V_SKYMAP), "Replay will be saved.");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DSM_TITLEENTRY:
|
||||||
|
ST_DrawDemoTitleEntry();
|
||||||
|
break;
|
||||||
|
|
||||||
default: // Don't render anything
|
default: // Don't render anything
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2039,6 +2043,36 @@ static void ST_overlayDrawer(void)
|
||||||
ST_drawDebugInfo();
|
ST_drawDebugInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ST_DrawDemoTitleEntry(void)
|
||||||
|
{
|
||||||
|
static UINT8 skullAnimCounter = 0;
|
||||||
|
char *nametodraw;
|
||||||
|
|
||||||
|
skullAnimCounter++;
|
||||||
|
skullAnimCounter %= 8;
|
||||||
|
|
||||||
|
nametodraw = demo.titlename;
|
||||||
|
while (V_StringWidth(nametodraw, 0) > MAXSTRINGLENGTH*8 - 8)
|
||||||
|
nametodraw++;
|
||||||
|
|
||||||
|
#define x (BASEVIDWIDTH/2 - 139)
|
||||||
|
#define y (BASEVIDHEIGHT/2)
|
||||||
|
M_DrawTextBox(x, y + 4, MAXSTRINGLENGTH, 1);
|
||||||
|
V_DrawString(x + 8, y + 12, V_ALLOWLOWERCASE, nametodraw);
|
||||||
|
if (skullAnimCounter < 4)
|
||||||
|
V_DrawCharacter(x + 8 + V_StringWidth(nametodraw, 0), y + 12,
|
||||||
|
'_' | 0x80, false);
|
||||||
|
|
||||||
|
M_DrawTextBox(x + 30, y - 24, 26, 1);
|
||||||
|
V_DrawString(x + 38, y - 16, V_ALLOWLOWERCASE, "Enter the name of the replay.");
|
||||||
|
|
||||||
|
M_DrawTextBox(x + 50, y + 20, 20, 1);
|
||||||
|
V_DrawThinString(x + 58, y + 28, V_ALLOWLOWERCASE, "Escape - Cancel");
|
||||||
|
V_DrawRightAlignedThinString(x + 220, y + 28, V_ALLOWLOWERCASE, "Enter - Confirm");
|
||||||
|
#undef x
|
||||||
|
#undef y
|
||||||
|
}
|
||||||
|
|
||||||
// MayonakaStatic: draw Midnight Channel's TV-like borders
|
// MayonakaStatic: draw Midnight Channel's TV-like borders
|
||||||
static void ST_MayonakaStatic(void)
|
static void ST_MayonakaStatic(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -26,6 +26,9 @@
|
||||||
// Called by main loop.
|
// Called by main loop.
|
||||||
void ST_Ticker(void);
|
void ST_Ticker(void);
|
||||||
|
|
||||||
|
// Called when naming a replay.
|
||||||
|
void ST_DrawDemoTitleEntry(void);
|
||||||
|
|
||||||
// Called by main loop.
|
// Called by main loop.
|
||||||
void ST_Drawer(void);
|
void ST_Drawer(void);
|
||||||
|
|
||||||
|
|
|
@ -573,6 +573,10 @@ dotimer:
|
||||||
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|hilicol, "Replay saved!");
|
V_DrawRightAlignedThinString(BASEVIDWIDTH - 2, 2, V_SNAPTOTOP|V_SNAPTORIGHT|V_ALLOWLOWERCASE|hilicol, "Replay saved!");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case DSM_TITLEENTRY:
|
||||||
|
ST_DrawDemoTitleEntry();
|
||||||
|
break;
|
||||||
|
|
||||||
default: // Don't render any text here
|
default: // Don't render any text here
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -595,7 +599,7 @@ void Y_Ticker(void)
|
||||||
if (demo.recording)
|
if (demo.recording)
|
||||||
{
|
{
|
||||||
if (demo.savemode == DSM_NOTSAVING && InputDown(gc_lookback, 1))
|
if (demo.savemode == DSM_NOTSAVING && InputDown(gc_lookback, 1))
|
||||||
demo.savemode = DSM_WILLSAVE; // DSM_TITLEENTRY
|
demo.savemode = DSM_TITLEENTRY;
|
||||||
|
|
||||||
if (demo.savemode == DSM_WILLSAVE || demo.savemode == DSM_WILLAUTOSAVE)
|
if (demo.savemode == DSM_WILLSAVE || demo.savemode == DSM_WILLAUTOSAVE)
|
||||||
G_SaveDemo();
|
G_SaveDemo();
|
||||||
|
|
Loading…
Reference in a new issue