%20WL_MENU.C
///////////////////////////////////////////////////////////////////
/
//
// VIEW THE HIGH SCORES
//
////////////////////////////////////////////////////////////////////
void CP_ViewScores(void)
{
fontnumber=0;
#ifdef SPEAR
UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);
StartCPMusic (XAWARD_MUS);
#else
StartCPMusic (ROSTER_MUS);
#endif
DrawHighScores ();
VW_UpdateScreen ();
MenuFadeIn();
fontnumber=1;
IN_Ack();
StartCPMusic(MENUSONG);
MenuFadeOut();
#ifdef SPEAR
CacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);
CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);
#endif
}
////////////////////////////////////////////////////////////////////
//
// START A NEW GAME
//
////////////////////////////////////////////////////////////////////
void CP_NewGame(void)
{
int which,episode;
#ifdef SPEAR
UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);
#endif
#ifndef SPEAR
firstpart:
DrawNewEpisode();
do
{
which=HandleMenu(&NewEitems,&NewEmenu[0],NULL);
switch(which)
{
case -1:
MenuFadeOut();
return;
default:
if (!EpisodeSelect[which/2])
{
SD_PlaySound (NOWAYSND);
Message("Please select \"Read This!\"\n"
"from the Options menu to\n"
"find out how to order this\n"
"episode from Apogee.");
IN_ClearKeysDown();
IN_Ack();
DrawNewEpisode();
which = 0;
}
else
{
episode = which/2;
which = 1;
}
break;
}
} while (!which);
ShootSnd();
//
// ALREADY IN A GAME?
//
if (ingame)
#ifdef JAPAN
if (!GetYorN(7,8,C_JAPNEWGAMEPIC))
#else
if (!Confirm(CURGAME))
#endif
{
MenuFadeOut();
return;
}
MenuFadeOut();
#else
episode = 0;
//
// ALREADY IN A GAME?
//
CacheLump (NEWGAME_LUMP_START,NEWGAME_LUMP_END);
DrawNewGame();
if (ingame)
if (!Confirm(CURGAME))
{
MenuFadeOut();
UnCacheLump (NEWGAME_LUMP_START,NEWGAME_LUMP_END);
CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);
return;
}
#endif
DrawNewGame();
which=HandleMenu(&NewItems,&NewMenu[0],DrawNewGameDiff);
if (which<0)
{
MenuFadeOut();
#ifndef SPEAR
goto firstpart;
#else
UnCacheLump (NEWGAME_LUMP_START,NEWGAME_LUMP_END);
CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);
return;
#endif
}
ShootSnd();
NewGame(which,episode);
StartGame=1;
MenuFadeOut();
//
// CHANGE "READ THIS!" TO NORMAL COLOR
//
#ifndef SPEAR
#ifndef GOODTIMES
MainMenu[readthis].active=1;
#endif
#endif
pickquick = 0;
#ifdef SPEAR
UnCacheLump (NEWGAME_LUMP_START,NEWGAME_LUMP_END);
CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);
#endif
}
#ifndef SPEAR
/////////////////////
//
// DRAW NEW EPISODE MENU
//
void DrawNewEpisode(void)
{
int i;
#ifdef JAPAN
CA_CacheScreen(S_EPISODEPIC);
#else
ClearMScreen();
VWB_DrawPic(112,184,C_MOUSELBACKPIC);
DrawWindow(NE_X-4,NE_Y-4,NE_W+8,NE_H+8,BKGDCOLOR);
SETFONTCOLOR(READHCOLOR,BKGDCOLOR);
PrintY=2;
WindowX=0;
#ifdef SPANISH
US_CPrint("Cual episodio jugar?");
#else
US_CPrint("Which episode to play?");
#endif
#endif
SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);
DrawMenu(&NewEitems,&NewEmenu[0]);
for (i=0;i<6;i++)
VWB_DrawPic(NE_X+32,NE_Y+i*26,C_EPISODE1PIC+i);
VW_UpdateScreen();
MenuFadeIn();
WaitKeyUp();
}
#endif
/////////////////////
//
// DRAW NEW GAME MENU
//
void DrawNewGame(void)
{
#ifdef JAPAN
CA_CacheScreen(S_SKILLPIC);
#else
ClearMScreen();
VWB_DrawPic(112,184,C_MOUSELBACKPIC);
SETFONTCOLOR(READHCOLOR,BKGDCOLOR);
PrintX=NM_X+20;
PrintY=NM_Y-32;
#ifndef SPEAR
#ifdef SPANISH
US_Print("Eres macho?");
#else
US_Print("How tough are you?");
#endif
#else
VWB_DrawPic (PrintX,PrintY,C_HOWTOUGHPIC);
#endif
DrawWindow(NM_X-5,NM_Y-10,NM_W,NM_H,BKGDCOLOR);
#endif
DrawMenu(&NewItems,&NewMenu[0]);
DrawNewGameDiff(NewItems.curpos);
VW_UpdateScreen();
MenuFadeIn();
WaitKeyUp();
}
////////////////////////
//
// DRAW NEW GAME GRAPHIC
//
void DrawNewGameDiff(int w)
{
VWB_DrawPic(NM_X+185,NM_Y+7,w+C_BABYMODEPIC);
}
////////////////////////////////////////////////////////////////////
//
// HANDLE SOUND MENU
//
////////////////////////////////////////////////////////////////////
void CP_Sound(void)
{
int which,i;
#ifdef SPEAR
UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);
CacheLump (SOUND_LUMP_START,SOUND_LUMP_END);
#endif
DrawSoundMenu();
MenuFadeIn();
WaitKeyUp();
do
{
which=HandleMenu(&SndItems,&SndMenu[0],NULL);
//
// HANDLE MENU CHOICES
//
switch(which)
{
//
// SOUND EFFECTS
//
case 0:
if (SoundMode!=sdm_Off)
{
SD_WaitSoundDone();
SD_SetSoundMode(sdm_Off);
DrawSoundMenu();
}
break;
case 1:
if (SoundMode!=sdm_PC)
{
SD_WaitSoundDone();
SD_SetSoundMode(sdm_PC);
CA_LoadAllSounds();
DrawSoundMenu();
ShootSnd();
}
break;
case 2:
if (SoundMode!=sdm_AdLib)
{
SD_WaitSoundDone();
SD_SetSoundMode(sdm_AdLib);
CA_LoadAllSounds();
DrawSoundMenu();
ShootSnd();
}
break;
//
// DIGITIZED SOUND
//
case 5:
if (DigiMode!=sds_Off)
{
SD_SetDigiDevice(sds_Off);
DrawSoundMenu();
}
break;
case 6:
if (DigiMode!=sds_SoundSource)
{
SD_SetDigiDevice(sds_SoundSource);
DrawSoundMenu();
ShootSnd();
}
break;
case 7:
if (DigiMode!=sds_SoundBlaster)
{
SD_SetDigiDevice(sds_SoundBlaster);
DrawSoundMenu();
ShootSnd();
}
break;
//
// MUSIC
//
case 10:
if (MusicMode!=smm_Off)
{
SD_SetMusicMode(smm_Off);
DrawSoundMenu();
ShootSnd();
}
break;
case 11:
if (MusicMode!=smm_AdLib)
{
SD_SetMusicMode(smm_AdLib);
DrawSoundMenu();
ShootSnd();
StartCPMusic(MENUSONG);
}
break;
}
} while(which>=0);
MenuFadeOut();
#ifdef SPEAR
UnCacheLump (SOUND_LUMP_START,SOUND_LUMP_END);
CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);
#endif
}
//////////////////////
//
// DRAW THE SOUND MENU
//
void DrawSoundMenu(void)
{
int i,on;
#ifdef JAPAN
CA_CacheScreen(S_SOUNDPIC);
#else
//
// DRAW SOUND MENU
//
ClearMScreen();
VWB_DrawPic(112,184,C_MOUSELBACKPIC);
DrawWindow(SM_X-8,SM_Y1-3,SM_W,SM_H1,BKGDCOLOR);
DrawWindow(SM_X-8,SM_Y2-3,SM_W,SM_H2,BKGDCOLOR);
DrawWindow(SM_X-8,SM_Y3-3,SM_W,SM_H3,BKGDCOLOR);
#endif
//
// IF NO ADLIB, NON-CHOOSENESS!
//
if (!AdLibPresent && !SoundBlasterPresent)
{
SndMenu[2].active=SndMenu[10].active=SndMenu[11].active=0;
}
if (!SoundSourcePresent)
SndMenu[6].active=0;
if (!SoundBlasterPresent)
SndMenu[7].active=0;
if (!SoundSourcePresent && !SoundBlasterPresent)
SndMenu[5].active=0;
DrawMenu(&SndItems,&SndMenu[0]);
#ifndef JAPAN
VWB_DrawPic(100,SM_Y1-20,C_FXTITLEPIC);
VWB_DrawPic(100,SM_Y2-20,C_DIGITITLEPIC);
VWB_DrawPic(100,SM_Y3-20,C_MUSICTITLEPIC);
#endif
for (i=0;i=0 && SaveGamesAvail[which])
{
ShootSnd();
name[7]=which+'0';
handle=open(name,O_BINARY);
lseek(handle,32,SEEK_SET);
DrawLSAction(0);
loadedgame=true;
LoadTheGame(handle,LSA_X+8,LSA_Y+5);
close(handle);
StartGame=1;
ShootSnd();
//
// CHANGE "READ THIS!" TO NORMAL COLOR
//
#ifndef SPEAR
#ifndef GOODTIMES
MainMenu[readthis].active=1;
#endif
#endif
exit=1;
break;
}
} while(which>=0);
MenuFadeOut();
#ifdef SPEAR
UnCacheLump (LOADSAVE_LUMP_START,LOADSAVE_LUMP_END);
CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);
#endif
return exit;
}
///////////////////////////////////
//
// HIGHLIGHT CURRENT SELECTED ENTRY
//
void TrackWhichGame(int w)
{
static int lastgameon=0;
PrintLSEntry(lastgameon,TEXTCOLOR);
PrintLSEntry(w,HIGHLIGHT);
lastgameon=w;
}
////////////////////////////
//
// DRAW THE LOAD/SAVE SCREEN
//
void DrawLoadSaveScreen(int loadsave)
{
#define DISKX 100
#define DISKY 0
int i;
ClearMScreen();
fontnumber=1;
VWB_DrawPic(112,184,C_MOUSELBACKPIC);
DrawWindow(LSM_X-10,LSM_Y-5,LSM_W,LSM_H,BKGDCOLOR);
DrawStripes(10);
if (!loadsave)
VWB_DrawPic(60,0,C_LOADGAMEPIC);
else
VWB_DrawPic(60,0,C_SAVEGAMEPIC);
for (i=0;i<10;i++)
PrintLSEntry(i,TEXTCOLOR);
DrawMenu(&LSItems,&LSMenu[0]);
VW_UpdateScreen();
MenuFadeIn();
WaitKeyUp();
}
///////////////////////////////////////////
//
// PRINT LOAD/SAVE GAME ENTRY W/BOX OUTLINE
//
void PrintLSEntry(int w,int color)
{
SETFONTCOLOR(color,BKGDCOLOR);
DrawOutline(LSM_X+LSItems.indent,LSM_Y+w*13,LSM_W-LSItems.indent-15,1
1,color,color);
PrintX=LSM_X+LSItems.indent+2;
PrintY=LSM_Y+w*13+1;
fontnumber=0;
if (SaveGamesAvail[w])
US_Print(SaveGameNames[w]);
else
US_Print(" - "STR_EMPTY" -");
fontnumber=1;
}