Add SECRET_ONLINE.

- Online menu is inaccessible until unlocked.
- Unlike most unlocks, the fact that it's not enabled is very clearly signposted.
    - This is because the previous entry in the series barely had any offline content at all, so the fact you'll have to work for it will catch a lot of people by surprise.
    - Has a message that straight up tells you you need experience in Grand Prix mode.
- Has no affect in TESTERS builds, for which this is the only method of play available.
This commit is contained in:
toaster 2023-02-27 17:01:15 +00:00
parent 36d5c38915
commit 6d43d8ef09
8 changed files with 73 additions and 4 deletions

View file

@ -2290,6 +2290,8 @@ void readunlockable(MYFILE *f, INT32 num)
unlockables[num].type = SECRET_BREAKTHECAPSULES;
else if (fastcmp(word2, "SPECIALATTACK"))
unlockables[num].type = SECRET_SPECIALATTACK;
else if (fastcmp(word2, "ONLINE"))
unlockables[num].type = SECRET_ONLINE;
else if (fastcmp(word2, "SOUNDTEST"))
unlockables[num].type = SECRET_SOUNDTEST;
else if (fastcmp(word2, "ALTTITLE"))

View file

@ -704,6 +704,7 @@ boolean M_CharacterSelectHandler(INT32 choice);
void M_CharacterSelectTick(void);
boolean M_CharacterSelectQuit(void);
void M_SetupPlayMenu(INT32 choice);
void M_SetupGametypeMenu(INT32 choice);
void M_SetupRaceMenu(INT32 choice);

View file

