diff --git a/src/menu.cpp b/src/menu.cpp index 608f0586a..5366c46ec 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -1,1453 +1,3 @@ -<<<<<<< .mine - /* MENU.C - The main menu, intro, and other such stuff. -*/ - -#include "keen.h" -#include "pressf10.h" -#include "include/menu.h" -#include "include/misc.h" -#include "sdl/CVideoDriver.h" -#include "include/game.h" -#include "include/gamedo.h" -#include "sdl/CTimer.h" -#include "sdl/sound/CSound.h" -#include "include/eseq_ep2.h" -#include "include/fileio.h" -#include "include/gm_pdowm.h" -#include "include/gamedo.h" -#include "include/main.h" -#include "CGraphics.h" -#include "sdl/video/colourtable.h" -#include "include/gui/dialog.h" -#include "sdl/CInput.h" -#include "vorticon/CDialog.h" -#include "CLogFile.h" -#include "sdl/CSettings.h" -#include -#include -#include -using namespace std; - -#define SELMOVE_SPD 3 - -short openDlgStruct(stDlgStruct *pDlgStruct, stCloneKeenPlus *pCKP); - -void showmapatpos(int level, int xoff, int yoff, int wm, stCloneKeenPlus *pCKP) -{ -int i; -char levelname[MAX_STRING_LENGTH]; -g_pLogFile->ftextOut("showmapatpos(%d, %d, %d, %d);
",level,xoff,yoff,wm); - pCKP->Control.levelcontrol.dark = 0; - g_pGraphics->initPalette(pCKP->Control.levelcontrol.dark); - - initgame(pCKP); // reset scroll - memset(levelname,0,MAX_STRING_LENGTH*sizeof(char)); - sprintf(levelname, "level%02d.ck%d", level, pCKP->Control.levelcontrol.episode); - - short numsel; - if(pCKP->Resources.GameSelected == 0 ) // First time startup. No game has been chosen - numsel = 0; - else - numsel = pCKP->Resources.GameSelected-1; - - loadmap(levelname, pCKP->GameData[numsel].DataDirectory, level, wm, pCKP); - - drawmap(); - for(i=0;isb_blit(); -} - -short loadResourcesforStartMenu(stCloneKeenPlus *pCKP, CGame *Game) -{ - string line; - - ifstream gamescfg("data/games.cfg"); - - if (gamescfg.is_open()) - { - while ( !gamescfg.eof() && pCKP->numGames < 20 ) - { - getline (gamescfg,line); - - if(strncmp(line.data(),"[",strlen("[")) == 0) - { - stGameData *NewGameData; - - pCKP->numGames++; - NewGameData = new stGameData[pCKP->numGames]; - memset(NewGameData,0,pCKP->numGames*sizeof(stGameData)); - memcpy(NewGameData,pCKP->GameData,(pCKP->numGames-1)*sizeof(stGameData)); - - delete[] pCKP->GameData; - - pCKP->GameData = NewGameData; - } - if(strncmp(line.data(),"Name=",strlen("Name=")) == 0) - { - line.copy(pCKP->GameData[pCKP->numGames-1].Name,line.length()-strlen("Name="),strlen("Name=")); - } - if(strncmp(line.data(),"Episode=",strlen("Episode=")) == 0) - { - sscanf(line.data(),"Episode=%hd", &(pCKP->GameData[pCKP->numGames-1].Episode)); - } - if(strncmp(line.data(),"Path=",strlen("Path=")) == 0) - { - unsigned short l = strlen("Path="); - line.copy(pCKP->GameData[pCKP->numGames-1].DataDirectory,line.length()-l,l); - } - } - gamescfg.close(); - } - else - { - g_pLogFile->ftextOut(RED,"loadResourcesforStartMenu(): \"data/games.cfg\" could not be read! Assure, that the directory can be accessed."); - return -1; - } - - if( pCKP->numGames >= 20 ) - g_pLogFile->ftextOut(PURPLE,"parseTheGames(): Warning! Number of games limit in \"data/games.cfg\" reached."); - - if(pCKP->numGames == 0) - { - g_pLogFile->ftextOut(PURPLE,"parseTheGames(): In the file \"data/games.cfg\" no games were found."); - return -1; - } - - unsigned short c=0; - for(c=0 ; c < pCKP->numGames ; c++) - { - checkConsistencyofGameData(&(pCKP->GameData[c])); - } - - // /* Load the graphics of the first game for displaying the menu */ /* Graphics of the first Episode are taken*/ - if(!pCKP->Control.skipstarting) - pCKP->Control.levelcontrol.episode = 1; - else - pCKP->Control.levelcontrol.episode = pCKP->GameData[pCKP->Resources.GameSelected-1].Episode; - - //if (latch_loadgraphics(pCKP->Control.levelcontrol.episode, pCKP->GameData[0].DataDirectory)) return abortCKP(pCKP); - //if (Game->getLatch()->loadGraphics(pCKP->Control.levelcontrol.episode, pCKP->GameData[0].DataDirectory)) return abortCKP(pCKP); - Game->loadResources(pCKP->Control.levelcontrol.episode, pCKP->GameData[0].DataDirectory); - - player[0].x = player[0].y = 0; - if(initgamefirsttime(pCKP, 0) != 0) - { - return 1; - } - initgame(pCKP); - - return 0; -} - - -#define MAINMENU_GOTO_DEMO_TIME 4000 - -extern char fade_black; -short loadStartMenu(stCloneKeenPlus *pCKP) -{ - CDialog *GamesMenu; - int i; - - fade.mode = FADE_GO; - fade.rate = FADE_NORM; - fade.dir = FADE_IN; - fade.curamt = 0; - fade.fadetimer = 0; - showmapatpos(90, (104 << 2)+256+256+80, 32-4, 0, pCKP); - - // Prepare the Games Menu - GamesMenu = new CDialog(); - - GamesMenu->setDimensions(2,2,36,15); - - // Show me the games you detected! - for( i=0 ; i < pCKP->numGames ; i++ ) - { - GamesMenu->addOptionText(pCKP->GameData[i].Name); - } - - GamesMenu->animateDialogBox(true); - - do - { - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - - // do fades - gamedo_fades(); - if(fade.mode == FADE_COMPLETE) - GamesMenu->setVisible(true); - - gamedo_AnimatedTiles(); - - // Check the Input - if(g_pInput->getPulsedCommand(IC_DOWN, 80)) - GamesMenu->setNextSelection(); - if(g_pInput->getPulsedCommand(IC_UP, 80)) - GamesMenu->setPrevSelection(); - - if(g_pInput->getPressedCommand(0, IC_STATUS)) - { - fade.dir = FADE_OUT; - fade.curamt = PAL_FADE_SHADES; - fade.fadetimer = 0; - fade.rate = FADE_NORM; - fade.mode = FADE_GO; - pCKP->Resources.GameSelected = GamesMenu->getSelection()+1; - pCKP->Control.levelcontrol.episode = pCKP->GameData[pCKP->Resources.GameSelected-1].Episode; - break; - } - - // Render the Games-Menu - GamesMenu->renderDialog(); - - // blit the scrollbuffer to the display - gamedo_frameskipping_blitonly(); - } while(!g_pInput->getExitEvent()); - - delete GamesMenu; - - return 0; -} - -int mainmenu(stCloneKeenPlus *pCKP,int defaultopt) -{ - - CDialog *MainMenu; - int bmnum; - int x; - int selection; - - for(unsigned int cp=0 ; cpsetDimensions(11,8,18,12); - - // Load the Title Bitmap - bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); - - MainMenu->addOptionText("1-Player Game"); - MainMenu->addOptionText("2-Player Game"); - MainMenu->addOptionText("Load Game"); - MainMenu->addOptionText("Story"); - MainMenu->addOptionText("High Scores"); - MainMenu->addOptionText("Options"); - MainMenu->addOptionText("Demo"); - MainMenu->addOptionText("Change Game"); - MainMenu->addOptionText("About CG"); - MainMenu->addOptionText("Quit"); - - x = (320/2)-(bitmaps[bmnum].xsize/2); - - g_pGraphics->drawBitmap(x, 0, bmnum); - - MainMenu->animateDialogBox(true); - - do - { - - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - - // do fades - gamedo_fades(); - if(fade.mode == FADE_COMPLETE) - MainMenu->setVisible(true); - - gamedo_AnimatedTiles(); - - // Check the Input - if(g_pInput->getPulsedCommand(IC_DOWN, 80)) - MainMenu->setNextSelection(); - if(g_pInput->getPulsedCommand(IC_UP, 80)) - MainMenu->setPrevSelection(); - - if(g_pInput->getPressedCommand(IC_STATUS)) - { - selection = MainMenu->getSelection(); - break; - } - - - // Render the Games-Menu - MainMenu->renderDialog(); - - // blit the scrollbuffer to the display - gamedo_frameskipping_blitonly(); - - if(g_pInput->getExitEvent()) - { - delete MainMenu; - return MAINMNU_QUIT; - } - - } while(1); - - if (selection==MAINMNU_LOADGAME) - { - int diff; - diff = getDifficulty(pCKP); - if(diff>2) - { - return BACK2MAINMENU; - } - - pCKP->Control.levelcontrol.hardmode = (diff == 1) ? true : false; - - loadslot = save_slot_box(0, pCKP); - if (loadslot) - { - fade.dir = FADE_OUT; - fade.curamt = PAL_FADE_SHADES; - fade.fadetimer = 0; - fade.rate = FADE_NORM; - fade.mode = FADE_GO; - } - bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); - x = (320/2)-(bitmaps[bmnum].xsize/2); - g_pGraphics->drawBitmap(x, 0, bmnum); - } - else if (selection==MAINMNU_OPTIONS) - { - if (configmenu(pCKP)) - { // need to restart game - return RESTART_GAME; - } - } - else - { - if(selection==MAINMNU_1PLAYER || selection==MAINMNU_2PLAYER) - { - - int diff; - diff = getDifficulty(pCKP); - - if(diff>2) - { - delete MainMenu; - return BACK2MAINMENU; - } - pCKP->Control.levelcontrol.hardmode = (diff == 1) ? true : false; - } - - fade.dir = FADE_OUT; - fade.curamt = PAL_FADE_SHADES; - fade.fadetimer = 0; - fade.rate = FADE_NORM; - fade.mode = FADE_GO; - } - - delete MainMenu; - - return selection; -} - -void initialiazeDlgStruct(stDlgStruct *pDlgStruct) -{ - pDlgStruct->OptionSwitch = (stOptionSwitch*) malloc(pDlgStruct->num_OptionSwitches*sizeof(stOptionSwitch)); - pDlgStruct->Separator = (stSeparator*) malloc(pDlgStruct->num_Separators*sizeof(stSeparator)); - pDlgStruct->StarterSwitch = (stStarterSwitch*) malloc(pDlgStruct->num_StarterSwitch*sizeof(stStarterSwitch)); - pDlgStruct->TextLine = (stTextLine*) malloc(pDlgStruct->num_TextLines*sizeof(stTextLine)); -} - -int getDifficulty(stCloneKeenPlus *pCKP) -{ - CDialog *DifficultyMenu; - int bmnum; - int selection; - int x; - - fade.mode = FADE_GO; - fade.rate = FADE_NORM; - fade.dir = FADE_IN; - fade.curamt = 0; - fade.fadetimer = 0; - - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); - - // Load the Title Bitmap - bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); - - x = (320/2)-(bitmaps[bmnum].xsize/2); - - g_pGraphics->drawBitmap(x, 0, bmnum); - - // Prepare the Games Menu - DifficultyMenu = new CDialog(); - - DifficultyMenu->setDimensions(15,4,14,6); - - DifficultyMenu->addOptionText("Normal"); - DifficultyMenu->addOptionText("Hard"); - DifficultyMenu->addSeparator(); - DifficultyMenu->addOptionText("Cancel"); - - DifficultyMenu->animateDialogBox(true); - - do - { - // do fades - gamedo_fades(); - if(fade.mode == FADE_COMPLETE) - DifficultyMenu->setVisible(true); - - gamedo_AnimatedTiles(); - - // Check the Input - if(g_pInput->getPulsedCommand(IC_DOWN, 80)) - DifficultyMenu->setNextSelection(); - if(g_pInput->getPulsedCommand(IC_UP, 80)) - DifficultyMenu->setPrevSelection(); - - if(g_pInput->getPressedCommand(IC_STATUS)) - { - selection = DifficultyMenu->getSelection(); - break; - } - // Render the Games-Menu - DifficultyMenu->renderDialog(); - - // blit the scrollbuffer to the display - gamedo_frameskipping_blitonly(); - - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - - } while(1); - - delete DifficultyMenu; - - return selection; -} - -int AudioDlg(stCloneKeenPlus *pCKP) -{ - CDialog *AudioMenu; - int bmnum; - int selection; - int x; - int ok=0; - - int rate=0; - short mode=0; - - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); - - // Load the Title Bitmap - bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); - x = (320/2)-(bitmaps[bmnum].xsize/2); - g_pGraphics->drawBitmap(x, 0, bmnum); - - // Prepare the Games Menu - AudioMenu = new CDialog(); - AudioMenu->setDimensions(4,4,32,7); - - char buf[256]; - rate = g_pSound->getAudioSpec().freq; - sprintf(buf,"Rate: %d kHz",rate); - AudioMenu->addOptionText(buf); - mode = g_pSound->getAudioSpec().channels - 1; - if(mode == 1) - AudioMenu->addOptionText("Mode: Stereo"); - else - AudioMenu->addOptionText("Mode: Mono"); - AudioMenu->addSeparator(); - AudioMenu->addOptionText("Save and go back"); - AudioMenu->addOptionText("Cancel"); - - AudioMenu->animateDialogBox(true); - - do - { - // do fades - gamedo_fades(); - if(fade.mode == FADE_COMPLETE) - AudioMenu->setVisible(true); - gamedo_AnimatedTiles(); - - // Check the Input - if(g_pInput->getPulsedCommand(IC_DOWN, 80)) - AudioMenu->setNextSelection(); - if(g_pInput->getPulsedCommand(IC_UP, 80)) - AudioMenu->setPrevSelection(); - - if(g_pInput->getPressedCommand(IC_STATUS)) - { - selection = AudioMenu->getSelection(); - - if(selection == 0) - { - switch(rate) - { - case 44100: rate = 48000; break; - case 22050: rate = 44100; break; - case 11000: rate = 22050; break; - default: rate = 11000; break; - } - - sprintf(buf,"Rate: %d kHz",rate); - AudioMenu->setOptionText(0,buf); - } - - if(selection == 1) - { - mode = !mode; - if(!mode) - AudioMenu->setOptionText(1,"Mode: Mono"); - else - AudioMenu->setOptionText(1,"Mode: Stereo"); - } - - if(selection == 3) - { - g_pSound->destroy(); - g_pSound->setSoundmode(rate, mode ? true : false); - CSettings *Settings; - Settings = new CSettings(); - Settings->saveDrvCfg(); - delete Settings; Settings = NULL; - g_pSound->init(); - ok = g_pSound->loadSoundData(pCKP->Control.levelcontrol.episode, - pCKP->GameData[pCKP->Resources.GameSelected-1].DataDirectory); - - break; - } - if(selection == 4) - break; - - } - // Render the Games-Menu - AudioMenu->renderDialog(); - - // blit the scrollbuffer to the display - gamedo_frameskipping_blitonly(); - - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - - } while(1); - - delete AudioMenu; - return ok; -} - -void OptionsDlg(stCloneKeenPlus *pCKP) -{ - CDialog *OptionsMenu; - int bmnum; - int selection; - int x,i; - - char buf[256]; - - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); - - // Load the Title Bitmap - bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); - x = (320/2)-(bitmaps[bmnum].xsize/2); - g_pGraphics->drawBitmap(x, 0, bmnum); - - // Prepare the Games Menu - OptionsMenu = new CDialog(); - OptionsMenu->setDimensions(3,3,34,12); - - for( i = 0 ; i < NUM_OPTIONS ; i++ ) - { - sprintf(buf,"%s: ",options[i].name); - if(options[i].value) - strcat(buf,"Enabled"); - else - strcat(buf,"Disabled"); - - OptionsMenu->addOptionText(buf); - } - - OptionsMenu->addSeparator(); - OptionsMenu->addOptionText("Return"); - - OptionsMenu->animateDialogBox(true); - - do - { - // do fades - gamedo_fades(); - if(fade.mode == FADE_COMPLETE) - OptionsMenu->setVisible(true); - gamedo_AnimatedTiles(); - - // Check the Input - if(g_pInput->getPulsedCommand(IC_DOWN, 80)) - OptionsMenu->setNextSelection(); - if(g_pInput->getPulsedCommand(IC_UP, 80)) - OptionsMenu->setPrevSelection(); - - if(g_pInput->getPressedCommand(IC_STATUS)) - { - selection = OptionsMenu->getSelection(); - - if(selection < NUM_OPTIONS) - { - sprintf(buf,"%s: ",options[selection].name); - - if(options[selection].value) - { - options[selection].value = 0; - strcat(buf,"Disabled"); - } - else - { - options[selection].value = 1; - strcat(buf,"Enabled"); - } - - OptionsMenu->setOptionText(selection,buf); - } - else - { - CSettings Settings; - Settings.saveGameCfg(pCKP->Option); - break; - } - } - // Render the Games-Menu - OptionsMenu->renderDialog(); - - // blit the scrollbuffer to the display - gamedo_frameskipping_blitonly(); - - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - - } while(1); - - delete OptionsMenu; -} - -short GraphicsDlg(stCloneKeenPlus *pCKP) -{ - CDialog *DisplayMenu; - int bmnum; - int selection; - int x; - unsigned int width; - unsigned int height; - unsigned short depth; - unsigned short zoom = 1; - unsigned short filter = 0; - unsigned short frameskip = 0; - bool opengl = false; - unsigned char gl_filter = 0; - bool fsmode; - char buf[256]; - short retval = 0; - unsigned char autoframeskip = 0; - bool aspect; - - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); - - // Load the Title Bitmap - bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); - x = (320/2)-(bitmaps[bmnum].xsize/2); - g_pGraphics->drawBitmap(x, 0, bmnum); - - // Prepare the Games Menu - DisplayMenu = new CDialog(); - DisplayMenu->setDimensions(4,3,32,13); - - width = g_pVideoDriver->getWidth(); - height = g_pVideoDriver->getHeight(); - depth = g_pVideoDriver->getDepth(); - sprintf(buf,"Resolution: %dx%dx%d",width,height,depth); - - zoom = g_pVideoDriver->getZoomValue(); - filter = g_pVideoDriver->getFiltermode(); - frameskip = g_pVideoDriver->getFrameskip(); - - DisplayMenu->addOptionText(buf); - if(g_pVideoDriver->getFullscreen()) - { - DisplayMenu->addOptionText("Fullscreen mode"); - fsmode = true; - } - else - { - DisplayMenu->addOptionText("Windowed mode"); - fsmode = false; - } - - opengl = g_pVideoDriver->isOpenGL(); - if(!opengl) - { - zoom = g_pVideoDriver->getZoomValue(); - - if(zoom == 1) - sprintf(buf,"No scale"); - else - sprintf(buf,"Scale: %d", zoom); - DisplayMenu->addOptionText(buf); - } - else - { - gl_filter = g_pVideoDriver->getOGLFilter(); - - if(gl_filter == 1) - sprintf(buf,"OGL Filter: Linear"); - else - sprintf(buf,"OGL Filter: Nearest"); - DisplayMenu->addOptionText(buf); - } - - filter = g_pVideoDriver->getFiltermode(); - if(filter == 0) - DisplayMenu->addOptionText("No Filter"); - else if(filter == 1) - DisplayMenu->addOptionText("Scale2x Filter"); - else if(filter == 2) - DisplayMenu->addOptionText("Scale3x Filter"); - else if(filter == 3) - DisplayMenu->addOptionText("Scale4x Filter"); - else - DisplayMenu->addOptionText("Unknown Filter"); - - sprintf(buf,"Frameskip: %d", frameskip); - DisplayMenu->addOptionText(buf); - - if(opengl) - DisplayMenu->addOptionText("OpenGL Acceleration"); - else - DisplayMenu->addOptionText("Software Rendering"); - - autoframeskip = g_pVideoDriver->getTargetFPS(); - - if(autoframeskip) - sprintf(buf,"Auto-Frameskip : %d fps",autoframeskip); - else - sprintf(buf,"Auto-Frameskip disabled"); - - DisplayMenu->addOptionText(buf); - - aspect = g_pVideoDriver->getAspectCorrection(); - - if(aspect) - DisplayMenu->addOptionText("OGL Aspect Ratio Enabled"); - else - DisplayMenu->addOptionText("OGL Aspect Ratio Disabled"); - - DisplayMenu->addSeparator(); - DisplayMenu->addOptionText("Save and return"); - DisplayMenu->addOptionText("Cancel"); - DisplayMenu->animateDialogBox(true); - - do - { - // do fades - gamedo_fades(); - if(fade.mode == FADE_COMPLETE) - DisplayMenu->setVisible(true); - gamedo_AnimatedTiles(); - - // Check the Input - if(g_pInput->getPulsedCommand(IC_DOWN, 80)) - DisplayMenu->setNextSelection(); - if(g_pInput->getPulsedCommand(IC_UP, 80)) - DisplayMenu->setPrevSelection(); - - if(g_pInput->getPressedCommand(IC_STATUS)) - { - selection = DisplayMenu->getSelection(); - - if(selection == 0) - { - // Now the part of the resolution list - st_resolution Resolution; - Resolution = g_pVideoDriver->setNextResolution(); - - sprintf(buf,"Resolution: %dx%dx%d", Resolution.width, Resolution.height, Resolution.depth); - DisplayMenu->setOptionText(selection,buf); - } - else if(selection == 1) - { - if(!fsmode) - DisplayMenu->setOptionText(1,"Fullscreen mode"); - else - DisplayMenu->setOptionText(1,"Windowed mode"); - fsmode = !fsmode; - } - else if(selection == 2) - { - if(opengl) - { - gl_filter = (gl_filter==1) ? 0 : 1; - - if(gl_filter == 1) - sprintf(buf,"OGL Filter: Linear"); - else - sprintf(buf,"OGL Filter: Nearest"); - - DisplayMenu->setOptionText(2,buf); - } - else - { - if(zoom >= 4) - zoom = 1; - else - zoom++; - - if(zoom == 1) - sprintf(buf,"No scale"); - else - sprintf(buf,"Scale: %d", zoom); - } - - DisplayMenu->setOptionText(2,buf); - } - - else if(selection == 3) - { - if(filter >= 3) - filter = 0; - else - filter++; - - if(filter == 0) - DisplayMenu->setOptionText(3,"No Filter"); - else if(filter == 1) - DisplayMenu->setOptionText(3,"Scale2x Filter"); - else if(filter == 2) - DisplayMenu->setOptionText(3,"Scale3x Filter"); - else if(filter == 3) - DisplayMenu->setOptionText(3,"Scale4x Filter"); - } - else if(selection == 4) - { - frameskip++; - - if(frameskip > 20) - frameskip = 0; - - sprintf(buf,"Frameskip: %d",frameskip); - DisplayMenu->setOptionText(4,buf); - } - else if(selection == 5) - { - opengl = opengl ? false : true; // switch the mode!! - - if(opengl) - DisplayMenu->setOptionText(5,"OpenGL Acceleration"); - else - DisplayMenu->setOptionText(5,"Software Rendering"); - } - else if(selection == 6) - { - if(autoframeskip < 70) - { - autoframeskip += 10; - sprintf(buf,"Auto-Frameskip : %d fps", autoframeskip); - } - else - { - autoframeskip = 0; - sprintf(buf,"Auto-Frameskip disabled"); - } - - DisplayMenu->setOptionText(6, buf); - } - else if(selection == 7) - { - aspect = !aspect; - - if(aspect) - DisplayMenu->setOptionText(7,"OGL Aspect Ratio Enabled"); - else - DisplayMenu->setOptionText(7,"OGL Aspect Ratio Disabled"); - - } - else if(selection == 9) - { - g_pVideoDriver->stop(); - - if(fsmode) - g_pVideoDriver->isFullscreen(true); - else - g_pVideoDriver->isFullscreen(false); - - g_pVideoDriver->enableOpenGL(opengl); - g_pVideoDriver->setOGLFilter(gl_filter); - g_pVideoDriver->setZoom(zoom); - g_pVideoDriver->setFilter(filter); - g_pVideoDriver->setFrameskip(frameskip); - g_pVideoDriver->setTargetFPS(autoframeskip); - g_pVideoDriver->setAspectCorrection(aspect); - - // initialize/activate all drivers - g_pLogFile->ftextOut("Restarting graphics driver... (Menu)
"); - if (g_pVideoDriver->start()) - retval = 1; - - CSettings *Settings; - Settings = new CSettings(); - - Settings->saveDrvCfg(); - delete Settings; Settings = NULL; - - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); - - fade.mode = FADE_GO; - fade.dir = FADE_IN; - fade.curamt = 0; - fade.rate = FADE_NORM; - fade.fadetimer = 0; - gamedo_fades(); - break; - } - else - break; - } - // Render the Games-Menu - DisplayMenu->renderDialog(); - - // blit the scrollbuffer to the display - gamedo_frameskipping_blitonly(); - - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - - } while(1); - - delete DisplayMenu; - - return retval; -} - - -// This function shows the Story of Commander Keen! -void showPage(char *text, stCloneKeenPlus *pCKP, int textsize) -{ - unsigned int i, j, k; - int exit=0; - int textpos; - bool enter; - unsigned int dlgX,dlgY,dlgW,dlgH; - unsigned int scroll, maxscroll; - char buffer[200][40]; - - showmapatpos(90, STORYBOARD_X, STORYBOARD_Y, 0, pCKP); - - fade.mode = FADE_GO; - fade.rate = FADE_NORM; - fade.dir = FADE_IN; - fade.curamt = 0; - fade.fadetimer = 0; - - scroll=0; - maxscroll=0; - - j=0; - k=0; - - AllPlayersInvisible(); - - dlgX = 0; - dlgY = 0; - dlgW = 39; - dlgH = 15; - - textpos=0; - memset(buffer,0,200*40*sizeof(char)); - // Prepare the buffer - - char sbuf[256]; - unsigned int totnumline=0; - - for(i=0;i<200;i++) - { - for(j=0;j dlgW-2)) - { - if(text[textpos] == ' ') - { - textpos++; - break; - } - } - - if(text[textpos]=='\n' ) - { - textpos++; - break; - } - - if(text[textpos]==31 ) // I don't know, what they do, - //but original version seems to ignore them! - { - text[textpos]=' '; - } - - - buffer[i][j]=text[textpos]; - textpos++; - if(textpos >= textsize) - break; - } - if(textpos >= textsize) - { - totnumline+=3; - break; - } - - totnumline++; - } - buffer[i][j] = ' '; // Last character is empty! - - char coverline[39]; - memset(coverline,2,38*sizeof(char)); // for the upper and lower edges - coverline[38]=0; - - do - { - gamedo_fades(); - - gamedo_AnimatedTiles(); - - sb_dialogbox(dlgX, dlgY, dlgW, dlgH); - - k=0; - - // Draw the text - for(i=0;i>3)][0]=='~') // Special Background Colour - { - char temp[39]; - memset(temp,' ',38*sizeof(char)); - temp[38]=0; - g_pGraphics->sb_color_font_draw((unsigned char*) temp, (dlgX+1)<<3, (((dlgY+i+1)<<3) -(scroll%8)),COLOUR_DARKRED,COLOUR_GREY); - g_pGraphics->sb_color_font_draw((unsigned char*) buffer[i+(scroll>>3)]+1, (dlgX+1)<<3, (((dlgY+i+1)<<3) -(scroll%8)),COLOUR_DARKRED,COLOUR_GREY); - } - else - { - g_pGraphics->sb_font_draw((unsigned char*) buffer[i+(scroll>>3)], (dlgX+1)<<3, (((dlgY+i+1)<<3) -(scroll%8))); - } - } - g_pGraphics->sb_font_draw((unsigned char*) coverline, (dlgX+1)<<3, dlgY); // Upper and lower edge Update - g_pGraphics->sb_font_draw((unsigned char*) coverline, (dlgX+1)<<3, (dlgY+dlgH-1)<<3); - - // If user presses up or down - if (g_pInput->getHoldedCommand(0,IC_DOWN) || g_pInput->getHoldedCommand(1,IC_DOWN)) - { - if(scroll < (totnumline-dlgH)<<3) - scroll++; - SDL_Delay(2); - } - else if (g_pInput->getHoldedCommand(0,IC_UP) || g_pInput->getHoldedCommand(1,IC_UP)) - { - if(scroll > 0) - scroll--; - SDL_Delay(2); - } - - enter = (g_pInput->getPressedCommand(0,IC_STATUS) || g_pInput->getPressedCommand(1,IC_STATUS)); - if (enter) - { - exit=1; - fade.dir = FADE_OUT; - fade.curamt = PAL_FADE_SHADES; - fade.fadetimer = 0; - fade.rate = FADE_NORM; - fade.mode = FADE_GO; - } - - gamedo_frameskipping(pCKP); - - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - - - if(exit==1 && fade.mode==FADE_COMPLETE) - break; - - if (g_pInput->getPressedCommand(KQUIT)) break; - } while(!crashflag); - return; -} - -char configmenu(stCloneKeenPlus *pCKP) -{ - CDialog *OptionsMenu; - int bmnum; - int selection; - int x; - - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); - - // Load the Title Bitmap - bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); - - x = (320/2)-(bitmaps[bmnum].xsize/2); - - g_pGraphics->drawBitmap(x, 0, bmnum); - - // Prepare the Games Menu - OptionsMenu = new CDialog(); - - OptionsMenu->setDimensions(15,4,14,8); - - OptionsMenu->addOptionText("Graphics"); - OptionsMenu->addOptionText("Audio"); - OptionsMenu->addOptionText("Game"); - OptionsMenu->addOptionText("Controls"); - OptionsMenu->addSeparator(); - OptionsMenu->addOptionText("Back"); - - OptionsMenu->animateDialogBox(true); - - do - { - // do fades - gamedo_fades(); - if(fade.mode == FADE_COMPLETE) - OptionsMenu->setVisible(true); - - gamedo_AnimatedTiles(); - - // Check the Input - if(g_pInput->getPulsedCommand(IC_DOWN, 80)) - OptionsMenu->setNextSelection(); - if(g_pInput->getPulsedCommand(IC_UP, 80)) - OptionsMenu->setPrevSelection(); - - if(g_pInput->getPressedCommand(IC_STATUS)) - { - selection = OptionsMenu->getSelection(); - break; - } - // Render the Games-Menu - OptionsMenu->renderDialog(); - - // blit the scrollbuffer to the display - gamedo_frameskipping_blitonly(); - - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - - } while(1); - - switch(selection) - { - case 0: - GraphicsDlg(pCKP); - break; - - case 1: - AudioDlg(pCKP); - break; - - case 2: - OptionsDlg(pCKP); - break; - - case 3: - controlsmenu(pCKP); - break; - - default: - break; - } - - delete OptionsMenu; - - return 0; -} - -char controlsmenu(stCloneKeenPlus *pCKP) -{ - CDialog *ControlsMenu; - int bmnum; - int selection; - int x; - char buf[256]; - char buf2[256]; - - showmapatpos(90, MAINMENU_X, MENUS_Y, 0, pCKP); - - // Load the Title Bitmap - bmnum = g_pGraphics->getBitmapNumberFromName("TITLE"); - - x = (320/2)-(bitmaps[bmnum].xsize/2); - - g_pGraphics->drawBitmap(x, 0, bmnum); - - // Prepare the Games Menu - ControlsMenu = new CDialog(); - - ControlsMenu->setDimensions(1,3,38,20); - - g_pInput->getEventName(IC_LEFT, 0, buf2); - sprintf(buf,"P1 Left: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_UP, 0, buf2); - sprintf(buf,"P1 Up: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_RIGHT, 0, buf2); - sprintf(buf,"P1 Right: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_DOWN, 0, buf2); - sprintf(buf,"P1 Down: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_JUMP, 0, buf2); - sprintf(buf,"P1 Jump: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_POGO, 0, buf2); - sprintf(buf,"P1 Pogo: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_FIRE, 0, buf2); - sprintf(buf,"P1 Fire: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_STATUS, 0, buf2); - sprintf(buf,"P1 Status: %s",buf2); - ControlsMenu->addOptionText(buf); - - g_pInput->getEventName(IC_LEFT, 1, buf2); - sprintf(buf,"P2 Left: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_UP, 1, buf2); - sprintf(buf,"P2 Up: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_RIGHT, 1, buf2); - sprintf(buf,"P2 Right: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_DOWN, 1, buf2); - sprintf(buf,"P2 Down: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_JUMP, 1, buf2); - sprintf(buf,"P2 Jump: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_POGO, 1, buf2); - sprintf(buf,"P2 Pogo: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_FIRE, 1, buf2); - sprintf(buf,"P2 Fire: %s",buf2); - ControlsMenu->addOptionText(buf); - g_pInput->getEventName(IC_STATUS, 1, buf2); - sprintf(buf,"P2 Status: %s",buf2); - ControlsMenu->addOptionText(buf); - ControlsMenu->addSeparator(); - ControlsMenu->addOptionText("Return"); - - ControlsMenu->animateDialogBox(true); - - do - { - // do fades - gamedo_fades(); - if(fade.mode == FADE_COMPLETE) - ControlsMenu->setVisible(true); - gamedo_AnimatedTiles(); - - // Check the Input - if(g_pInput->getPulsedCommand(IC_DOWN, 80)) - ControlsMenu->setNextSelection(); - if(g_pInput->getPulsedCommand(IC_UP, 80)) - ControlsMenu->setPrevSelection(); - - if(g_pInput->getPressedCommand(IC_STATUS)) - { - selection = ControlsMenu->getSelection(); - - if(selection < MAX_COMMANDS) - { - int item=0; - if(selection < 4) - item = selection + 4; - else - item = selection - 4; - - switch(selection) - { - case 0: sprintf(buf,"P1 Left: "); break; - case 1: sprintf(buf,"P1 Up: "); break; - case 2: sprintf(buf,"P1 Right: "); break; - case 3: sprintf(buf,"P1 Down: "); break; - case 4: sprintf(buf,"P1 Jump: "); break; - case 5: sprintf(buf,"P1 Pogo: "); break; - case 6: sprintf(buf,"P1 Fire: "); break; - case 7: sprintf(buf,"P1 Status: "); break; - } - - strcpy(buf2,buf); - strcat(buf2,"*Waiting for Input*"); - ControlsMenu->setOptionText(selection,buf2); - - while(!g_pInput->readNewEvent(0,item)) - { - ControlsMenu->renderDialog(); - gamedo_frameskipping_blitonly(); - } - - g_pInput->getEventName(item, 0, buf2); - strcat(buf,buf2); - ControlsMenu->setOptionText(selection,buf); - } - else if(selection >= MAX_COMMANDS && selection < MAX_COMMANDS*2) - { - int item=0; - if(selection < (4 + MAX_COMMANDS)) - item = selection + 4 - MAX_COMMANDS; - else - item = selection - 4 - MAX_COMMANDS; - - switch(selection) - { - case 0+ MAX_COMMANDS: sprintf(buf,"P2 Left: "); break; - case 1+ MAX_COMMANDS: sprintf(buf,"P2 Up: "); break; - case 2+ MAX_COMMANDS: sprintf(buf,"P2 Right: "); break; - case 3+ MAX_COMMANDS: sprintf(buf,"P2 Down: "); break; - case 4+ MAX_COMMANDS: sprintf(buf,"P2 Jump: "); break; - case 5+ MAX_COMMANDS: sprintf(buf,"P2 Pogo: "); break; - case 6+ MAX_COMMANDS: sprintf(buf,"P2 Fire: "); break; - case 7+ MAX_COMMANDS: sprintf(buf,"P2 Status: "); break; - } - - strcpy(buf2,buf); - strcat(buf2,"*Waiting for Input*"); - ControlsMenu->setOptionText(selection,buf2); - - while(!g_pInput->readNewEvent(1,item)) - { - ControlsMenu->renderDialog(); - gamedo_frameskipping_blitonly(); - } - - g_pInput->getEventName(item, 1, buf2); - strcat(buf,buf2); - ControlsMenu->setOptionText(selection,buf); - } - else - { - g_pInput->saveControlconfig(); - break; - } - } - // Render the Menu - ControlsMenu->renderDialog(); - - // blit the scrollbuffer to the display - gamedo_frameskipping_blitonly(); - - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - - } while(1); - - delete ControlsMenu; - return 0; -} - -void keensleft(stCloneKeenPlus *pCKP) -{ -int enter, lastenterstate; -unsigned int p; -int x,y,i; -int boxY, boxH; -int boxtimer; -int ep3; - -stLevelControl *p_levelcontrol; - - p_levelcontrol = &(pCKP->Control.levelcontrol); - - // on episode 3 we have to subtract one from the map tiles - // because the tiles start at 31, not 32 like on the other eps - ep3 = 0; - if (p_levelcontrol->episode==3) ep3 = 1; - - #define KEENSLEFT_TIME 400 - - for(i=0;idrawFont( (unsigned char*) getstring("LIVES_LEFT_BACKGROUND"),(KEENSLEFT_X+1)*8,(boxY+1)*8,0); - g_pGraphics->drawFont( (unsigned char*) getstring("LIVES_LEFT"),((KEENSLEFT_X+7)*8)+4,(boxY+1)*8,0); - y = ((boxY+2)*8)+4; - if (numplayers>1) y--; - for(p=0;pdrawSprite_direct(x, y, PMAPDOWNFRAME+playerbaseframes[p]-ep3); - x+=16; - } - y+=18; - } - g_pVideoDriver->update_screen(); - - g_pSound->playSound(SOUND_KEENSLEFT, PLAY_NOW); - - boxtimer = 0; - do - { - - gamedo_fades(); - - if (boxtimer > KEENSLEFT_TIME) - { - break; - } else boxtimer++; - - enter = g_pInput->getPressedCommand(IC_STATUS)||g_pInput->getPressedCommand(IC_FIRE)|| - g_pInput->getPressedCommand(IC_JUMP)||g_pInput->getPressedCommand(IC_POGO); - if (enter) - { - break; - } - if (g_pInput->getPressedCommand(KQUIT)) - { - return; - } - - lastenterstate = enter; - g_pInput->pollEvents(); - g_pTimer->SpeedThrottle(); - } while(!crashflag); - -} -======= /* MENU.C The main menu, intro, and other such stuff. */ @@ -2893,4 +1443,3 @@ stLevelControl *p_levelcontrol = &pCKP->Control.levelcontrol; } while(!crashflag); } ->>>>>>> .r93