1
0
mirror of https://github.com/TerryCavanagh/VVVVVV.git synced 2024-06-18 10:38:31 +02:00
VVVVVV/desktop_version/src/Input.cpp
Misa 0e561f23f8 Remove global args from Game
I've decided to call dwgfx/game/map/obj/key/help/music the "global args".
Because they're essentially global variables that are being passed
around in args.

This commit removes global args from all functions on the Game class,
and deals with updating the callsites of said functions accordingly. It
also renames all usages of 'dwgfx' in Game.cpp to 'graphics', since the
global variable is called 'graphics' now.

Interesting to note, I was removing the class defines from Game.h, but
it turns out that Graphics.h depends on the mapclass and entityclass
defines from Game.h. And also Graphics.h spelled mapclass wrong (it
forgot the "class") so I just decided to use that existing line instead.
This is only temporary and after all is said and done, at the end of
this pull request those class defines will be gone.
2020-04-03 10:40:50 -04:00

2665 lines
99 KiB
C++

#include "Input.h"
#include "Script.h"
#include "MakeAndPlay.h"
#include "tinyxml.h"
#include "FileSystemUtils.h"
extern scriptclass script;
// Found in titlerender.cpp
void updategraphicsmode(Game& game, Graphics& dwgfx);
void updatebuttonmappings(Game& game, KeyPoll& key, musicclass& music, 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, 10);
}
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, 10);
}
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, 10);
}
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(KeyPoll& key, Graphics& dwgfx, mapclass& map, Game& game, entityclass& obj, UtilityClass& help, musicclass& music)
{
//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 (dwgfx.flipmode)
{
//GAMEPAD TODO
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 && dwgfx.fademode==0)
{
if (game.press_action || game.press_left || game.press_right || game.press_map)
{
game.jumpheld = true;
}
/*
if (game.press_left) {
game.mainmenu--;
}else if (game.press_right) {
game.mainmenu++;
}
if (game.mainmenu < 0) game.mainmenu = 2;
if (game.mainmenu > 2 ) game.mainmenu = 0;
*/
/*
if (game.press_action) {
if (!game.menustart) {
game.menustart = true;
music.play(6);
music.playef(18, 10);
game.screenshake = 10;
game.flashlight = 5;
}else{
if(game.mainmenu==0){
dwgfx.fademode = 2;
}else if (game.mainmenu == 1) {
if (game.telesummary != "") {
dwgfx.fademode = 2;
}
}else if (game.mainmenu == 2) {
if (game.quicksummary != "") {
dwgfx.fademode = 2;
}
}
}
}
*/
if (key.isDown(27) && game.currentmenuname != "youwannaquit" && game.menustart)
{
music.playef(11, 10);
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, 10);
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, 10);
game.createmenu("playerworlds");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
//Options
music.playef(11, 10);
game.createmenu("graphicoptions");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//Options
music.playef(11, 10);
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, 10);
game.mainmenu = 100;
dwgfx.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;
dwgfx.fademode = 2;
}
else
{
//Bring you to the normal playmenu
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuoption == 1)
{
//Options
music.playef(11, 10);
game.createmenu("graphicoptions");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//Options
music.playef(11, 10);
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, 10);
game.createmenu("credits");
map.nexttowercolour();
}
else if (game.currentmenuoption == 4)
{
//bye!
music.playef(2, 10);
game.mainmenu = 100;
dwgfx.fademode = 2;
}
#else
if (game.currentmenuoption == 0)
{
//Play
if (game.telesummary == "" && game.quicksummary == "")
{
//No saves exist, just start a new game
game.mainmenu = 0;
dwgfx.fademode = 2;
}
else
{
//Bring you to the normal playmenu
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuoption == 1)
{
//Bring you to the normal playmenu
music.playef(11, 10);
game.createmenu("playerworlds");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//Options
music.playef(11, 10);
game.createmenu("graphicoptions");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//Options
music.playef(11, 10);
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, 10);
game.createmenu("credits");
map.nexttowercolour();
}
else if (game.currentmenuoption == 5)
{
//bye!
music.playef(2, 10);
game.mainmenu = 100;
dwgfx.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, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}else if(game.currentmenuoption==game.nummenuoptions-2){
//next page
music.playef(11, 10);
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, 10);
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;
dwgfx.fademode = 2;
}else{
game.createmenu("quickloadlevel");
map.nexttowercolour();
}
}
}
#endif
else if(game.currentmenuname=="quickloadlevel")
{
if(game.currentmenuoption==0){//continue save
game.mainmenu = 23;
dwgfx.fademode = 2;
}else if(game.currentmenuoption==1){
game.mainmenu = 22;
dwgfx.fademode = 2;
}else if(game.currentmenuoption==2){
music.playef(11, 10);
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, 10);
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, 10);
game.mainmenu = 20;
dwgfx.fademode = 2;
ed.filename="";
}/*else if(game.currentmenuoption==2){
music.playef(11, 10);
//"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, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
#else
if(game.currentmenuoption==0){
music.playef(11, 10);
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, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
#endif
}
#endif
else if(game.currentmenuname=="errornostart"){
music.playef(11, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
else if (game.currentmenuname == "graphicoptions")
{
if (game.currentmenuoption == 0){
music.playef(11, 10);
dwgfx.screenbuffer->toggleFullScreen();
game.fullscreen = !game.fullscreen;
updategraphicsmode(game, dwgfx);
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 0;
}else if (game.currentmenuoption == 1){
music.playef(11, 10);
dwgfx.screenbuffer->toggleStretchMode();
game.stretchMode = (game.stretchMode + 1) % 3;
updategraphicsmode(game, dwgfx);
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 1;
}else if (game.currentmenuoption == 2){
music.playef(11, 10);
dwgfx.screenbuffer->toggleLinearFilter();
game.useLinearFilter = !game.useLinearFilter;
updategraphicsmode(game, dwgfx);
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 2;
}else if (game.currentmenuoption == 3){
//change smoothing
music.playef(11, 10);
game.fullScreenEffect_badSignal = !game.fullScreenEffect_badSignal;
//Hook the analogue thing in here: ABCDEFG
updategraphicsmode(game, dwgfx);
dwgfx.screenbuffer->badSignalEffect= !dwgfx.screenbuffer->badSignalEffect;
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 3;
}else if (game.currentmenuoption == 4) {
//toggle mouse cursor
music.playef(11, 10);
if (dwgfx.showmousecursor == true) {
SDL_ShowCursor(SDL_DISABLE);
dwgfx.showmousecursor = false;
}
else {
SDL_ShowCursor(SDL_ENABLE);
dwgfx.showmousecursor = true;
}
}
else
{
//back
music.playef(11, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
/* //Old stuff
if (game.advanced_mode)
{
if (game.currentmenuoption == 0)
{
//toggle fullscreen
dwgfx.screenbuffer->toggleFullScreen();
music.playef(11, 10);
if (game.fullscreen)
{
game.fullscreen = false;
}
else
{
game.fullscreen = true;
}
updategraphicsmode(game, dwgfx);
game.savestats();
game.createmenu("graphicoptions");
}
else if (game.currentmenuoption == 1)
{
//enable acceleration: if in fullscreen, go back to window first
music.playef(11, 10);
game.advanced_mode = false;
if (game.fullscreen)
{
game.fullscreen = false;
updategraphicsmode(game, dwgfx);
game.fullscreen = true;
}
updategraphicsmode(game, dwgfx);
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 1;
}
else if (game.currentmenuoption == 2)
{
//change scaling mode
music.playef(11, 10);
game.advanced_scaling = (game.advanced_scaling + 1) % 5;
dwgfx.screenbuffer->ResizeScreen(320 *game.advanced_scaling,240*game.advanced_scaling );
dwgfx.screenbuffer->SetScale(game.advanced_scaling);
updategraphicsmode(game, dwgfx);
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 2;
}
else if (game.currentmenuoption == 3)
{
//change smoothing
music.playef(11, 10);
game.advanced_smoothing = !game.advanced_smoothing;
updategraphicsmode(game, dwgfx);
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 3;
}
else
{
//back
music.playef(11, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else
{
if (game.currentmenuoption == 0)
{
dwgfx.screenbuffer->toggleFullScreen();
//toggle fullscreen
music.playef(11, 10);
if (game.fullscreen)
{
game.fullscreen = false;
}
else
{
game.fullscreen = true;
}
updategraphicsmode(game, dwgfx);
game.savestats();
game.createmenu("graphicoptions");
}
else if (game.currentmenuoption == 1)
{
//disable acceleration: if in fullscreen, go back to window first
music.playef(11, 10);
game.advanced_mode = true;
if (game.fullscreen)
{
game.fullscreen = false;
updategraphicsmode(game, dwgfx);
game.fullscreen = true;
}
updategraphicsmode(game, dwgfx);
game.savestats();
game.createmenu("graphicoptions");
game.currentmenuoption = 1;
}
else
{
//back
music.playef(11, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
*/
}
else if (game.currentmenuname == "youwannaquit")
{
if (game.currentmenuoption == 0)
{
//bye!
music.playef(2, 10);
game.mainmenu = 100;
dwgfx.fademode = 2;
}
else
{
music.playef(11, 10);
game.createmenu(game.previousmenuname);
map.nexttowercolour();
}
}
else if (game.currentmenuname == "setinvincibility")
{
if (game.currentmenuoption == 0)
{
//back
music.playef(11, 10);
game.createmenu("accessibility");
game.currentmenuoption = 3;
map.nexttowercolour();
}
else
{
map.invincibility = !map.invincibility;
//game.deletequick();
//game.deletetele();
game.savestats();
music.playef(11, 10);
game.createmenu("accessibility");
game.currentmenuoption = 3;
map.nexttowercolour();
}
}
else if (game.currentmenuname == "setslowdown1")
{
if (game.currentmenuoption == 0)
{
//back
music.playef(11, 10);
game.createmenu("accessibility");
game.currentmenuoption = 4;
map.nexttowercolour();
}
else
{
//change game speed
game.deletequick();
game.deletetele();
game.createmenu("setslowdown2");
map.nexttowercolour();
music.playef(11, 10);
}
}
else if (game.currentmenuname == "setslowdown2")
{
if (game.currentmenuoption == 0)
{
//back
game.gameframerate=34;
game.slowdown = 30;
game.savestats();
music.playef(11, 10);
game.createmenu("accessibility");
game.currentmenuoption = 4;
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
game.gameframerate=41;
game.slowdown = 24;
game.savestats();
music.playef(11, 10);
game.createmenu("accessibility");
game.currentmenuoption = 4;
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
game.gameframerate=55;
game.slowdown = 18;
game.savestats();
music.playef(11, 10);
game.createmenu("accessibility");
game.currentmenuoption = 4;
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
game.gameframerate=83;
game.slowdown = 12;
game.savestats();
music.playef(11, 10);
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, 10);
}
else if (game.currentmenuoption == 1)
{
//disable screeneffects
game.noflashingmode = !game.noflashingmode;
game.savestats();
if (!game.noflashingmode)
{
music.playef(18, 10);
game.screenshake = 10;
game.flashlight = 5;
}else{
music.playef(11, 10);
}
}
else if (game.currentmenuoption == 2)
{
//disable text outline
dwgfx.notextoutline = !dwgfx.notextoutline;
game.savestats();
music.playef(11, 10);
}
else if (game.currentmenuoption == 3)
{
//invincibility
if (!map.invincibility)
{
game.createmenu("setinvincibility");
map.nexttowercolour();
}
else
{
map.invincibility = !map.invincibility;
}
music.playef(11, 10);
}
else if (game.currentmenuoption == 4)
{
//change game speed
game.createmenu("setslowdown2");
map.nexttowercolour();
music.playef(11, 10);
}
else if (game.currentmenuoption == 5)
{
// toggle fake load screen
game.skipfakeload = !game.skipfakeload;
music.playef(11, 10);
}
else if (game.currentmenuoption == 6)
{
// toggle translucent roomname BG
dwgfx.translucentroomname = !dwgfx.translucentroomname;
music.playef(11, 10);
}
else if (game.currentmenuoption == 7)
{
//back
music.playef(11, 10);
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, 10);
}
}
else if (game.currentmenuname == "options")
{
#if defined(MAKEANDPLAY)
if (game.currentmenuoption == 0)
{
//accessibility options
music.playef(11, 10);
game.createmenu("accessibility");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
//clear data menu
music.playef(11, 10);
game.createmenu("controller");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//clear data menu
music.playef(11, 10);
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, 10);
music.play(6);
game.savestats();
game.createmenu("mainmenu");
map.nexttowercolour();
}
if (game.currentmenuoption == 4)
{
//back
music.playef(11, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}else{
if (game.currentmenuoption == 3)
{
//back
music.playef(11, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
#elif !defined(MAKEANDPLAY)
if (game.currentmenuoption == 0)
{
//accessibility options
music.playef(11, 10);
game.createmenu("accessibility");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
//unlock play options
music.playef(11, 10);
game.createmenu("unlockmenu");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//clear data menu
music.playef(11, 10);
game.createmenu("controller");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//clear data menu
music.playef(11, 10);
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, 10);
music.play(6);
game.savestats();
game.createmenu("mainmenu");
map.nexttowercolour();
}
if (game.currentmenuoption == 5)
{
//back
music.playef(11, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}else{
if (game.currentmenuoption == 4)
{
//back
music.playef(11, 10);
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, 10);
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, 10);
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, 10);
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, 10);
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, 10);
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, 10);
game.savestats();
game.createmenu("unlockmenutrials");
game.currentmenuoption = 5;
}
else if (game.currentmenuoption == 6) //back
{
//back
music.playef(11, 10);
game.createmenu("unlockmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "unlockmenu")
{
if (game.currentmenuoption == 0)
{
//unlock time trials separately...
music.playef(11, 10);
game.createmenu("unlockmenutrials");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
//unlock intermissions
music.playef(11, 10);
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, 10);
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, 10);
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, 10);
game.stat_trinkets = 20;
game.savestats();
game.createmenu("unlockmenu");
game.currentmenuoption = 4;
}
else if (game.currentmenuoption == 5)
{
//unlock secret lab
music.playef(11, 10);
game.unlock[8] = true;
game.unlocknotify[8] = true;
game.savestats();
game.createmenu("unlockmenu");
game.currentmenuoption = 5;
}
else
{
//back
music.playef(11, 10);
game.createmenu("options");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "credits")
{
if (game.currentmenuoption == 0)
{
//next page
music.playef(11, 10);
game.createmenu("credits2");
map.nexttowercolour();
}
else
{
//back
music.playef(11, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "credits2")
{
if (game.currentmenuoption == 0)
{
//next page
music.playef(11, 10);
game.createmenu("credits25");
map.nexttowercolour();
}
else
{
//back
music.playef(11, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "credits25")
{
if (game.currentmenuoption == 0)
{
//next page
music.playef(11, 10);
game.createmenu("credits3");
map.nexttowercolour();
}
else
{
//back
music.playef(11, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "credits3")
{
if (game.currentmenuoption == 0)
{
//next page
music.playef(11, 10);
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, 10);
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, 10);
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, 10);
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, 10);
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, 10);
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, 10);
game.createmenu("credits");
map.nexttowercolour();
}
else
{
//back
music.playef(11, 10);
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;
dwgfx.fademode = 2;
}
else if (game.quicksummary == "")
{
//You at least have a telesave, or you couldn't have gotten here
game.mainmenu = 1;
dwgfx.fademode = 2;
}
else
{
//go to a menu!
music.playef(11, 10);
game.loadsummary(); //Prepare save slots to display
game.createmenu("continue");
map.settowercolour(3);
}
}
else if (game.currentmenuoption == 1)
{
//play modes
music.playef(11, 10);
game.createmenu("playmodes");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//newgame
music.playef(11, 10);
game.createmenu("newgamewarning");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//back
music.playef(11, 10);
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;
dwgfx.fademode = 2;
}
else if (game.quicksummary == "")
{
//You at least have a telesave, or you couldn't have gotten here
game.mainmenu = 1;
dwgfx.fademode = 2;
}
else
{
//go to a menu!
music.playef(11, 10);
game.loadsummary(); //Prepare save slots to display
game.createmenu("continue");
map.settowercolour(3);
}
}
else if (game.currentmenuoption == 1)
{
if(!map.invincibility){
game.mainmenu = 11;
dwgfx.fademode = 2;
}else{
//Can't do yet! play sad sound
music.playef(2, 10);
}
}
else if (game.currentmenuoption == 2)
{
//play modes
music.playef(11, 10);
game.createmenu("playmodes");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3)
{
//newgame
music.playef(11, 10);
game.createmenu("newgamewarning");
map.nexttowercolour();
}
else if (game.currentmenuoption == 4)
{
//back
music.playef(11, 10);
game.createmenu("mainmenu");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "newgamewarning")
{
if (game.currentmenuoption == 0)
{
//yep
game.mainmenu = 0;
dwgfx.fademode = 2;
game.deletequick();
game.deletetele();
}
else
{
//back
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "controller")
{
if (game.currentmenuoption == 0)
{
game.controllerSensitivity++;
music.playef(11, 10);
if(game.controllerSensitivity > 4)
{
game.controllerSensitivity = 0;
}
}
if (game.currentmenuoption == 4)
{
music.playef(11, 10);
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, 10);
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, 10);
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, 10);
game.createmenu("timetrials");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1 && game.unlock[16])
{
//intermission mode menu
music.playef(11, 10);
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, 10);
game.createmenu("startnodeathmode");
map.nexttowercolour();
}
else if (game.currentmenuoption == 3 && game.unlock[18]) //enable/disable flip mode
{
music.playef(18, 10);
game.screenshake = 10;
game.flashlight = 5;
dwgfx.setflipmode = !dwgfx.setflipmode;
game.savemystats = true;
}
else if (game.currentmenuoption == 4)
{
//back
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
else
{
//Can't do yet! play sad sound
music.playef(2, 10);
}
}
else if (game.currentmenuname == "startnodeathmode")
{
if (game.currentmenuoption == 0) //start no death mode, disabling cutscenes
{
game.mainmenu = 10;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 1)
{
game.mainmenu = 9;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 2)
{
//back
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "continue")
{
if (game.currentmenuoption == 0)
{
game.mainmenu = 1;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 1)
{
game.mainmenu = 2;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 2)
{
//back
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "intermissionmenu")
{
if (game.currentmenuoption == 0)
{
music.playef(11, 10);
music.play(6);
game.createmenu("playint1");
map.nexttowercolour();
}
else if (game.currentmenuoption == 1)
{
music.playef(11, 10);
music.play(6);
game.createmenu("playint2");
map.nexttowercolour();
}
else if (game.currentmenuoption == 2)
{
//back
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "playint1")
{
if (game.currentmenuoption == 0)
{
game.mainmenu = 12;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 1)
{
game.mainmenu = 13;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 2)
{
game.mainmenu = 14;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 3)
{
game.mainmenu = 15;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 4)
{
//back
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "playint2")
{
if (game.currentmenuoption == 0)
{
game.mainmenu = 16;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 1)
{
game.mainmenu = 17;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 2)
{
game.mainmenu = 18;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 3)
{
game.mainmenu = 19;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 4)
{
//back
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
}
else if (game.currentmenuname == "gameover2")
{
//back
music.playef(11, 10);
music.play(6);
game.createmenu("mainmenu");
map.nexttowercolour();
}
else if (game.currentmenuname == "unlocktimetrials" || game.currentmenuname == "unlocktimetrial")
{
//back
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
else if (game.currentmenuname == "unlocknodeathmode" || game.currentmenuname == "unlockintermission"
|| game.currentmenuname == "unlockflipmode")
{
//back
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
else if (game.currentmenuname == "timetrials")
{
if (game.currentmenuoption == 0 && game.unlock[9]) //space station 1
{
game.mainmenu = 3;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 1 && game.unlock[10]) //lab
{
game.mainmenu = 4;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 2 && game.unlock[11]) //tower
{
game.mainmenu = 5;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 3 && game.unlock[12]) //station 2
{
game.mainmenu = 6;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 4 && game.unlock[13]) //warp
{
game.mainmenu = 7;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 5 && game.unlock[14]) //final
{
game.mainmenu = 8;
dwgfx.fademode = 2;
}
else if (game.currentmenuoption == 6) //go to the time trial menu
{
//back
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
else
{
//Can't do yet! play sad sound
music.playef(2, 10);
}
}
else if (game.currentmenuname == "timetrialcomplete3")
{
if (game.currentmenuoption == 0)
{
//back
music.playef(11, 10);
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;
dwgfx.fademode = 2;
}
else if (game.timetriallevel == 1) //lab
{
game.mainmenu = 4;
dwgfx.fademode = 2;
}
else if (game.timetriallevel == 2) //tower
{
game.mainmenu = 5;
dwgfx.fademode = 2;
}
else if (game.timetriallevel == 3) //station 2
{
game.mainmenu = 6;
dwgfx.fademode = 2;
}
else if (game.timetriallevel == 4) //warp
{
game.mainmenu = 7;
dwgfx.fademode = 2;
}
else if (game.timetriallevel == 5) //final
{
game.mainmenu = 8;
dwgfx.fademode = 2;
}
}
}
else if (game.currentmenuname == "gamecompletecontinue" || game.currentmenuname == "nodeathmodecomplete2")
{
if (game.currentmenuoption == 0)
{
music.play(6);
music.playef(11, 10);
game.createmenu("play");
map.nexttowercolour();
}
}
}
}
if ( game.currentmenuname == "controller" &&
game.currentmenuoption > 0 &&
game.currentmenuoption < 4 &&
key.controllerButtonDown() )
{
updatebuttonmappings(game, key, music, game.currentmenuoption);
}
}
if (dwgfx.fademode == 1)
script.startgamemode(game.mainmenu, key, dwgfx, game, map, obj, help, music);
}
void gameinput(KeyPoll& key, Graphics& dwgfx, Game& game, mapclass& map,
entityclass& obj, UtilityClass& help, musicclass& music)
{
//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 (game.recording == 2 && !game.playbackfinished)
{
//playback!
//record your input and add it to the record string
//Keys are:
//0 - nothing
//1 - left
//2 - right
//3 - left+right
//4 - flip
//5 - left+flip
//6 - right+flip
//7 - left+right+flip
//8 - Map/teleport
if (!game.recordinit)
{
//Init recording
game.recordinit = true;
game.combomode = false;
game.playmove = game.playback[game.playbackpos+1];
game.playcombo = game.playback[game.playbackpos];
}
if (game.playcombo <= 0)
{
//move on to the next action
game.playbackpos += 2;
game.playmove = game.playback[game.playbackpos + 1];
game.playcombo = game.playback[game.playbackpos];
if (game.playcombo > 1) game.playcombo--;
}
if (game.playcombo >= 1)
{
game.playcombo--;
if (game.playmove == 1 || game.playmove == 3 || game.playmove == 5 || game.playmove == 7)
{
game.press_left = true;
}
if (game.playmove == 2 || game.playmove == 3 || game.playmove == 6 || game.playmove == 7)
{
game.press_right = true;
}
if (game.playmove == 4 || game.playmove == 5 || game.playmove == 6 || game.playmove == 7)
{
game.press_action = true;
}
if (game.playmove == 8)
{
game.press_map = true;
//game.playbackfinished = true;
//TODO WTF is trace
//trace("finished!");
}
}
}
else
{ */
if(!script.running)
{
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 (key.isDown("1".charCodeAt(0))) {
dwgfx.screen.width = 640;
dwgfx.screen.height = 480;
setstage(640,480);
}
if (key.isDown("2".charCodeAt(0))) {
dwgfx.screen.width = 960;
dwgfx.screen.height = 720;
setstage(960,720);
}
if (key.isDown("3".charCodeAt(0))) {
dwgfx.screen.width = 1280;
dwgfx.screen.height = 960;
setstage(1280,960);
}
*/
/*game.test = true;
game.teststring = String(game.inertia);
if (key.isDown("1".charCodeAt(0))) game.inertia = 0.5;
if (key.isDown("2".charCodeAt(0))) game.inertia = 0.6;
if (key.isDown("3".charCodeAt(0))) game.inertia = 0.7;
if (key.isDown("4".charCodeAt(0))) game.inertia = 0.8;
if (key.isDown("5".charCodeAt(0))) game.inertia = 0.9;
if (key.isDown("6".charCodeAt(0))) game.inertia = 1;
if (key.isDown("7".charCodeAt(0))) game.inertia = 1.1;
if (key.isDown("8".charCodeAt(0))) game.inertia = 1.2;
if (key.isDown("9".charCodeAt(0))) game.inertia = 1.3;
if (key.isDown("0".charCodeAt(0))) game.inertia = 1.4;*/
if (game.intimetrial && dwgfx.fademode == 1 && game.quickrestartkludge)
{
//restart the time trial
game.quickrestartkludge = false;
script.startgamemode(game.timetriallevel + 3, key, dwgfx, game, map, obj, help, music);
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;
dwgfx.textboxremove();
game.hascontrol = true;
game.advancetext = false;
game.completestop = false;
game.state = 0;
dwgfx.showcutscenebars = false;
dwgfx.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 (int ie = 0; ie < obj.nentity; ++ie)
{
if (obj.entities[ie].rule == 0)
{
//game.test = true;
//game.teststring = "player(" + String(int(obj.entities[i])) + "," + String(int(obj.entities[i].yp)) + ")"
// + ", mouse(" + String(int(game.mx)) + "," + String(int(game.my)) + ")";
if (game.hascontrol && game.deathseq == -1 && game.lifeseq <= 5)
{
/*
if (key.isDown(8)) {
script.load("returntohub");
}
*/
/*
if (key.isDown(27)) {
game.state = 0;
dwgfx.textboxremove();
map.tdrawback = true;
music.haltdasmusik();
game.gamestate = TITLEMODE;
}
*/
if (game.press_map && !game.mapheld)
{
game.mapheld = true;
if (game.activetele && game.readytotele > 20 && !game.intimetrial)
{
if(!dwgfx.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(); //Uncomment this when it's working!
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;
dwgfx.menuoffset = 240; //actually this should count the roomname
if (map.extrarow) dwgfx.menuoffset -= 10;
//dwgfx.menubuffer.copyPixels(dwgfx.screenbuffer, dwgfx.screenbuffer.rect, dwgfx.tl, null, null, false);
//TODO TESTHIS
//dwgfx.screenbuffer->UpdateScreen(dwgfx.menubuffer, NULL);
BlitSurfaceStandard(dwgfx.menubuffer,NULL,dwgfx.backBuffer, NULL);
dwgfx.resumegamemode = false;
game.useteleporter = true;
game.initteleportermode();
}
else
{
//trace(game.recordstring);
//We're teleporting! Yey!
game.activetele = false;
game.hascontrol = false;
music.fadeout(); //Uncomment this when it's working!
int player = obj.getplayer();
obj.entities[player].colour = 102;
int companion = obj.getcompanion(game.companion);
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;
dwgfx.resumegamemode = false;
game.menupage = 20; // The Map Page
//dwgfx.menubuffer.copyPixels(dwgfx.screenbuffer, dwgfx.screenbuffer.rect, dwgfx.tl, null, null, false);
//dwgfx.screenbuffer->UpdateScreen(dwgfx.menubuffer, NULL);
BlitSurfaceStandard(dwgfx.menubuffer,NULL,dwgfx.backBuffer, NULL);
dwgfx.menuoffset = 240; //actually this should count the roomname
if (map.extrarow) dwgfx.menuoffset -= 10;
}
else if (game.intimetrial && dwgfx.fademode==0)
{
//Quick restart of time trial
script.hardreset(key, dwgfx, game, map, obj, help, music);
if (dwgfx.setflipmode) dwgfx.flipmode = true;
dwgfx.fademode = 2;
game.completestop = true;
music.fadeout();
game.intimetrial = true;
game.quickrestartkludge = true;
}
else if (dwgfx.fademode==0)
{
//Normal map screen, do transition later
game.gamestate = MAPMODE;
map.cursordelay = 0;
map.cursorstate = 0;
game.gamesaved = false;
dwgfx.resumegamemode = false;
game.menupage = 0; // The Map Page
BlitSurfaceStandard(dwgfx.menubuffer,NULL,dwgfx.backBuffer, NULL);
//dwgfx.screenbuffer->UpdateScreen(dwgfx.menubuffer, NULL);
dwgfx.menuoffset = 240; //actually this should count the roomname
if (map.extrarow) dwgfx.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;
dwgfx.resumegamemode = false;
game.menupage = 10; // The Map Page
//dwgfx.menubuffer.copyPixels(dwgfx.screenbuffer, dwgfx.screenbuffer.rect, dwgfx.tl, NULL, NULL, false);
//dwgfx.screenbuffer->UpdateScreen(dwgfx.menubuffer, NULL);
BlitSurfaceStandard(dwgfx.menubuffer,NULL,dwgfx.backBuffer, NULL);
dwgfx.menuoffset = 240; //actually this should count the roomname
if (map.extrarow) dwgfx.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[i].vx = -4;
obj.entities[ie].ax = -3;
obj.entities[ie].dir = 0;
}
else if (game.press_right)
{
//obj.entities[i].vx = 4;
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, 10);
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, 10);
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(KeyPoll& key, Graphics& dwgfx, Game& game, mapclass& map,
entityclass& obj, UtilityClass& help, musicclass& music)
{
//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(dwgfx.menuoffset==0)
{
if (dwgfx.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
dwgfx.resumegamemode = true;
}
}
if (dwgfx.fademode == 1)
{
FillRect(dwgfx.menubuffer, 0x000000);
dwgfx.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
dwgfx.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, 10);
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
dwgfx.resumegamemode = true;
}
if (game.menupage == 11 && game.press_action)
{
//quit to menu
if (dwgfx.fademode == 0)
{
//Kill contents of offset render buffer, since we do that for some reason.
//This fixes an apparent frame flicker.
FillRect(dwgfx.tempBuffer, 0x000000);
if (game.intimetrial || game.insecretlab || game.nodeathmode) game.menukludge = true;
script.hardreset(key, dwgfx, game, map, obj, help, music);
if(dwgfx.setflipmode) dwgfx.flipmode = true;
dwgfx.fademode = 2;
music.fadeout();
map.nexttowercolour();
}
}
if (game.menupage == 20 && game.press_action)
{
//return to game
dwgfx.resumegamemode = true;
}
if (game.menupage == 21 && game.press_action)
{
//quit to menu
if (dwgfx.fademode == 0)
{
game.swnmode = false;
dwgfx.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(KeyPoll& key, Graphics& dwgfx, Game& game, mapclass& map,
entityclass& obj, UtilityClass& help, musicclass& music)
{
//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(dwgfx.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!
dwgfx.resumegamemode = true;
}
else
{
//teleport
dwgfx.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(KeyPoll& key, Graphics& dwgfx, Game& game, mapclass& map,
entityclass& obj, UtilityClass& help, musicclass& music)
{
//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 (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(dwgfx.fademode==0)
{
dwgfx.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 (key.isDown(27)) { game.mapheld = true; game.menupage = 10; }
if (!game.mapheld)
{
if(game.press_map)
{
//Return to game
if(dwgfx.fademode==0)
{
dwgfx.fademode = 2;
}
}
}
}
void gamecompleteinput2(KeyPoll& key, Graphics& dwgfx, Game& game, mapclass& map,
entityclass& obj, UtilityClass& help, musicclass& music)
{
//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 (key.isDown(KEYBOARD_z) || key.isDown(KEYBOARD_SPACE) || key.isDown(KEYBOARD_v) || key.isDown(game.controllerButton_flip))
{
game.creditposx++;
if (game.creditposy >= 30)
{
if(dwgfx.fademode==0)
{
dwgfx.fademode = 2;
music.fadeout();
}
}
game.press_action = true;
}
if (key.isDown(KEYBOARD_ENTER) || key.isDown(game.controllerButton_map)) game.press_map = true;
//if (key.isDown(27)) { game.mapheld = true; game.menupage = 10; }
if (!game.mapheld)
{
if(game.press_map)
{
//Return to game
if(dwgfx.fademode==0)
{
dwgfx.fademode = 2;
music.fadeout();
}
}
}
}