@ -801,6 +801,8 @@ void M_DrawKartGamemodeMenu(void)
for (i = 0; i < currentMenu->numitems; i++)
{
INT32 type;
if (currentMenu->menuitems[i].status == IT_DISABLED)
{
continue;
@ -817,9 +819,12 @@ void M_DrawKartGamemodeMenu(void)
}
}
switch (currentMenu->menuitems[i].status & IT_DISPLAY)
type = (currentMenu->menuitems[i].status & IT_DISPLAY);
switch (type)
{
case IT_STRING:
case IT_TRANSTEXT2:
{
UINT8 *colormap = NULL;
@ -833,7 +838,13 @@ void M_DrawKartGamemodeMenu(void)
}
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT, 0, W_CachePatchName("MENUPLTR", PU_CACHE), colormap);
V_DrawGamemodeString(x + 16, y - 3, V_ALLOWLOWERCASE, colormap, currentMenu->menuitems[i].text);
V_DrawGamemodeString(x + 16, y - 3,
(type == IT_TRANSTEXT2
? V_TRANSLUCENT
: 0
)|V_ALLOWLOWERCASE,
colormap,
currentMenu->menuitems[i].text);
}
break;
}
@ -4716,6 +4727,7 @@ static void M_DrawChallengeTile(INT16 i, INT16 j, INT32 x, INT32 y, boolean hili
case SECRET_ENCORE:
categoryid = '5';
break;
case SECRET_ONLINE:
case SECRET_ALTTITLE:
case SECRET_SOUNDTEST:
categoryid = '6';
@ -4783,6 +4795,9 @@ static void M_DrawChallengeTile(INT16 i, INT16 j, INT32 x, INT32 y, boolean hili
iconid = 5;
break;
case SECRET_ONLINE:
iconid = 10;
break;
case SECRET_ALTTITLE:
iconid = 6;
break;
@ -5036,12 +5051,21 @@ static void M_DrawChallengePreview(INT32 x, INT32 y)
specialmap = mastermapcache;
break;
}
case SECRET_ONLINE:
{
V_DrawFixedPatch(-3*FRACUNIT, (y-40)*FRACUNIT,
FRACUNIT,
0, W_CachePatchName("EGGASTLA", PU_CACHE),
NULL);
break;
}
case SECRET_ALTTITLE:
{
x = 8;
y = BASEVIDHEIGHT-16;
V_DrawGamemodeString(x, y - 32, V_ALLOWLOWERCASE, R_GetTranslationColormap(TC_RAINBOW, SKINCOLOR_PLAGUE, GTC_MENUCACHE), cv_alttitle.string);
V_DrawThinString(x, y, V_6WIDTHSPACE|V_ALLOWLOWERCASE|highlightflags, "Press (A)");
break;
}
default:
{

View file

@ -447,6 +447,7 @@ menu_t *M_SpecificMenuRestore(menu_t *torestore)
}
// One last catch.
M_SetupPlayMenu(-1);
PLAY_CharSelectDef.prevMenu = &MainDef;
return torestore;

View file

@ -126,6 +126,9 @@ typedef enum
SECRET_TIMEATTACK, // Permit Time attack
SECRET_BREAKTHECAPSULES, // Permit SP Capsule attack
SECRET_SPECIALATTACK, // Permit Special attack (You're blue now!)
// Option restrictions
SECRET_ONLINE, // Permit netplay (ankle-high barrier to jumping in the deep end)
SECRET_SOUNDTEST, // Permit Sound Test
SECRET_ALTTITLE, // Permit alternate titlescreen

View file

@ -2,16 +2,42 @@
/// \brief Play Menu
#include "../k_menu.h"
#include "../m_cond.h"
menuitem_t PLAY_MainMenu[] =
{
{IT_STRING | IT_CALL, "Local Play", "Play only on this computer.",
NULL, {.routine = M_SetupGametypeMenu}, 0, 0},
{IT_STRING | IT_CALL, "Online", "Connect to other computers.",
{IT_STRING | IT_CALL, "Online", NULL,
NULL, {.routine = M_MPOptSelectInit}, /*M_MPRoomSelectInit,*/ 0, 0},
{IT_STRING | IT_CALL, "Back", NULL, NULL, {.routine = M_GoBack}, 0, 0},
};
menu_t PLAY_MainDef = KARTGAMEMODEMENU(PLAY_MainMenu, &PLAY_CharSelectDef);
void M_SetupPlayMenu(INT32 choice)
{
#ifdef TESTERS
(void)choice;
#else
if (choice != -1)
PLAY_MainDef.prevMenu = currentMenu;
// Enable/disable online play.
if (!M_SecretUnlocked(SECRET_ONLINE, true))
{
PLAY_MainMenu[1].status = IT_TRANSTEXT2 | IT_CALL;
PLAY_MainMenu[1].tooltip = "You'll need experience to play over the internet!";
}
else
{
PLAY_MainMenu[1].status = IT_STRING | IT_CALL;
PLAY_MainMenu[1].tooltip = "Connect to other computers over the internet.";
}
if (choice != -1)
M_SetupNextMenu(&PLAY_MainDef, false);
#endif
}

View file

@ -5,6 +5,7 @@
#include "../r_skins.h"
#include "../s_sound.h"
#include "../k_grandprix.h" // K_CanChangeRules
#include "../m_cond.h" // Condition Sets
menuitem_t PLAY_CharSelect[] =
{
@ -1491,7 +1492,7 @@ void M_CharacterSelectTick(void)
#if defined (TESTERS)
M_MPOptSelectInit(0);
#else
M_SetupNextMenu(&PLAY_MainDef, false);
M_SetupPlayMenu(0);
#endif
}

View file

@ -2,6 +2,8 @@
/// \brief MULTIPLAYER OPTION SELECT
#include "../k_menu.h"
#include "../m_cond.h"
#include "../s_sound.h"
#if defined (TESTERS)
#define IT_STRING_CALL_NOTESTERS IT_DISABLED
@ -62,6 +64,15 @@ void M_MPOptSelectInit(INT32 choice)
INT16 arrcpy[3][3] = {{0,68,0}, {0,12,0}, {0,74,0}};
const UINT32 forbidden = GTR_FORBIDMP;
#ifndef TESTERS
if (choice != -1 && !M_SecretUnlocked(SECRET_ONLINE, true))
{
M_StartMessage("Online play is ""\x8B""not yet unlocked""\x80"".\n\nYou'll want experience in ""\x8B""Grand Prix""\x80""\nbefore even thinking about facing\nopponents from across the world.\n\nPress (B)", NULL, MM_NOTHING);
S_StartSound(NULL, sfx_s3k36);
return;
}
#endif
mpmenu.modechoice = 0;
mpmenu.ticker = 0;