1
0
Fork 0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-12-22 17:49:43 +01:00

Merge pull request #743 from InfoTeddy/general-improvements

Separate pressing Enter to open map from pressing Enter to interact
This commit is contained in:
Terry Cavanagh 2021-05-19 17:54:52 +10:30 committed by GitHub
commit 330162d1cb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 337 additions and 98 deletions

View file

@ -838,151 +838,151 @@ void entityclass::createblock( int t, int xp, int yp, int w, int h, int trig /*=
switch(trig)
{
case 0: //testing zone
block.prompt = "Press ENTER to explode";
block.prompt = "Press %s to explode";
block.script = "intro";
block.setblockcolour("orange");
trig=1;
break;
case 1:
block.prompt = "Press ENTER to talk to Violet";
block.prompt = "Press %s to talk to Violet";
block.script = "talkpurple";
block.setblockcolour("purple");
trig=0;
break;
case 2:
block.prompt = "Press ENTER to talk to Vitellary";
block.prompt = "Press %s to talk to Vitellary";
block.script = "talkyellow";
block.setblockcolour("yellow");
trig=0;
break;
case 3:
block.prompt = "Press ENTER to talk to Vermilion";
block.prompt = "Press %s to talk to Vermilion";
block.script = "talkred";
block.setblockcolour("red");
trig=0;
break;
case 4:
block.prompt = "Press ENTER to talk to Verdigris";
block.prompt = "Press %s to talk to Verdigris";
block.script = "talkgreen";
block.setblockcolour("green");
trig=0;
break;
case 5:
block.prompt = "Press ENTER to talk to Victoria";
block.prompt = "Press %s to talk to Victoria";
block.script = "talkblue";
block.setblockcolour("blue");
trig=0;
break;
case 6:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_station_1";
block.setblockcolour("orange");
trig=0;
break;
case 7:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_outside_1";
block.setblockcolour("orange");
trig=0;
break;
case 8:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_outside_2";
block.setblockcolour("orange");
trig=0;
break;
case 9:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_outside_3";
block.setblockcolour("orange");
trig=0;
break;
case 10:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_outside_4";
block.setblockcolour("orange");
trig=0;
break;
case 11:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_outside_5";
block.setblockcolour("orange");
trig=0;
break;
case 12:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_outside_6";
block.setblockcolour("orange");
trig=0;
break;
case 13:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_finallevel";
block.setblockcolour("orange");
trig=0;
break;
case 14:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_station_2";
block.setblockcolour("orange");
trig=0;
break;
case 15:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_station_3";
block.setblockcolour("orange");
trig=0;
break;
case 16:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_station_4";
block.setblockcolour("orange");
trig=0;
break;
case 17:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_warp_1";
block.setblockcolour("orange");
trig=0;
break;
case 18:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_warp_2";
block.setblockcolour("orange");
trig=0;
break;
case 19:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_lab_1";
block.setblockcolour("orange");
trig=0;
break;
case 20:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_lab_2";
block.setblockcolour("orange");
trig=0;
break;
case 21:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_secretlab";
block.setblockcolour("orange");
trig=0;
break;
case 22:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_shipcomputer";
block.setblockcolour("orange");
trig=0;
break;
case 23:
block.prompt = "Press ENTER to activate terminals";
block.prompt = "Press %s to activate terminals";
block.script = "terminal_radio";
block.setblockcolour("orange");
trig=0;
break;
case 24:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "terminal_jukebox";
block.setblockcolour("orange");
trig=0;
@ -1048,7 +1048,7 @@ void entityclass::createblock( int t, int xp, int yp, int w, int h, int trig /*=
trig=0;
break;
case 35:
block.prompt = "Press ENTER to activate terminal";
block.prompt = "Press %s to activate terminal";
block.script = "custom_"+customscript;
block.setblockcolour("orange");
trig=0;

View file

@ -131,8 +131,14 @@ void Game::init(void)
tapleft = 0;
tapright = 0;
press_right = 0;
press_left = 0;
press_right = false;
press_left = false;
press_action = false;
press_map = false;
press_interact = false;
interactheld = false;
separate_interact = false;
mapheld = false;
pausescript = false;
@ -4102,6 +4108,7 @@ void Game::deserializesettings(tinyxml2::XMLElement* dataNode, ScreenSettings* s
controllerButton_map.clear();
controllerButton_esc.clear();
controllerButton_restart.clear();
controllerButton_interact.clear();
for (tinyxml2::XMLElement* pElem = dataNode;
pElem != NULL;
@ -4230,6 +4237,11 @@ void Game::deserializesettings(tinyxml2::XMLElement* dataNode, ScreenSettings* s
music.user_sound_volume = help.Int(pText);
}
if (SDL_strcmp(pKey, "separate_interact") == 0)
{
separate_interact = help.Int(pText);
}
if (SDL_strcmp(pKey, "flipButton") == 0)
{
SDL_GameControllerButton newButton;
@ -4266,6 +4278,15 @@ void Game::deserializesettings(tinyxml2::XMLElement* dataNode, ScreenSettings* s
}
}
if (SDL_strcmp(pKey, "interactButton") == 0)
{
SDL_GameControllerButton newButton;
if (GetButtonFromString(pText, &newButton))
{
controllerButton_interact.push_back(newButton);
}
}
if (SDL_strcmp(pKey, "controllerSensitivity") == 0)
{
key.sensitivity = help.Int(pText);
@ -4289,6 +4310,10 @@ void Game::deserializesettings(tinyxml2::XMLElement* dataNode, ScreenSettings* s
{
controllerButton_restart.push_back(SDL_CONTROLLER_BUTTON_RIGHTSHOULDER);
}
if (controllerButton_interact.size() < 1)
{
controllerButton_interact.push_back(SDL_CONTROLLER_BUTTON_X);
}
}
bool Game::savestats(void)
@ -4454,6 +4479,8 @@ void Game::serializesettings(tinyxml2::XMLElement* dataNode, const ScreenSetting
xml::update_tag(dataNode, "soundvolume", music.user_sound_volume);
xml::update_tag(dataNode, "separate_interact", (int) separate_interact);
// Delete all controller buttons we had previously.
// dataNode->FirstChildElement() shouldn't be NULL at this point...
// we've already added a bunch of elements
@ -4466,7 +4493,8 @@ void Game::serializesettings(tinyxml2::XMLElement* dataNode, const ScreenSetting
if (SDL_strcmp(name, "flipButton") == 0
|| SDL_strcmp(name, "enterButton") == 0
|| SDL_strcmp(name, "escButton") == 0
|| SDL_strcmp(name, "restartButton") == 0)
|| SDL_strcmp(name, "restartButton") == 0
|| SDL_strcmp(name, "interactButton") == 0)
{
// Can't just doc.DeleteNode(element) and then go to next,
// element->NextSiblingElement() will be NULL.
@ -4508,6 +4536,12 @@ void Game::serializesettings(tinyxml2::XMLElement* dataNode, const ScreenSetting
msg->LinkEndChild(doc.NewText(help.String((int) controllerButton_restart[i]).c_str()));
dataNode->LinkEndChild(msg);
}
for (size_t i = 0; i < controllerButton_interact.size(); i += 1)
{
tinyxml2::XMLElement* msg = doc.NewElement("interactButton");
msg->LinkEndChild(doc.NewText(help.String((int) controllerButton_interact[i]).c_str()));
dataNode->LinkEndChild(msg);
}
xml::update_tag(dataNode, "controllerSensitivity", key.sensitivity);
}
@ -6045,6 +6079,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
case Menu::speedrunneroptions:
option("glitchrunner mode");
option("input delay");
option("interact button");
option("fake load screen");
option("return");
menuyoff = 0;
@ -6087,6 +6122,7 @@ void Game::createmenu( enum Menu::MenuName t, bool samemenu/*= false*/ )
option("bind enter");
option("bind menu");
option("bind restart");
option("bind interact");
option("return");
menuyoff = 0;
maxspacing = 10;

