viewserver2 refactoring
This now takes advantage of regular menu drawing with styles and an enter routine instead of hardcoded v_draw*string calles
This commit is contained in:
parent
7852dfbf3a
commit
3f34bc68d3
7 changed files with 159 additions and 48 deletions
|
|
@ -988,7 +988,7 @@ static void SV_SendServerInfo(INT32 node, tic_t servertime)
|
|||
{
|
||||
//strncpy(netbuffer->u.serverinfo.maptitle, (char *)mapheaderinfo[gamemap-1]->lvlttl, sizeof netbuffer->u.serverinfo.maptitle);
|
||||
// set up the levelstring
|
||||
if (netbuffer->u.serverinfo.iszone || (mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE))
|
||||
if (!netbuffer->u.serverinfo.iszone || (mapheaderinfo[gamemap-1]->levelflags & LF_NOZONE))
|
||||
{
|
||||
if (mapheaderinfo[gamemap-1]->actnum[0])
|
||||
snprintf(netbuffer->u.serverinfo.maptitle,
|
||||
|
|
|
|||
|
|
@ -747,6 +747,7 @@ struct menu_routine_s const MENU_ROUTINES[] = {
|
|||
{ "ASSIGNJOYSTICK", &MR_AssignJoystick },
|
||||
{ "HANDLEMONITORTOGGLES", &MR_HandleMonitorToggles },
|
||||
{ "RESTARTAUDIO", &MR_RestartAudio },
|
||||
{ "ENTERVIEWSERVER", &MR_EnterViewServer },
|
||||
{ "QUITVIEWSERVER", &MR_QuitViewServer },
|
||||
{ "HANDLEVIEWSERVER", &MR_HandleViewServer },
|
||||
{ "CAMERASETUP", &MR_CameraSetup },
|
||||
|
|
|
|||
44
src/g_game.c
44
src/g_game.c
|
|
@ -777,18 +777,58 @@ INT32 G_MapNumber(const char * name)
|
|||
INT32 G_LevelTitleToMapNum(const char * leveltitle)
|
||||
{
|
||||
INT32 map;
|
||||
char *levelname;
|
||||
char *levelnameact;
|
||||
char *levelnamezone;
|
||||
char *levelnameactzone;
|
||||
|
||||
for (map = 0; map < nummapheaders; ++map)
|
||||
{
|
||||
if (!strcasecmp(leveltitle, mapheaderinfo[map]->lvlttl))
|
||||
levelname = zva(PU_STATIC, NULL, "%s %s", mapheaderinfo[map]->lvlttl);
|
||||
levelnameact = zva(PU_STATIC, NULL, "%s %s", mapheaderinfo[map]->lvlttl, mapheaderinfo[map]->actnum);
|
||||
levelnamezone = zva(PU_STATIC, NULL, "%s %s", mapheaderinfo[map]->lvlttl, mapheaderinfo[map]->zonttl);
|
||||
levelnameactzone = zva(PU_STATIC, NULL, "%s %s %s", mapheaderinfo[map]->lvlttl, mapheaderinfo[map]->zonttl, mapheaderinfo[map]->actnum);
|
||||
|
||||
if (!strcasecmp(leveltitle, levelname))
|
||||
{
|
||||
Z_Free(levelname);
|
||||
Z_Free(levelnameact);
|
||||
Z_Free(levelnamezone);
|
||||
Z_Free(levelnameactzone);
|
||||
return map;
|
||||
}
|
||||
|
||||
if (!strcasecmp(leveltitle, va("%s %s", mapheaderinfo[map]->lvlttl, mapheaderinfo[map]->actnum)))
|
||||
if (!strcasecmp(leveltitle, levelnameact))
|
||||
{
|
||||
Z_Free(levelname);
|
||||
Z_Free(levelnameact);
|
||||
Z_Free(levelnamezone);
|
||||
Z_Free(levelnameactzone);
|
||||
return map;
|
||||
}
|
||||
|
||||
if (!strcasecmp(leveltitle, levelnamezone))
|
||||
{
|
||||
Z_Free(levelname);
|
||||
Z_Free(levelnameact);
|
||||
Z_Free(levelnamezone);
|
||||
Z_Free(levelnameactzone);
|
||||
return map;
|
||||
}
|
||||
|
||||
if (!strcasecmp(leveltitle, levelnameactzone))
|
||||
{
|
||||
Z_Free(levelname);
|
||||
Z_Free(levelnameact);
|
||||
Z_Free(levelnamezone);
|
||||
Z_Free(levelnameactzone);
|
||||
return map;
|
||||
}
|
||||
|
||||
Z_Free(levelname);
|
||||
Z_Free(levelnameact);
|
||||
Z_Free(levelnamezone);
|
||||
Z_Free(levelnameactzone);
|
||||
}
|
||||
return INT32_MIN;
|
||||
}
|
||||
|
|
|
|||
130
src/m_menu.c
130
src/m_menu.c
|
|
@ -6558,9 +6558,12 @@ static void Splitplayers_OnChange(void)
|
|||
dummymultiplayer_cons_t[1].value = cv_splitplayers.value - 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Tails 11-19-2002
|
||||
INT32 MR_ConnectIP(INT32 choice)
|
||||
{
|
||||
int i;
|
||||
(void)choice;
|
||||
|
||||
if (*cv_dummyip.string == 0)
|
||||
|
|
@ -7942,10 +7945,83 @@ INT32 MR_HandleMonitorToggles(INT32 choice)
|
|||
return true;
|
||||
}
|
||||
|
||||
static char *serveraddon = NULL;
|
||||
static char *serverping = NULL;
|
||||
static char *servergametype = NULL;
|
||||
|
||||
INT32 MR_EnterViewServer(INT32 choice)
|
||||
{
|
||||
(void)choice;
|
||||
char *servermap = serverlist[joinnode].info.maptitle;
|
||||
char *servername = serverlist[joinnode].info.servername;
|
||||
const char *speedstring = "Auto";
|
||||
UINT32 ping = serverlist[joinnode].info.time;
|
||||
UINT8 kartvars = serverlist[joinnode].info.kartvars;
|
||||
|
||||
serveraddon = zva(PU_STATIC, NULL, "\x82%d Addon%s", fileneedednum, fileneedednum > 1 ? "s" : "");
|
||||
serverping = zva(PU_STATIC, NULL, "Ping: %s%ums", (ping < 128 ? "\x83" : (ping < 256 ? "\x82" : "\x85")), ping);
|
||||
|
||||
switch (kartvars & SV_SPEEDMASK)
|
||||
{
|
||||
case KARTSPEED_EASY:
|
||||
speedstring = "Easy";
|
||||
break;
|
||||
case KARTSPEED_NORMAL:
|
||||
speedstring = "Normal";
|
||||
break;
|
||||
case KARTSPEED_HARD:
|
||||
speedstring = "Hard";
|
||||
break;
|
||||
}
|
||||
|
||||
servergametype = zva(PU_STATIC, NULL, "%s: %s", serverlist[joinnode].info.gametypename, speedstring);
|
||||
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERNAME", servername);
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERPING", serverping);
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERMAP", servermap);
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERGAMETYPE", servergametype);
|
||||
|
||||
if (fileneedednum > 0)
|
||||
{
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERADDON", serveraddon);
|
||||
}
|
||||
else
|
||||
{
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERADDON", "Vanilla");
|
||||
}
|
||||
|
||||
if (serverlist[joinnode].info.cheatsenabled)
|
||||
{
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERCHEATS", "Cheats");
|
||||
}
|
||||
else
|
||||
{
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERCHEATS", "");
|
||||
}
|
||||
|
||||
if (kartvars & SV_DEDICATED)
|
||||
{
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERDEDICATED", "Dedicated Server");
|
||||
}
|
||||
else
|
||||
{
|
||||
M_SetItemText(MN_VIEWSERVER, "SERVERDEDICATED", "Listen Server");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
INT32 MR_QuitViewServer(INT32 choice)
|
||||
{
|
||||
(void)choice;
|
||||
|
||||
if (serveraddon)
|
||||
Z_Free(serveraddon);
|
||||
if (serverping)
|
||||
Z_Free(serverping);
|
||||
if (servergametype)
|
||||
Z_Free(servergametype);
|
||||
|
||||
D_QuitNetGame();
|
||||
CL_Reset();
|
||||
return true;
|
||||
|
|
@ -7963,6 +8039,12 @@ INT32 MR_HandleViewServer(INT32 choice)
|
|||
S_StartSound(NULL, sfx_menu1);
|
||||
ChangeClientMode(CL_CHECKFILES);
|
||||
M_ClearMenus(false);
|
||||
if (serveraddon)
|
||||
Z_Free(serveraddon);
|
||||
if (serverping)
|
||||
Z_Free(serverping);
|
||||
if (servergametype)
|
||||
Z_Free(servergametype);
|
||||
return true;
|
||||
break;
|
||||
|
||||
|
|
@ -7996,18 +8078,12 @@ INT32 MR_HandleViewServer(INT32 choice)
|
|||
|
||||
void M_DrawViewServer(void)
|
||||
{
|
||||
UINT32 ping = (UINT32)serverlist[joinnode].info.time;
|
||||
UINT8 kartvars = serverlist[joinnode].info.kartvars;
|
||||
const char *speedstring = "Auto";
|
||||
const char *serverstring = "Listen";
|
||||
const char *maptitle = serverlist[joinnode].info.maptitle;
|
||||
INT32 mapnum = G_LevelTitleToMapNum(maptitle);
|
||||
patch_t *current_map;
|
||||
|
||||
V_DrawFill(M_GetItemX(MN_VIEWSERVER, "TOPBOXXY"), M_GetItemY(MN_VIEWSERVER, "TOPBOXXY"), M_GetItemX(MN_VIEWSERVER, "TOPBOXWH"), M_GetItemY(MN_VIEWSERVER, "TOPBOXWH"), 159);
|
||||
|
||||
V_DrawThinString(M_GetItemX(MN_VIEWSERVER, "SERVERNAME"), M_GetItemY(MN_VIEWSERVER, "SERVERNAME"), V_ALLOWLOWERCASE, va("%s", serverlist[joinnode].info.servername));
|
||||
|
||||
if (mapnum == INT32_MIN)
|
||||
{
|
||||
V_DrawSmallScaledPatch(10, 18, 0, W_CachePatchName("RANDOMLV", PU_CACHE));
|
||||
|
|
@ -8018,46 +8094,10 @@ void M_DrawViewServer(void)
|
|||
V_DrawFixedPatch(10<<FRACBITS, 18<<FRACBITS, scale, 0, current_map, NULL);
|
||||
}
|
||||
|
||||
switch (kartvars & SV_SPEEDMASK)
|
||||
{
|
||||
case KARTSPEED_EASY:
|
||||
speedstring = "Easy";
|
||||
break;
|
||||
case KARTSPEED_NORMAL:
|
||||
speedstring = "Normal";
|
||||
break;
|
||||
case KARTSPEED_HARD:
|
||||
speedstring = "Hard";
|
||||
break;
|
||||
}
|
||||
|
||||
if (kartvars & SV_DEDICATED)
|
||||
{
|
||||
serverstring = "Dedicated";
|
||||
}
|
||||
|
||||
V_DrawThinString(M_GetItemX(MN_VIEWSERVER, "SERVERPING"), M_GetItemY(MN_VIEWSERVER, "SERVERPING"), V_ALLOWLOWERCASE, va("Ping: %s%ums", (ping < 128 ? "\x83" : (ping < 256 ? "\x82" : "\x85")), ping));
|
||||
V_DrawThinString(M_GetItemX(MN_VIEWSERVER, "SERVERMAP"), M_GetItemY(MN_VIEWSERVER, "SERVERMAP"), V_ALLOWLOWERCASE, va("%s", serverlist[joinnode].info.maptitle));
|
||||
V_DrawThinString(M_GetItemX(MN_VIEWSERVER, "SERVERGAMETYPE"), M_GetItemY(MN_VIEWSERVER, "SERVERGAMETYPE"), V_ALLOWLOWERCASE, va("%s: %s", serverlist[joinnode].info.gametypename, speedstring));
|
||||
|
||||
if (fileneedednum > 0)
|
||||
{
|
||||
V_DrawThinString(M_GetItemX(MN_VIEWSERVER, "SERVERADDON"), M_GetItemY(MN_VIEWSERVER, "SERVERADDON"), V_ALLOWLOWERCASE|warningflags, va("%i Addons", fileneedednum));
|
||||
}
|
||||
else
|
||||
{
|
||||
V_DrawThinString(M_GetItemX(MN_VIEWSERVER, "SERVERADDON"), M_GetItemY(MN_VIEWSERVER, "SERVERADDON"), V_ALLOWLOWERCASE|highlightflags, "Vanilla");
|
||||
}
|
||||
|
||||
if (serverlist[joinnode].info.cheatsenabled)
|
||||
{
|
||||
V_DrawRightAlignedThinString(M_GetItemX(MN_VIEWSERVER, "SERVERCHEATS"), M_GetItemY(MN_VIEWSERVER, "SERVERCHEATS"), V_ALLOWLOWERCASE|recommendedflags, "Cheats");
|
||||
}
|
||||
|
||||
V_DrawRightAlignedThinString(M_GetItemX(MN_VIEWSERVER, "SERVERDEDICATED"), M_GetItemY(MN_VIEWSERVER, "SERVERDEDICATED"), V_ALLOWLOWERCASE|recommendedflags, va("%s Server", serverstring));
|
||||
|
||||
V_DrawFill(M_GetItemX(MN_VIEWSERVER, "MIDBOXXY"), M_GetItemY(MN_VIEWSERVER, "MIDBOXXY"), M_GetItemX(MN_VIEWSERVER, "MIDBOXWH"), M_GetItemY(MN_VIEWSERVER, "MIDBOXWH"), 159);
|
||||
|
||||
M_DrawGenericMenu();
|
||||
|
||||
if (!viewserver_showaddons)
|
||||
{
|
||||
INT32 i;
|
||||
|
|
@ -8080,7 +8120,7 @@ void M_DrawViewServer(void)
|
|||
{
|
||||
if (playeramount <= 16)
|
||||
{
|
||||
UINT8 skinum = playerinfo[i].skin;
|
||||
UINT16 skinum = playerinfo[i].skin;
|
||||
INT32 flags = 0;
|
||||
|
||||
if (R_SkinAvailable(skins[skinum].name) == -1)
|
||||
|
|
|
|||
|
|
@ -303,6 +303,7 @@ INT32 MR_ChangeControl(INT32 arg);
|
|||
INT32 MR_AssignJoystick(INT32 arg);
|
||||
INT32 MR_HandleMonitorToggles(INT32 choice);
|
||||
INT32 MR_RestartAudio(INT32 choice);
|
||||
INT32 MR_EnterViewServer(INT32 choice);
|
||||
INT32 MR_QuitViewServer(INT32 choice);
|
||||
INT32 MR_HandleViewServer(INT32 choice);
|
||||
INT32 MR_CameraSetup(INT32 arg);
|
||||
|
|
|
|||
28
src/z_zone.c
28
src/z_zone.c
|
|
@ -654,3 +654,31 @@ char *Z_StrDup(const char *s)
|
|||
{
|
||||
return strcpy(ZZ_Alloc(strlen(s) + 1), s);
|
||||
}
|
||||
|
||||
/** Allocates and returns a string made out of varargs.
|
||||
* Allocated for Zone Memory.
|
||||
*
|
||||
* \param format Format string.
|
||||
* \return Pointer to the resulting string.
|
||||
*/
|
||||
char *zva(INT32 tag, void *user, const char *format, ...)
|
||||
{
|
||||
va_list argptr;
|
||||
char *string;
|
||||
|
||||
va_start(argptr, format);
|
||||
int size = vsnprintf(NULL, 0, format, argptr);
|
||||
if (size < 0)
|
||||
I_Error("Z_xva: can't format string");
|
||||
string = Z_Malloc((unsigned)size+1, tag, user);
|
||||
if (!string)
|
||||
I_Error("Z_xva: out of memory");
|
||||
va_end(argptr);
|
||||
|
||||
va_start(argptr, format);
|
||||
vsprintf(string, format, argptr);
|
||||
va_end(argptr);
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -145,6 +145,7 @@ size_t Z_TagsUsage(INT32 lowtag, INT32 hightag);
|
|||
//
|
||||
char *Z_StrDup(const char *in);
|
||||
#define Z_Unlock(p) (void)p // TODO: remove this now that NDS code has been removed
|
||||
char *zva(INT32 tag, void *user, const char *format, ...);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
|
|
|||
Loading…
Reference in a new issue