📄 wl_menu.c
字号:
pickquick=CP_SaveGame(0);
SETFONTCOLOR(0,15);
IN_ClearKeysDown();
DrawPlayScreen ();
if (!startgame && !loadedgame)
{
VW_FadeIn ();
StartMusic ();
}
if (loadedgame)
playstate = ex_abort;
lasttimecount = TimeCount;
if (MousePresent)
Mouse(MDelta); // Clear accumulated mouse movement
PM_CheckMainMem ();
#ifndef SPEAR
UNCACHEGRCHUNK(C_CURSOR1PIC);
UNCACHEGRCHUNK(C_CURSOR2PIC);
UNCACHEGRCHUNK(C_DISKLOADING1PIC);
UNCACHEGRCHUNK(C_DISKLOADING2PIC);
UNCACHEGRCHUNK(C_SAVEGAMEPIC);
UNCACHEGRCHUNK(C_MOUSELBACKPIC);
#else
UnCacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);
#endif
}
return 1;
//
// QUICKLOAD
//
case sc_F9:
if (SaveGamesAvail[LSItems.curpos] && pickquick)
{
char string[100]=STR_LGC;
CA_CacheGrChunk(STARTFONT+1);
fontnumber = 1;
strcat(string,SaveGameNames[LSItems.curpos]);
strcat(string,"\"?");
if (Confirm(string))
CP_LoadGame(1);
DrawAllPlayBorder();
fontnumber=0;
}
else
{
#ifndef SPEAR
CA_CacheGrChunk(STARTFONT+1);
CA_CacheGrChunk(C_CURSOR1PIC);
CA_CacheGrChunk(C_CURSOR2PIC);
CA_CacheGrChunk(C_DISKLOADING1PIC);
CA_CacheGrChunk(C_DISKLOADING2PIC);
CA_CacheGrChunk(C_LOADGAMEPIC);
CA_CacheGrChunk(C_MOUSELBACKPIC);
#else
CA_CacheGrChunk(C_CURSOR1PIC);
CacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);
#endif
VW_FadeOut ();
StartCPMusic(MENUSONG);
pickquick=CP_LoadGame(0);
SETFONTCOLOR(0,15);
IN_ClearKeysDown();
DrawPlayScreen ();
if (!startgame && !loadedgame)
{
VW_FadeIn ();
StartMusic ();
}
if (loadedgame)
playstate = ex_abort;
lasttimecount = TimeCount;
if (MousePresent)
Mouse(MDelta); // Clear accumulated mouse movement
PM_CheckMainMem ();
#ifndef SPEAR
UNCACHEGRCHUNK(C_CURSOR1PIC);
UNCACHEGRCHUNK(C_CURSOR2PIC);
UNCACHEGRCHUNK(C_DISKLOADING1PIC);
UNCACHEGRCHUNK(C_DISKLOADING2PIC);
UNCACHEGRCHUNK(C_LOADGAMEPIC);
UNCACHEGRCHUNK(C_MOUSELBACKPIC);
#else
UnCacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);
#endif
}
return 1;
//
// QUIT
//
case sc_F10:
CA_CacheGrChunk(STARTFONT+1);
WindowX=WindowY=0;
WindowW=320;
WindowH=160;
#ifdef JAPAN
if (GetYorN(7,8,C_QUITMSGPIC))
#else
#ifdef SPANISH
if (Confirm(ENDGAMESTR))
#else
if (Confirm(endStrings[US_RndT()&0x7+(US_RndT()&1)]))
#endif
#endif
{
int i;
VW_UpdateScreen();
SD_MusicOff();
SD_StopSound();
MenuFadeOut();
//
// SHUT-UP THE ADLIB
//
for (i=1;i<=0xf5;i++)
alOut(i,0);
Quit(NULL);
}
DrawAllPlayBorder();
WindowH=200;
fontnumber=0;
return 1;
}
return 0;
}
////////////////////////////////////////////////////////////////////
//
// END THE CURRENT GAME
//
////////////////////////////////////////////////////////////////////
int CP_EndGame(void)
{
#ifdef JAPAN
if (!GetYorN(7,8,C_JAPQUITPIC))
#else
if (!Confirm(ENDGAMESTR))
#endif
return 0;
pickquick = gamestate.lives = 0;
playstate = ex_died;
#pragma warn -sus
MainMenu[savegame].active = 0;
MainMenu[viewscores].routine=CP_ViewScores;
#ifndef JAPAN
_fstrcpy(MainMenu[viewscores].string,STR_VS);
#endif
#pragma warn +sus
return 1;
}
////////////////////////////////////////////////////////////////////
//
// 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<SndItems.amount;i++)
#ifdef JAPAN
if (i!=3 && i!=4 && i!=8 && i!=9)
#else
if (SndMenu[i].string[0])
#endif
{
//
// DRAW SELECTED/NOT SELECTED GRAPHIC BUTTONS
//
on=0;
switch(i)
{
//
// SOUND EFFECTS
//
case 0: if (SoundMode==sdm_Off) on=1; break;
case 1: if (SoundMode==sdm_PC) on=1; break;
case 2: if (SoundMode==sdm_AdLib) on=1; break;
//
// DIGITIZED SOUND
//
case 5: if (DigiMode==sds_Off) on=1; break;
case 6: if (DigiMode==sds_SoundSource) on=1; break;
case 7: if (DigiMode==sds_SoundBlaster) on=1; break;
//
// MUSIC
//
case 10: if (MusicMode==smm_Off) on=1; break;
case 11: if (MusicMode==smm_AdLib) on=1; break;
}
if (on)
VWB_DrawPic(SM_X+24,SM_Y1+i*13+2,C_SELECTEDPIC);
else
VWB_DrawPic(SM_X+24,SM_Y1+i*13+2,C_NOTSELECTEDPIC);
}
DrawMenuGun(&SndItems);
VW_UpdateScreen();
}
//
// DRAW LOAD/SAVE IN PROGRESS
//
void DrawLSAction(int which)
{
#define LSA_X 96
#define LSA_Y 80
#define LSA_W 130
#define LSA_H 42
DrawWindow(LSA_X,LSA_Y,LSA_W,LSA_H,TEXTCOLOR);
DrawOutline(LSA_X,LSA_Y,LSA_W,LSA_H,0,HIGHLIGHT);
VWB_DrawPic(LSA_X+8,LSA_Y+5,C_DISKLOADING1PIC);
fontnumber=1;
SETFONTCOLOR(0,TEXTCOLOR);
PrintX=LSA_X+46;
PrintY=LSA_Y+13;
if (!which)
US_Print(STR_LOADING"...");
else
US_Print(STR_SAVING"...");
VW_UpdateScreen();
}
////////////////////////////////////////////////////////////////////
//
// LOAD SAVED GAMES
//
////////////////////////////////////////////////////////////////////
int CP_LoadGame(int quick)
{
int handle,which,exit=0;
char name[13];
strcpy(name,SaveName);
//
// QUICKLOAD?
//
if (quick)
{
which=LSItems.curpos;
if (SaveGamesAvail[which])
{
name[7]=which+'0';
handle=open(name,O_BINARY);
lseek(handle,32,SEEK_SET);
loadedgame=true;
LoadTheGame(handle,0,0);
loadedgame=false;
close(handle);
DrawFace ();
DrawHealth ();
DrawLives ();
DrawLevel ();
DrawAmmo ();
DrawKeys ();
DrawWeapon ();
DrawScore ();
return 1;
}
}
#ifdef SPEAR
UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -