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

View file

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

View file

@ -392,7 +392,9 @@ public:
int activeactivity, act_fade; int activeactivity, act_fade;
int prev_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: //Some stats:
int totalflips; int totalflips;
@ -422,6 +424,7 @@ public:
std::vector<SDL_GameControllerButton> controllerButton_flip; std::vector<SDL_GameControllerButton> controllerButton_flip;
std::vector<SDL_GameControllerButton> controllerButton_esc; std::vector<SDL_GameControllerButton> controllerButton_esc;
std::vector<SDL_GameControllerButton> controllerButton_restart; std::vector<SDL_GameControllerButton> controllerButton_restart;
std::vector<SDL_GameControllerButton> controllerButton_interact;
bool skipfakeload; bool skipfakeload;
bool ghostsenabled; bool ghostsenabled;

View file

@ -24,9 +24,12 @@ static void updatebuttonmappings(int bind)
if (key.isDown(i)) if (key.isDown(i))
{ {
bool dupe = false; 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]) if (i == game.controllerButton_flip[j])
{ {
@ -38,31 +41,40 @@ static void updatebuttonmappings(int bind)
game.controllerButton_flip.push_back(i); game.controllerButton_flip.push_back(i);
music.playef(11); 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]) if (i == game.controllerButton_map[j])
{ {
game.controllerButton_map.erase(game.controllerButton_map.begin() + 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]) if (i == game.controllerButton_esc[j])
{ {
game.controllerButton_esc.erase(game.controllerButton_esc.begin() + 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]) if (i == game.controllerButton_restart[j])
{ {
game.controllerButton_restart.erase(game.controllerButton_restart.begin() + j); game.controllerButton_restart.erase(game.controllerButton_restart.begin() + j);
} }
} }
} for (j = 0; j < game.controllerButton_interact.size(); j += 1)
if (bind == 2)
{ {
for (size_t j = 0; j < game.controllerButton_map.size(); j += 1) if (i == game.controllerButton_interact[j])
{
game.controllerButton_interact.erase(game.controllerButton_interact.begin() + j);
}
}
break;
}
case 2:
{
size_t j;
for (j = 0; j < game.controllerButton_map.size(); j += 1)
{ {
if (i == game.controllerButton_map[j]) if (i == game.controllerButton_map[j])
{ {
@ -74,31 +86,40 @@ static void updatebuttonmappings(int bind)
game.controllerButton_map.push_back(i); game.controllerButton_map.push_back(i);
music.playef(11); 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]) if (i == game.controllerButton_flip[j])
{ {
game.controllerButton_flip.erase(game.controllerButton_flip.begin() + 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]) if (i == game.controllerButton_esc[j])
{ {
game.controllerButton_esc.erase(game.controllerButton_esc.begin() + 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]) if (i == game.controllerButton_restart[j])
{ {
game.controllerButton_restart.erase(game.controllerButton_restart.begin() + j); game.controllerButton_restart.erase(game.controllerButton_restart.begin() + j);
} }
} }
} for (j = 0; j < game.controllerButton_interact.size(); j += 1)
if (bind == 3)
{ {
for (size_t j = 0; j < game.controllerButton_esc.size(); j += 1) if (i == game.controllerButton_interact[j])
{
game.controllerButton_interact.erase(game.controllerButton_interact.begin() + j);
}
}
break;
}
case 3:
{
size_t j;
for (j = 0; j < game.controllerButton_esc.size(); j += 1)
{ {
if (i == game.controllerButton_esc[j]) if (i == game.controllerButton_esc[j])
{ {
@ -110,31 +131,40 @@ static void updatebuttonmappings(int bind)
game.controllerButton_esc.push_back(i); game.controllerButton_esc.push_back(i);
music.playef(11); 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]) if (i == game.controllerButton_flip[j])
{ {
game.controllerButton_flip.erase(game.controllerButton_flip.begin() + 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]) if (i == game.controllerButton_map[j])
{ {
game.controllerButton_map.erase(game.controllerButton_map.begin() + 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]) if (i == game.controllerButton_restart[j])
{ {
game.controllerButton_restart.erase(game.controllerButton_restart.begin() + j); game.controllerButton_restart.erase(game.controllerButton_restart.begin() + j);
} }
} }
} for (j = 0; j < game.controllerButton_interact.size(); j += 1)
if (bind == 4)
{ {
for (size_t j = 0; j < game.controllerButton_restart.size(); j += 1) if (i == game.controllerButton_interact[j])
{
game.controllerButton_interact.erase(game.controllerButton_interact.begin() + j);
}
}
break;
}
case 4:
{
size_t j;
for (j = 0; j < game.controllerButton_restart.size(); j += 1)
{ {
if (i == game.controllerButton_restart[j]) if (i == game.controllerButton_restart[j])
{ {
@ -146,27 +176,82 @@ static void updatebuttonmappings(int bind)
game.controllerButton_restart.push_back(i); game.controllerButton_restart.push_back(i);
music.playef(11); 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]) if (i == game.controllerButton_flip[j])
{ {
game.controllerButton_flip.erase(game.controllerButton_flip.begin() + 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]) if (i == game.controllerButton_map[j])
{ {
game.controllerButton_map.erase(game.controllerButton_map.begin() + 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]) if (i == game.controllerButton_esc[j])
{ {
game.controllerButton_esc.erase(game.controllerButton_esc.begin() + 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(); game.savestatsandsettings_menu();
break; break;
case 2: case 2:
/* Interact button toggle */
music.playef(11);
game.separate_interact = !game.separate_interact;
game.savestatsandsettings_menu();
break;
case 3:
// toggle fake load screen // toggle fake load screen
game.skipfakeload = !game.skipfakeload; game.skipfakeload = !game.skipfakeload;
game.savestatsandsettings_menu(); game.savestatsandsettings_menu();
@ -1310,7 +1401,7 @@ static void menuactionpress(void)
game.savestatsandsettings_menu(); game.savestatsandsettings_menu();
break; break;
case 5: case 6:
music.playef(11); music.playef(11);
game.returnmenu(); game.returnmenu();
map.nexttowercolour(); map.nexttowercolour();
@ -1628,6 +1719,7 @@ void titleinput(void)
game.press_right = false; game.press_right = false;
game.press_action = false; game.press_action = false;
game.press_map = false; game.press_map = false;
game.press_interact = false;
if (graphics.flipmode) if (graphics.flipmode)
{ {
@ -1744,7 +1836,7 @@ void titleinput(void)
} }
if ( game.currentmenuname == Menu::controller && if ( game.currentmenuname == Menu::controller &&
game.currentmenuoption > 0 && game.currentmenuoption > 0 &&
game.currentmenuoption < 5 && game.currentmenuoption < 6 &&
key.controllerButtonDown() ) key.controllerButtonDown() )
{ {
updatebuttonmappings(game.currentmenuoption); updatebuttonmappings(game.currentmenuoption);
@ -1777,6 +1869,7 @@ void gameinput(void)
game.press_left = false; game.press_left = false;
game.press_right = false; game.press_right = false;
game.press_action = false; game.press_action = false;
game.press_interact = false;
if (key.isDown(KEYBOARD_LEFT) || key.isDown(KEYBOARD_a) || key.controllerWantsLeft(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)) || 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; game.press_action = true;
}; }
if (key.isDown(KEYBOARD_e) || key.isDown(game.controllerButton_interact))
{
game.press_interact = true;
}
} }
game.press_map = false; game.press_map = false;
@ -1838,6 +1936,11 @@ void gameinput(void)
game.mapheld = false; game.mapheld = false;
} }
if (!game.press_interact)
{
game.interactheld = false;
}
if (game.intimetrial && graphics.fademode == 1 && game.quickrestartkludge) if (game.intimetrial && graphics.fademode == 1 && game.quickrestartkludge)
{ {
//restart the time trial //restart the time trial
@ -1849,25 +1952,29 @@ void gameinput(void)
//Returning to editor mode must always be possible //Returning to editor mode must always be possible
#if !defined(NO_CUSTOM_LEVELS) #if !defined(NO_CUSTOM_LEVELS)
if(map.custommode && !map.custommodeforreal){ if (map.custommode && !map.custommodeforreal)
if ((game.press_map || key.isDown(27)) && !game.mapheld){ {
//Return to level editor if ((game.press_map || key.isDown(27)) && !game.mapheld)
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.returntoeditor();
game.mapheld = true; game.mapheld = true;
} }
} }
}
#endif #endif
//Entity type 0 is player controled //Entity type 0 is player controled
bool has_control = false; bool has_control = false;
bool enter_pressed = game.press_map && !game.mapheld; bool enter_pressed = game.press_map && !game.mapheld;
bool enter_already_processed = false; 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) for (size_t ie = 0; ie < obj.entities.size(); ++ie)
{ {
if (obj.entities[ie].rule == 0) if (obj.entities[ie].rule == 0)
@ -1875,12 +1982,16 @@ void gameinput(void)
if (game.hascontrol && game.deathseq == -1 && game.lifeseq <= 5) if (game.hascontrol && game.deathseq == -1 && game.lifeseq <= 5)
{ {
has_control = true; has_control = true;
if (enter_pressed) if (interact_pressed)
{
game.interactheld = true;
if (!game.separate_interact)
{ {
game.mapheld = true; game.mapheld = true;
} }
}
if (enter_pressed && !script.running) if (interact_pressed && !script.running)
{ {
if (game.activetele && game.readytotele > 20 && !game.intimetrial) 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 /* The rest of the if-tree runs only if enter is pressed and it has not
// enter_pressed && !enter_already_pressed * already been processed with 'separate interact' off.
if (!enter_pressed || enter_already_processed) */
if (!enter_pressed || (enter_already_processed && !game.separate_interact))
{ {
// Do nothing // Do nothing
} }
@ -2135,6 +2247,7 @@ void mapinput(void)
game.press_right = false; game.press_right = false;
game.press_action = false; game.press_action = false;
game.press_map = false; game.press_map = false;
game.press_interact = false;
if (game.glitchrunnermode && graphics.fademode == 1 && graphics.menuoffset == 0) if (game.glitchrunnermode && graphics.fademode == 1 && graphics.menuoffset == 0)
{ {
@ -2441,6 +2554,7 @@ void teleporterinput(void)
game.press_right = false; game.press_right = false;
game.press_action = false; game.press_action = false;
game.press_map = false; game.press_map = false;
game.press_interact = false;
if(graphics.menuoffset==0) 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_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) 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; || 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 //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 (!game.press_map) game.mapheld = false;
if (key.isDown(27)) if (key.isDown(27))
@ -2478,7 +2599,7 @@ void teleporterinput(void)
if (!game.jumpheld) 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; game.jumpheld = true;
} }
@ -2521,7 +2642,7 @@ void teleporterinput(void)
while (!map.isexplored(tempx, tempy)); 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; tempx = map.teleporters[game.teleport_to_teleporter].x;
tempy = map.teleporters[game.teleport_to_teleporter].y; tempy = map.teleporters[game.teleport_to_teleporter].y;
@ -2568,6 +2689,7 @@ void gamecompleteinput(void)
game.press_right = false; game.press_right = false;
game.press_action = false; game.press_action = false;
game.press_map = false; game.press_map = false;
game.press_interact = false;
//Do this before we update map.bypos //Do this before we update map.bypos
if (!game.colourblindmode) if (!game.colourblindmode)
@ -2617,6 +2739,7 @@ void gamecompleteinput2(void)
game.press_right = false; game.press_right = false;
game.press_action = false; game.press_action = false;
game.press_map = false; game.press_map = false;
game.press_interact = false;
//Do this here because input comes first //Do this here because input comes first
game.oldcreditposx = game.creditposx; game.oldcreditposx = game.creditposx;

View file

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

View file

@ -1,3 +1,5 @@
#include <SDL.h>
#include "Credits.h" #include "Credits.h"
#include "editor.h" #include "editor.h"
#include "Entity.h" #include "Entity.h"
@ -525,24 +527,24 @@ static void menurender(void)
switch(key.sensitivity) switch(key.sensitivity)
{ {
case 0: case 0:
graphics.Print( -1, 85, " Low Medium High", tr, tg, tb, true); graphics.Print( -1, 75, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 95, "[]..................", tr, tg, tb, true); graphics.Print( -1, 85, "[]..................", tr, tg, tb, true);
break; break;
case 1: case 1:
graphics.Print( -1, 85, " Low Medium High", tr, tg, tb, true); graphics.Print( -1, 75, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 95, ".....[].............", tr, tg, tb, true); graphics.Print( -1, 85, ".....[].............", tr, tg, tb, true);
break; break;
case 2: case 2:
graphics.Print( -1, 85, " Low Medium High", tr, tg, tb, true); graphics.Print( -1, 75, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 95, ".........[].........", tr, tg, tb, true); graphics.Print( -1, 85, ".........[].........", tr, tg, tb, true);
break; break;
case 3: case 3:
graphics.Print( -1, 85, " Low Medium High", tr, tg, tb, true); graphics.Print( -1, 75, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 95, ".............[].....", tr, tg, tb, true); graphics.Print( -1, 85, ".............[].....", tr, tg, tb, true);
break; break;
case 4: case 4:
graphics.Print( -1, 85, " Low Medium High", tr, tg, tb, true); graphics.Print( -1, 75, " Low Medium High", tr, tg, tb, true);
graphics.Print( -1, 95, "..................[]", tr, tg, tb, true); graphics.Print( -1, 85, "..................[]", tr, tg, tb, true);
break; break;
} }
break; break;
@ -550,10 +552,12 @@ static void menurender(void)
case 2: case 2:
case 3: case 3:
case 4: case 4:
graphics.Print( -1, 85, "Flip is bound to: " + std::string(help.GCString(game.controllerButton_flip)) , tr, tg, tb, true); case 5:
graphics.Print( -1, 95, "Enter is bound to: " + std::string(help.GCString(game.controllerButton_map)), tr, tg, tb, true); graphics.Print( -1, 75, "Flip is bound to: " + std::string(help.GCString(game.controllerButton_flip)) , 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, 85, "Enter is bound to: " + std::string(help.GCString(game.controllerButton_map)), tr, tg, tb, true);
graphics.Print( -1, 115, "Restart is bound to: " + std::string(help.GCString(game.controllerButton_restart)) , 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; break;
} }
@ -589,6 +593,29 @@ static void menurender(void)
} }
break; break;
case 2: 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); graphics.bigprint(-1, 30, "Fake Load Screen", tr, tg, tb, true);
if (game.skipfakeload) if (game.skipfakeload)
graphics.Print(-1, 65, "Fake loading screen is OFF", tr / 2, tg / 2, tb / 2, true); 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(); 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) void gamerender(void)
{ {
@ -1632,15 +1688,17 @@ void gamerender(void)
if (game.readytotele > 100 || game.oldreadytotele > 100) 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); int alpha = graphics.lerp(game.oldreadytotele, game.readytotele);
if(graphics.flipmode)
{ graphics.bprint(5, graphics.flipmode ? 20 : 210, final_string, alpha - 20 - (help.glow / 2), alpha - 20 - (help.glow / 2), alpha, true);
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);
}
} }
if (game.swnmode) if (game.swnmode)
@ -1827,8 +1885,16 @@ void gamerender(void)
float act_alpha = graphics.lerp(game.prev_act_fade, game.act_fade) / 10.0f; float act_alpha = graphics.lerp(game.prev_act_fade, game.act_fade) / 10.0f;
if(game.act_fade>5 || game.prev_act_fade>5) 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.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) if (obj.trophytext > 0 || obj.oldtrophytext > 0)
@ -2707,9 +2773,18 @@ void teleporterrender(void)
if (game.useteleporter) 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! //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, 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(); graphics.drawgui();

View file

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