View file

@ -392,7 +392,9 @@ public:
int activeactivity, act_fade;
int prev_act_fade;
bool press_left, press_right, press_action, press_map;
bool press_left, press_right, press_action, press_map, press_interact;
bool interactheld;
bool separate_interact;
//Some stats:
int totalflips;
@ -422,6 +424,7 @@ public:
std::vector<SDL_GameControllerButton> controllerButton_flip;
std::vector<SDL_GameControllerButton> controllerButton_esc;
std::vector<SDL_GameControllerButton> controllerButton_restart;
std::vector<SDL_GameControllerButton> controllerButton_interact;
bool skipfakeload;
bool ghostsenabled;

View file

@ -24,9 +24,12 @@ static void updatebuttonmappings(int bind)
if (key.isDown(i))
{
bool dupe = false;
if (bind == 1)
switch (bind)
{
for (size_t j = 0; j < game.controllerButton_flip.size(); j += 1)
case 1:
{
size_t j;
for (j = 0; j < game.controllerButton_flip.size(); j += 1)
{
if (i == game.controllerButton_flip[j])
{
@ -38,31 +41,40 @@ static void updatebuttonmappings(int bind)
game.controllerButton_flip.push_back(i);
music.playef(11);
}
for (size_t j = 0; j < game.controllerButton_map.size(); j += 1)
for (j = 0; j < game.controllerButton_map.size(); j += 1)
{
if (i == game.controllerButton_map[j])
{
game.controllerButton_map.erase(game.controllerButton_map.begin() + j);
}
}
for (size_t j = 0; j < game.controllerButton_esc.size(); j += 1)
for (j = 0; j < game.controllerButton_esc.size(); j += 1)
{
if (i == game.controllerButton_esc[j])
{
game.controllerButton_esc.erase(game.controllerButton_esc.begin() + j);
}
}
for (size_t j = 0; j < game.controllerButton_restart.size(); j += 1)
for (j = 0; j < game.controllerButton_restart.size(); j += 1)
{
if (i == game.controllerButton_restart[j])
{
game.controllerButton_restart.erase(game.controllerButton_restart.begin() + j);
}
}
for (j = 0; j < game.controllerButton_interact.size(); j += 1)
{
if (i == game.controllerButton_interact[j])
{
game.controllerButton_interact.erase(game.controllerButton_interact.begin() + j);
}
}
break;
}
if (bind == 2)
case 2:
{
for (size_t j = 0; j < game.controllerButton_map.size(); j += 1)
size_t j;
for (j = 0; j < game.controllerButton_map.size(); j += 1)
{
if (i == game.controllerButton_map[j])
{
@ -74,31 +86,40 @@ static void updatebuttonmappings(int bind)
game.controllerButton_map.push_back(i);
music.playef(11);
}
for (size_t j = 0; j < game.controllerButton_flip.size(); j += 1)
for (j = 0; j < game.controllerButton_flip.size(); j += 1)
{
if (i == game.controllerButton_flip[j])
{
game.controllerButton_flip.erase(game.controllerButton_flip.begin() + j);
}
}
for (size_t j = 0; j < game.controllerButton_esc.size(); j += 1)
for (j = 0; j < game.controllerButton_esc.size(); j += 1)
{
if (i == game.controllerButton_esc[j])
{
game.controllerButton_esc.erase(game.controllerButton_esc.begin() + j);
}
}
for (size_t j = 0; j < game.controllerButton_restart.size(); j += 1)
for (j = 0; j < game.controllerButton_restart.size(); j += 1)
{
if (i == game.controllerButton_restart[j])
{
game.controllerButton_restart.erase(game.controllerButton_restart.begin() + j);
}
}
for (j = 0; j < game.controllerButton_interact.size(); j += 1)
{
if (i == game.controllerButton_interact[j])
{
game.controllerButton_interact.erase(game.controllerButton_interact.begin() + j);
}
}
break;
}
if (bind == 3)
case 3:
{
for (size_t j = 0; j < game.controllerButton_esc.size(); j += 1)
size_t j;
for (j = 0; j < game.controllerButton_esc.size(); j += 1)
{
if (i == game.controllerButton_esc[j])
{
@ -110,31 +131,40 @@ static void updatebuttonmappings(int bind)
game.controllerButton_esc.push_back(i);
music.playef(11);
}
for (size_t j = 0; j < game.controllerButton_flip.size(); j += 1)
for (j = 0; j < game.controllerButton_flip.size(); j += 1)
{
if (i == game.controllerButton_flip[j])
{
game.controllerButton_flip.erase(game.controllerButton_flip.begin() + j);
}
}
for (size_t j = 0; j < game.controllerButton_map.size(); j += 1)
for (j = 0; j < game.controllerButton_map.size(); j += 1)
{
if (i == game.controllerButton_map[j])
{
game.controllerButton_map.erase(game.controllerButton_map.begin() + j);
}
}
for (size_t j = 0; j < game.controllerButton_restart.size(); j += 1)
for (j = 0; j < game.controllerButton_restart.size(); j += 1)
{
if (i == game.controllerButton_restart[j])
{
game.controllerButton_restart.erase(game.controllerButton_restart.begin() + j);
}
}
for (j = 0; j < game.controllerButton_interact.size(); j += 1)
{
if (i == game.controllerButton_interact[j])
{
game.controllerButton_interact.erase(game.controllerButton_interact.begin() + j);
}
}
break;
}
if (bind == 4)
case 4:
{
for (size_t j = 0; j < game.controllerButton_restart.size(); j += 1)
size_t j;
for (j = 0; j < game.controllerButton_restart.size(); j += 1)
{
if (i == game.controllerButton_restart[j])
{
@ -146,27 +176,82 @@ static void updatebuttonmappings(int bind)
game.controllerButton_restart.push_back(i);
music.playef(11);
}
for (size_t j = 0; j < game.controllerButton_flip.size(); j += 1)
for (j = 0; j < game.controllerButton_flip.size(); j += 1)
{
if (i == game.controllerButton_flip[j])
{
game.controllerButton_flip.erase(game.controllerButton_flip.begin() + j);
}
}
for (size_t j = 0; j < game.controllerButton_map.size(); j += 1)
for (j = 0; j < game.controllerButton_map.size(); j += 1)
{
if (i == game.controllerButton_map[j])
{
game.controllerButton_map.erase(game.controllerButton_map.begin() + j);
}
}
for (size_t j = 0; j < game.controllerButton_esc.size(); j += 1)
for (j = 0; j < game.controllerButton_esc.size(); j += 1)
{
if (i == game.controllerButton_esc[j])
{
game.controllerButton_esc.erase(game.controllerButton_esc.begin() + j);
}
}
for (j = 0; j < game.controllerButton_interact.size(); j += 1)
{
if (i == game.controllerButton_interact[j])
{
game.controllerButton_interact.erase(game.controllerButton_interact.begin() + j);
}
}
break;
}
case 5:
{
size_t j;
for (j = 0; j < game.controllerButton_interact.size(); j += 1)
{
if (i == game.controllerButton_interact[j])
{
dupe = true;
}
}
if (!dupe)
{
game.controllerButton_interact.push_back(i);
music.playef(11);
}
for (j = 0; j < game.controllerButton_flip.size(); j += 1)
{
if (i == game.controllerButton_flip[j])
{
game.controllerButton_flip.erase(game.controllerButton_flip.begin() + j);
}
}
for (j = 0; j < game.controllerButton_map.size(); j += 1)
{
if (i == game.controllerButton_map[j])
{
game.controllerButton_map.erase(game.controllerButton_map.begin() + j);
}
}
for (j = 0; j < game.controllerButton_esc.size(); j += 1)
{
if (i == game.controllerButton_esc[j])
{
game.controllerButton_esc.erase(game.controllerButton_esc.begin() + j);
}
}
for (j = 0; j < game.controllerButton_restart.size(); j += 1)
{
if (i == game.controllerButton_restart[j])
{
game.controllerButton_restart.erase(game.controllerButton_restart.begin() + j);
}
}
break;
}
}
}
}
@ -586,6 +671,12 @@ static void menuactionpress(void)
game.savestatsandsettings_menu();
break;
case 2:
/* Interact button toggle */
music.playef(11);
game.separate_interact = !game.separate_interact;
game.savestatsandsettings_menu();
break;
case 3:
// toggle fake load screen
game.skipfakeload = !game.skipfakeload;
game.savestatsandsettings_menu();
@ -1310,7 +1401,7 @@ static void menuactionpress(void)
game.savestatsandsettings_menu();
break;
case 5:
case 6:
music.playef(11);
game.returnmenu();
map.nexttowercolour();
@ -1628,6 +1719,7 @@ void titleinput(void)
game.press_right = false;
game.press_action = false;
game.press_map = false;
game.press_interact = false;
if (graphics.flipmode)
{
@ -1744,7 +1836,7 @@ void titleinput(void)
}
if ( game.currentmenuname == Menu::controller &&
game.currentmenuoption > 0 &&
game.currentmenuoption < 5 &&
game.currentmenuoption < 6 &&
key.controllerButtonDown() )
{
updatebuttonmappings(game.currentmenuoption);
@ -1777,6 +1869,7 @@ void gameinput(void)
game.press_left = false;
game.press_right = false;
game.press_action = false;
game.press_interact = false;
if (key.isDown(KEYBOARD_LEFT) || key.isDown(KEYBOARD_a) || key.controllerWantsLeft(false))
{
@ -1790,7 +1883,12 @@ void gameinput(void)
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN) || key.isDown(KEYBOARD_w) || key.isDown(KEYBOARD_s)|| key.isDown(game.controllerButton_flip))
{
game.press_action = true;
};
}
if (key.isDown(KEYBOARD_e) || key.isDown(game.controllerButton_interact))
{
game.press_interact = true;
}
}
game.press_map = false;
@ -1838,6 +1936,11 @@ void gameinput(void)
game.mapheld = false;
}
if (!game.press_interact)
{
game.interactheld = false;
}
if (game.intimetrial && graphics.fademode == 1 && game.quickrestartkludge)
{
//restart the time trial
@ -1849,17 +1952,12 @@ void gameinput(void)
//Returning to editor mode must always be possible
#if !defined(NO_CUSTOM_LEVELS)
if(map.custommode && !map.custommodeforreal){
if ((game.press_map || key.isDown(27)) && !game.mapheld){
//Return to level editor
if (INBOUNDS_VEC(game.activeactivity, obj.blocks) && game.press_map){
//pass, let code block below handle it
}else if(game.activetele && game.readytotele > 20 && game.press_map){
//pass, let code block below handle it
}else{
game.returntoeditor();
game.mapheld = true;
}
if (map.custommode && !map.custommodeforreal)
{
if ((game.press_map || key.isDown(27)) && !game.mapheld)
{
game.returntoeditor();
game.mapheld = true;
}
}
#endif
@ -1868,6 +1966,15 @@ void gameinput(void)
bool has_control = false;
bool enter_pressed = game.press_map && !game.mapheld;
bool enter_already_processed = false;
bool interact_pressed;
if (game.separate_interact)
{
interact_pressed = game.press_interact && !game.interactheld;
}
else
{
interact_pressed = enter_pressed;
}
for (size_t ie = 0; ie < obj.entities.size(); ++ie)
{
if (obj.entities[ie].rule == 0)
@ -1875,12 +1982,16 @@ void gameinput(void)
if (game.hascontrol && game.deathseq == -1 && game.lifeseq <= 5)
{
has_control = true;
if (enter_pressed)
if (interact_pressed)
{
game.mapheld = true;
game.interactheld = true;
if (!game.separate_interact)
{
game.mapheld = true;
}
}
if (enter_pressed && !script.running)
if (interact_pressed && !script.running)
{
if (game.activetele && game.readytotele > 20 && !game.intimetrial)
{
@ -2058,9 +2169,10 @@ void gameinput(void)
}
}
// Continuation of Enter processing. The rest of the if-tree runs only if
// enter_pressed && !enter_already_pressed
if (!enter_pressed || enter_already_processed)
/* The rest of the if-tree runs only if enter is pressed and it has not
* already been processed with 'separate interact' off.
*/
if (!enter_pressed || (enter_already_processed && !game.separate_interact))
{
// Do nothing
}
@ -2135,6 +2247,7 @@ void mapinput(void)
game.press_right = false;
game.press_action = false;
game.press_map = false;
game.press_interact = false;
if (game.glitchrunnermode && graphics.fademode == 1 && graphics.menuoffset == 0)
{
@ -2441,6 +2554,7 @@ void teleporterinput(void)
game.press_right = false;
game.press_action = false;
game.press_map = false;
game.press_interact = false;
if(graphics.menuoffset==0)
{
@ -2448,10 +2562,17 @@ void teleporterinput(void)
if (key.isDown(KEYBOARD_RIGHT) || key.isDown(KEYBOARD_d)|| key.controllerWantsRight(false) ) game.press_right = true;
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v)
|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN)|| key.isDown(KEYBOARD_w)|| key.isDown(KEYBOARD_s) || key.isDown(game.controllerButton_flip)) game.press_action = true;
if (key.isDown(KEYBOARD_ENTER) || key.isDown(game.controllerButton_map)) game.press_map = true;
if (!game.separate_interact && (key.isDown(KEYBOARD_ENTER) || key.isDown(game.controllerButton_map)))
{
game.press_map = true;
}
if (key.isDown(KEYBOARD_e) || key.isDown(game.controllerButton_interact))
{
game.press_interact = true;
}
//In the menu system, all keypresses are single taps rather than holds. Therefore this test has to be done for all presses
if (!game.press_action && !game.press_left && !game.press_right) game.jumpheld = false;
if (!game.press_action && !game.press_left && !game.press_right && !game.press_interact) game.jumpheld = false;
if (!game.press_map) game.mapheld = false;
if (key.isDown(27))
@ -2478,7 +2599,7 @@ void teleporterinput(void)
if (!game.jumpheld)
{
if (game.press_action || game.press_left || game.press_right || game.press_map)
if (game.press_action || game.press_left || game.press_right || game.press_map || game.press_interact)
{
game.jumpheld = true;
}
@ -2521,7 +2642,7 @@ void teleporterinput(void)
while (!map.isexplored(tempx, tempy));
}
if (game.press_map)
if ((game.separate_interact && game.press_interact) || game.press_map)
{
tempx = map.teleporters[game.teleport_to_teleporter].x;
tempy = map.teleporters[game.teleport_to_teleporter].y;
@ -2568,6 +2689,7 @@ void gamecompleteinput(void)
game.press_right = false;
game.press_action = false;
game.press_map = false;
game.press_interact = false;
//Do this before we update map.bypos
if (!game.colourblindmode)
@ -2617,6 +2739,7 @@ void gamecompleteinput2(void)
game.press_right = false;
game.press_action = false;
game.press_map = false;
game.press_interact = false;
//Do this here because input comes first
game.oldcreditposx = game.creditposx;

View file

@ -19,6 +19,7 @@ enum Kybrd
KEYBOARD_s = SDLK_s,
KEYBOARD_a = SDLK_a,
KEYBOARD_d = SDLK_d,
KEYBOARD_e = SDLK_e,
KEYBOARD_m = SDLK_m,
KEYBOARD_n = SDLK_n,

View file

@ -1,3 +1,5 @@
#include <SDL.h>
#include "Credits.h"
#include "editor.h"
#include "Entity.h"
@ -525,24 +527,24 @@ static void menurender(void)
switch(key.sensitivity)
{
case 0:
graphics.Print( -1, 85, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 95, "[]..................", tr, tg, tb, true);
graphics.Print( -1, 75, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 85, "[]..................", tr, tg, tb, true);
break;
case 1:
graphics.Print( -1, 85, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 95, ".....[].............", tr, tg, tb, true);
graphics.Print( -1, 75, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 85, ".....[].............", tr, tg, tb, true);
break;
case 2:
graphics.Print( -1, 85, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 95, ".........[].........", tr, tg, tb, true);
graphics.Print( -1, 75, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 85, ".........[].........", tr, tg, tb, true);
break;
case 3:
graphics.Print( -1, 85, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 95, ".............[].....", tr, tg, tb, true);
graphics.Print( -1, 75, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 85, ".............[].....", tr, tg, tb, true);
break;
case 4:
graphics.Print( -1, 85, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 95, "..................[]", tr, tg, tb, true);
graphics.Print( -1, 75, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 85, "..................[]", tr, tg, tb, true);
break;
}
break;
@ -550,10 +552,12 @@ static void menurender(void)
case 2:
case 3:
case 4:
graphics.Print( -1, 85, "Flip is bound to: " + std::string(help.GCString(game.controllerButton_flip)) , tr, tg, tb, true);
graphics.Print( -1, 95, "Enter is bound to: " + std::string(help.GCString(game.controllerButton_map)), tr, tg, tb, true);
graphics.Print( -1, 105, "Menu is bound to: " + std::string(help.GCString(game.controllerButton_esc)) , tr, tg, tb, true);
graphics.Print( -1, 115, "Restart is bound to: " + std::string(help.GCString(game.controllerButton_restart)) , tr, tg, tb, true);
case 5:
graphics.Print( -1, 75, "Flip is bound to: " + std::string(help.GCString(game.controllerButton_flip)) , tr, tg, tb, true);
graphics.Print( -1, 85, "Enter is bound to: " + std::string(help.GCString(game.controllerButton_map)), tr, tg, tb, true);
graphics.Print( -1, 95, "Menu is bound to: " + std::string(help.GCString(game.controllerButton_esc)) , tr, tg, tb, true);
graphics.Print( -1, 105, "Restart is bound to: " + std::string(help.GCString(game.controllerButton_restart)) , tr, tg, tb, true);
graphics.Print( -1, 115, "Interact is bound to: " + std::string(help.GCString(game.controllerButton_interact)) , tr, tg, tb, true);
break;
}
@ -589,6 +593,29 @@ static void menurender(void)
}
break;
case 2:
{
/* Screen width 40 chars, 4 per char */
char buffer[160 + 1];
const char* button;
graphics.bigprint(-1, 30, "Interact Button", tr, tg, tb, true);
graphics.Print(-1, 65, "Toggle whether you interact", tr, tg, tb, true);
graphics.Print(-1, 75, "with prompts using ENTER or E.", tr, tg, tb, true);
if (game.separate_interact)
{
button = "E";
}
else
{
button = "ENTER";
}
SDL_snprintf(buffer, sizeof(buffer), "Interact button: %s", button);
graphics.Print(-1, 95, buffer, tr, tg, tb, true);
break;
}
case 3:
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);
@ -1530,6 +1557,35 @@ void gamecompleterender2(void)
graphics.render();
}
static const char* interact_prompt(
char* buffer,
const size_t buffer_size,
const char* raw
) {
const char* string_fmt_loc = SDL_strstr(raw, "%s");
const char* button;
if (string_fmt_loc == NULL /* No "%s". */
|| string_fmt_loc != SDL_strchr(raw, '%') /* First "%" found is not "%s". */
|| SDL_strchr(&string_fmt_loc[1], '%') != NULL) /* Other "%" after "%s". */
{
return raw;
}
if (game.separate_interact)
{
button = "E";
}
else
{
button = "ENTER";
}
SDL_snprintf(buffer, buffer_size, raw, button);
return buffer;
}
void gamerender(void)
{
@ -1632,15 +1688,17 @@ void gamerender(void)
if (game.readytotele > 100 || game.oldreadytotele > 100)
{
/* Screen width 40 chars, 4 per char */
char buffer[160 + 1];
static const char raw[] = "- Press %s to Teleport - ";
const char* final_string = interact_prompt(
buffer,
sizeof(buffer),
raw
);
int alpha = graphics.lerp(game.oldreadytotele, game.readytotele);
if(graphics.flipmode)
{
graphics.bprint(5, 20, "- Press ENTER to Teleport -", alpha - 20 - (help.glow / 2), alpha - 20 - (help.glow / 2), alpha, true);
}
else
{
graphics.bprint(5, 210, "- Press ENTER to Teleport -", alpha - 20 - (help.glow / 2), alpha - 20 - (help.glow / 2), alpha, true);
}
graphics.bprint(5, graphics.flipmode ? 20 : 210, final_string, alpha - 20 - (help.glow / 2), alpha - 20 - (help.glow / 2), alpha, true);
}
if (game.swnmode)
@ -1827,8 +1885,16 @@ void gamerender(void)
float act_alpha = graphics.lerp(game.prev_act_fade, game.act_fade) / 10.0f;
if(game.act_fade>5 || game.prev_act_fade>5)
{
/* Screen width 40 chars, 4 per char */
char buffer[160 + 1];
const char* final_string = interact_prompt(
buffer,
sizeof(buffer),
game.activity_lastprompt.c_str()
);
graphics.drawtextbox(16, 4, 36, 3, game.activity_r*act_alpha, game.activity_g*act_alpha, game.activity_b*act_alpha);
graphics.Print(5, 12, game.activity_lastprompt, game.activity_r*act_alpha, game.activity_g*act_alpha, game.activity_b*act_alpha, true);
graphics.Print(5, 12, final_string, game.activity_r*act_alpha, game.activity_g*act_alpha, game.activity_b*act_alpha, true);
}
if (obj.trophytext > 0 || obj.oldtrophytext > 0)
@ -2707,9 +2773,18 @@ void teleporterrender(void)
if (game.useteleporter)
{
/* Screen width 40 chars, 4 per char */
char buffer[160 + 1];
static const char raw[] = "Press %s to Teleport";
const char* final_string = interact_prompt(
buffer,
sizeof(buffer),
raw
);
//Instructions!
graphics.Print(5, 210, "Press Left/Right to choose a Teleporter", 220 - (help.glow), 220 - (help.glow), 255 - (help.glow / 2), true);
graphics.Print(5, 225, "Press ENTER to Teleport", 220 - (help.glow), 220 - (help.glow), 255 - (help.glow / 2), true);
graphics.Print(5, 225, final_string, 220 - (help.glow), 220 - (help.glow), 255 - (help.glow / 2), true);
}
graphics.drawgui();

View file

@ -3995,6 +3995,7 @@ void editorinput(void)
game.press_right = false;
game.press_action = false;
game.press_map = false;
game.press_interact = false;
if (key.isDown(KEYBOARD_LEFT) || key.isDown(KEYBOARD_a) || key.controllerWantsLeft(false))
{