1
0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-06-25 05:58:30 +02:00

Clean up of options menus for v2.3 (fixes #696)

This commit is contained in:
TerryCavanagh 2021-04-09 20:39:12 +10:30
parent d9d5cbbab2
commit eee98b0e07
5 changed files with 523 additions and 463 deletions

View File

@ -5818,17 +5818,16 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
{
case Menu::mainmenu:
#if !defined(MAKEANDPLAY)
option("start game");
option("play");
#endif
#if !defined(NO_CUSTOM_LEVELS)
option("player levels");
option("levels");
#endif
option("graphic options");
option("game options");
option("options");
#if !defined(MAKEANDPLAY)
option("view credits");
option("credits");
#endif
option("quit game");
option("quit");
menuyoff = -10;
maxspacing = 15;
break;
@ -5948,16 +5947,31 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
option("ok");
menuyoff = -20;
break;
case Menu::gameplayoptions:
#if !defined(MAKEANDPLAY)
if (ingame_titlemode && unlock[18])
#endif
{
option("flip mode");
}
option("toggle fps");
option("speedrun options");
option("advanced options");
option("clear data");
option("return");
menuyoff = -10;
maxspacing = 15;
break;
case Menu::graphicoptions:
option("toggle fullscreen");
option("scaling mode");
option("resize to nearest", graphics.screenbuffer->isWindowed);
option("toggle filter");
option("toggle analogue");
option("toggle fps");
option("toggle vsync");
option("return");
menuyoff = -10;
maxspacing = 15;
break;
case Menu::ed_settings:
option("change description");
@ -5966,8 +5980,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
option("editor ghosts");
option("load level");
option("save level");
option("graphic options");
option("game options");
option("options");
option("quit to main menu");
menuyoff = -20;
@ -5998,19 +6011,10 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
maxspacing = 15;
break;
case Menu::options:
option("accessibility options");
option("advanced options");
#if !defined(MAKEANDPLAY)
if (ingame_titlemode && unlock[18])
#endif
{
option("flip mode");
}
#if !defined(MAKEANDPLAY)
option("unlock play modes");
#endif
option("game pad options");
option("clear data");
option("gameplay");
option("graphics");
option("game pad");
option("accessibility");
//Add extra menu for mmmmmm mod
if(music.mmmmmm){
option("soundtrack");
@ -6018,25 +6022,36 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
option("return");
menuyoff = 0;
maxspacing = 15;
break;
case Menu::speedrunneroptions:
option("glitchrunner mode");
option("input delay");
option("fake load screen");
option("return");
menuyoff = 0;
maxspacing = 15;
break;
case Menu::advancedoptions:
option("toggle mouse");
option("unfocus pause");
option("fake load screen");
option("room name background");
option("glitchrunner mode");
option("input delay");
option("return");
menuyoff = 0;
maxspacing = 15;
break;
case Menu::accessibility:
option("animated backgrounds");
#if !defined(MAKEANDPLAY)
option("unlock play modes");
#endif
option("invincibility", !ingame_titlemode || (!insecretlab && !intimetrial && !nodeathmode));
option("slowdown", !ingame_titlemode || (!insecretlab && !intimetrial && !nodeathmode));
option("animated backgrounds");
option("screen effects");
option("text outline");
option("invincibility", !ingame_titlemode || (!insecretlab && !intimetrial && !nodeathmode));
option("slowdown", !ingame_titlemode || (!insecretlab && !intimetrial && !nodeathmode));
option("return");
menuyoff = 0;
maxspacing = 15;
break;
case Menu::controller:
option("analog stick sensitivity");
@ -6045,7 +6060,8 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
option("bind menu");
option("bind restart");
option("return");
menuyoff = 10;
menuyoff = 0;
maxspacing = 10;
break;
case Menu::cleardatamenu:
option("no! don't delete");

View File

@ -41,6 +41,8 @@ namespace Menu
ed_music,
ed_quit,
options,
gameplayoptions,
speedrunneroptions,
advancedoptions,
accessibility,
controller,

View File

@ -248,29 +248,23 @@ static void menuactionpress(void)
break;
#endif
case OFFSET+2:
//Options
music.playef(11);
game.createmenu(Menu::graphicoptions);
map.nexttowercolour();
break;
case OFFSET+3:
//Options
music.playef(11);
game.createmenu(Menu::options);
map.nexttowercolour();
break;
#if !defined(MAKEANDPLAY)
case OFFSET+4:
//Credits
music.playef(11);
game.createmenu(Menu::credits);
map.nexttowercolour();
break;
case OFFSET+3:
//Credits
music.playef(11);
game.createmenu(Menu::credits);
map.nexttowercolour();
break;
#else
#undef MPOFFSET
#define MPOFFSET -2
#endif
case OFFSET+5:
case OFFSET+4:
music.playef(11);
game.createmenu(Menu::youwannaquit);
map.nexttowercolour();
@ -442,12 +436,6 @@ static void menuactionpress(void)
game.savestatsandsettings_menu();
break;
case 5:
//toggle 30+ fps
music.playef(11);
game.over30mode = !game.over30mode;
game.savestatsandsettings_menu();
break;
case 6:
//toggle vsync
music.playef(11);
#ifndef __HAIKU__ // FIXME: Remove after SDL VSync bug is fixed! -flibit
@ -537,6 +525,35 @@ static void menuactionpress(void)
break;
}
break;
case Menu::speedrunneroptions:
switch (game.currentmenuoption)
{
case 0:
// Glitchrunner mode
music.playef(11);
game.glitchrunnermode = !game.glitchrunnermode;
game.savestatsandsettings_menu();
break;
case 1:
/* Input delay */
music.playef(11);
game.inputdelay = !game.inputdelay;
game.savestatsandsettings_menu();
break;
case 2:
// toggle fake load screen
game.skipfakeload = !game.skipfakeload;
game.savestatsandsettings_menu();
music.playef(11);
break;
default:
//back
music.playef(11);
game.returnmenu();
map.nexttowercolour();
break;
}
break;
case Menu::advancedoptions:
switch (game.currentmenuoption)
{
@ -560,29 +577,11 @@ static void menuactionpress(void)
music.playef(11);
break;
case 2:
// toggle fake load screen
game.skipfakeload = !game.skipfakeload;
game.savestatsandsettings_menu();
music.playef(11);
break;
case 3:
// toggle translucent roomname BG
graphics.translucentroomname = !graphics.translucentroomname;
game.savestatsandsettings_menu();
music.playef(11);
break;
case 4:
// Glitchrunner mode
music.playef(11);
game.glitchrunnermode = !game.glitchrunnermode;
game.savestatsandsettings_menu();
break;
case 5:
/* Input delay */
music.playef(11);
game.inputdelay = !game.inputdelay;
game.savestatsandsettings_menu();
break;
default:
//back
music.playef(11);
@ -592,83 +591,163 @@ static void menuactionpress(void)
}
break;
case Menu::accessibility:
switch (game.currentmenuoption)
{
case 0:
//disable animated backgrounds
game.colourblindmode = !game.colourblindmode;
game.savestatsandsettings_menu();
graphics.towerbg.tdrawback = true;
graphics.titlebg.tdrawback = true;
music.playef(11);
break;
case 1:
//disable screeneffects
game.noflashingmode = !game.noflashingmode;
game.savestatsandsettings_menu();
if (!game.noflashingmode)
{
music.playef(18);
game.screenshake = 10;
game.flashlight = 5;
}else{
music.playef(11);
}
break;
case 2:
//disable text outline
graphics.notextoutline = !graphics.notextoutline;
game.savestatsandsettings_menu();
music.playef(11);
break;
case 3:
//invincibility
if (!game.ingame_titlemode || (!game.insecretlab && !game.intimetrial && !game.nodeathmode))
{
if (!map.invincibility)
{
game.createmenu(Menu::setinvincibility);
map.nexttowercolour();
}
else
{
map.invincibility = !map.invincibility;
game.savestatsandsettings_menu();
}
music.playef(11);
}
else
{
music.playef(2);
map.invincibility = false;
}
break;
case 4:
//change game speed
if (!game.ingame_titlemode || (!game.insecretlab && !game.intimetrial && !game.nodeathmode))
{
game.createmenu(Menu::setslowdown);
map.nexttowercolour();
music.playef(11);
}
else
{
music.playef(2);
game.slowdown = 30;
}
break;
case 5:
//back
music.playef(11);
game.returnmenu();
map.nexttowercolour();
break;
default:
//Can't do yet! play sad sound
music.playef(2);
break;
}
break;
{
int accessibilityoffset = 0;
#if !defined(MAKEANDPLAY)
accessibilityoffset = 1;
if (game.currentmenuoption == 0) {
//unlock play options
music.playef(11);
game.createmenu(Menu::unlockmenu);
map.nexttowercolour();
}
#endif
if (game.currentmenuoption == accessibilityoffset + 0) {
//invincibility
if (!game.ingame_titlemode || (!game.insecretlab && !game.intimetrial && !game.nodeathmode))
{
if (!map.invincibility)
{
game.createmenu(Menu::setinvincibility);
map.nexttowercolour();
}
else
{
map.invincibility = !map.invincibility;
game.savestatsandsettings_menu();
}
music.playef(11);
}
else
{
music.playef(2);
map.invincibility = false;
}
}
else if (game.currentmenuoption == accessibilityoffset + 1) {
//change game speed
if (!game.ingame_titlemode || (!game.insecretlab && !game.intimetrial && !game.nodeathmode))
{
game.createmenu(Menu::setslowdown);
map.nexttowercolour();
music.playef(11);
}
else
{
music.playef(2);
game.slowdown = 30;
}
}
else if (game.currentmenuoption == accessibilityoffset + 2) {
//disable animated backgrounds
game.colourblindmode = !game.colourblindmode;
game.savestatsandsettings_menu();
graphics.towerbg.tdrawback = true;
graphics.titlebg.tdrawback = true;
music.playef(11);
}
else if (game.currentmenuoption == accessibilityoffset + 3) {
//disable screeneffects
game.noflashingmode = !game.noflashingmode;
game.savestatsandsettings_menu();
if (!game.noflashingmode)
{
music.playef(18);
game.screenshake = 10;
game.flashlight = 5;
}
else {
music.playef(11);
}
}
else if (game.currentmenuoption == accessibilityoffset + 4) {
//disable text outline
graphics.notextoutline = !graphics.notextoutline;
game.savestatsandsettings_menu();
music.playef(11);
}
else if (game.currentmenuoption == accessibilityoffset + 5) {
//back
music.playef(11);
game.returnmenu();
map.nexttowercolour();
}
break;
}
case Menu::gameplayoptions:
{
int gameplayoptionsoffset = 0;
#if !defined(MAKEANDPLAY)
if (game.ingame_titlemode && game.unlock[18])
#endif
{
gameplayoptionsoffset = 1;
if (game.currentmenuoption == 0) {
toggleflipmode();
// Fix wrong area music in Tower (Positive Force vs. ecroF evitisoP)
if (map.custommode)
{
break;
}
int area = map.area(game.roomx, game.roomy);
if (area == 3 || area == 11)
{
if (graphics.setflipmode)
{
music.play(9); // ecroF evitisoP
}
else
{
music.play(2); // Positive Force
}
}
}
}
if (game.currentmenuoption == gameplayoptionsoffset + 0)
{
//Toggle 30+ FPS
music.playef(11);
game.over30mode = !game.over30mode;
game.savestatsandsettings_menu();
}
else if (game.currentmenuoption == gameplayoptionsoffset + 1)
{
//Speedrunner options
music.playef(11);
game.createmenu(Menu::speedrunneroptions);
map.nexttowercolour();
}
else if (game.currentmenuoption == gameplayoptionsoffset + 2)
{
//Advanced options
music.playef(11);
game.createmenu(Menu::advancedoptions);
map.nexttowercolour();
}
else if (game.currentmenuoption == gameplayoptionsoffset + 3)
{
//Clear Data
music.playef(11);
game.createmenu(Menu::cleardatamenu);
map.nexttowercolour();
}
else if (game.currentmenuoption == gameplayoptionsoffset + 4) {
//return to previous menu
music.playef(11);
if (game.ingame_titlemode)
{
game.returntoingame();
}
else
{
game.returnmenu();
map.nexttowercolour();
}
}
break;
}
case Menu::options:
{
#if defined(MAKEANDPLAY)
@ -687,104 +766,61 @@ static void menuactionpress(void)
int offset = 0;
switch (game.currentmenuoption)
{
case 0:
//accessibility options
music.playef(11);
game.createmenu(Menu::accessibility);
map.nexttowercolour();
break;
case 1:
//advanced options
music.playef(11);
game.createmenu(Menu::advancedoptions);
map.nexttowercolour();
break;
case 2:
#if !defined(MAKEANDPLAY)
if (game.ingame_titlemode && game.unlock[18])
#endif
{
toggleflipmode();
// Fix wrong area music in Tower (Positive Force vs. ecroF evitisoP)
if (map.custommode)
{
break;
}
int area = map.area(game.roomx, game.roomy);
if (area == 3 || area == 11)
{
if (graphics.setflipmode)
{
music.play(9); // ecroF evitisoP
}
else
{
music.play(2); // Positive Force
}
}
}
break;
}
switch (game.currentmenuoption)
{
case 0:
//gameplay options
music.playef(11);
game.createmenu(Menu::gameplayoptions);
map.nexttowercolour();
break;
case 1:
//graphic options
music.playef(11);
game.createmenu(Menu::graphicoptions);
map.nexttowercolour();
break;
case 2:
//gamepad options
music.playef(11);
game.createmenu(Menu::controller);
map.nexttowercolour();
break;
case 3:
//accessibility options
music.playef(11);
game.createmenu(Menu::accessibility);
map.nexttowercolour();
break;
}
offset += flipmode_offset;
if (game.currentmenuoption == 4 && music.mmmmmm)
{
//**** TOGGLE MMMMMM
music.usingmmmmmm = !music.usingmmmmmm;
music.playef(11);
if (music.currentsong > -1)
{
music.play(music.currentsong);
}
game.savestatsandsettings_menu();
}
#if !defined(MAKEANDPLAY)
if (game.currentmenuoption == 3+offset)
{
//unlock play options
music.playef(11);
game.createmenu(Menu::unlockmenu);
map.nexttowercolour();
}
#endif
if (game.currentmenuoption == 4 + (music.mmmmmm?1:0))
{
//Last option here is "return"
music.playef(11);
if (game.ingame_titlemode)
{
game.returntoingame();
}
else
{
game.returnmenu();
map.nexttowercolour();
}
}
offset += unlockmode_offset;
if (game.currentmenuoption == 4+offset)
{
//clear data menu
music.playef(11);
game.createmenu(Menu::controller);
map.nexttowercolour();
break;
}
else if (game.currentmenuoption == 5+offset)
{
//clear data menu
music.playef(11);
game.createmenu(Menu::cleardatamenu);
map.nexttowercolour();
}
else if (game.currentmenuoption == 6+offset && music.mmmmmm)
{
//**** TOGGLE MMMMMM
music.usingmmmmmm = !music.usingmmmmmm;
music.playef(11);
if (music.currentsong > -1)
{
music.play(music.currentsong);
}
game.savestatsandsettings_menu();
}
offset += mmmmmm_offset;
if (game.currentmenuoption == 7+offset)
{
//back
music.playef(11);
if (game.ingame_titlemode)
{
game.returntoingame();
}
else
{
game.returnmenu();
map.nexttowercolour();
}
}
break;
}
case Menu::unlockmenutrials:
@ -2213,8 +2249,8 @@ void mapinput(void)
if (game.menupage == 19) game.menupage = 21;
if (game.menupage == 22) game.menupage = 20;
if (game.menupage == 29) game.menupage = 33;
if (game.menupage == 34) game.menupage = 30;
if (game.menupage == 29) game.menupage = 32;
if (game.menupage == 33) game.menupage = 30;
}
}
@ -2317,34 +2353,24 @@ static void mapmenuactionpress(void)
graphics.resumegamemode = true;
break;
case 31:
// Go to quit prompt
music.playef(11);
game.menupage = 10;
break;
// Graphic options and game options
music.playef(11);
game.gamestate = TITLEMODE;
graphics.flipmode = false;
game.ingame_titlemode = true;
graphics.ingame_fademode = graphics.fademode;
graphics.fademode = 0;
// Set this before we create the menu
game.kludge_ingametemp = game.currentmenuname;
game.createmenu(Menu::options);
map.nexttowercolour();
break;
case 32:
case 33:
// Graphic options and game options
music.playef(11);
game.gamestate = TITLEMODE;
graphics.flipmode = false;
game.ingame_titlemode = true;
graphics.ingame_fademode = graphics.fademode;
graphics.fademode = 0;
// Set this before we create the menu
game.kludge_ingametemp = game.currentmenuname;
if (game.menupage == 32)
{
game.createmenu(Menu::graphicoptions);
}
else
{
game.createmenu(Menu::options);
}
map.nexttowercolour();
break;
// Go to quit prompt
music.playef(11);
game.menupage = 10;
break;
}
}

