mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-06-25 22:18:30 +02:00
2a80c80f6c
It turns out the game engaged in pseudo-UB when removing activity zones, which got turned into actual UB due to the previous commit. There were three places where this could happen: - Pressing ENTER on an activity zone in normal gameplay - Pressing ENTER on an activity zone in in-editor playtesting (because the code is duped here) - Pressing ESC and quitting to menu while standing inside an activity zone In all cases, game.activeactivity would still be pointing to a non-existent activity zone. This activity zone in the previous system would simply be a block with a false 'active', and in the system where C++ vectors are used properly, would index past the blocks array. In fact, it is a bug that when you press ENTER on an activity zone, the activity zone prompt suddenly turns to black, then immediately disappears. It was pointing to a block that had its clear() method called, which is why it was all black, and it was an inactive block! This commit makes it so pressing ENTER on an activity zone smoothly fades out the activity zone prompt instead of being sudden black.
2368 lines
91 KiB
C++
2368 lines
91 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);
|
|
game.activeactivity = -1;
|
|
}
|
|
}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);
|
|
game.activeactivity = -1;
|
|
}
|
|
}
|
|
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.activeactivity = -1;
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|