reverted commit 98 (was also wrongly removing my previous work)

git-svn-id: https://clonekeenplus.svn.sourceforge.net/svnroot/clonekeenplus/cgenius/trunk@109 4df4b0f3-56ce-47cb-b001-ed939b7d65a6
This commit is contained in:
albertzeyer
2009-07-22 21:58:45 +00:00
parent 3a78823c6a
commit b69724ad38

View File

@@ -1,6 +1,6 @@
/* MENU.C
The main menu, intro, and other such stuff.
*/
/* MENU.C
The main menu, intro, and other such stuff.
*/
#include "keen.h"
#include "pressf10.h"
@@ -26,7 +26,8 @@
#include <SDL.h>
#include <iostream>
#include <fstream>
using namespace std;
#include "StringUtils.h"
#define SELMOVE_SPD 3
@@ -35,14 +36,13 @@ 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];
std::string levelname;
g_pLogFile->ftextOut("showmapatpos(%d, %d, %d, %d);<br>",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);
levelname = "level" + FixedWidthStr_LeftFill(itoa(level), 2, '0') + ".ck" + itoa(pCKP->Control.levelcontrol.episode);
short numsel;
if(pCKP->Resources.GameSelected == 0 ) // First time startup. No game has been chosen
@@ -62,44 +62,44 @@ void showmapatpos(int level, int xoff, int yoff, int wm, stCloneKeenPlus *pCKP)
short loadResourcesforStartMenu(stCloneKeenPlus *pCKP, CGame *Game)
{
string line;
std::string line;
ifstream gamescfg("data/games.cfg");
std::ifstream gamescfg("data/games.cfg");
if (gamescfg.is_open())
{
while ( !gamescfg.eof() && pCKP->numGames < 20 )
{
getline (gamescfg,line);
while ( !gamescfg.eof() && pCKP->numGames < 20 )
{
getline (gamescfg,line);
if(strncmp(line.data(),"[",strlen("[")) == 0)
{
stGameData *NewGameData;
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));
pCKP->numGames++;
NewGameData = new stGameData[pCKP->numGames];
for(int i = 0; i < pCKP->numGames-1; ++i)
NewGameData[i] = pCKP->GameData[i];
delete[] pCKP->GameData;
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();
pCKP->GameData = NewGameData;
}
if(strncmp(line.data(),"Name=",strlen("Name=")) == 0)
{
pCKP->GameData[pCKP->numGames-1].Name = line.substr(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=");
pCKP->GameData[pCKP->numGames-1].DataDirectory = line.substr(l);
}
}
gamescfg.close();
}
else
{
@@ -310,25 +310,25 @@ int mainmenu(stCloneKeenPlus *pCKP,int defaultopt)
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);
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;
}
if (configmenu(pCKP))
{ // need to restart game
return RESTART_GAME;
}
}
else
{
@@ -495,10 +495,10 @@ int AudioDlg(stCloneKeenPlus *pCKP)
{
switch(rate)
{
case 44100: rate = 48000; break;
case 22050: rate = 44100; break;
case 11000: rate = 22050; break;
default: rate = 11000; break;
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);
@@ -524,7 +524,7 @@ int AudioDlg(stCloneKeenPlus *pCKP)
delete Settings; Settings = NULL;
g_pSound->init();
ok = g_pSound->loadSoundData(pCKP->Control.levelcontrol.episode,
pCKP->GameData[pCKP->Resources.GameSelected-1].DataDirectory);
pCKP->GameData[pCKP->Resources.GameSelected-1].DataDirectory);
break;
}
@@ -963,20 +963,20 @@ void showPage(char *text, stCloneKeenPlus *pCKP, int textsize)
AllPlayersInvisible();
dlgX = 0;
dlgY = 0;
dlgW = 39;
dlgH = 15;
dlgX = 0;
dlgY = 0;
dlgW = 39;
dlgH = 15;
textpos=0;
memset(buffer,0,200*40*sizeof(char));
// Prepare the buffer
textpos=0;
memset(buffer,0,200*40*sizeof(char));
// Prepare the buffer
char sbuf[256];
unsigned int totnumline=0;
char sbuf[256];
unsigned int totnumline=0;
for(i=0;i<200;i++)
{
for(i=0;i<200;i++)
{
for(j=0;j<dlgW-1;j++)
{
sscanf(text+textpos,"%s",sbuf);
@@ -997,7 +997,7 @@ void showPage(char *text, stCloneKeenPlus *pCKP, int textsize)
}
if(text[textpos]==31 ) // I don't know, what they do,
//but original version seems to ignore them!
//but original version seems to ignore them!
{
text[textpos]=' ';
}
@@ -1015,15 +1015,15 @@ void showPage(char *text, stCloneKeenPlus *pCKP, int textsize)
}
totnumline++;
}
buffer[i][j] = ' '; // Last character is empty!
}
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;
char coverline[39];
memset(coverline,2,38*sizeof(char)); // for the upper and lower edges
coverline[38]=0;
do
{
do
{
gamedo_fades();
gamedo_AnimatedTiles();
@@ -1037,19 +1037,17 @@ void showPage(char *text, stCloneKeenPlus *pCKP, int textsize)
{
if(buffer[i+(scroll>>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);
std::string temp(38, ' ');
g_pGraphics->sb_color_font_draw(temp, (dlgX+1)<<3, (((dlgY+i+1)<<3) -(scroll%8)),COLOUR_DARKRED,COLOUR_GREY);
g_pGraphics->sb_color_font_draw(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(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);
g_pGraphics->sb_font_draw(coverline, (dlgX+1)<<3, dlgY); // Upper and lower edge Update
g_pGraphics->sb_font_draw(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))
@@ -1086,8 +1084,8 @@ void showPage(char *text, stCloneKeenPlus *pCKP, int textsize)
break;
if (g_pInput->getPressedCommand(KQUIT)) break;
} while(!crashflag);
return;
} while(!crashflag);
return;
}
char configmenu(stCloneKeenPlus *pCKP)
@@ -1153,24 +1151,24 @@ char configmenu(stCloneKeenPlus *pCKP)
switch(selection)
{
case 0:
GraphicsDlg(pCKP);
break;
case 0:
GraphicsDlg(pCKP);
break;
case 1:
AudioDlg(pCKP);
break;
case 1:
AudioDlg(pCKP);
break;
case 2:
OptionsDlg(pCKP);
break;
case 2:
OptionsDlg(pCKP);
break;
case 3:
controlsmenu(pCKP);
break;
case 3:
controlsmenu(pCKP);
break;
default:
break;
default:
break;
}
delete OptionsMenu;
@@ -1284,14 +1282,14 @@ char controlsmenu(stCloneKeenPlus *pCKP)
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;
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);
@@ -1318,14 +1316,14 @@ char controlsmenu(stCloneKeenPlus *pCKP)
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;
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);
@@ -1372,86 +1370,83 @@ char controlsmenu(stCloneKeenPlus *pCKP)
void keensleft(stCloneKeenPlus *pCKP)
{
int enter, lastenterstate;
unsigned int p;
int x,y,i;
int boxY, boxH;
int boxtimer;
int ep3;
int enter, lastenterstate;
unsigned int p;
int x,y,i;
int boxY, boxH;
int boxtimer;
stLevelControl *p_levelcontrol;
stLevelControl *p_levelcontrol = &pCKP->Control.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
int ep3 = 0;
if (p_levelcontrol->episode==3) ep3 = 1;
// 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
#define KEENSLEFT_TIME 400
for(i=0;i<MAX_PLAYERS;i++)
{
if (player[i].isPlaying)
{
gamepdo_wm_SelectFrame(i, pCKP);
player[i].hideplayer = 0;
}
}
gamedo_RenderScreen(pCKP);
for(i=0;i<MAX_PLAYERS;i++)
{
if (player[i].isPlaying)
{
gamepdo_wm_SelectFrame(i, pCKP);
player[i].hideplayer = 0;
}
}
gamedo_RenderScreen(pCKP);
#define KEENSLEFT_X 7
#define KEENSLEFT_Y 11
#define KEENSLEFT_W 24
#define KEENSLEFT_H 4
#define KEENSLEFT_X 7
#define KEENSLEFT_Y 11
#define KEENSLEFT_W 24
#define KEENSLEFT_H 4
boxY = KEENSLEFT_Y - (numplayers);
boxH = KEENSLEFT_H + (numplayers * 2);
boxY = KEENSLEFT_Y - (numplayers);
boxH = KEENSLEFT_H + (numplayers * 2);
dialogbox(KEENSLEFT_X,boxY,KEENSLEFT_W,boxH);
g_pGraphics->drawFont( getstring("LIVES_LEFT_BACKGROUND"),(KEENSLEFT_X+1)*8,(boxY+1)*8,0);
g_pGraphics->drawFont( getstring("LIVES_LEFT"),((KEENSLEFT_X+7)*8)+4,(boxY+1)*8,0);
y = ((boxY+2)*8)+4;
if (numplayers>1) y--;
for(p=0;p<numplayers;p++)
{
x = ((KEENSLEFT_X+1)*8)+4;
for(i=0;i<player[p].inventory.lives&&i<=10;i++)
{
g_pGraphics->drawSprite_direct(x, y, PMAPDOWNFRAME+playerbaseframes[p]-ep3);
x+=16;
}
y+=18;
}
g_pVideoDriver->update_screen();
dialogbox(KEENSLEFT_X,boxY,KEENSLEFT_W,boxH);
g_pGraphics->drawFont( (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;p<numplayers;p++)
{
x = ((KEENSLEFT_X+1)*8)+4;
for(i=0;i<player[p].inventory.lives&&i<=10;i++)
{
g_pGraphics->drawSprite_direct(x, y, PMAPDOWNFRAME+playerbaseframes[p]-ep3);
x+=16;
}
y+=18;
}
g_pVideoDriver->update_screen();
g_pSound->playSound(SOUND_KEENSLEFT, PLAY_NOW);
g_pSound->playSound(SOUND_KEENSLEFT, PLAY_NOW);
boxtimer = 0;
do
{
boxtimer = 0;
do
{
gamedo_fades();
gamedo_fades();
if (boxtimer > KEENSLEFT_TIME)
{
break;
} else boxtimer++;
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;
}
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);
lastenterstate = enter;
g_pInput->pollEvents();
g_pTimer->SpeedThrottle();
} while(!crashflag);
}