%20WL_MENU.C
////////////////////////
//
// FIXUP GUN CURSOR OVERDRAW SHIT
//
void FixupCustom(int w)
{
static int lastwhich=-1;
int y=CST_Y+26+w*13;
VWB_Hlin(7,32,y-1,DEACTIVE);
VWB_Hlin(7,32,y+12,BORD2COLOR);
#ifndef SPEAR
VWB_Hlin(7,32,y-2,BORDCOLOR);
VWB_Hlin(7,32,y+13,BORDCOLOR);
#else
VWB_Hlin(7,32,y-2,BORD2COLOR);
VWB_Hlin(7,32,y+13,BORD2COLOR);
#endif
switch(w)
{
case 0: DrawCustMouse(1); break;
case 3: DrawCustJoy(1); break;
case 6: DrawCustKeybd(1); break;
case 8: DrawCustKeys(1);
}
if (lastwhich>=0)
{
y=CST_Y+26+lastwhich*13;
VWB_Hlin(7,32,y-1,DEACTIVE);
VWB_Hlin(7,32,y+12,BORD2COLOR);
#ifndef SPEAR
VWB_Hlin(7,32,y-2,BORDCOLOR);
VWB_Hlin(7,32,y+13,BORDCOLOR);
#else
VWB_Hlin(7,32,y-2,BORD2COLOR);
VWB_Hlin(7,32,y+13,BORD2COLOR);
#endif
if (lastwhich!=w)
switch(lastwhich)
{
case 0: DrawCustMouse(0); break;
case 3: DrawCustJoy(0); break;
case 6: DrawCustKeybd(0); break;
case 8: DrawCustKeys(0);
}
}
lastwhich=w;
}
////////////////////////
//
// DRAW CUSTOMIZE SCREEN
//
void DrawCustomScreen(void)
{
int i;
#ifdef JAPAN
CA_CacheScreen(S_CUSTOMPIC);
fontnumber=1;
PrintX=CST_START;
PrintY = CST_Y+26;
DrawCustMouse(0);
PrintX=CST_START;
US_Print("\n\n\n");
DrawCustJoy(0);
PrintX=CST_START;
US_Print("\n\n\n");
DrawCustKeybd(0);
PrintX=CST_START;
US_Print("\n\n\n");
DrawCustKeys(0);
#else
ClearMScreen();
WindowX=0;
WindowW=320;
VWB_DrawPic(112,184,C_MOUSELBACKPIC);
DrawStripes(10);
VWB_DrawPic(80,0,C_CUSTOMIZEPIC);
//
// MOUSE
//
SETFONTCOLOR(READCOLOR,BKGDCOLOR);
WindowX=0;
WindowW=320;
#ifndef SPEAR
PrintY=CST_Y;
US_CPrint("Mouse\n");
#else
PrintY = CST_Y+13;
VWB_DrawPic (128,48,C_MOUSEPIC);
#endif
SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);
#ifdef SPANISH
PrintX=CST_START-16;
US_Print(STR_CRUN);
PrintX=CST_START-16+CST_SPC*1;
US_Print(STR_COPEN);
PrintX=CST_START-16+CST_SPC*2;
US_Print(STR_CFIRE);
PrintX=CST_START-16+CST_SPC*3;
US_Print(STR_CSTRAFE"\n");
#else
PrintX=CST_START;
US_Print(STR_CRUN);
PrintX=CST_START+CST_SPC*1;
US_Print(STR_COPEN);
PrintX=CST_START+CST_SPC*2;
US_Print(STR_CFIRE);
PrintX=CST_START+CST_SPC*3;
US_Print(STR_CSTRAFE"\n");
#endif
DrawWindow(5,PrintY-1,310,13,BKGDCOLOR);
DrawCustMouse(0);
US_Print("\n");
//
// JOYSTICK/PAD
//
#ifndef SPEAR
SETFONTCOLOR(READCOLOR,BKGDCOLOR);
US_CPrint("Joystick/Gravis GamePad\n");
#else
PrintY += 13;
VWB_DrawPic (40,88,C_JOYSTICKPIC);
#endif
#ifdef SPEAR
VWB_DrawPic (112,120,C_KEYBOARDPIC);
#endif
SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);
#ifdef SPANISH
PrintX=CST_START-16;
US_Print(STR_CRUN);
PrintX=CST_START-16+CST_SPC*1;
US_Print(STR_COPEN);
PrintX=CST_START-16+CST_SPC*2;
US_Print(STR_CFIRE);
PrintX=CST_START-16+CST_SPC*3;
US_Print(STR_CSTRAFE"\n");
#else
PrintX=CST_START;
US_Print(STR_CRUN);
PrintX=CST_START+CST_SPC*1;
US_Print(STR_COPEN);
PrintX=CST_START+CST_SPC*2;
US_Print(STR_CFIRE);
PrintX=CST_START+CST_SPC*3;
US_Print(STR_CSTRAFE"\n");
#endif
DrawWindow(5,PrintY-1,310,13,BKGDCOLOR);
DrawCustJoy(0);
US_Print("\n");
//
// KEYBOARD
//
#ifndef SPEAR
SETFONTCOLOR(READCOLOR,BKGDCOLOR);
US_CPrint("Keyboard\n");
#else
PrintY += 13;
#endif
SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);
#ifdef SPANISH
PrintX=CST_START-16;
US_Print(STR_CRUN);
PrintX=CST_START-16+CST_SPC*1;
US_Print(STR_COPEN);
PrintX=CST_START-16+CST_SPC*2;
US_Print(STR_CFIRE);
PrintX=CST_START-16+CST_SPC*3;
US_Print(STR_CSTRAFE"\n");
#else
PrintX=CST_START;
US_Print(STR_CRUN);
PrintX=CST_START+CST_SPC*1;
US_Print(STR_COPEN);
PrintX=CST_START+CST_SPC*2;
US_Print(STR_CFIRE);
PrintX=CST_START+CST_SPC*3;
US_Print(STR_CSTRAFE"\n");
#endif
DrawWindow(5,PrintY-1,310,13,BKGDCOLOR);
DrawCustKeybd(0);
US_Print("\n");
//
// KEYBOARD MOVE KEYS
//
SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);
#ifdef SPANISH
PrintX=4;
US_Print(STR_LEFT);
US_Print("/");
US_Print(STR_RIGHT);
US_Print("/");
US_Print(STR_FRWD);
US_Print("/");
US_Print(STR_BKWD"\n");
#else
PrintX=CST_START;
US_Print(STR_LEFT);
PrintX=CST_START+CST_SPC*1;
US_Print(STR_RIGHT);
PrintX=CST_START+CST_SPC*2;
US_Print(STR_FRWD);
PrintX=CST_START+CST_SPC*3;
US_Print(STR_BKWD"\n");
#endif
DrawWindow(5,PrintY-1,310,13,BKGDCOLOR);
DrawCustKeys(0);
#endif
//
// PICK STARTING POINT IN MENU
//
if (CusItems.curpos<0)
for (i=0;i19)
newview=19;
ShowViewSize(newview);
VW_UpdateScreen();
SD_PlaySound(HITWALLSND);
TicDelay(10);
break;
}
#ifndef SPEAR
if (Keyboard[sc_Tab] && Keyboard[sc_P] &&
MS_CheckParm("goobers"))
#else
if (Keyboard[sc_Tab] && Keyboard[sc_P] &&
MS_CheckParm("debugmode"))
#endif
PicturePause();
if (ci.button0 || Keyboard[sc_Enter])
exit=1;
else
if (ci.button1 || Keyboard[sc_Escape])
{
viewwidth=oldview*16;
SD_PlaySound(ESCPRESSEDSND);
MenuFadeOut();
return;
}
} while(!exit);
if (oldview!=newview)
{
SD_PlaySound (SHOOTSND);
Message(STR_THINK"...");
NewViewSize(newview);
}
ShootSnd();
MenuFadeOut();
}
/////////////////////////////
//
// DRAW THE CHANGEVIEW SCREEN
//
void DrawChangeView(int view)
{
#ifdef JAPAN
CA_CacheScreen(S_CHANGEPIC);
ShowViewSize(view);
#else
VWB_Bar(0,160,320,40,VIEWCOLOR);
ShowViewSize(view);
PrintY=161;
WindowX=0;
WindowY=320;
SETFONTCOLOR(HIGHLIGHT,BKGDCOLOR);
US_CPrint(STR_SIZE1"\n");
US_CPrint(STR_SIZE2"\n");
US_CPrint(STR_SIZE3);
#endif
VW_UpdateScreen();
MenuFadeIn();
}
////////////////////////////////////////////////////////////////////
//
// QUIT THIS INFERNAL GAME!
//
////////////////////////////////////////////////////////////////////
void CP_Quit(void)
{
int i;
#ifdef JAPAN
if (GetYorN(7,11,C_QUITMSGPIC))
#else
#ifdef SPANISH
if (Confirm(ENDGAMESTR))
#else
if (Confirm(endStrings[US_RndT()&0x7+(US_RndT()&1)]))
#endif
#endif
{
VW_UpdateScreen();
SD_MusicOff();
SD_StopSound();
MenuFadeOut();
//
// SHUT-UP THE ADLIB
//
for (i=1;i<=0xf5;i++)
alOut(i,0);
Quit(NULL);
}
DrawMainMenu();
}
////////////////////////////////////////////////////////////////////
//
// HANDLE INTRO SCREEN (SYSTEM CONFIG)
//
////////////////////////////////////////////////////////////////////
void IntroScreen(void)
{
#ifdef SPEAR
#define MAINCOLOR 0x4f
#define EMSCOLOR 0x4f
#define XMSCOLOR 0x4f
#else
#define MAINCOLOR 0x6c
#define EMSCOLOR 0x6c
#define XMSCOLOR 0x6c
#endif
#define FILLCOLOR 14
long memory,emshere,xmshere;
int i,num,ems[10]={100,200,300,400,500,600,700,800,900,1000},
xms[10]={100,200,300,400,500,600,700,800,900,1000},
main[10]={32,64,96,128,160,192,224,256,288,320};
//
// DRAW MAIN MEMORY
//
memory=(1023l+mminfo.nearheap+mminfo.farheap)/1024l;
for (i=0;i<10;i++)
if (memory>=main[i])
VWB_Bar(49,163-8*i,6,5,MAINCOLOR-i);
//
// DRAW EMS MEMORY
//
if (EMSPresent)
{
emshere=4l*EMSPagesAvail;
for (i=0;i<10;i++)
if (emshere>=ems[i])
VWB_Bar(89,163-8*i,6,5,EMSCOLOR-i);
}
//
// DRAW XMS MEMORY
//
if (XMSPresent)
{
xmshere=4l*XMSPagesAvail;
for (i=0;i<10;i++)
if (xmshere>=xms[i])
VWB_Bar(129,163-8*i,6,5,XMSCOLOR-i);
}
//
// FILL BOXES
//
if (MousePresent)
VWB_Bar(164,82,12,2,FILLCOLOR);
if (JoysPresent[0] || JoysPresent[1])
VWB_Bar(164,105,12,2,FILLCOLOR);
if (AdLibPresent && !SoundBlasterPresent)
VWB_Bar(164,128,12,2,FILLCOLOR);
if (SoundBlasterPresent)
VWB_Bar(164,151,12,2,FILLCOLOR);
if (SoundSourcePresent)
VWB_Bar(164,174,12,2,FILLCOLOR);
}
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
// SUPPORT ROUTINES
//
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
//
// Clear Menu screens to dark red
//
////////////////////////////////////////////////////////////////////
void ClearMScreen(void)
{
#ifndef SPEAR
VWB_Bar(0,0,320,200,BORDCOLOR);
#else
VWB_DrawPic(0,0,C_BACKDROPPIC);
#endif
}
////////////////////////////////////////////////////////////////////
//
// Un/Cache a LUMP of graphics
//
////////////////////////////////////////////////////////////////////
void CacheLump(int lumpstart,int lumpend)
{
int i;
for (i=lumpstart;i<=lumpend;i++)
CA_CacheGrChunk(i);
}
void UnCacheLump(int lumpstart,int lumpend)
{
int i;
for (i=lumpstart;i<=lumpend;i++)
if (grsegs[i])
UNCACHEGRCHUNK(i);
}
////////////////////////////////////////////////////////////////////
//
// Draw a window for a menu
//
////////////////////////////////////////////////////////////////////
void DrawWindow(int x,int y,int w,int h,int wcolor)
{
VWB_Bar(x,y,w,h,wcolor);
DrawOutline(x,y,w,h,BORD2COLOR,DEACTIVE);
}
void DrawOutline(int x,int y,int w,int h,int color1,int color2)
{
VWB_Hlin(x,x+w,y,color2);
VWB_Vlin(y,y+h,x,color2);
VWB_Hlin(x,x+w,y+h,color1);
VWB_Vlin(y,y+h,x+w,color1);
}
////////////////////////////////////////////////////////////////////
//
// Setup Control Panel stuff - graphics, etc.
//
////////////////////////////////////////////////////////////////////
void SetupControlPanel(void)
{
struct ffblk f;
char name[13];
int which,i;
//
// CACHE GRAPHICS & SOUNDS
//
CA_CacheGrChunk(STARTFONT+1);
#ifndef SPEAR
CacheLump(CONTROLS_LUMP_START,CONTROLS_LUMP_END);
#else
CacheLump(BACKDROP_LUMP_START,BACKDROP_LUMP_END);
#endif
SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);
fontnumber=1;
WindowH=200;
if (!ingame)
CA_LoadAllSounds();
else
MainMenu[savegame].active=1;
//
// SEE WHICH SAVE GAME FILES ARE AVAILABLE & READ STRING IN
//
strcpy(name,SaveName);
if (!findfirst(name,&f,0))
do
{
which=f.ff_name[7]-'0';
if (which<10)
{
int handle;
char temp[32];
SaveGamesAvail[which]=1;
handle=open(f.ff_name,O_BINARY);
read(handle,temp,32);
close(handle);
strcpy(&SaveGameNames[which][0],temp);
}
} while(!findnext(&f));
//
// CENTER MOUSE
//
_CX=_DX=CENTER;
Mouse(4);
}
////////////////////////////////////////////////////////////////////
//
// Clean up all the Control Panel stuff
//
////////////////////////////////////////////////////////////////////
void CleanupControlPanel(void)
{
#ifndef SPEAR
UnCacheLump(CONTROLS_LUMP_START,CONTROLS_LUMP_END);
#else
UnCacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);
#endif
fontnumber = 0;
}