/* =========================================================================== blockattack - Block Attack - Rise of the Blocks Copyright (C) 2005-2012 Poul Sander This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/ Source information and contacts persons can be found at http://blockattack.net =========================================================================== */ //Make sure it is only included once #ifndef _MAINVARS_HPP #define _MAINVARS_HPP #include "sago/SagoSprite.hpp" #include "BlockGame.hpp" #include "sago/SagoTextField.hpp" #include "sago/SagoTextBox.hpp" //main variables and constants //Animation lengths: #define READYTIME 500 #define BOMBTIME 200 #define CURSORTIME 200 #ifndef SHAREDIR #define SHAREDIR "." #endif const char sharedir[] = SHAREDIR; //All graphic in the game: sago::SagoSprite backgroundImage; //Stores the background image sago::SagoSprite backgroundSixteenNineImage; // For 16:9 format sago::SagoSprite bExit; static sago::SagoSprite backBoard; //Stores the background to the board static sago::SagoSprite bForward; //The "forward" button #if NETWORK //static sago::SagoSprite bNetwork; //static sago::SagoSprite bConnect; //static sago::SagoSprite bHost; #endif static sago::SagoSprite blackLine; //The seperator in stage clear static sago::SagoSprite stageBobble; //The bobble instage clear SDL_Renderer *screen; //The whole screen; static sago::SagoTextBox tbGameOver; static sago::SagoTextBox tbWinner; static sago::SagoTextBox tbDraw; static sago::SagoSprite iChainFrame; //Animations: static sago::SagoSprite cursor; //The animated cursor static sago::SagoSprite bomb; static sago::SagoSprite ready; //Before the blocks fall static sago::SagoSprite explosion[4]; //Then a block explodes //Animations end static sago::SagoSprite counter[3]; //Counts down from 3 sago::SagoSprite bricks[7]; //The bricks, saved in an array of pointers static sago::SagoSprite crossover; //Cross the bricks that will be cleared soon static sago::SagoSprite balls[7]; //The balls (the small ones that jump around) static sago::SagoSprite boardBackBack; static sago::SagoSprite garbageTL; //the Garbage Blocks static sago::SagoSprite garbageT; static sago::SagoSprite garbageTR; static sago::SagoSprite garbageR; static sago::SagoSprite garbageBR; static sago::SagoSprite garbageB; static sago::SagoSprite garbageBL; static sago::SagoSprite garbageL; static sago::SagoSprite garbageFill; static sago::SagoSprite garbageM; static sago::SagoSprite garbageML; static sago::SagoSprite garbageMR; static sago::SagoSprite smiley[4]; static sago::SagoSprite garbageGM; static sago::SagoSprite garbageGML; static sago::SagoSprite garbageGMR; static sago::SagoSprite transCover; //The transperant block, covers the upcomming static sago::SagoSprite bSkip; static sago::SagoSprite bRetry; const int bExitSize = 100; //height and width of the exit button const int bExitOffset = 140; //pixels from the buttom right corner to the top left of the exit button static sago::MusicHandler bgMusic; //backgroundMusic static sago::MusicHandler highbeatMusic; //Background music with higher beat static sago::SoundHandler boing; //boing sound when clearing static sago::SoundHandler applause; //Applause, then the player is good static sago::SoundHandler photoClick; //clickSound static sago::SoundHandler counterChunk; //When counting down static sago::SoundHandler counterFinalChunk; static bool bMouseUp; //true if the mouse(1) is unpressed static bool bMouseUp2; //true if the mouse(2) is unpressed #if NETWORK static bool bNetworkOpen; //Show the network menu #endif static bool bNearDeathPrev; //Near death status last time checked. static bool puzzleLoaded; //true if the puzzle levels have been loaded static bool drawBalls; //if true balls are drawed to the screen, this might lower framerate too much //global settings (reset everytime the game starts) static Uint8 player1Speed=0; static Uint8 player2Speed=0; static bool player1AI=false; //Is AI enabled? static bool player2AI=false; //Is AI enabled for player 2 (opponent in single player) static Uint8 player1AIlevel=3; //What level is AI? 0 min, 6 max static Uint8 player2AIlevel=3; static const Uint8 AIlevels=7; //7 possible levels: 0..6 static Uint8 player1handicap=0; static Uint8 player2handicap=0; unsigned long int currentTime; //contains the current time, so we don't call SDL_GetTickets() too often... bool twoPlayers; //True if two players are playing //Old Stage Clear Buble static int oldBubleX, oldBubleY; //Allows starting the game with just a single puzzle. Mainly to be able to open a puzzle directly from the level editor static bool singlePuzzle = false; static int singlePuzzleNr = 0; static std::string singlePuzzleFile; #if DEBUG //frame counter (fps) unsigned long int Frames, Ticks; char FPS[10]; #endif //keySetup const int player1keys = 0; const int player2keys = 2; //Stores the controls struct control { SDL_Keycode up; SDL_Keycode down; SDL_Keycode left; SDL_Keycode right; SDL_Keycode change; SDL_Keycode push; }; control keySettings[3]; //array to hold the controls (default and two custom) #define KEYMENU_MAXWITH 4 #define KEYMENU_MAXDEPTH 7 static const int buttonXsize = 120; static const int buttonYsize = 40; struct ButtonCords { int x; int y; int xsize; int ysize; }; ButtonCords cordNextButton = { cordNextButton.x = 3*bsize+(3*bsize-buttonXsize)/2, cordNextButton.y = 10*bsize, cordNextButton.xsize = buttonXsize, cordNextButton.ysize = buttonYsize }; ButtonCords cordRetryButton = { cordRetryButton.x = (3*bsize-buttonXsize)/2, cordRetryButton.y = 10*bsize, cordRetryButton.xsize = buttonXsize, cordRetryButton.ysize = buttonYsize }; static sago::SagoTextField player1name; static sago::SagoTextField player2name; static sago::SagoTextField player1time; static sago::SagoTextField player2time; static sago::SagoTextField player1score; static sago::SagoTextField player2score; static sago::SagoTextField player1chain; static sago::SagoTextField player2chain; static sago::SagoTextField player1speed; static sago::SagoTextField player2speed; #endif