1
0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-06-25 22:18:30 +02:00
VVVVVV/desktop_version/src/Input.cpp
Misa b1b1474b7b Refactor entities and linecrosskludge to not use the 'active' system
This removes the variables obj.nentity and obj.nlinecrosskludge, as well
as removing the 'active' attribute from the entity class object. Now
every entity you access is guaranteed to be real and you don't have to
check the 'active' variable.

The biggest part of this is changing createentity() to modify a
newly-created entity object and push it back instead of already
modifying an indice in obj.entities.

As well, removing an entity now uses the new obj.removeentity() function
and removeentity_iter() macro.
2020-04-03 23:28:47 -04:00

2365 lines
90 KiB
C++

#include "Input.h"
#include "Script.h"
#include "MakeAndPlay.h"
#include "tinyxml.h"
#include "FileSystemUtils.h"
extern scriptclass script;
void updatebuttonmappings(int bind)
{
for (
SDL_GameControllerButton i = SDL_CONTROLLER_BUTTON_A;
i < SDL_CONTROLLER_BUTTON_DPAD_UP;
i = (SDL_GameControllerButton) (i + 1)
) {
if (key.isDown(i))
{
bool dupe = false;
if (bind == 1)
{
for (size_t j = 0; j < game.controllerButton_flip.size(); j += 1)
{
if (i == game.controllerButton_flip[j])
{
dupe = true;
}
}
if (!dupe)
{
game.controllerButton_flip.push_back(i);
music.playef(11);
}
for (size_t 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)
{
if (i == game.controllerButton_esc[j])
{
game.controllerButton_esc.erase(game.controllerButton_esc.begin() + j);
}
}
}
if (bind == 2)
{
for (size_t j = 0; j < game.controllerButton_map.size(); j += 1)
{
if (i == game.controllerButton_map[j])
{
dupe = true;
}
}
if (!dupe)
{
game.controllerButton_map.push_back(i);
music.playef(11);
}
for (size_t 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)
{
if (i == game.controllerButton_esc[j])
{
game.controllerButton_esc.erase(game.controllerButton_esc.begin() + j);
}
}
}
if (bind == 3)
{
for (size_t j = 0; j < game.controllerButton_esc.size(); j += 1)
{
if (i == game.controllerButton_esc[j])
{
dupe = true;
}
}
if (!dupe)
{
game.controllerButton_esc.push_back(i);
music.playef(11);
}
for (size_t 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)
{
if (i == game.controllerButton_map[j])
{
game.controllerButton_map.erase(game.controllerButton_map.begin() + j);
}
}
}
}
}
}
void titleinput()
{
//game.mx = (mouseX / 4);
//game.my = (mouseY / 4);
//TODO bit wasteful doing this every poll
key.setSensitivity(game.controllerSensitivity);
game.press_left = false;
game.press_right = false;
game.press_action = false;
game.press_map = false;
if (graphics.flipmode)
{
if (key.isDown(KEYBOARD_LEFT) || key.isDown(KEYBOARD_DOWN) || key.isDown(KEYBOARD_a) || key.isDown(KEYBOARD_s) || key.controllerWantsRight(true)) game.press_left = true;
if (key.isDown(KEYBOARD_RIGHT) || key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_d) || key.isDown(KEYBOARD_w) || key.controllerWantsLeft(true)) game.press_right = true;
}
else
{
if (key.isDown(KEYBOARD_LEFT) || key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_a) || key.isDown(KEYBOARD_w) || key.controllerWantsLeft(true))
{
game.press_left = true;
}
if (key.isDown(KEYBOARD_RIGHT) || key.isDown(KEYBOARD_DOWN) || key.isDown(KEYBOARD_d) || key.isDown(KEYBOARD_s) || key.controllerWantsRight(true))
{
game.press_right = true;
}
}
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip)) game.press_action = true;
//|| key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_DOWN)) game.press_action = true; //on menus, up and down don't work as action
if (key.isDown(KEYBOARD_ENTER)) game.press_map = 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_map) game.mapheld = false;
if (!game.jumpheld && graphics.fademode==0)
{
if (game.press_action || game.press_left || game.press_right || game.press_map)
{
game.jumpheld = true;
}
if (key.isDown(27) && game.currentmenuname != "youwannaquit" && game.menustart)
{
music.playef(11);
game.previousmenuname = game.currentmenuname;
game.createmenu("youwannaquit");
map.nexttowercolour();
}
if(game.menustart)
{
if (game.press_left)
{
game.currentmenuoption--;
}
else if (game.press_right)
{
game.currentmenuoption++;
}
}
if (game.currentmenuoption < 0) game.currentmenuoption = game.nummenuoptions-1;
if (game.currentmenuoption >= game.nummenuoptions ) game.currentmenuoption = 0;
if (game.press_action)
{
if (!game.menustart)
{
game.menustart = true;
music.play(6);
music.playef(18);
game.screenshake = 10;
game.flashlight = 5;
map.colstate = 10;
map.nexttowercolour();
}
else
{
if (game.currentmenuname == "mainmenu")
{
#if defined(MAKEANDPLAY)
if (game.currentmenuoption == 0)
{
//Bring you to the normal playmenu
music.playef(11);
game.createmenu("playerworlds");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
//Options
music.playef(11);
game.createmenu("graphicoptions");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//Options
music.playef(11);
game.createmenu("options");
//Add extra menu for mmmmmm mod
if(music.mmmmmm){
game.menuoptions[3] = "soundtrack";
game.menuoptionsactive[3] = true;
game.menuoptions[4] = "return";
game.menuoptionsactive[4] = true;
game.nummenuoptions = 5;
}
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//bye!
music.playef(2);
game.mainmenu = 100;
graphics.fademode = 2;
}
}
#elif !defined(MAKEANDPLAY)
#if defined(NO_CUSTOM_LEVELS)
if (game.currentmenuoption == 0)
{
//Play
if (game.telesummary == "" && game.quicksummary == "")
{
//No saves exist, just start a new game
game.mainmenu = 0;
graphics.fademode = 2;
}
else
{
//Bring you to the normal playmenu
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuoption == 1)
{
//Options
music.playef(11);
game.createmenu("graphicoptions");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//Options
music.playef(11);
game.createmenu("options");
//Add extra menu for mmmmmm mod
if(music.mmmmmm){
game.menuoptions[4] = "soundtrack";
game.menuoptionsactive[4] = true;
game.menuoptions[5] = "return";
game.menuoptionsactive[5] = true;
game.nummenuoptions = 6;
}
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//Credits
music.playef(11);
game.createmenu("credits");
map.nexttowercolour();
}
else if (game.currentmenuoption == 4)
{
//bye!
music.playef(2);
game.mainmenu = 100;
graphics.fademode = 2;
}
#else
if (game.currentmenuoption == 0)
{
//Play
if (game.telesummary == "" && game.quicksummary == "")
{
//No saves exist, just start a new game
game.mainmenu = 0;
graphics.fademode = 2;
}
else
{
//Bring you to the normal playmenu
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuoption == 1)
{
//Bring you to the normal playmenu
music.playef(11);
game.createmenu("playerworlds");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//Options
music.playef(11);
game.createmenu("graphicoptions");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//Options
music.playef(11);
game.createmenu("options");
//Add extra menu for mmmmmm mod
if(music.mmmmmm){
game.menuoptions[4] = "soundtrack";
game.menuoptionsactive[4] = true;
game.menuoptions[5] = "return";
game.menuoptionsactive[5] = true;
game.nummenuoptions = 6;
}
map.nexttowercolour();
}
else if (game.currentmenuoption == 4)
{
//Credits
music.playef(11);
game.createmenu("credits");
map.nexttowercolour();
}
else if (game.currentmenuoption == 5)
{
//bye!
music.playef(2);
game.mainmenu = 100;
graphics.fademode = 2;
}
#endif
}
#endif
#if !defined(NO_CUSTOM_LEVELS)
else if(game.currentmenuname=="levellist")
{
if(game.currentmenuoption==game.nummenuoptions-1){
//go back to menu
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}else if(game.currentmenuoption==game.nummenuoptions-2){
//next page
music.playef(11);
if((size_t) ((game.levelpage*8)+8) >= ed.ListOfMetaData.size()){
game.levelpage=0;
}else{
game.levelpage++;
}
game.createmenu("levellist");
game.currentmenuoption=game.nummenuoptions-2;
map.nexttowercolour();
}else{
//Ok, launch the level!
//PLAY CUSTOM LEVEL HOOK
music.playef(11);
game.playcustomlevel=(game.levelpage*8)+game.currentmenuoption;
game.customleveltitle=ed.ListOfMetaData[game.playcustomlevel].title;
game.customlevelfilename=ed.ListOfMetaData[game.playcustomlevel].filename;
std::string name = "saves/" + ed.ListOfMetaData[game.playcustomlevel].filename.substr(7) + ".vvv";
TiXmlDocument doc;
if (!FILESYSTEM_loadTiXmlDocument(name.c_str(), &doc)){
game.mainmenu = 22;
graphics.fademode = 2;
}else{
game.createmenu("quickloadlevel");
map.nexttowercolour();
}
}
}
#endif
else if(game.currentmenuname=="quickloadlevel")
{
if(game.currentmenuoption==0){//continue save
game.mainmenu = 23;
graphics.fademode = 2;
}else if(game.currentmenuoption==1){
game.mainmenu = 22;
graphics.fademode = 2;
}else if(game.currentmenuoption==2){
music.playef(11);
game.levelpage=0;
game.createmenu("levellist");
map.nexttowercolour();
}
}
#if !defined(NO_CUSTOM_LEVELS)
else if(game.currentmenuname=="playerworlds")
{
#if !defined(NO_EDITOR)
if(game.currentmenuoption==0){
music.playef(11);
game.levelpage=0;
ed.getDirectoryData();
game.loadcustomlevelstats(); //Should only load a file if it's needed
game.createmenu("levellist");
map.nexttowercolour();
}else if(game.currentmenuoption==1){
//LEVEL EDITOR HOOK
music.playef(11);
game.mainmenu = 20;
graphics.fademode = 2;
ed.filename="";
}/*else if(game.currentmenuoption==2){
music.playef(11);
//"OPENFOLDERHOOK"
//When the player selects the "open level folder" menu option,
//this is where it should run the appropriate code.
//This code should:
// - Minimise the game
// - Open the levels folder for whatever operating system we're on
SDL_assert(0 && "Remove open level dir");
}*/else if(game.currentmenuoption==2){
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
#else
if(game.currentmenuoption==0){
music.playef(11);
game.levelpage=0;
ed.getDirectoryData();
game.loadcustomlevelstats(); //Should only load a file if it's needed
game.createmenu("levellist");
map.nexttowercolour();
}else if(game.currentmenuoption==1){
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
#endif
}
#endif
else if(game.currentmenuname=="errornostart"){
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
else if (game.currentmenuname == "graphicoptions")
{
if (game.currentmenuoption == 0){
music.playef(11);
graphics.screenbuffer->toggleFullScreen();
game.fullscreen = !game.fullscreen;
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 0;
}else if (game.currentmenuoption == 1){
music.playef(11);
graphics.screenbuffer->toggleStretchMode();
game.stretchMode = (game.stretchMode + 1) % 3;
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 1;
}else if (game.currentmenuoption == 2){
music.playef(11);
graphics.screenbuffer->toggleLinearFilter();
game.useLinearFilter = !game.useLinearFilter;
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 2;
}else if (game.currentmenuoption == 3){
//change smoothing
music.playef(11);
game.fullScreenEffect_badSignal = !game.fullScreenEffect_badSignal;
//Hook the analogue thing in here: ABCDEFG
graphics.screenbuffer->badSignalEffect= !graphics.screenbuffer->badSignalEffect;
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 3;
}else if (game.currentmenuoption == 4) {
//toggle mouse cursor
music.playef(11);
if (graphics.showmousecursor == true) {
SDL_ShowCursor(SDL_DISABLE);
graphics.showmousecursor = false;
}
else {
SDL_ShowCursor(SDL_ENABLE);
graphics.showmousecursor = true;
}
}
else
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "youwannaquit")
{
if (game.currentmenuoption == 0)
{
//bye!
music.playef(2);
game.mainmenu = 100;
graphics.fademode = 2;
}
else
{
music.playef(11);
game.createmenu(game.previousmenuname);
map.nexttowercolour();
}
}
else if (game.currentmenuname == "setinvincibility")
{
if (game.currentmenuoption == 0)
{
//back
music.playef(11);
game.createmenu("accessibility");
game.currentmenuoption = 3;
map.nexttowercolour();
}
else
{
map.invincibility = !map.invincibility;
game.savestats();
music.playef(11);
game.createmenu("accessibility");
game.currentmenuoption = 3;
map.nexttowercolour();
}
}
else if (game.currentmenuname == "setslowdown1")
{
if (game.currentmenuoption == 0)
{
//back
music.playef(11);
game.createmenu("accessibility");
game.currentmenuoption = 4;
map.nexttowercolour();
}
else
{
//change game speed
game.deletequick();
game.deletetele();
game.createmenu("setslowdown2");
map.nexttowercolour();
music.playef(11);
}
}
else if (game.currentmenuname == "setslowdown2")
{
if (game.currentmenuoption == 0)
{
//back
game.gameframerate=34;
game.slowdown = 30;
game.savestats();
music.playef(11);
game.createmenu("accessibility");
game.currentmenuoption = 4;
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
game.gameframerate=41;
game.slowdown = 24;
game.savestats();
music.playef(11);
game.createmenu("accessibility");
game.currentmenuoption = 4;
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
game.gameframerate=55;
game.slowdown = 18;
game.savestats();
music.playef(11);
game.createmenu("accessibility");
game.currentmenuoption = 4;
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
game.gameframerate=83;
game.slowdown = 12;
game.savestats();
music.playef(11);
game.createmenu("accessibility");
game.currentmenuoption = 4;
map.nexttowercolour();
}
}
else if (game.currentmenuname == "accessibility")
{
if (game.currentmenuoption == 0)
{
//disable animated backgrounds
game.colourblindmode = !game.colourblindmode;
game.savestats();
map.tdrawback = true;
music.playef(11);
}
else if (game.currentmenuoption == 1)
{
//disable screeneffects
game.noflashingmode = !game.noflashingmode;
game.savestats();
if (!game.noflashingmode)
{
music.playef(18);
game.screenshake = 10;
game.flashlight = 5;
}else{
music.playef(11);
}
}
else if (game.currentmenuoption == 2)
{
//disable text outline
graphics.notextoutline = !graphics.notextoutline;
game.savestats();
music.playef(11);
}
else if (game.currentmenuoption == 3)
{
//invincibility
if (!map.invincibility)
{
game.createmenu("setinvincibility");
map.nexttowercolour();
}
else
{
map.invincibility = !map.invincibility;
}
music.playef(11);
}
else if (game.currentmenuoption == 4)
{
//change game speed
game.createmenu("setslowdown2");
map.nexttowercolour();
music.playef(11);
}
else if (game.currentmenuoption == 5)
{
// toggle fake load screen
game.skipfakeload = !game.skipfakeload;
music.playef(11);
}
else if (game.currentmenuoption == 6)
{
// toggle translucent roomname BG
graphics.translucentroomname = !graphics.translucentroomname;
music.playef(11);
}
else if (game.currentmenuoption == 7)
{
//back
music.playef(11);
game.createmenu("options");
//Add extra menu for mmmmmm mod
if(music.mmmmmm){
#if defined(MAKEANDPLAY)
game.menuoptions[3] = "soundtrack";
game.menuoptionsactive[3] = true;
game.menuoptions[4] = "return";
game.menuoptionsactive[4] = true;
game.nummenuoptions = 5;
#elif !defined(MAKEANDPLAY)
game.menuoptions[4] = "soundtrack";
game.menuoptionsactive[4] = true;
game.menuoptions[5] = "return";
game.menuoptionsactive[5] = true;
game.nummenuoptions = 6;
#endif
}
map.nexttowercolour();
}
else
{
//Can't do yet! play sad sound
music.playef(2);
}
}
else if (game.currentmenuname == "options")
{
#if defined(MAKEANDPLAY)
if (game.currentmenuoption == 0)
{
//accessibility options
music.playef(11);
game.createmenu("accessibility");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
//clear data menu
music.playef(11);
game.createmenu("controller");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//clear data menu
music.playef(11);
game.createmenu("cleardatamenu");
map.nexttowercolour();
}
if(music.mmmmmm){
if (game.currentmenuoption == 3)
{
//**** TOGGLE MMMMMM
if(game.usingmmmmmm > 0){
game.usingmmmmmm=0;
}else{
game.usingmmmmmm=1;
}
music.usingmmmmmm = !music.usingmmmmmm;
music.playef(11);
music.play(6);
game.savestats();
game.createmenu("mainmenu");
map.nexttowercolour();
}
if (game.currentmenuoption == 4)
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}else{
if (game.currentmenuoption == 3)
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
#elif !defined(MAKEANDPLAY)
if (game.currentmenuoption == 0)
{
//accessibility options
music.playef(11);
game.createmenu("accessibility");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
//unlock play options
music.playef(11);
game.createmenu("unlockmenu");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//clear data menu
music.playef(11);
game.createmenu("controller");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//clear data menu
music.playef(11);
game.createmenu("cleardatamenu");
map.nexttowercolour();
}
if(music.mmmmmm){
if (game.currentmenuoption == 4)
{
//**** TOGGLE MMMMMM
if(game.usingmmmmmm > 0){
game.usingmmmmmm=0;
}else{
game.usingmmmmmm=1;
}
music.usingmmmmmm = !music.usingmmmmmm;
music.playef(11);
music.play(6);
game.savestats();
game.createmenu("mainmenu");
map.nexttowercolour();
}
if (game.currentmenuoption == 5)
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}else{
if (game.currentmenuoption == 4)
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
#endif
}
else if (game.currentmenuname == "unlockmenutrials")
{
if (game.currentmenuoption == 0) //unlock 1
{
game.unlock[9] = true;
game.unlocknotify[9] = true;
music.playef(11);
game.savestats();
game.createmenu("unlockmenutrials");
game.currentmenuoption = 0;
}
else if (game.currentmenuoption == 1) //unlock 2
{
game.unlock[10] = true;
game.unlocknotify[10] = true;
music.playef(11);
game.savestats();
game.createmenu("unlockmenutrials");
game.currentmenuoption = 1;
}
else if (game.currentmenuoption == 2) //unlock 3
{
game.unlock[11] = true;
game.unlocknotify[11] = true;
music.playef(11);
game.savestats();
game.createmenu("unlockmenutrials");
game.currentmenuoption = 2;
}
else if (game.currentmenuoption == 3) //unlock 4
{
game.unlock[12] = true;
game.unlocknotify[12] = true;
music.playef(11);
game.savestats();
game.createmenu("unlockmenutrials");
game.currentmenuoption = 3;
}
else if (game.currentmenuoption == 4) //unlock 5
{
game.unlock[13] = true;
game.unlocknotify[13] = true;
music.playef(11);
game.savestats();
game.createmenu("unlockmenutrials");
game.currentmenuoption = 4;
}
else if (game.currentmenuoption == 5) //unlock 6
{
game.unlock[14] = true;
game.unlocknotify[14] = true;
music.playef(11);
game.savestats();
game.createmenu("unlockmenutrials");
game.currentmenuoption = 5;
}
else if (game.currentmenuoption == 6) //back
{
//back
music.playef(11);
game.createmenu("unlockmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "unlockmenu")
{
if (game.currentmenuoption == 0)
{
//unlock time trials separately...
music.playef(11);
game.createmenu("unlockmenutrials");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
//unlock intermissions
music.playef(11);
game.unlock[16] = true;
game.unlocknotify[16] = true;
game.unlock[6] = true;
game.unlock[7] = true;
game.savestats();
game.createmenu("unlockmenu");
game.currentmenuoption = 1;
}
else if (game.currentmenuoption == 2)
{
//unlock no death mode
music.playef(11);
game.unlock[17] = true;
game.unlocknotify[17] = true;
game.savestats();
game.createmenu("unlockmenu");
game.currentmenuoption = 2;
}
else if (game.currentmenuoption == 3)
{
//unlock flip mode
music.playef(11);
game.unlock[18] = true;
game.unlocknotify[18] = true;
game.savestats();
game.createmenu("unlockmenu");
game.currentmenuoption = 3;
}
else if (game.currentmenuoption == 4)
{
//unlock jukebox
music.playef(11);
game.stat_trinkets = 20;
game.savestats();
game.createmenu("unlockmenu");
game.currentmenuoption = 4;
}
else if (game.currentmenuoption == 5)
{
//unlock secret lab
music.playef(11);
game.unlock[8] = true;
game.unlocknotify[8] = true;
game.savestats();
game.createmenu("unlockmenu");
game.currentmenuoption = 5;
}
else
{
//back
music.playef(11);
game.createmenu("options");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "credits")
{
if (game.currentmenuoption == 0)
{
//next page
music.playef(11);
game.createmenu("credits2");
map.nexttowercolour();
}
else
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "credits2")
{
if (game.currentmenuoption == 0)
{
//next page
music.playef(11);
game.createmenu("credits25");
map.nexttowercolour();
}
else
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "credits25")
{
if (game.currentmenuoption == 0)
{
//next page
music.playef(11);
game.createmenu("credits3");
map.nexttowercolour();
}
else
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "credits3")
{
if (game.currentmenuoption == 0)
{
//next page
music.playef(11);
game.current_credits_list_index += 9;
if (game.current_credits_list_index >= (int)game.superpatrons.size())
{
// No more super patrons. Move to the next credits section
game.current_credits_list_index = 0;
game.createmenu("credits4");
}
else
{
// There are more super patrons. Refresh the menu with the next ones
game.createmenu("credits3");
}
map.nexttowercolour();
}
else
{
//back
music.playef(11);
game.current_credits_list_index = 0;
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "credits4")
{
if (game.currentmenuoption == 0)
{
//next page
music.playef(11);
game.current_credits_list_index += 14;
if (game.current_credits_list_index >= (int)game.patrons.size())
{
// No more patrons. Move to the next credits section
game.current_credits_list_index = 0;
game.createmenu("credits5");
}
else
{
// There are more patrons. Refresh the menu with the next ones
game.createmenu("credits4");
}
map.nexttowercolour();
}
else
{
//back
music.playef(11);
game.current_credits_list_index = 0;
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "credits5")
{
if (game.currentmenuoption == 0)
{
//next page
music.playef(11);
game.current_credits_list_index += 9;
if (game.current_credits_list_index >= (int)game.githubfriends.size())
{
// No more GitHub contributors. Move to the next credits section
game.current_credits_list_index = 0;
game.createmenu("credits6");
}
else
{
// There are more GitHub contributors. Refresh the menu with the next ones
game.createmenu("credits5");
}
map.nexttowercolour();
}
else
{
//back
music.playef(11);
game.current_credits_list_index = 0;
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "credits6")
{
if (game.currentmenuoption == 0)
{
//first page
music.playef(11);
game.createmenu("credits");
map.nexttowercolour();
}
else
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
music.niceplay(6);
}
}
else if (game.currentmenuname == "play")
{
if (game.currentmenuoption == 0)
{
//continue
//right, this depends on what saves you've got
if (game.telesummary == "")
{
//You at least have a quicksave, or you couldn't have gotten here
game.mainmenu = 2;
graphics.fademode = 2;
}
else if (game.quicksummary == "")
{
//You at least have a telesave, or you couldn't have gotten here
game.mainmenu = 1;
graphics.fademode = 2;
}
else
{
//go to a menu!
music.playef(11);
game.loadsummary(); //Prepare save slots to display
game.createmenu("continue");
map.settowercolour(3);
}
}
else if (game.currentmenuoption == 1)
{
//play modes
music.playef(11);
game.createmenu("playmodes");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//newgame
music.playef(11);
game.createmenu("newgamewarning");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "playsecretlab")
{
//as above, except with an extra option...
if (game.currentmenuoption == 0)
{
//continue
//right, this depends on what saves you've got
if (game.telesummary == "")
{
//You at least have a quicksave, or you couldn't have gotten here
game.mainmenu = 2;
graphics.fademode = 2;
}
else if (game.quicksummary == "")
{
//You at least have a telesave, or you couldn't have gotten here
game.mainmenu = 1;
graphics.fademode = 2;
}
else
{
//go to a menu!
music.playef(11);
game.loadsummary(); //Prepare save slots to display
game.createmenu("continue");
map.settowercolour(3);
}
}
else if (game.currentmenuoption == 1)
{
if(!map.invincibility){
game.mainmenu = 11;
graphics.fademode = 2;
}else{
//Can't do yet! play sad sound
music.playef(2);
}
}
else if (game.currentmenuoption == 2)
{
//play modes
music.playef(11);
game.createmenu("playmodes");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//newgame
music.playef(11);
game.createmenu("newgamewarning");
map.nexttowercolour();
}
else if (game.currentmenuoption == 4)
{
//back
music.playef(11);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "newgamewarning")
{
if (game.currentmenuoption == 0)
{
//yep
game.mainmenu = 0;
graphics.fademode = 2;
game.deletequick();
game.deletetele();
}
else
{
//back
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "controller")
{
if (game.currentmenuoption == 0)
{
game.controllerSensitivity++;
music.playef(11);
if(game.controllerSensitivity > 4)
{
game.controllerSensitivity = 0;
}
}
if (game.currentmenuoption == 4)
{
music.playef(11);
game.createmenu("options");
//Add extra menu for mmmmmm mod
if(music.mmmmmm){
#if defined(MAKEANDPLAY)
game.menuoptions[3] = "soundtrack";
game.menuoptionsactive[3] = true;
game.menuoptions[4] = "return";
game.menuoptionsactive[4] = true;
game.nummenuoptions = 5;
#elif !defined(MAKEANDPLAY)
game.menuoptions[4] = "soundtrack";
game.menuoptionsactive[4] = true;
game.menuoptions[5] = "return";
game.menuoptionsactive[5] = true;
game.nummenuoptions = 6;
#endif
}
}
}
else if (game.currentmenuname == "cleardatamenu")
{
if (game.currentmenuoption == 0)
{
//back
music.playef(11);
game.createmenu("options");
//Add extra menu for mmmmmm mod
if(music.mmmmmm){
#if defined(MAKEANDPLAY)
game.menuoptions[3] = "soundtrack";
game.menuoptionsactive[3] = true;
game.menuoptions[4] = "return";
game.menuoptionsactive[4] = true;
game.nummenuoptions = 5;
#elif !defined(MAKEANDPLAY)
game.menuoptions[4] = "soundtrack";
game.menuoptionsactive[4] = true;
game.menuoptions[5] = "return";
game.menuoptionsactive[5] = true;
game.nummenuoptions = 6;
#endif
}
map.nexttowercolour();
}
else
{
//yep
music.playef(23);
game.deletequick();
game.deletetele();
game.deletestats();
game.flashlight = 5;
game.screenshake = 15;
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "playmodes")
{
if (game.currentmenuoption == 0 && game.slowdown == 30 && !map.invincibility) //go to the time trial menu
{
music.playef(11);
game.createmenu("timetrials");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1 && game.unlock[16])
{
//intermission mode menu
music.playef(11);
game.createmenu("intermissionmenu");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2 && game.unlock[17] && game.slowdown == 30 && !map.invincibility) //start a game in no death mode
{
music.playef(11);
game.createmenu("startnodeathmode");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3 && game.unlock[18]) //enable/disable flip mode
{
music.playef(18);
game.screenshake = 10;
game.flashlight = 5;
graphics.setflipmode = !graphics.setflipmode;
game.savemystats = true;
}
else if (game.currentmenuoption == 4)
{
//back
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
else
{
//Can't do yet! play sad sound
music.playef(2);
}
}
else if (game.currentmenuname == "startnodeathmode")
{
if (game.currentmenuoption == 0) //start no death mode, disabling cutscenes
{
game.mainmenu = 10;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 1)
{
game.mainmenu = 9;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 2)
{
//back
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "continue")
{
if (game.currentmenuoption == 0)
{
game.mainmenu = 1;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 1)
{
game.mainmenu = 2;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 2)
{
//back
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "intermissionmenu")
{
if (game.currentmenuoption == 0)
{
music.playef(11);
music.play(6);
game.createmenu("playint1");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
music.playef(11);
music.play(6);
game.createmenu("playint2");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//back
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "playint1")
{
if (game.currentmenuoption == 0)
{
game.mainmenu = 12;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 1)
{
game.mainmenu = 13;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 2)
{
game.mainmenu = 14;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 3)
{
game.mainmenu = 15;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 4)
{
//back
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "playint2")
{
if (game.currentmenuoption == 0)
{
game.mainmenu = 16;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 1)
{
game.mainmenu = 17;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 2)
{
game.mainmenu = 18;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 3)
{
game.mainmenu = 19;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 4)
{
//back
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "gameover2")
{
//back
music.playef(11);
music.play(6);
game.createmenu("mainmenu");
map.nexttowercolour();
}
else if (game.currentmenuname == "unlocktimetrials" || game.currentmenuname == "unlocktimetrial")
{
//back
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
else if (game.currentmenuname == "unlocknodeathmode" || game.currentmenuname == "unlockintermission"
|| game.currentmenuname == "unlockflipmode")
{
//back
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
else if (game.currentmenuname == "timetrials")
{
if (game.currentmenuoption == 0 && game.unlock[9]) //space station 1
{
game.mainmenu = 3;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 1 && game.unlock[10]) //lab
{
game.mainmenu = 4;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 2 && game.unlock[11]) //tower
{
game.mainmenu = 5;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 3 && game.unlock[12]) //station 2
{
game.mainmenu = 6;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 4 && game.unlock[13]) //warp
{
game.mainmenu = 7;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 5 && game.unlock[14]) //final
{
game.mainmenu = 8;
graphics.fademode = 2;
}
else if (game.currentmenuoption == 6) //go to the time trial menu
{
//back
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
else
{
//Can't do yet! play sad sound
music.playef(2);
}
}
else if (game.currentmenuname == "timetrialcomplete3")
{
if (game.currentmenuoption == 0)
{
//back
music.playef(11);
music.play(6);
game.createmenu("play");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
//duplicate the above based on given time trial level!
if (game.timetriallevel == 0) //space station 1
{
game.mainmenu = 3;
graphics.fademode = 2;
}
else if (game.timetriallevel == 1) //lab
{
game.mainmenu = 4;
graphics.fademode = 2;
}
else if (game.timetriallevel == 2) //tower
{
game.mainmenu = 5;
graphics.fademode = 2;
}
else if (game.timetriallevel == 3) //station 2
{
game.mainmenu = 6;
graphics.fademode = 2;
}
else if (game.timetriallevel == 4) //warp
{
game.mainmenu = 7;
graphics.fademode = 2;
}
else if (game.timetriallevel == 5) //final
{
game.mainmenu = 8;
graphics.fademode = 2;
}
}
}
else if (game.currentmenuname == "gamecompletecontinue" || game.currentmenuname == "nodeathmodecomplete2")
{
if (game.currentmenuoption == 0)
{
music.play(6);
music.playef(11);
game.createmenu("play");
map.nexttowercolour();
}
}
}
}
if ( game.currentmenuname == "controller" &&
game.currentmenuoption > 0 &&
game.currentmenuoption < 4 &&
key.controllerButtonDown() )
{
updatebuttonmappings(game.currentmenuoption);
}
}
if (graphics.fademode == 1)
script.startgamemode(game.mainmenu);
}
void gameinput()
{
//TODO mouse input
//game.mx = (mouseX / 2);
//game.my = (mouseY / 2);
if(!script.running)
{
game.press_left = false;
game.press_right = false;
game.press_action = false;
game.press_map = false;
if (key.isDown(KEYBOARD_LEFT) || key.isDown(KEYBOARD_a) || key.controllerWantsLeft(false))
{
game.press_left = 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)
|| 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(SDLK_KP_ENTER) || key.isDown(game.controllerButton_map) )
{
game.press_map = true;
}
}
if (game.advancetext)
{
if (game.pausescript)
{
game.press_action = false;
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 (game.press_action && !game.jumpheld)
{
if (game.pausescript)
{
game.pausescript = false;
game.hascontrol = true;
game.jumpheld = true;
}
else
{
if(!game.glitchrunkludge) game.state++;
game.jumpheld = true;
game.glitchrunkludge=true;
//Bug fix! You should only be able to do this ONCE.
}
}
}
if (!game.press_map) game.mapheld = false;
if (game.intimetrial && graphics.fademode == 1 && game.quickrestartkludge)
{
//restart the time trial
game.quickrestartkludge = false;
script.startgamemode(game.timetriallevel + 3);
game.deathseq = -1;
game.completestop = false;
}
//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){
game.mapheld = true;
//Return to level editor
if (game.activeactivity > -1 && game.press_map){
if((int(std::abs(obj.entities[obj.getplayer()].vx))<=1) && (int(obj.entities[obj.getplayer()].vy) == 0) )
{
script.load(obj.blocks[game.activeactivity].script);
obj.removeblock(game.activeactivity);
}
}else{
game.gamestate = EDITORMODE;
graphics.textboxremove();
game.hascontrol = true;
game.advancetext = false;
game.completestop = false;
game.state = 0;
graphics.showcutscenebars = false;
graphics.backgrounddrawn=false;
music.fadeout();
//If warpdir() is used during playtesting, we need to set it back after!
for (int j = 0; j < ed.maxheight; j++)
{
for (int i = 0; i < ed.maxwidth; i++)
{
ed.level[i+(j*ed.maxwidth)].warpdir=ed.kludgewarpdir[i+(j*ed.maxwidth)];
}
}
}
}
}
#endif
//Entity type 0 is player controled
for (size_t ie = 0; ie < obj.entities.size(); ++ie)
{
if (obj.entities[ie].rule == 0)
{
if (game.hascontrol && game.deathseq == -1 && game.lifeseq <= 5)
{
if (game.press_map && !game.mapheld)
{
game.mapheld = true;
if (game.activetele && game.readytotele > 20 && !game.intimetrial)
{
if(!graphics.flipmode)
{
obj.flags[73] = 1; //Flip mode test
}
if(int(std::abs(obj.entities[ie].vx))<=1 && int(obj.entities[ie].vy)==0)
{
//wait! space station 2 debug thingy
if (game.teleportscript != "")
{
//trace(game.recordstring);
//We're teleporting! Yey!
game.activetele = false;
game.hascontrol = false;
music.fadeout();
int player = obj.getplayer();
obj.entities[player].colour = 102;
int teleporter = obj.getteleporter();
obj.entities[teleporter].tile = 6;
obj.entities[teleporter].colour = 102;
//which teleporter script do we use? it depends on the companion!
game.state = 4000;
game.statedelay = 0;
}
else if (game.companion == 0)
{
//Alright, normal teleporting
game.gamestate = 5;
graphics.menuoffset = 240; //actually this should count the roomname
if (map.extrarow) graphics.menuoffset -= 10;
BlitSurfaceStandard(graphics.menubuffer,NULL,graphics.backBuffer, NULL);
graphics.resumegamemode = false;
game.useteleporter = true;
game.initteleportermode();
}
else
{
//We're teleporting! Yey!
game.activetele = false;
game.hascontrol = false;
music.fadeout();
int player = obj.getplayer();
obj.entities[player].colour = 102;
int companion = obj.getcompanion();
if(companion>-1) obj.entities[companion].colour = 102;
int teleporter = obj.getteleporter();
obj.entities[teleporter].tile = 6;
obj.entities[teleporter].colour = 102;
//which teleporter script do we use? it depends on the companion!
game.state = 3000;
game.statedelay = 0;
}
}
}
else if (game.activeactivity > -1)
{
if((int(std::abs(obj.entities[ie].vx))<=1) && (int(obj.entities[ie].vy) == 0) )
{
script.load(obj.blocks[game.activeactivity].script);
obj.removeblock(game.activeactivity);
}
}
else if (game.swnmode == 1 && game.swngame == 1)
{
//quitting the super gravitron
game.mapheld = true;
//Quit menu, same conditions as in game menu
game.gamestate = MAPMODE;
game.gamesaved = false;
graphics.resumegamemode = false;
game.menupage = 20; // The Map Page
BlitSurfaceStandard(graphics.menubuffer,NULL,graphics.backBuffer, NULL);
graphics.menuoffset = 240; //actually this should count the roomname
if (map.extrarow) graphics.menuoffset -= 10;
}
else if (game.intimetrial && graphics.fademode==0)
{
//Quick restart of time trial
script.hardreset();
if (graphics.setflipmode) graphics.flipmode = true;
graphics.fademode = 2;
game.completestop = true;
music.fadeout();
game.intimetrial = true;
game.quickrestartkludge = true;
}
else if (graphics.fademode==0)
{
//Normal map screen, do transition later
game.gamestate = MAPMODE;
map.cursordelay = 0;
map.cursorstate = 0;
game.gamesaved = false;
graphics.resumegamemode = false;
game.menupage = 0; // The Map Page
BlitSurfaceStandard(graphics.menubuffer,NULL,graphics.backBuffer, NULL);
graphics.menuoffset = 240; //actually this should count the roomname
if (map.extrarow) graphics.menuoffset -= 10;
}
}
if ((key.isDown(27) || key.isDown(game.controllerButton_esc)) && (!map.custommode || map.custommodeforreal))
{
game.mapheld = true;
//Quit menu, same conditions as in game menu
game.gamestate = MAPMODE;
game.gamesaved = false;
graphics.resumegamemode = false;
game.menupage = 10; // The Map Page
BlitSurfaceStandard(graphics.menubuffer,NULL,graphics.backBuffer, NULL);
graphics.menuoffset = 240; //actually this should count the roomname
if (map.extrarow) graphics.menuoffset -= 10;
}
if (key.keymap[SDLK_r] && game.deathseq<=0)// && map.custommode) //Have fun glitchrunners!
{
game.deathseq = 30;
}
if (game.press_left)
{
game.tapleft++;
}
else
{
if (game.tapleft <= 4 && game.tapleft > 0)
{
if (obj.entities[ie].vx < 0.0f)
{
obj.entities[ie].vx = 0.0f;
}
}
game.tapleft = 0;
}
if (game.press_right)
{
game.tapright++;
}
else
{
if (game.tapright <= 4 && game.tapright > 0)
{
if (obj.entities[ie].vx > 0.0f)
{
obj.entities[ie].vx = 0.0f;
}
}
game.tapright = 0;
}
if(game.press_left)
{
obj.entities[ie].ax = -3;
obj.entities[ie].dir = 0;
}
else if (game.press_right)
{
obj.entities[ie].ax = 3;
obj.entities[ie].dir = 1;
}
if (!game.press_action)
{
game.jumppressed = 0;
game.jumpheld = false;
}
if (game.press_action && !game.jumpheld)
{
game.jumppressed = 5;
game.jumpheld = true;
}
if (game.jumppressed > 0)
{
game.jumppressed--;
if (obj.entities[ie].onground>0 && game.gravitycontrol == 0)
{
game.gravitycontrol = 1;
obj.entities[ie].vy = -4;
obj.entities[ie].ay = -3;
music.playef(0);
game.jumppressed = 0;
game.totalflips++;
}
if (obj.entities[ie].onroof>0 && game.gravitycontrol == 1)
{
game.gravitycontrol = 0;
obj.entities[ie].vy = 4;
obj.entities[ie].ay = 3;
music.playef(1);
game.jumppressed = 0;
game.totalflips++;
}
}
}
else
{
//Simple detection of keypresses outside player control, will probably scrap this (expand on
//advance text function)
if (!game.press_action)
{
game.jumppressed = 0;
game.jumpheld = false;
}
if (game.press_action && !game.jumpheld)
{
game.jumppressed = 5;
game.jumpheld = true;
}
}
}
}
}
void mapinput()
{
//TODO Mouse Input!
//game.mx = (mouseX / 2);
//game.my = (mouseY / 2);
game.press_left = false;
game.press_right = false;
game.press_action = false;
game.press_map = false;
if(graphics.menuoffset==0)
{
if (graphics.flipmode)
{
if (key.isDown(KEYBOARD_LEFT) || key.isDown(KEYBOARD_DOWN) || key.isDown(KEYBOARD_a) || key.isDown(KEYBOARD_s) || key.controllerWantsLeft(false) ) game.press_left = true;
if (key.isDown(KEYBOARD_RIGHT) || key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_d) || key.isDown(KEYBOARD_w) || key.controllerWantsRight(false)) game.press_right = true;
}
else
{
if (key.isDown(KEYBOARD_LEFT) || key.isDown(KEYBOARD_UP) || key.isDown(KEYBOARD_a) || key.isDown(KEYBOARD_w)|| key.controllerWantsLeft(false))
{
game.press_left = true;
}
if (key.isDown(KEYBOARD_RIGHT) || key.isDown(KEYBOARD_DOWN) || key.isDown(KEYBOARD_d) || key.isDown(KEYBOARD_s)|| key.controllerWantsRight(false))
{
game.press_right = true;
}
}
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip))
{
game.press_action = true;
}
if (game.menupage < 9)
{
if (key.isDown(KEYBOARD_ENTER) || key.isDown(game.controllerButton_map) ) game.press_map = true;
if (key.isDown(27))
{
game.mapheld = true;
game.menupage = 10;
}
}
else
{
if (key.isDown(KEYBOARD_ENTER) || key.isDown(27)|| key.isDown(game.controllerButton_map) ) game.press_map = 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_map && !key.isDown(27))
{
game.mapheld = false;
}
}
else
{
game.mapheld = true;
game.jumpheld = true;
}
if (!game.mapheld)
{
if(game.press_map && game.menupage < 10)
{
//Normal map screen, do transition later
graphics.resumegamemode = true;
}
}
if (graphics.fademode == 1)
{
FillRect(graphics.menubuffer, 0x000000);
graphics.resumegamemode = true;
obj.removeallblocks();
game.menukludge = false;
if (game.menupage >= 20)
{
game.state = 96;
game.statedelay = 0;
}
else
{
game.state = 80;
game.statedelay = 0;
}
}
if (!game.jumpheld)
{
if (game.press_action || game.press_left || game.press_right || game.press_map)
{
game.jumpheld = true;
}
if (game.press_left)
{
game.menupage--;
}
else if (game.press_right)
{
game.menupage++;
}
if (game.menupage == 1 && obj.flags[67] == 1 && game.press_action && !game.insecretlab && !map.custommode)
{
//Warp back to the ship
graphics.resumegamemode = true;
game.teleport_to_x = 2;
game.teleport_to_y = 11;
//trace(game.recordstring);
//We're teleporting! Yey!
game.activetele = false;
game.hascontrol = false;
int i = obj.getplayer();
obj.entities[i].colour = 102;
//which teleporter script do we use? it depends on the companion!
game.state = 4000;
game.statedelay = 0;
}
if (game.menupage == 3 && !game.gamesaved && game.press_action && !game.intimetrial
&& !game.nodeathmode && !game.insecretlab && !game.inintermission)
{
game.flashlight = 5;
game.screenshake = 10;
music.playef(18);
game.gamesaved = true;
game.savetime = game.timestring();
game.savearea = map.currentarea(map.area(game.roomx, game.roomy));
game.savetrinkets = game.trinkets;
if (game.roomx >= 102 && game.roomx <= 104 && game.roomy >= 110 && game.roomy <= 111) game.savearea = "The Ship";
#if !defined(NO_CUSTOM_LEVELS)
if(map.custommodeforreal)
{
game.customsavequick(ed.ListOfMetaData[game.playcustomlevel].filename);
}
else
#endif
{
game.savequick();
}
}
if (game.menupage == 10 && game.press_action)
{
//return to game
graphics.resumegamemode = true;
}
if (game.menupage == 11 && game.press_action)
{
//quit to menu
if (graphics.fademode == 0)
{
//Kill contents of offset render buffer, since we do that for some reason.
//This fixes an apparent frame flicker.
FillRect(graphics.tempBuffer, 0x000000);
if (game.intimetrial || game.insecretlab || game.nodeathmode) game.menukludge = true;
script.hardreset();
if(graphics.setflipmode) graphics.flipmode = true;
graphics.fademode = 2;
music.fadeout();
map.nexttowercolour();
}
}
if (game.menupage == 20 && game.press_action)
{
//return to game
graphics.resumegamemode = true;
}
if (game.menupage == 21 && game.press_action)
{
//quit to menu
if (graphics.fademode == 0)
{
game.swnmode = false;
graphics.fademode = 2;
music.fadeout();
}
}
if (game.menupage < 0) game.menupage = 3;
if (game.menupage > 3 && game.menupage < 9) game.menupage = 0;
if (game.menupage == 9) game.menupage = 11;
if (game.menupage == 12) game.menupage = 10;
if (game.menupage == 19) game.menupage = 21;
if (game.menupage == 22) game.menupage = 20;
}
}
void teleporterinput()
{
//Todo Mouseinput!
//game.mx = (mouseX / 2);
//game.my = (mouseY / 2);
int tempx, tempy;
game.press_left = false;
game.press_right = false;
game.press_action = false;
game.press_map = false;
if(graphics.menuoffset==0)
{
if (key.isDown(KEYBOARD_LEFT)|| key.isDown(KEYBOARD_a) || key.controllerWantsLeft(false) ) game.press_left = 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)
|| 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;
//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_map) game.mapheld = false;
}
else
{
game.mapheld = true;
game.jumpheld = true;
}
if (!game.jumpheld)
{
if (game.press_action || game.press_left || game.press_right || game.press_map)
{
game.jumpheld = true;
}
if (game.press_left)
{
game.teleport_to_teleporter--;
if (game.teleport_to_teleporter < 0) game.teleport_to_teleporter = map.numteleporters - 1;
tempx = map.teleporters[game.teleport_to_teleporter].x;
tempy = map.teleporters[game.teleport_to_teleporter].y;
while (map.explored[tempx + (20 * tempy)] == 0)
{
game.teleport_to_teleporter--;
if (game.teleport_to_teleporter < 0) game.teleport_to_teleporter = map.numteleporters - 1;
tempx = map.teleporters[game.teleport_to_teleporter].x;
tempy = map.teleporters[game.teleport_to_teleporter].y;
}
}
else if (game.press_right)
{
game.teleport_to_teleporter++;
if (game.teleport_to_teleporter >= map.numteleporters) game.teleport_to_teleporter = 0;
tempx = map.teleporters[game.teleport_to_teleporter].x;
tempy = map.teleporters[game.teleport_to_teleporter].y;
while (map.explored[tempx + (20 * tempy)] == 0)
{
game.teleport_to_teleporter++;
if (game.teleport_to_teleporter >= map.numteleporters) game.teleport_to_teleporter = 0;
tempx = map.teleporters[game.teleport_to_teleporter].x;
tempy = map.teleporters[game.teleport_to_teleporter].y;
}
}
if (game.press_map)
{
tempx = map.teleporters[game.teleport_to_teleporter].x;
tempy = map.teleporters[game.teleport_to_teleporter].y;
if (game.roomx == tempx + 100 && game.roomy == tempy + 100)
{
//cancel!
graphics.resumegamemode = true;
}
else
{
//teleport
graphics.resumegamemode = true;
game.teleport_to_x = tempx;
game.teleport_to_y = tempy;
//trace(game.recordstring);
//We're teleporting! Yey!
game.activetele = false;
game.hascontrol = false;
int i = obj.getplayer();
obj.entities[i].colour = 102;
i = obj.getteleporter();
obj.entities[i].tile = 6;
obj.entities[i].colour = 102;
//which teleporter script do we use? it depends on the companion!
game.state = 4000;
game.statedelay = 0;
}
}
}
}
void gamecompleteinput()
{
game.press_left = false;
game.press_right = false;
game.press_action = false;
game.press_map = false;
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip))
{
game.creditposition -= 6;
if (game.creditposition <= -game.creditmaxposition)
{
if(graphics.fademode==0)
{
graphics.fademode = 2;
}
game.creditposition = -game.creditmaxposition;
}
else
{
map.bypos += 6;
map.bscroll = +6;
}
game.press_action = true;
}
if (key.isDown(KEYBOARD_ENTER)|| key.isDown(game.controllerButton_map)) game.press_map = true;
if (!game.mapheld)
{
if(game.press_map)
{
//Return to game
if(graphics.fademode==0)
{
graphics.fademode = 2;
}
}
}
}
void gamecompleteinput2()
{
game.press_left = false;
game.press_right = false;
game.press_action = false;
game.press_map = false;
if (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip))
{
game.creditposx++;
if (game.creditposy >= 30)
{
if(graphics.fademode==0)
{
graphics.fademode = 2;
music.fadeout();
}
}
game.press_action = true;
}
if (key.isDown(KEYBOARD_ENTER) || key.isDown(game.controllerButton_map)) game.press_map = true;
if (!game.mapheld)
{
if(game.press_map)
{
//Return to game
if(graphics.fademode==0)
{
graphics.fademode = 2;
music.fadeout();
}
}
}
}