View File

@ -98,95 +98,122 @@ static void menurender(void)
}
#endif
case Menu::errornostart:
graphics.Print( -1, 65, "ERROR: This level has", tr, tg, tb, true);
graphics.Print( -1, 75, "no start point!", tr, tg, tb, true);
break;
graphics.Print( -1, 65, "ERROR: This level has", tr, tg, tb, true);
graphics.Print( -1, 75, "no start point!", tr, tg, tb, true);
break;
case Menu::gameplayoptions:
{
int gameplayoptionsoffset = 0;
#if !defined(MAKEANDPLAY)
if (game.ingame_titlemode && game.unlock[18])
#endif
{
gameplayoptionsoffset = 1;
if (game.currentmenuoption == 0) {
graphics.bigprint(-1, 30, "Flip Mode", tr, tg, tb, true);
graphics.Print(-1, 65, "Flip the entire game vertically.", tr, tg, tb, true);
if (graphics.setflipmode)
{
graphics.Print(-1, 85, "Currently ENABLED!", tr, tg, tb, true);
}
else
{
graphics.Print(-1, 85, "Currently Disabled.", tr / 2, tg / 2, tb / 2, true);
}
}
}
if (game.currentmenuoption == gameplayoptionsoffset + 0)
{
//Toggle FPS
graphics.bigprint(-1, 30, "Toggle 30+ FPS", tr, tg, tb, true);
graphics.Print(-1, 65, "Change whether the game", tr, tg, tb, true);
graphics.Print(-1, 75, "runs at 30 or over 30 FPS.", tr, tg, tb, true);
if (!game.over30mode)
{
graphics.Print(-1, 95, "Current mode: 30 FPS", tr / 2, tg / 2, tb / 2, true);
}
else
{
graphics.Print(-1, 95, "Current mode: Over 30 FPS", tr, tg, tb, true);
}
break;
}
else if (game.currentmenuoption == gameplayoptionsoffset + 1)
{
//Speedrunner options
graphics.bigprint(-1, 30, "Speedrunner Options", tr, tg, tb, true);
graphics.Print(-1, 65, "Access some advanced settings that", tr, tg, tb, true);
graphics.Print(-1, 75, "might be of interest to speedrunners", tr, tg, tb, true);
}
else if (game.currentmenuoption == gameplayoptionsoffset + 2)
{
//Advanced options
graphics.bigprint(-1, 30, "Advanced Options", tr, tg, tb, true);
graphics.Print(-1, 65, "All other settings", tr, tg, tb, true);
}
else if (game.currentmenuoption == gameplayoptionsoffset + 3)
{
//Clear Data
graphics.bigprint(-1, 30, "Clear Data", tr, tg, tb, true);
graphics.Print(-1, 65, "Delete your save data", tr, tg, tb, true);
graphics.Print(-1, 75, "and unlocked play modes", tr, tg, tb, true);
}
break;
}
case Menu::options:
{
{
#if defined(MAKEANDPLAY)
int flipmode_offset = 0;
int flipmode_offset = 0;
#else
int flipmode_offset = game.ingame_titlemode && game.unlock[18] ? 0 : -1;
int flipmode_offset = game.ingame_titlemode && game.unlock[18] ? 0 : -1;
#endif
#if defined(MAKEANDPLAY)
int unlockmode_offset = -1;
int unlockmode_offset = -1;
#else
int unlockmode_offset = 0;
int unlockmode_offset = 0;
#endif
int offset = 0;
int offset = 0;
switch (game.currentmenuoption)
{
case 0:
graphics.bigprint( -1, 30, "Accessibility", tr, tg, tb, true);
graphics.Print( -1, 65, "Disable screen effects, enable", tr, tg, tb, true);
graphics.Print( -1, 75, "slowdown modes or invincibility", tr, tg, tb, true);
break;
case 1:
graphics.bigprint( -1, 30, "Advanced Options", tr, tg, tb, true);
graphics.Print( -1, 65, "Hide the mouse cursor, remove", tr, tg, tb, true);
graphics.Print( -1, 75, "the loading screen, turn on", tr, tg, tb, true);
graphics.Print( -1, 85, "glitchrunner mode and more", tr, tg, tb, true);
break;
case 2:
#if !defined(MAKEANDPLAY)
if (game.ingame_titlemode && game.unlock[18])
#endif
{
graphics.bigprint( -1, 30, "Flip Mode", tr, tg, tb, true);
graphics.Print( -1, 65, "Flip the entire game vertically.", tr, tg, tb, true);
if (graphics.setflipmode)
{
graphics.Print( -1, 85, "Currently ENABLED!", tr, tg, tb, true);
}
else
{
graphics.Print( -1, 85, "Currently Disabled.", tr/2, tg/2, tb/2, true);
}
}
break;
}
switch (game.currentmenuoption)
{
case 0:
graphics.bigprint(-1, 30, "Gameplay Options", tr, tg, tb, true);
graphics.Print(-1, 65, "Adjust various gameplay options", tr, tg, tb, true);
break;
case 1:
graphics.bigprint(-1, 30, "Graphics Options", tr, tg, tb, true);
graphics.Print(-1, 65, "Adjust screen settings", tr, tg, tb, true);
break;
case 2:
graphics.bigprint(-1, 30, "Game Pad Options", tr, tg, tb, true);
graphics.Print(-1, 65, "Rebind your controller's buttons", tr, tg, tb, true);
graphics.Print(-1, 75, "and adjust sensitivity", tr, tg, tb, true);
break;
case 3:
graphics.bigprint(-1, 30, "Accessibility", tr, tg, tb, true);
graphics.Print(-1, 65, "Disable screen effects, enable", tr, tg, tb, true);
graphics.Print(-1, 75, "slowdown modes or invincibility", tr, tg, tb, true);
break;
}
offset += flipmode_offset;
#if !defined(MAKEANDPLAY)
if (game.currentmenuoption == 3+offset)
{
graphics.bigprint( -1, 30, "Unlock Play Modes", tr, tg, tb, true);
graphics.Print( -1, 65, "Unlock parts of the game normally", tr, tg, tb, true);
graphics.Print( -1, 75, "unlocked as you progress", tr, tg, tb, true);
}
#endif
offset += unlockmode_offset;
if (game.currentmenuoption == 4+offset)
{
graphics.bigprint( -1, 30, "Game Pad Options", tr, tg, tb, true);
graphics.Print( -1, 65, "Rebind your controller's buttons", tr, tg, tb, true);
graphics.Print( -1, 75, "and adjust sensitivity", tr, tg, tb, true);
}
else if (game.currentmenuoption == 5+offset)
{
graphics.bigprint( -1, 30, "Clear Data", tr, tg, tb, true);
graphics.Print( -1, 65, "Delete your save data", tr, tg, tb, true);
graphics.Print( -1, 75, "and unlocked play modes", tr, tg, tb, true);
}
else if (game.currentmenuoption == 6+offset && music.mmmmmm)
{
graphics.bigprint( -1, 30, "Soundtrack", tr, tg, tb, true);
graphics.Print( -1, 65, "Toggle between MMMMMM and PPPPPP", tr, tg, tb, true);
if(music.usingmmmmmm){
graphics.Print( -1, 85, "Current soundtrack: MMMMMM", tr, tg, tb, true);
}else{
graphics.Print( -1, 85, "Current soundtrack: PPPPPP", tr, tg, tb, true);
}
break;
}
break;
}
if (game.currentmenuoption == 4 && music.mmmmmm)
{
graphics.bigprint(-1, 30, "Soundtrack", tr, tg, tb, true);
graphics.Print(-1, 65, "Toggle between MMMMMM and PPPPPP", tr, tg, tb, true);
if (music.usingmmmmmm) {
graphics.Print(-1, 85, "Current soundtrack: MMMMMM", tr, tg, tb, true);
}
else {
graphics.Print(-1, 85, "Current soundtrack: PPPPPP", tr, tg, tb, true);
}
}
break;
}
case Menu::graphicoptions:
switch (game.currentmenuoption)
{
@ -252,20 +279,6 @@ static void menurender(void)
graphics.Print( -1, 85, "adjust the picture.", tr, tg, tb, true);
break;
case 5:
graphics.bigprint(-1, 30, "Toggle 30+ FPS", tr, tg, tb, true);
graphics.Print(-1, 65, "Change whether the game", tr, tg, tb, true);
graphics.Print(-1, 75, "runs at 30 or over 30 FPS.", tr, tg, tb, true);
if (!game.over30mode)
{
graphics.Print(-1, 95, "Current mode: 30 FPS", tr/2, tg/2, tb/2, true);
}
else
{
graphics.Print(-1, 95, "Current mode: Over 30 FPS", tr, tg, tb, true);
}
break;
case 6:
graphics.bigprint(-1, 30, "Toggle VSync", tr, tg, tb, true);
#ifdef __HAIKU__ // FIXME: Remove after SDL VSync bug is fixed! -flibit
graphics.Print(-1, 65, "Edit the config file on Haiku!", tr, tg, tb, true);
@ -462,6 +475,44 @@ static void menurender(void)
break;
case Menu::speedrunneroptions:
switch (game.currentmenuoption)
{
case 0:
graphics.bigprint(-1, 30, "Glitchrunner Mode", tr, tg, tb, true);
graphics.Print(-1, 65, "Re-enable glitches that existed", tr, tg, tb, true);
graphics.Print(-1, 75, "in previous versions of the game.", tr, tg, tb, true);
if (game.glitchrunnermode)
{
graphics.Print(-1, 95, "Glitchrunner mode is ON", tr, tg, tb, true);
}
else
{
graphics.Print(-1, 95, "Glitchrunner mode is OFF", tr / 2, tg / 2, tb / 2, true);
}
break;
case 1:
graphics.bigprint(-1, 30, "Input Delay", tr, tg, tb, true);
graphics.Print(-1, 65, "Re-enable the 1-frame input delay", tr, tg, tb, true);
graphics.Print(-1, 75, "from previous versions of the game.", tr, tg, tb, true);
if (game.inputdelay)
{
graphics.Print(-1, 95, "Input delay is ON", tr, tg, tb, true);
}
else
{
graphics.Print(-1, 95, "Input delay is OFF", tr / 2, tg / 2, tb / 2, true);
}
break;
case 2:
graphics.bigprint(-1, 30, "Fake Load Screen", tr, tg, tb, true);
if (game.skipfakeload)
graphics.Print(-1, 65, "Fake loading screen is OFF", tr / 2, tg / 2, tb / 2, true);
else
graphics.Print(-1, 65, "Fake loading screen is ON", tr, tg, tb, true);
break;
}
break;
case Menu::advancedoptions:
switch (game.currentmenuoption)
{
@ -490,13 +541,6 @@ static void menurender(void)
}
break;
case 2:
graphics.bigprint(-1, 30, "Fake Load Screen", tr, tg, tb, true);
if (game.skipfakeload)
graphics.Print(-1, 65, "Fake loading screen is OFF", tr/2, tg/2, tb/2, true);
else
graphics.Print(-1, 65, "Fake loading screen is ON", tr, tg, tb, true);
break;
case 3:
graphics.bigprint(-1, 30, "Room Name BG", tr, tg, tb, true);
graphics.Print( -1, 65, "Lets you see through what is behind", tr, tg, tb, true);
graphics.Print( -1, 75, "the name at the bottom of the screen.", tr, tg, tb, true);
@ -505,92 +549,74 @@ static void menurender(void)
else
graphics.Print(-1, 95, "Room name background is OPAQUE", tr, tg, tb, true);
break;
case 4:
graphics.bigprint( -1, 30, "Glitchrunner Mode", tr, tg, tb, true);
graphics.Print( -1, 65, "Re-enable glitches that existed", tr, tg, tb, true);
graphics.Print( -1, 75, "in previous versions of the game.", tr, tg, tb, true);
if (game.glitchrunnermode)
{
graphics.Print( -1, 95, "Glitchrunner mode is ON", tr, tg, tb, true);
}
else
{
graphics.Print( -1, 95, "Glitchrunner mode is OFF", tr/2, tg/2, tb/2, true);
}
break;
case 5:
graphics.bigprint(-1, 30, "Input Delay", tr, tg, tb, true);
graphics.Print(-1, 65, "Re-enable the 1-frame input delay", tr, tg, tb, true);
graphics.Print(-1, 75, "from previous versions of the game.", tr, tg, tb, true);
if (game.inputdelay)
{
graphics.Print(-1, 95, "Input delay is ON", tr, tg, tb, true);
}
else
{
graphics.Print(-1, 95, "Input delay is OFF", tr/2, tg/2, tb/2, true);
}
break;
}
break;
case Menu::accessibility:
switch (game.currentmenuoption)
{
case 0:
graphics.bigprint( -1, 40, "Backgrounds", tr, tg, tb, true);
if (!game.colourblindmode)
{
graphics.Print( -1, 75, "Backgrounds are ON.", tr, tg, tb, true);
}
else
{
graphics.Print( -1, 75, "Backgrounds are OFF.", tr/2, tg/2, tb/2, true);
}
break;
case 1:
graphics.bigprint( -1, 40, "Screen Effects", tr, tg, tb, true);
graphics.Print( -1, 75, "Disables screen shakes and flashes.", tr, tg, tb, true);
if (!game.noflashingmode)
{
graphics.Print( -1, 85, "Screen Effects are ON.", tr, tg, tb, true);
}
else
{
graphics.Print( -1, 85, "Screen Effects are OFF.", tr/2, tg/2, tb/2, true);
}
break;
case 2:
graphics.bigprint( -1, 40, "Text Outline", tr, tg, tb, true);
graphics.Print( -1, 75, "Disables outline on game text.", tr, tg, tb, true);
// FIXME: Maybe do an outlined print instead? -flibit
if (!graphics.notextoutline)
{
graphics.Print( -1, 85, "Text outlines are ON.", tr, tg, tb, true);
}
else
{
graphics.Print( -1, 85, "Text outlines are OFF.", tr/2, tg/2, tb/2, true);
}
break;
case 3:
graphics.bigprint( -1, 40, "Invincibility", tr, tg, tb, true);
graphics.Print( -1, 75, "Explore the game freely without", tr, tg, tb, true);
graphics.Print( -1, 85, "dying. (Can cause glitches.)", tr, tg, tb, true);
if (map.invincibility)
{
graphics.Print( -1, 105, "Invincibility is ON.", tr, tg, tb, true);
}
else
{
graphics.Print( -1, 105, "Invincibility is OFF.", tr/2, tg/2, tb/2, true);
}
break;
case 4:
graphics.bigprint( -1, 40, "Game Speed", tr, tg, tb, true);
graphics.Print( -1, 75, "Reduce the game speed.", tr, tg, tb, true);
drawslowdowntext();
}
break;
{
int accessibilityoffset = 0;
#if !defined(MAKEANDPLAY)
accessibilityoffset = 1;
if (game.currentmenuoption == 0) {
graphics.bigprint(-1, 30, "Unlock Play Modes", tr, tg, tb, true);
graphics.Print(-1, 65, "Unlock parts of the game normally", tr, tg, tb, true);
graphics.Print(-1, 75, "unlocked as you progress", tr, tg, tb, true);
}
#endif
if (game.currentmenuoption == accessibilityoffset + 0) {
graphics.bigprint(-1, 40, "Invincibility", tr, tg, tb, true);
graphics.Print(-1, 75, "Explore the game freely without", tr, tg, tb, true);
graphics.Print(-1, 85, "dying. (Can cause glitches.)", tr, tg, tb, true);
if (map.invincibility)
{
graphics.Print(-1, 105, "Invincibility is ON.", tr, tg, tb, true);
}
else
{
graphics.Print(-1, 105, "Invincibility is OFF.", tr / 2, tg / 2, tb / 2, true);
}
}else if (game.currentmenuoption == accessibilityoffset + 1) {
graphics.bigprint(-1, 40, "Slowdown", tr, tg, tb, true);
graphics.Print(-1, 75, "Reduce the game speed.", tr, tg, tb, true);
drawslowdowntext();
}
else if (game.currentmenuoption == accessibilityoffset + 2) {
graphics.bigprint(-1, 40, "Backgrounds", tr, tg, tb, true);
if (!game.colourblindmode)
{
graphics.Print(-1, 75, "Backgrounds are ON.", tr, tg, tb, true);
}
else
{
graphics.Print(-1, 75, "Backgrounds are OFF.", tr / 2, tg / 2, tb / 2, true);
}
}
else if (game.currentmenuoption == accessibilityoffset + 3) {
graphics.bigprint(-1, 40, "Screen Effects", tr, tg, tb, true);
graphics.Print(-1, 75, "Disables screen shakes and flashes.", tr, tg, tb, true);
if (!game.noflashingmode)
{
graphics.Print(-1, 85, "Screen Effects are ON.", tr, tg, tb, true);
}
else
{
graphics.Print(-1, 85, "Screen Effects are OFF.", tr / 2, tg / 2, tb / 2, true);
}
}
else if (game.currentmenuoption == accessibilityoffset + 4) {
graphics.bigprint(-1, 40, "Text Outline", tr, tg, tb, true);
graphics.Print(-1, 75, "Disables outline on game text.", tr, tg, tb, true);
// FIXME: Maybe do an outlined print instead? -flibit
if (!graphics.notextoutline)
{
graphics.Print(-1, 85, "Text outlines are ON.", tr, tg, tb, true);
}
else
{
graphics.Print(-1, 85, "Text outlines are OFF.", tr / 2, tg / 2, tb / 2, true);
}
}
break;
}
case Menu::playint1:
case Menu::playint2:
graphics.Print( -1, 65, "Who do you want to play", tr, tg, tb, true);
@ -1804,9 +1830,8 @@ void maprender(void)
{
#define OPTION(opt, text) graphics.map_option(opt, 4, text, game.menupage - 30 == opt)
OPTION(0, "return to game");
OPTION(1, "quit to menu");
OPTION(2, "graphic options");
OPTION(3, "game options");
OPTION(1, "options");
OPTION(2, "quit to menu");
#undef OPTION
}

View File

@ -3885,22 +3885,13 @@ static void editormenuactionpress(void)
graphics.backgrounddrawn=false;
break;
case 6:
case 7:
/* Graphic options and game options */
/* Game options */
music.playef(11);
game.gamestate = TITLEMODE;
game.ingame_titlemode = true;
game.ingame_editormode = true;
if (game.currentmenuoption == 6)
{
DEFER_CALLBACK(creategraphicoptions);
}
else
{
DEFER_CALLBACK(creategameoptions);
}
DEFER_CALLBACK(creategameoptions);
DEFER_CALLBACK(nextbgcolor);
break;
default: