+++ /dev/null
-////////////////////////////////////////////////////////////////////\r
-//\r
-// WL_MENU.C\r
-// by John Romero (C) 1992 Id Software, Inc.\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-#include "wl_def.h"\r
-#pragma hdrstop\r
-\r
-//\r
-// PRIVATE PROTOTYPES\r
-//\r
-void CP_ReadThis(void);\r
-\r
-#ifdef SPEAR\r
-#define STARTITEM newgame\r
-\r
-#else\r
-#ifdef GOODTIMES\r
-#define STARTITEM newgame\r
-\r
-#else\r
-#define STARTITEM readthis\r
-#endif\r
-#endif\r
-\r
-char far endStrings[9][80]=\r
-{\r
-#ifndef SPEAR\r
- {"Dost thou wish to\nleave with such hasty\nabandon?"},\r
- {"Chickening out...\nalready?"},\r
- {"Press N for more carnage.\nPress Y to be a weenie."},\r
- {"So, you think you can\nquit this easily, huh?"},\r
- {"Press N to save the world.\nPress Y to abandon it in\nits hour of need."},\r
- {"Press N if you are brave.\nPress Y to cower in shame."},\r
- {"Heroes, press N.\nWimps, press Y."},\r
- {"You are at an intersection.\nA sign says, 'Press Y to quit.'\n>"},\r
- {"For guns and glory, press N.\nFor work and worry, press Y."}\r
-#else\r
- ENDSTR1,\r
- ENDSTR2,\r
- ENDSTR3,\r
- ENDSTR4,\r
- ENDSTR5,\r
- ENDSTR6,\r
- ENDSTR7,\r
- ENDSTR8,\r
- ENDSTR9\r
-#endif\r
-};\r
-\r
-CP_iteminfo\r
- MainItems={MENU_X,MENU_Y,10,STARTITEM,24},\r
- SndItems={SM_X,SM_Y1,12,0,52},\r
- LSItems={LSM_X,LSM_Y,10,0,24},\r
- CtlItems={CTL_X,CTL_Y,6,-1,56},\r
- CusItems={8,CST_Y+13*2,9,-1,0},\r
- NewEitems={NE_X,NE_Y,11,0,88},\r
- NewItems={NM_X,NM_Y,4,2,24};\r
-\r
-#pragma warn -sus\r
-CP_itemtype far\r
-MainMenu[]=\r
-{\r
-#ifdef JAPAN\r
- {1,"",CP_NewGame},\r
- {1,"",CP_Sound},\r
- {1,"",CP_Control},\r
- {1,"",CP_LoadGame},\r
- {0,"",CP_SaveGame},\r
- {1,"",CP_ChangeView},\r
- {2,"",CP_ReadThis},\r
- {1,"",CP_ViewScores},\r
- {1,"",0},\r
- {1,"",0}\r
-#else\r
-\r
- {1,STR_NG,CP_NewGame},\r
- {1,STR_SD,CP_Sound},\r
- {1,STR_CL,CP_Control},\r
- {1,STR_LG,CP_LoadGame},\r
- {0,STR_SG,CP_SaveGame},\r
- {1,STR_CV,CP_ChangeView},\r
-\r
-#ifndef GOODTIMES\r
-#ifndef SPEAR\r
-\r
- #ifdef SPANISH\r
- {2,"Ve esto!",CP_ReadThis},\r
- #else\r
- {2,"Read This!",CP_ReadThis},\r
- #endif\r
-\r
-#endif\r
-#endif\r
-\r
- {1,STR_VS,CP_ViewScores},\r
- {1,STR_BD,0},\r
- {1,STR_QT,0}\r
-#endif\r
-},\r
-\r
-far SndMenu[]=\r
-{\r
-#ifdef JAPAN\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
-#else\r
- {1,STR_NONE,0},\r
- {1,STR_PC,0},\r
- {1,STR_ALSB,0},\r
- {0,"",0},\r
- {0,"",0},\r
- {1,STR_NONE,0},\r
- {1,STR_DISNEY,0},\r
- {1,STR_SB,0},\r
- {0,"",0},\r
- {0,"",0},\r
- {1,STR_NONE,0},\r
- {1,STR_ALSB,0}\r
-#endif\r
-},\r
-\r
-far CtlMenu[]=\r
-{\r
-#ifdef JAPAN\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",MouseSensitivity},\r
- {1,"",CustomControls}\r
-#else\r
- {0,STR_MOUSEEN,0},\r
- {0,STR_JOYEN,0},\r
- {0,STR_PORT2,0},\r
- {0,STR_GAMEPAD,0},\r
- {0,STR_SENS,MouseSensitivity},\r
- {1,STR_CUSTOM,CustomControls}\r
-#endif\r
-},\r
-\r
-#pragma warn +sus\r
-\r
-#ifndef SPEAR\r
-far NewEmenu[]=\r
-{\r
-#ifdef JAPAN\r
-#ifdef JAPDEMO\r
- {1,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
-#else\r
- {1,"",0},\r
- {0,"",0},\r
- {1,"",0},\r
- {0,"",0},\r
- {1,"",0},\r
- {0,"",0},\r
- {1,"",0},\r
- {0,"",0},\r
- {1,"",0},\r
- {0,"",0},\r
- {1,"",0},\r
- {0,"",0}\r
-#endif\r
-#else\r
- #ifdef SPANISH\r
- {1,"Episodio 1\n"\r
- "Fuga desde Wolfenstein",0},\r
- {0,"",0},\r
- {3,"Episodio 2\n"\r
- "Operacion Eisenfaust",0},\r
- {0,"",0},\r
- {3,"Episodio 3\n"\r
- "Muere, Fuhrer, Muere!",0},\r
- {0,"",0},\r
- {3,"Episodio 4\n"\r
- "Un Negro Secreto",0},\r
- {0,"",0},\r
- {3,"Episodio 5\n"\r
- "Huellas del Loco",0},\r
- {0,"",0},\r
- {3,"Episodio 6\n"\r
- "Confrontacion",0}\r
- #else\r
- {1,"Episode 1\n"\r
- "Escape from Wolfenstein",0},\r
- {0,"",0},\r
- {3,"Episode 2\n"\r
- "Operation: Eisenfaust",0},\r
- {0,"",0},\r
- {3,"Episode 3\n"\r
- "Die, Fuhrer, Die!",0},\r
- {0,"",0},\r
- {3,"Episode 4\n"\r
- "A Dark Secret",0},\r
- {0,"",0},\r
- {3,"Episode 5\n"\r
- "Trail of the Madman",0},\r
- {0,"",0},\r
- {3,"Episode 6\n"\r
- "Confrontation",0}\r
- #endif\r
-#endif\r
-},\r
-#endif\r
-\r
-\r
-far NewMenu[]=\r
-{\r
-#ifdef JAPAN\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0}\r
-#else\r
- {1,STR_DADDY,0},\r
- {1,STR_HURTME,0},\r
- {1,STR_BRINGEM,0},\r
- {1,STR_DEATH,0}\r
-#endif\r
-},\r
-\r
-far LSMenu[]=\r
-{\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0},\r
- {1,"",0}\r
-},\r
-\r
-far CusMenu[]=\r
-{\r
- {1,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {1,"",0},\r
- {0,"",0},\r
- {0,"",0},\r
- {1,"",0},\r
- {0,"",0},\r
- {1,"",0}\r
-}\r
-;\r
-\r
-\r
-int color_hlite[]={\r
- DEACTIVE,\r
- HIGHLIGHT,\r
- READHCOLOR,\r
- 0x67\r
- },\r
-\r
- color_norml[]={\r
- DEACTIVE,\r
- TEXTCOLOR,\r
- READCOLOR,\r
- 0x6b\r
- };\r
-\r
-int EpisodeSelect[6]={1};\r
-\r
-\r
-int SaveGamesAvail[10],StartGame,SoundStatus=1,pickquick;\r
-char SaveGameNames[10][32],SaveName[13]="SAVEGAM?.";\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// INPUT MANAGER SCANCODE TABLES\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-static byte\r
- *ScanNames[] = // Scan code names with single chars\r
- {\r
- "?","?","1","2","3","4","5","6","7","8","9","0","-","+","?","?",\r
- "Q","W","E","R","T","Y","U","I","O","P","[","]","|","?","A","S",\r
- "D","F","G","H","J","K","L",";","\"","?","?","?","Z","X","C","V",\r
- "B","N","M",",",".","/","?","?","?","?","?","?","?","?","?","?",\r
- "?","?","?","?","?","?","?","?","\xf","?","-","\x15","5","\x11","+","?",\r
- "\x13","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?",\r
- "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?",\r
- "?","?","?","?","?","?","?","?","?","?","?","?","?","?","?","?"\r
- }, // DEBUG - consolidate these\r
- far ExtScanCodes[] = // Scan codes with >1 char names\r
- {\r
- 1,0xe,0xf,0x1d,0x2a,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,\r
- 0x3f,0x40,0x41,0x42,0x43,0x44,0x57,0x59,0x46,0x1c,0x36,\r
- 0x37,0x38,0x47,0x49,0x4f,0x51,0x52,0x53,0x45,0x48,\r
- 0x50,0x4b,0x4d,0x00\r
- },\r
- *ExtScanNames[] = // Names corresponding to ExtScanCodes\r
- {\r
- "Esc","BkSp","Tab","Ctrl","LShft","Space","CapsLk","F1","F2","F3","F4",\r
- "F5","F6","F7","F8","F9","F10","F11","F12","ScrlLk","Enter","RShft",\r
- "PrtSc","Alt","Home","PgUp","End","PgDn","Ins","Del","NumLk","Up",\r
- "Down","Left","Right",""\r
- };\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// Wolfenstein Control Panel! Ta Da!\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void US_ControlPanel(byte scancode)\r
-{\r
- int which,i,start;\r
-\r
-\r
- if (ingame)\r
- if (CP_CheckQuick(scancode))\r
- return;\r
-\r
- StartCPMusic(MENUSONG);\r
- SetupControlPanel();\r
-\r
- //\r
- // F-KEYS FROM WITHIN GAME\r
- //\r
- switch(scancode)\r
- {\r
- case sc_F1:\r
- #ifdef SPEAR\r
- BossKey();\r
- #else\r
- #ifdef GOODTIMES\r
- BossKey();\r
- #else\r
- HelpScreens();\r
- #endif\r
- #endif\r
- goto finishup;\r
-\r
- case sc_F2:\r
- CP_SaveGame(0);\r
- goto finishup;\r
-\r
- case sc_F3:\r
- CP_LoadGame(0);\r
- goto finishup;\r
-\r
- case sc_F4:\r
- CP_Sound();\r
- goto finishup;\r
-\r
- case sc_F5:\r
- CP_ChangeView();\r
- goto finishup;\r
-\r
- case sc_F6:\r
- CP_Control();\r
- goto finishup;\r
-\r
- finishup:\r
- CleanupControlPanel();\r
- #ifdef SPEAR\r
- UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
- #endif\r
- return;\r
- }\r
-\r
-#ifdef SPEAR\r
- CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
-#endif\r
-\r
- DrawMainMenu();\r
- MenuFadeIn();\r
- StartGame=0;\r
-\r
- //\r
- // MAIN MENU LOOP\r
- //\r
- do\r
- {\r
- which=HandleMenu(&MainItems,&MainMenu[0],NULL);\r
-\r
- #ifdef SPEAR\r
- #ifndef SPEARDEMO\r
- //\r
- // EASTER EGG FOR SPEAR OF DESTINY!\r
- //\r
- if (Keyboard[sc_I] && Keyboard[sc_D])\r
- {\r
- VW_FadeOut();\r
- StartCPMusic (XJAZNAZI_MUS);\r
- UnCacheLump(OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
- UnCacheLump(BACKDROP_LUMP_START,BACKDROP_LUMP_END);\r
- MM_SortMem ();\r
- ClearMemory ();\r
-\r
-\r
- CA_CacheGrChunk (IDGUYS1PIC);\r
- VWB_DrawPic(0,0,IDGUYS1PIC);\r
- UNCACHEGRCHUNK(IDGUYS1PIC);\r
-\r
- CA_CacheGrChunk (IDGUYS2PIC);\r
- VWB_DrawPic(0,80,IDGUYS2PIC);\r
- UNCACHEGRCHUNK(IDGUYS2PIC);\r
-\r
- VW_UpdateScreen();\r
-\r
- CA_CacheGrChunk (IDGUYSPALETTE);\r
- VL_FadeIn(0,255,grsegs[IDGUYSPALETTE],30);\r
- UNCACHEGRCHUNK(IDGUYSPALETTE);\r
-\r
- while (Keyboard[sc_I] || Keyboard[sc_D]);\r
- IN_ClearKeysDown();\r
- IN_Ack();\r
-\r
- VW_FadeOut();\r
-\r
- CacheLump(BACKDROP_LUMP_START,BACKDROP_LUMP_END);\r
- CacheLump(OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
- DrawMainMenu();\r
- StartCPMusic (MENUSONG);\r
- MenuFadeIn();\r
- }\r
- #endif\r
- #endif\r
-\r
- switch(which)\r
- {\r
- case viewscores:\r
- if (MainMenu[viewscores].routine == NULL)\r
- if (CP_EndGame())\r
- StartGame=1;\r
-\r
- DrawMainMenu();\r
- MenuFadeIn();\r
- break;\r
-\r
- case backtodemo:\r
- #ifdef SPEAR\r
- if (!ingame)\r
- {\r
- //\r
- // DEALLOCATE ALL SOUNDS!\r
- //\r
- switch (SoundMode)\r
- {\r
- case sdm_PC:\r
- start = STARTPCSOUNDS;\r
- break;\r
- case sdm_AdLib:\r
- start = STARTADLIBSOUNDS;\r
- break;\r
- }\r
-\r
- if (SoundMode != sdm_Off)\r
- for (i=0;i<NUMSOUNDS;i++,start++)\r
- if (audiosegs[start])\r
- MM_SetPurge (&(memptr)audiosegs[start],3); // make purgable\r
- }\r
- #endif\r
-\r
- MM_SortMem();\r
- StartGame=1;\r
- if (!ingame)\r
- StartCPMusic(INTROSONG);\r
- VL_FadeOut(0,255,0,0,0,10);\r
- break;\r
-\r
- case -1:\r
- case quit:\r
- CP_Quit();\r
- break;\r
-\r
- default:\r
- if (!StartGame)\r
- {\r
- DrawMainMenu();\r
- MenuFadeIn();\r
- }\r
- }\r
-\r
- //\r
- // "EXIT OPTIONS" OR "NEW GAME" EXITS\r
- //\r
- } while(!StartGame);\r
-\r
- //\r
- // DEALLOCATE EVERYTHING\r
- //\r
- CleanupControlPanel();\r
-\r
- //\r
- // CHANGE MAINMENU ITEM\r
- //\r
- if (startgame || loadedgame)\r
- {\r
- #pragma warn -sus\r
- MainMenu[viewscores].routine = NULL;\r
- #ifndef JAPAN\r
- _fstrcpy(MainMenu[viewscores].string,STR_EG);\r
- #endif\r
- #pragma warn +sus\r
- }\r
-\r
- // RETURN/START GAME EXECUTION\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
- MM_SortMem ();\r
-#endif\r
-}\r
-\r
-\r
-////////////////////////\r
-//\r
-// DRAW MAIN MENU SCREEN\r
-//\r
-void DrawMainMenu(void)\r
-{\r
-#ifdef JAPAN\r
- CA_CacheScreen(S_OPTIONSPIC);\r
-#else\r
- ClearMScreen();\r
-\r
- VWB_DrawPic(112,184,C_MOUSELBACKPIC);\r
- DrawStripes(10);\r
- VWB_DrawPic(84,0,C_OPTIONSPIC);\r
-\r
- #ifdef SPANISH\r
- DrawWindow(MENU_X-8,MENU_Y-3,MENU_W+8,MENU_H,BKGDCOLOR);\r
- #else\r
- DrawWindow(MENU_X-8,MENU_Y-3,MENU_W,MENU_H,BKGDCOLOR);\r
- #endif\r
-#endif\r
-\r
- //\r
- // CHANGE "GAME" AND "DEMO"\r
- //\r
- if (ingame)\r
- {\r
- #ifndef JAPAN\r
-\r
- #ifdef SPANISH\r
- _fstrcpy(&MainMenu[backtodemo].string,STR_GAME);\r
- #else\r
- _fstrcpy(&MainMenu[backtodemo].string[8],STR_GAME);\r
- #endif\r
-\r
- #else\r
- CA_CacheGrChunk(C_MRETGAMEPIC);\r
- VWB_DrawPic(12*8,20*8,C_MRETGAMEPIC);\r
- UNCACHEGRCHUNK(C_MRETGAMEPIC);\r
- CA_CacheGrChunk(C_MENDGAMEPIC);\r
- VWB_DrawPic(12*8,18*8,C_MENDGAMEPIC);\r
- UNCACHEGRCHUNK(C_MENDGAMEPIC);\r
- #endif\r
- MainMenu[backtodemo].active=2;\r
- }\r
- else\r
- {\r
- #ifndef JAPAN\r
- #ifdef SPANISH\r
- _fstrcpy(&MainMenu[backtodemo].string,STR_BD);\r
- #else\r
- _fstrcpy(&MainMenu[backtodemo].string[8],STR_DEMO);\r
- #endif\r
- #else\r
- CA_CacheGrChunk(C_MRETDEMOPIC);\r
- VWB_DrawPic(12*8,20*8,C_MRETDEMOPIC);\r
- UNCACHEGRCHUNK(C_MRETDEMOPIC);\r
- CA_CacheGrChunk(C_MSCORESPIC);\r
- VWB_DrawPic(12*8,18*8,C_MSCORESPIC);\r
- UNCACHEGRCHUNK(C_MSCORESPIC);\r
- #endif\r
- MainMenu[backtodemo].active=1;\r
- }\r
-\r
- DrawMenu(&MainItems,&MainMenu[0]);\r
- VW_UpdateScreen();\r
-}\r
-\r
-#ifndef GOODTIMES\r
-#ifndef SPEAR\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// READ THIS!\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void CP_ReadThis(void)\r
-{\r
- StartCPMusic(CORNER_MUS);\r
- HelpScreens();\r
- StartCPMusic(MENUSONG);\r
-}\r
-#endif\r
-#endif\r
-\r
-#ifndef SPEAR\r
-#ifndef GOODTIMES\r
-#else\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// BOSS KEY\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void BossKey(void)\r
-{\r
- SD_MusicOff();\r
- _AX = 3;\r
- geninterrupt(0x10);\r
- printf("C>");\r
- while (!Keyboard[sc_Escape])\r
- IN_ClearKeysDown();\r
-\r
- SD_MusicOn();\r
- VL_SetVGAPlaneMode ();\r
- VL_TestPaletteSet ();\r
- VL_SetPalette (&gamepal);\r
- LoadLatchMem();\r
-}\r
-#endif\r
-#endif\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// CHECK QUICK-KEYS & QUIT (WHILE IN A GAME)\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-int CP_CheckQuick(unsigned scancode)\r
-{\r
- switch(scancode)\r
- {\r
- //\r
- // END GAME\r
- //\r
- case sc_F7:\r
- CA_CacheGrChunk(STARTFONT+1);\r
-\r
- WindowH=160;\r
- #ifdef JAPAN\r
- if (GetYorN(7,8,C_JAPQUITPIC))\r
- #else\r
- if (Confirm(ENDGAMESTR))\r
- #endif\r
- {\r
- playstate = ex_died;\r
- pickquick = gamestate.lives = 0;\r
- }\r
-\r
- DrawAllPlayBorder();\r
- WindowH=200;\r
- fontnumber=0;\r
- MainMenu[savegame].active = 0;\r
- return 1;\r
-\r
- //\r
- // QUICKSAVE\r
- //\r
- case sc_F8:\r
- if (SaveGamesAvail[LSItems.curpos] && pickquick)\r
- {\r
- CA_CacheGrChunk(STARTFONT+1);\r
- fontnumber = 1;\r
- Message(STR_SAVING"...");\r
- CP_SaveGame(1);\r
- fontnumber=0;\r
- }\r
- else\r
- {\r
- #ifndef SPEAR\r
- CA_CacheGrChunk(STARTFONT+1);\r
- CA_CacheGrChunk(C_CURSOR1PIC);\r
- CA_CacheGrChunk(C_CURSOR2PIC);\r
- CA_CacheGrChunk(C_DISKLOADING1PIC);\r
- CA_CacheGrChunk(C_DISKLOADING2PIC);\r
- CA_CacheGrChunk(C_SAVEGAMEPIC);\r
- CA_CacheGrChunk(C_MOUSELBACKPIC);\r
- #else\r
- CacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);\r
- CA_CacheGrChunk(C_CURSOR1PIC);\r
- #endif\r
-\r
- VW_FadeOut ();\r
-\r
- StartCPMusic(MENUSONG);\r
- pickquick=CP_SaveGame(0);\r
-\r
- SETFONTCOLOR(0,15);\r
- IN_ClearKeysDown();\r
- DrawPlayScreen ();\r
-\r
- if (!startgame && !loadedgame)\r
- {\r
- VW_FadeIn ();\r
- StartMusic ();\r
- }\r
-\r
- if (loadedgame)\r
- playstate = ex_abort;\r
- lasttimecount = TimeCount;\r
-\r
- if (MousePresent)\r
- Mouse(MDelta); // Clear accumulated mouse movement\r
-\r
- PM_CheckMainMem ();\r
-\r
- #ifndef SPEAR\r
- UNCACHEGRCHUNK(C_CURSOR1PIC);\r
- UNCACHEGRCHUNK(C_CURSOR2PIC);\r
- UNCACHEGRCHUNK(C_DISKLOADING1PIC);\r
- UNCACHEGRCHUNK(C_DISKLOADING2PIC);\r
- UNCACHEGRCHUNK(C_SAVEGAMEPIC);\r
- UNCACHEGRCHUNK(C_MOUSELBACKPIC);\r
- #else\r
- UnCacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);\r
- #endif\r
- }\r
- return 1;\r
-\r
- //\r
- // QUICKLOAD\r
- //\r
- case sc_F9:\r
- if (SaveGamesAvail[LSItems.curpos] && pickquick)\r
- {\r
- char string[100]=STR_LGC;\r
-\r
-\r
- CA_CacheGrChunk(STARTFONT+1);\r
- fontnumber = 1;\r
-\r
- strcat(string,SaveGameNames[LSItems.curpos]);\r
- strcat(string,"\"?");\r
-\r
- if (Confirm(string))\r
- CP_LoadGame(1);\r
-\r
- DrawAllPlayBorder();\r
- fontnumber=0;\r
- }\r
- else\r
- {\r
- #ifndef SPEAR\r
- CA_CacheGrChunk(STARTFONT+1);\r
- CA_CacheGrChunk(C_CURSOR1PIC);\r
- CA_CacheGrChunk(C_CURSOR2PIC);\r
- CA_CacheGrChunk(C_DISKLOADING1PIC);\r
- CA_CacheGrChunk(C_DISKLOADING2PIC);\r
- CA_CacheGrChunk(C_LOADGAMEPIC);\r
- CA_CacheGrChunk(C_MOUSELBACKPIC);\r
- #else\r
- CA_CacheGrChunk(C_CURSOR1PIC);\r
- CacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);\r
- #endif\r
-\r
- VW_FadeOut ();\r
-\r
- StartCPMusic(MENUSONG);\r
- pickquick=CP_LoadGame(0);\r
-\r
- SETFONTCOLOR(0,15);\r
- IN_ClearKeysDown();\r
- DrawPlayScreen ();\r
-\r
- if (!startgame && !loadedgame)\r
- {\r
- VW_FadeIn ();\r
- StartMusic ();\r
- }\r
-\r
- if (loadedgame)\r
- playstate = ex_abort;\r
-\r
- lasttimecount = TimeCount;\r
-\r
- if (MousePresent)\r
- Mouse(MDelta); // Clear accumulated mouse movement\r
- PM_CheckMainMem ();\r
-\r
- #ifndef SPEAR\r
- UNCACHEGRCHUNK(C_CURSOR1PIC);\r
- UNCACHEGRCHUNK(C_CURSOR2PIC);\r
- UNCACHEGRCHUNK(C_DISKLOADING1PIC);\r
- UNCACHEGRCHUNK(C_DISKLOADING2PIC);\r
- UNCACHEGRCHUNK(C_LOADGAMEPIC);\r
- UNCACHEGRCHUNK(C_MOUSELBACKPIC);\r
- #else\r
- UnCacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);\r
- #endif\r
- }\r
- return 1;\r
-\r
- //\r
- // QUIT\r
- //\r
- case sc_F10:\r
- CA_CacheGrChunk(STARTFONT+1);\r
-\r
- WindowX=WindowY=0;\r
- WindowW=320;\r
- WindowH=160;\r
- #ifdef JAPAN\r
- if (GetYorN(7,8,C_QUITMSGPIC))\r
- #else\r
- #ifdef SPANISH\r
- if (Confirm(ENDGAMESTR))\r
- #else\r
- if (Confirm(endStrings[US_RndT()&0x7+(US_RndT()&1)]))\r
- #endif\r
- #endif\r
- {\r
- int i;\r
-\r
-\r
- VW_UpdateScreen();\r
- SD_MusicOff();\r
- SD_StopSound();\r
- MenuFadeOut();\r
-\r
- //\r
- // SHUT-UP THE ADLIB\r
- //\r
- for (i=1;i<=0xf5;i++)\r
- alOut(i,0);\r
- Quit(NULL);\r
- }\r
-\r
- DrawAllPlayBorder();\r
- WindowH=200;\r
- fontnumber=0;\r
- return 1;\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// END THE CURRENT GAME\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-int CP_EndGame(void)\r
-{\r
-#ifdef JAPAN\r
- if (!GetYorN(7,8,C_JAPQUITPIC))\r
-#else\r
- if (!Confirm(ENDGAMESTR))\r
-#endif\r
- return 0;\r
-\r
- pickquick = gamestate.lives = 0;\r
- playstate = ex_died;\r
-\r
- #pragma warn -sus\r
- MainMenu[savegame].active = 0;\r
- MainMenu[viewscores].routine=CP_ViewScores;\r
- #ifndef JAPAN\r
- _fstrcpy(MainMenu[viewscores].string,STR_VS);\r
- #endif\r
- #pragma warn +sus\r
-\r
- return 1;\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// VIEW THE HIGH SCORES\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void CP_ViewScores(void)\r
-{\r
- fontnumber=0;\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
- StartCPMusic (XAWARD_MUS);\r
-#else\r
- StartCPMusic (ROSTER_MUS);\r
-#endif\r
-\r
- DrawHighScores ();\r
- VW_UpdateScreen ();\r
- MenuFadeIn();\r
- fontnumber=1;\r
-\r
- IN_Ack();\r
-\r
- StartCPMusic(MENUSONG);\r
- MenuFadeOut();\r
-\r
-#ifdef SPEAR\r
- CacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);\r
- CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
-#endif\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// START A NEW GAME\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void CP_NewGame(void)\r
-{\r
- int which,episode;\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
-#endif\r
-\r
-\r
-#ifndef SPEAR\r
-firstpart:\r
-\r
- DrawNewEpisode();\r
- do\r
- {\r
- which=HandleMenu(&NewEitems,&NewEmenu[0],NULL);\r
- switch(which)\r
- {\r
- case -1:\r
- MenuFadeOut();\r
- return;\r
-\r
- default:\r
- if (!EpisodeSelect[which/2])\r
- {\r
- SD_PlaySound (NOWAYSND);\r
- Message("Please select \"Read This!\"\n"\r
- "from the Options menu to\n"\r
- "find out how to order this\n"\r
- "episode from Apogee.");\r
- IN_ClearKeysDown();\r
- IN_Ack();\r
- DrawNewEpisode();\r
- which = 0;\r
- }\r
- else\r
- {\r
- episode = which/2;\r
- which = 1;\r
- }\r
- break;\r
- }\r
-\r
- } while (!which);\r
-\r
- ShootSnd();\r
-\r
- //\r
- // ALREADY IN A GAME?\r
- //\r
- if (ingame)\r
- #ifdef JAPAN\r
- if (!GetYorN(7,8,C_JAPNEWGAMEPIC))\r
- #else\r
- if (!Confirm(CURGAME))\r
- #endif\r
- {\r
- MenuFadeOut();\r
- return;\r
- }\r
-\r
- MenuFadeOut();\r
-\r
-#else\r
- episode = 0;\r
-\r
- //\r
- // ALREADY IN A GAME?\r
- //\r
- CacheLump (NEWGAME_LUMP_START,NEWGAME_LUMP_END);\r
- DrawNewGame();\r
- if (ingame)\r
- if (!Confirm(CURGAME))\r
- {\r
- MenuFadeOut();\r
- UnCacheLump (NEWGAME_LUMP_START,NEWGAME_LUMP_END);\r
- CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- DrawNewGame();\r
- which=HandleMenu(&NewItems,&NewMenu[0],DrawNewGameDiff);\r
- if (which<0)\r
- {\r
- MenuFadeOut();\r
- #ifndef SPEAR\r
- goto firstpart;\r
- #else\r
- UnCacheLump (NEWGAME_LUMP_START,NEWGAME_LUMP_END);\r
- CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
- return;\r
- #endif\r
- }\r
-\r
- ShootSnd();\r
- NewGame(which,episode);\r
- StartGame=1;\r
- MenuFadeOut();\r
-\r
- //\r
- // CHANGE "READ THIS!" TO NORMAL COLOR\r
- //\r
- #ifndef SPEAR\r
- #ifndef GOODTIMES\r
- MainMenu[readthis].active=1;\r
- #endif\r
- #endif\r
-\r
- pickquick = 0;\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (NEWGAME_LUMP_START,NEWGAME_LUMP_END);\r
- CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
-#endif\r
-}\r
-\r
-\r
-#ifndef SPEAR\r
-/////////////////////\r
-//\r
-// DRAW NEW EPISODE MENU\r
-//\r
-void DrawNewEpisode(void)\r
-{\r
- int i;\r
-\r
-#ifdef JAPAN\r
- CA_CacheScreen(S_EPISODEPIC);\r
-#else\r
- ClearMScreen();\r
- VWB_DrawPic(112,184,C_MOUSELBACKPIC);\r
-\r
- DrawWindow(NE_X-4,NE_Y-4,NE_W+8,NE_H+8,BKGDCOLOR);\r
- SETFONTCOLOR(READHCOLOR,BKGDCOLOR);\r
- PrintY=2;\r
- WindowX=0;\r
- #ifdef SPANISH\r
- US_CPrint("Cual episodio jugar?");\r
- #else\r
- US_CPrint("Which episode to play?");\r
- #endif\r
-#endif\r
-\r
- SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);\r
- DrawMenu(&NewEitems,&NewEmenu[0]);\r
-\r
- for (i=0;i<6;i++)\r
- VWB_DrawPic(NE_X+32,NE_Y+i*26,C_EPISODE1PIC+i);\r
-\r
- VW_UpdateScreen();\r
- MenuFadeIn();\r
- WaitKeyUp();\r
-}\r
-#endif\r
-\r
-/////////////////////\r
-//\r
-// DRAW NEW GAME MENU\r
-//\r
-void DrawNewGame(void)\r
-{\r
-#ifdef JAPAN\r
- CA_CacheScreen(S_SKILLPIC);\r
-#else\r
- ClearMScreen();\r
- VWB_DrawPic(112,184,C_MOUSELBACKPIC);\r
-\r
- SETFONTCOLOR(READHCOLOR,BKGDCOLOR);\r
- PrintX=NM_X+20;\r
- PrintY=NM_Y-32;\r
-\r
-#ifndef SPEAR\r
- #ifdef SPANISH\r
- US_Print("Eres macho?");\r
- #else\r
- US_Print("How tough are you?");\r
- #endif\r
-#else\r
- VWB_DrawPic (PrintX,PrintY,C_HOWTOUGHPIC);\r
-#endif\r
-\r
- DrawWindow(NM_X-5,NM_Y-10,NM_W,NM_H,BKGDCOLOR);\r
-#endif\r
-\r
- DrawMenu(&NewItems,&NewMenu[0]);\r
- DrawNewGameDiff(NewItems.curpos);\r
- VW_UpdateScreen();\r
- MenuFadeIn();\r
- WaitKeyUp();\r
-}\r
-\r
-\r
-////////////////////////\r
-//\r
-// DRAW NEW GAME GRAPHIC\r
-//\r
-void DrawNewGameDiff(int w)\r
-{\r
- VWB_DrawPic(NM_X+185,NM_Y+7,w+C_BABYMODEPIC);\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// HANDLE SOUND MENU\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void CP_Sound(void)\r
-{\r
- int which,i;\r
-\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
- CacheLump (SOUND_LUMP_START,SOUND_LUMP_END);\r
-#endif\r
-\r
- DrawSoundMenu();\r
- MenuFadeIn();\r
- WaitKeyUp();\r
-\r
- do\r
- {\r
- which=HandleMenu(&SndItems,&SndMenu[0],NULL);\r
- //\r
- // HANDLE MENU CHOICES\r
- //\r
- switch(which)\r
- {\r
- //\r
- // SOUND EFFECTS\r
- //\r
- case 0:\r
- if (SoundMode!=sdm_Off)\r
- {\r
- SD_WaitSoundDone();\r
- SD_SetSoundMode(sdm_Off);\r
- DrawSoundMenu();\r
- }\r
- break;\r
- case 1:\r
- if (SoundMode!=sdm_PC)\r
- {\r
- SD_WaitSoundDone();\r
- SD_SetSoundMode(sdm_PC);\r
- CA_LoadAllSounds();\r
- DrawSoundMenu();\r
- ShootSnd();\r
- }\r
- break;\r
- case 2:\r
- if (SoundMode!=sdm_AdLib)\r
- {\r
- SD_WaitSoundDone();\r
- SD_SetSoundMode(sdm_AdLib);\r
- CA_LoadAllSounds();\r
- DrawSoundMenu();\r
- ShootSnd();\r
- }\r
- break;\r
-\r
- //\r
- // DIGITIZED SOUND\r
- //\r
- case 5:\r
- if (DigiMode!=sds_Off)\r
- {\r
- SD_SetDigiDevice(sds_Off);\r
- DrawSoundMenu();\r
- }\r
- break;\r
- case 6:\r
- if (DigiMode!=sds_SoundSource)\r
- {\r
- SD_SetDigiDevice(sds_SoundSource);\r
- DrawSoundMenu();\r
- ShootSnd();\r
- }\r
- break;\r
- case 7:\r
- if (DigiMode!=sds_SoundBlaster)\r
- {\r
- SD_SetDigiDevice(sds_SoundBlaster);\r
- DrawSoundMenu();\r
- ShootSnd();\r
- }\r
- break;\r
-\r
- //\r
- // MUSIC\r
- //\r
- case 10:\r
- if (MusicMode!=smm_Off)\r
- {\r
- SD_SetMusicMode(smm_Off);\r
- DrawSoundMenu();\r
- ShootSnd();\r
- }\r
- break;\r
- case 11:\r
- if (MusicMode!=smm_AdLib)\r
- {\r
- SD_SetMusicMode(smm_AdLib);\r
- DrawSoundMenu();\r
- ShootSnd();\r
- StartCPMusic(MENUSONG);\r
- }\r
- break;\r
- }\r
- } while(which>=0);\r
-\r
- MenuFadeOut();\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (SOUND_LUMP_START,SOUND_LUMP_END);\r
- CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
-#endif\r
-}\r
-\r
-\r
-//////////////////////\r
-//\r
-// DRAW THE SOUND MENU\r
-//\r
-void DrawSoundMenu(void)\r
-{\r
- int i,on;\r
-\r
-\r
-#ifdef JAPAN\r
- CA_CacheScreen(S_SOUNDPIC);\r
-#else\r
- //\r
- // DRAW SOUND MENU\r
- //\r
- ClearMScreen();\r
- VWB_DrawPic(112,184,C_MOUSELBACKPIC);\r
-\r
- DrawWindow(SM_X-8,SM_Y1-3,SM_W,SM_H1,BKGDCOLOR);\r
- DrawWindow(SM_X-8,SM_Y2-3,SM_W,SM_H2,BKGDCOLOR);\r
- DrawWindow(SM_X-8,SM_Y3-3,SM_W,SM_H3,BKGDCOLOR);\r
-#endif\r
-\r
- //\r
- // IF NO ADLIB, NON-CHOOSENESS!\r
- //\r
- if (!AdLibPresent && !SoundBlasterPresent)\r
- {\r
- SndMenu[2].active=SndMenu[10].active=SndMenu[11].active=0;\r
- }\r
-\r
- if (!SoundSourcePresent)\r
- SndMenu[6].active=0;\r
-\r
- if (!SoundBlasterPresent)\r
- SndMenu[7].active=0;\r
-\r
- if (!SoundSourcePresent && !SoundBlasterPresent)\r
- SndMenu[5].active=0;\r
-\r
- DrawMenu(&SndItems,&SndMenu[0]);\r
-#ifndef JAPAN\r
- VWB_DrawPic(100,SM_Y1-20,C_FXTITLEPIC);\r
- VWB_DrawPic(100,SM_Y2-20,C_DIGITITLEPIC);\r
- VWB_DrawPic(100,SM_Y3-20,C_MUSICTITLEPIC);\r
-#endif\r
-\r
- for (i=0;i<SndItems.amount;i++)\r
-#ifdef JAPAN\r
- if (i!=3 && i!=4 && i!=8 && i!=9)\r
-#else\r
- if (SndMenu[i].string[0])\r
-#endif\r
- {\r
- //\r
- // DRAW SELECTED/NOT SELECTED GRAPHIC BUTTONS\r
- //\r
- on=0;\r
- switch(i)\r
- {\r
- //\r
- // SOUND EFFECTS\r
- //\r
- case 0: if (SoundMode==sdm_Off) on=1; break;\r
- case 1: if (SoundMode==sdm_PC) on=1; break;\r
- case 2: if (SoundMode==sdm_AdLib) on=1; break;\r
-\r
- //\r
- // DIGITIZED SOUND\r
- //\r
- case 5: if (DigiMode==sds_Off) on=1; break;\r
- case 6: if (DigiMode==sds_SoundSource) on=1; break;\r
- case 7: if (DigiMode==sds_SoundBlaster) on=1; break;\r
-\r
- //\r
- // MUSIC\r
- //\r
- case 10: if (MusicMode==smm_Off) on=1; break;\r
- case 11: if (MusicMode==smm_AdLib) on=1; break;\r
- }\r
-\r
- if (on)\r
- VWB_DrawPic(SM_X+24,SM_Y1+i*13+2,C_SELECTEDPIC);\r
- else\r
- VWB_DrawPic(SM_X+24,SM_Y1+i*13+2,C_NOTSELECTEDPIC);\r
- }\r
-\r
- DrawMenuGun(&SndItems);\r
- VW_UpdateScreen();\r
-}\r
-\r
-\r
-//\r
-// DRAW LOAD/SAVE IN PROGRESS\r
-//\r
-void DrawLSAction(int which)\r
-{\r
- #define LSA_X 96\r
- #define LSA_Y 80\r
- #define LSA_W 130\r
- #define LSA_H 42\r
-\r
- DrawWindow(LSA_X,LSA_Y,LSA_W,LSA_H,TEXTCOLOR);\r
- DrawOutline(LSA_X,LSA_Y,LSA_W,LSA_H,0,HIGHLIGHT);\r
- VWB_DrawPic(LSA_X+8,LSA_Y+5,C_DISKLOADING1PIC);\r
-\r
- fontnumber=1;\r
- SETFONTCOLOR(0,TEXTCOLOR);\r
- PrintX=LSA_X+46;\r
- PrintY=LSA_Y+13;\r
-\r
- if (!which)\r
- US_Print(STR_LOADING"...");\r
- else\r
- US_Print(STR_SAVING"...");\r
-\r
- VW_UpdateScreen();\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// LOAD SAVED GAMES\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-int CP_LoadGame(int quick)\r
-{\r
- int handle,which,exit=0;\r
- char name[13];\r
-\r
-\r
- strcpy(name,SaveName);\r
-\r
- //\r
- // QUICKLOAD?\r
- //\r
- if (quick)\r
- {\r
- which=LSItems.curpos;\r
-\r
- if (SaveGamesAvail[which])\r
- {\r
- name[7]=which+'0';\r
- handle=open(name,O_BINARY);\r
- lseek(handle,32,SEEK_SET);\r
- loadedgame=true;\r
- LoadTheGame(handle,0,0);\r
- loadedgame=false;\r
- close(handle);\r
-\r
- DrawFace ();\r
- DrawHealth ();\r
- DrawLives ();\r
- DrawLevel ();\r
- DrawAmmo ();\r
- DrawKeys ();\r
- DrawWeapon ();\r
- DrawScore ();\r
- return 1;\r
- }\r
- }\r
-\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
- CacheLump (LOADSAVE_LUMP_START,LOADSAVE_LUMP_END);\r
-#endif\r
-\r
- DrawLoadSaveScreen(0);\r
-\r
- do\r
- {\r
- which=HandleMenu(&LSItems,&LSMenu[0],TrackWhichGame);\r
- if (which>=0 && SaveGamesAvail[which])\r
- {\r
- ShootSnd();\r
- name[7]=which+'0';\r
-\r
- handle=open(name,O_BINARY);\r
- lseek(handle,32,SEEK_SET);\r
-\r
- DrawLSAction(0);\r
- loadedgame=true;\r
-\r
- LoadTheGame(handle,LSA_X+8,LSA_Y+5);\r
- close(handle);\r
-\r
- StartGame=1;\r
- ShootSnd();\r
- //\r
- // CHANGE "READ THIS!" TO NORMAL COLOR\r
- //\r
-\r
- #ifndef SPEAR\r
- #ifndef GOODTIMES\r
- MainMenu[readthis].active=1;\r
- #endif\r
- #endif\r
-\r
- exit=1;\r
- break;\r
- }\r
-\r
- } while(which>=0);\r
-\r
- MenuFadeOut();\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (LOADSAVE_LUMP_START,LOADSAVE_LUMP_END);\r
- CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
-#endif\r
-\r
- return exit;\r
-}\r
-\r
-\r
-///////////////////////////////////\r
-//\r
-// HIGHLIGHT CURRENT SELECTED ENTRY\r
-//\r
-void TrackWhichGame(int w)\r
-{\r
- static int lastgameon=0;\r
-\r
- PrintLSEntry(lastgameon,TEXTCOLOR);\r
- PrintLSEntry(w,HIGHLIGHT);\r
-\r
- lastgameon=w;\r
-}\r
-\r
-\r
-////////////////////////////\r
-//\r
-// DRAW THE LOAD/SAVE SCREEN\r
-//\r
-void DrawLoadSaveScreen(int loadsave)\r
-{\r
- #define DISKX 100\r
- #define DISKY 0\r
-\r
- int i;\r
-\r
-\r
- ClearMScreen();\r
- fontnumber=1;\r
- VWB_DrawPic(112,184,C_MOUSELBACKPIC);\r
- DrawWindow(LSM_X-10,LSM_Y-5,LSM_W,LSM_H,BKGDCOLOR);\r
- DrawStripes(10);\r
-\r
- if (!loadsave)\r
- VWB_DrawPic(60,0,C_LOADGAMEPIC);\r
- else\r
- VWB_DrawPic(60,0,C_SAVEGAMEPIC);\r
-\r
- for (i=0;i<10;i++)\r
- PrintLSEntry(i,TEXTCOLOR);\r
-\r
- DrawMenu(&LSItems,&LSMenu[0]);\r
- VW_UpdateScreen();\r
- MenuFadeIn();\r
- WaitKeyUp();\r
-}\r
-\r
-\r
-///////////////////////////////////////////\r
-//\r
-// PRINT LOAD/SAVE GAME ENTRY W/BOX OUTLINE\r
-//\r
-void PrintLSEntry(int w,int color)\r
-{\r
- SETFONTCOLOR(color,BKGDCOLOR);\r
- DrawOutline(LSM_X+LSItems.indent,LSM_Y+w*13,LSM_W-LSItems.indent-15,11,color,color);\r
- PrintX=LSM_X+LSItems.indent+2;\r
- PrintY=LSM_Y+w*13+1;\r
- fontnumber=0;\r
-\r
- if (SaveGamesAvail[w])\r
- US_Print(SaveGameNames[w]);\r
- else\r
- US_Print(" - "STR_EMPTY" -");\r
-\r
- fontnumber=1;\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// SAVE CURRENT GAME\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-int CP_SaveGame(int quick)\r
-{\r
- int handle,which,exit=0;\r
- unsigned nwritten;\r
- char name[13],input[32];\r
-\r
-\r
- strcpy(name,SaveName);\r
-\r
- //\r
- // QUICKSAVE?\r
- //\r
- if (quick)\r
- {\r
- which=LSItems.curpos;\r
-\r
- if (SaveGamesAvail[which])\r
- {\r
- name[7]=which+'0';\r
- unlink(name);\r
- handle=creat(name,S_IREAD|S_IWRITE);\r
-\r
- strcpy(input,&SaveGameNames[which][0]);\r
-\r
- _dos_write(handle,(void far *)input,32,&nwritten);\r
- lseek(handle,32,SEEK_SET);\r
- SaveTheGame(handle,0,0);\r
- close(handle);\r
-\r
- return 1;\r
- }\r
- }\r
-\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
- CacheLump (LOADSAVE_LUMP_START,LOADSAVE_LUMP_END);\r
-#endif\r
-\r
- DrawLoadSaveScreen(1);\r
-\r
- do\r
- {\r
- which=HandleMenu(&LSItems,&LSMenu[0],TrackWhichGame);\r
- if (which>=0)\r
- {\r
- //\r
- // OVERWRITE EXISTING SAVEGAME?\r
- //\r
- if (SaveGamesAvail[which])\r
- #ifdef JAPAN\r
- if (!GetYorN(7,8,C_JAPSAVEOVERPIC))\r
- #else\r
- if (!Confirm(GAMESVD))\r
- #endif\r
- {\r
- DrawLoadSaveScreen(1);\r
- continue;\r
- }\r
- else\r
- {\r
- DrawLoadSaveScreen(1);\r
- PrintLSEntry(which,HIGHLIGHT);\r
- VW_UpdateScreen();\r
- }\r
-\r
- ShootSnd();\r
-\r
- strcpy(input,&SaveGameNames[which][0]);\r
- name[7]=which+'0';\r
-\r
- fontnumber=0;\r
- if (!SaveGamesAvail[which])\r
- VWB_Bar(LSM_X+LSItems.indent+1,LSM_Y+which*13+1,LSM_W-LSItems.indent-16,10,BKGDCOLOR);\r
- VW_UpdateScreen();\r
-\r
- if (US_LineInput(LSM_X+LSItems.indent+2,LSM_Y+which*13+1,input,input,true,31,LSM_W-LSItems.indent-30))\r
- {\r
- SaveGamesAvail[which]=1;\r
- strcpy(&SaveGameNames[which][0],input);\r
-\r
- unlink(name);\r
- handle=creat(name,S_IREAD|S_IWRITE);\r
- _dos_write(handle,(void far *)input,32,&nwritten);\r
- lseek(handle,32,SEEK_SET);\r
-\r
- DrawLSAction(1);\r
- SaveTheGame(handle,LSA_X+8,LSA_Y+5);\r
-\r
- close(handle);\r
-\r
- ShootSnd();\r
- exit=1;\r
- }\r
- else\r
- {\r
- VWB_Bar(LSM_X+LSItems.indent+1,LSM_Y+which*13+1,LSM_W-LSItems.indent-16,10,BKGDCOLOR);\r
- PrintLSEntry(which,HIGHLIGHT);\r
- VW_UpdateScreen();\r
- SD_PlaySound(ESCPRESSEDSND);\r
- continue;\r
- }\r
-\r
- fontnumber=1;\r
- break;\r
- }\r
-\r
- } while(which>=0);\r
-\r
- MenuFadeOut();\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (LOADSAVE_LUMP_START,LOADSAVE_LUMP_END);\r
- CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
-#endif\r
-\r
- return exit;\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// CALIBRATE JOYSTICK\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-int CalibrateJoystick(void)\r
-{\r
- #define CALX 85\r
- #define CALY 40\r
- #define CALW 158\r
- #define CALH 140\r
-\r
- unsigned xmin,ymin,xmax,ymax,jb;\r
-\r
-\r
-\r
- #ifdef JAPAN\r
- VWB_DrawPic(CALX,CALY,C_JOY0PIC);\r
- #else\r
- DrawWindow(CALX-5,CALY-5,CALW,CALH,TEXTCOLOR);\r
- DrawOutline(CALX-5,CALY-5,CALW,CALH,0,HIGHLIGHT);\r
- SETFONTCOLOR(0,TEXTCOLOR);\r
-\r
- WindowX = PrintX = CALX;\r
- WindowW = CALW;\r
- WindowH = CALH;\r
- WindowY = PrintY = CALY;\r
- US_Print(" "STR_CALIB"\n "STR_JOYST"\n");\r
- VWB_DrawPic(CALX+40,CALY+30,C_JOY1PIC);\r
- PrintY = CALY+80;\r
- US_Print(STR_MOVEJOY);\r
- SETFONTCOLOR(BKGDCOLOR,TEXTCOLOR);\r
- US_Print(" "STR_ESCEXIT);\r
- #endif\r
- VW_UpdateScreen();\r
-\r
- do\r
- {\r
- jb=IN_JoyButtons();\r
- if (Keyboard[sc_Escape])\r
- return 0;\r
- #ifndef SPEAR\r
- if (Keyboard[sc_Tab] && Keyboard[sc_P] && MS_CheckParm("goobers"))\r
- PicturePause();\r
- #endif\r
-\r
- } while(!(jb&1));\r
-\r
- SD_PlaySound(SHOOTSND);\r
- IN_GetJoyAbs(joystickport,&xmin,&ymin);\r
-\r
-\r
- #ifdef JAPAN\r
- VWB_DrawPic(CALX,CALY,C_JOY1PIC);\r
- #else\r
- DrawWindow(CALX-5,CALY-5,CALW,CALH,TEXTCOLOR);\r
- DrawOutline(CALX-5,CALY-5,CALW,CALH,0,HIGHLIGHT);\r
- SETFONTCOLOR(0,TEXTCOLOR);\r
-\r
- PrintX = CALX;\r
- PrintY = CALY;\r
- US_Print(" "STR_CALIB"\n "STR_JOYST"\n");\r
- VWB_DrawPic(CALX+40,CALY+30,C_JOY2PIC);\r
- PrintY = CALY+80;\r
- US_Print(STR_MOVEJOY2);\r
- SETFONTCOLOR(BKGDCOLOR,TEXTCOLOR);\r
- US_Print(" "STR_ESCEXIT);\r
- #endif\r
- VW_UpdateScreen();\r
-\r
- do\r
- {\r
- jb=IN_JoyButtons();\r
- if (Keyboard[sc_Escape])\r
- return 0;\r
- #ifndef SPEAR\r
- if (Keyboard[sc_Tab] && Keyboard[sc_P] && MS_CheckParm("goobers"))\r
- PicturePause();\r
- #endif\r
- } while(!(jb&2));\r
-\r
- IN_GetJoyAbs(joystickport,&xmax,&ymax);\r
- SD_PlaySound(SHOOTSND);\r
-\r
- while (IN_JoyButtons());\r
-\r
- //\r
- // ASSIGN ACTUAL VALUES HERE\r
- //\r
- if ((xmin != xmax) && (ymin != ymax))\r
- IN_SetupJoy(joystickport,xmin,xmax,ymin,ymax);\r
- else\r
- return 0;\r
-\r
- return 1;\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// DEFINE CONTROLS\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void CP_Control(void)\r
-{\r
- #define CTL_SPC 70\r
- enum {MOUSEENABLE,JOYENABLE,USEPORT2,PADENABLE,MOUSESENS,CUSTOMIZE};\r
- int i,which;\r
-\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
- CacheLump (CONTROL_LUMP_START,CONTROL_LUMP_END);\r
-#endif\r
-\r
- DrawCtlScreen();\r
- MenuFadeIn();\r
- WaitKeyUp();\r
-\r
- do\r
- {\r
- which=HandleMenu(&CtlItems,&CtlMenu[0],NULL);\r
- switch(which)\r
- {\r
- case MOUSEENABLE:\r
- mouseenabled^=1;\r
- _CX=_DX=CENTER;\r
- Mouse(4);\r
- DrawCtlScreen();\r
- CusItems.curpos=-1;\r
- ShootSnd();\r
- break;\r
-\r
- case JOYENABLE:\r
- joystickenabled^=1;\r
- if (joystickenabled)\r
- if (!CalibrateJoystick())\r
- joystickenabled = 0;\r
- DrawCtlScreen();\r
- CusItems.curpos=-1;\r
- ShootSnd();\r
- break;\r
-\r
- case USEPORT2:\r
- joystickport^=1;\r
- DrawCtlScreen();\r
- ShootSnd();\r
- break;\r
-\r
- case PADENABLE:\r
- joypadenabled^=1;\r
- DrawCtlScreen();\r
- ShootSnd();\r
- break;\r
-\r
- case MOUSESENS:\r
- case CUSTOMIZE:\r
- DrawCtlScreen();\r
- MenuFadeIn();\r
- WaitKeyUp();\r
- break;\r
- }\r
- } while(which>=0);\r
-\r
- MenuFadeOut();\r
-\r
-#ifdef SPEAR\r
- UnCacheLump (CONTROL_LUMP_START,CONTROL_LUMP_END);\r
- CacheLump (OPTIONS_LUMP_START,OPTIONS_LUMP_END);\r
-#endif\r
-}\r
-\r
-\r
-////////////////////////////////\r
-//\r
-// DRAW MOUSE SENSITIVITY SCREEN\r
-//\r
-void DrawMouseSens(void)\r
-{\r
-#ifdef JAPAN\r
- CA_CacheScreen(S_MOUSESENSPIC);\r
-#else\r
- ClearMScreen();\r
- VWB_DrawPic(112,184,C_MOUSELBACKPIC);\r
- #ifdef SPANISH\r
- DrawWindow(10,80,300,43,BKGDCOLOR);\r
- #else\r
- DrawWindow(10,80,300,30,BKGDCOLOR);\r
- #endif\r
-\r
- WindowX=0;\r
- WindowW=320;\r
- PrintY=82;\r
- SETFONTCOLOR(READCOLOR,BKGDCOLOR);\r
- US_CPrint(STR_MOUSEADJ);\r
-\r
- SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);\r
- #ifdef SPANISH\r
- PrintX=14;\r
- PrintY=95+13;\r
- US_Print(STR_SLOW);\r
- PrintX=252;\r
- US_Print(STR_FAST);\r
- #else\r
- PrintX=14;\r
- PrintY=95;\r
- US_Print(STR_SLOW);\r
- PrintX=269;\r
- US_Print(STR_FAST);\r
- #endif\r
-#endif\r
-\r
- VWB_Bar(60,97,200,10,TEXTCOLOR);\r
- DrawOutline(60,97,200,10,0,HIGHLIGHT);\r
- DrawOutline(60+20*mouseadjustment,97,20,10,0,READCOLOR);\r
- VWB_Bar(61+20*mouseadjustment,98,19,9,READHCOLOR);\r
-\r
- VW_UpdateScreen();\r
- MenuFadeIn();\r
-}\r
-\r
-\r
-///////////////////////////\r
-//\r
-// ADJUST MOUSE SENSITIVITY\r
-//\r
-void MouseSensitivity(void)\r
-{\r
- ControlInfo ci;\r
- int exit=0,oldMA;\r
-\r
-\r
- oldMA=mouseadjustment;\r
- DrawMouseSens();\r
- do\r
- {\r
- ReadAnyControl(&ci);\r
- switch(ci.dir)\r
- {\r
- case dir_North:\r
- case dir_West:\r
- if (mouseadjustment)\r
- {\r
- mouseadjustment--;\r
- VWB_Bar(60,97,200,10,TEXTCOLOR);\r
- DrawOutline(60,97,200,10,0,HIGHLIGHT);\r
- DrawOutline(60+20*mouseadjustment,97,20,10,0,READCOLOR);\r
- VWB_Bar(61+20*mouseadjustment,98,19,9,READHCOLOR);\r
- VW_UpdateScreen();\r
- SD_PlaySound(MOVEGUN1SND);\r
- while(Keyboard[sc_LeftArrow]);\r
- WaitKeyUp();\r
- }\r
- break;\r
-\r
- case dir_South:\r
- case dir_East:\r
- if (mouseadjustment<9)\r
- {\r
- mouseadjustment++;\r
- VWB_Bar(60,97,200,10,TEXTCOLOR);\r
- DrawOutline(60,97,200,10,0,HIGHLIGHT);\r
- DrawOutline(60+20*mouseadjustment,97,20,10,0,READCOLOR);\r
- VWB_Bar(61+20*mouseadjustment,98,19,9,READHCOLOR);\r
- VW_UpdateScreen();\r
- SD_PlaySound(MOVEGUN1SND);\r
- while(Keyboard[sc_RightArrow]);\r
- WaitKeyUp();\r
- }\r
- break;\r
- }\r
-\r
- #ifndef SPEAR\r
- if (Keyboard[sc_Tab] && Keyboard[sc_P] && MS_CheckParm("goobers"))\r
- #else\r
- if (Keyboard[sc_Tab] && Keyboard[sc_P] && MS_CheckParm("debugmode"))\r
- #endif\r
- PicturePause();\r
-\r
- if (ci.button0 || Keyboard[sc_Space] || Keyboard[sc_Enter])\r
- exit=1;\r
- else\r
- if (ci.button1 || Keyboard[sc_Escape])\r
- exit=2;\r
-\r
- } while(!exit);\r
-\r
- if (exit==2)\r
- {\r
- mouseadjustment=oldMA;\r
- SD_PlaySound(ESCPRESSEDSND);\r
- }\r
- else\r
- SD_PlaySound(SHOOTSND);\r
-\r
- WaitKeyUp();\r
- MenuFadeOut();\r
-}\r
-\r
-\r
-///////////////////////////\r
-//\r
-// DRAW CONTROL MENU SCREEN\r
-//\r
-void DrawCtlScreen(void)\r
-{\r
- int i,x,y;\r
-\r
-\r
-#ifdef JAPAN\r
- CA_CacheScreen(S_CONTROLPIC);\r
-#else\r
- ClearMScreen();\r
- DrawStripes(10);\r
- VWB_DrawPic(80,0,C_CONTROLPIC);\r
- VWB_DrawPic(112,184,C_MOUSELBACKPIC);\r
- DrawWindow(CTL_X-8,CTL_Y-5,CTL_W,CTL_H,BKGDCOLOR);\r
-#endif\r
- WindowX=0;\r
- WindowW=320;\r
- SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);\r
-\r
- if (JoysPresent[0])\r
- CtlMenu[1].active=\r
- CtlMenu[2].active=\r
- CtlMenu[3].active=1;\r
-\r
- CtlMenu[2].active=CtlMenu[3].active=joystickenabled;\r
-\r
- if (MousePresent)\r
- {\r
- CtlMenu[4].active=\r
- CtlMenu[0].active=1;\r
- }\r
-\r
- CtlMenu[4].active=mouseenabled;\r
-\r
-\r
- DrawMenu(&CtlItems,&CtlMenu[0]);\r
-\r
-\r
- x=CTL_X+CtlItems.indent-24;\r
- y=CTL_Y+3;\r
- if (mouseenabled)\r
- VWB_DrawPic(x,y,C_SELECTEDPIC);\r
- else\r
- VWB_DrawPic(x,y,C_NOTSELECTEDPIC);\r
-\r
- y=CTL_Y+16;\r
- if (joystickenabled)\r
- VWB_DrawPic(x,y,C_SELECTEDPIC);\r
- else\r
- VWB_DrawPic(x,y,C_NOTSELECTEDPIC);\r
-\r
- y=CTL_Y+29;\r
- if (joystickport)\r
- VWB_DrawPic(x,y,C_SELECTEDPIC);\r
- else\r
- VWB_DrawPic(x,y,C_NOTSELECTEDPIC);\r
-\r
- y=CTL_Y+42;\r
- if (joypadenabled)\r
- VWB_DrawPic(x,y,C_SELECTEDPIC);\r
- else\r
- VWB_DrawPic(x,y,C_NOTSELECTEDPIC);\r
-\r
- //\r
- // PICK FIRST AVAILABLE SPOT\r
- //\r
- if (CtlItems.curpos<0 || !CtlMenu[CtlItems.curpos].active)\r
- for (i=0;i<6;i++)\r
- if (CtlMenu[i].active)\r
- {\r
- CtlItems.curpos=i;\r
- break;\r
- }\r
-\r
- DrawMenuGun(&CtlItems);\r
- VW_UpdateScreen();\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// CUSTOMIZE CONTROLS\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-enum {FIRE,STRAFE,RUN,OPEN};\r
-char mbarray[4][3]={"b0","b1","b2","b3"},\r
- order[4]={RUN,OPEN,FIRE,STRAFE};\r
-\r
-\r
-void CustomControls(void)\r
-{\r
- int which;\r
-\r
-\r
- DrawCustomScreen();\r
- do\r
- {\r
- which=HandleMenu(&CusItems,&CusMenu[0],FixupCustom);\r
- switch(which)\r
- {\r
- case 0:\r
- DefineMouseBtns();\r
- DrawCustMouse(1);\r
- break;\r
- case 3:\r
- DefineJoyBtns();\r
- DrawCustJoy(0);\r
- break;\r
- case 6:\r
- DefineKeyBtns();\r
- DrawCustKeybd(0);\r
- break;\r
- case 8:\r
- DefineKeyMove();\r
- DrawCustKeys(0);\r
- }\r
- } while(which>=0);\r
-\r
-\r
-\r
- MenuFadeOut();\r
-}\r
-\r
-\r
-////////////////////////\r
-//\r
-// DEFINE THE MOUSE BUTTONS\r
-//\r
-void DefineMouseBtns(void)\r
-{\r
- CustomCtrls mouseallowed={0,1,1,1};\r
- EnterCtrlData(2,&mouseallowed,DrawCustMouse,PrintCustMouse,MOUSE);\r
-}\r
-\r
-\r
-////////////////////////\r
-//\r
-// DEFINE THE JOYSTICK BUTTONS\r
-//\r
-void DefineJoyBtns(void)\r
-{\r
- CustomCtrls joyallowed={1,1,1,1};\r
- EnterCtrlData(5,&joyallowed,DrawCustJoy,PrintCustJoy,JOYSTICK);\r
-}\r
-\r
-\r
-////////////////////////\r
-//\r
-// DEFINE THE KEYBOARD BUTTONS\r
-//\r
-void DefineKeyBtns(void)\r
-{\r
- CustomCtrls keyallowed={1,1,1,1};\r
- EnterCtrlData(8,&keyallowed,DrawCustKeybd,PrintCustKeybd,KEYBOARDBTNS);\r
-}\r
-\r
-\r
-////////////////////////\r
-//\r
-// DEFINE THE KEYBOARD BUTTONS\r
-//\r
-void DefineKeyMove(void)\r
-{\r
- CustomCtrls keyallowed={1,1,1,1};\r
- EnterCtrlData(10,&keyallowed,DrawCustKeys,PrintCustKeys,KEYBOARDMOVE);\r
-}\r
-\r
-\r
-////////////////////////\r
-//\r
-// ENTER CONTROL DATA FOR ANY TYPE OF CONTROL\r
-//\r
-enum {FWRD,RIGHT,BKWD,LEFT};\r
-int moveorder[4]={LEFT,RIGHT,FWRD,BKWD};\r
-\r
-void EnterCtrlData(int index,CustomCtrls *cust,void (*DrawRtn)(int),void (*PrintRtn)(int),int type)\r
-{\r
- int j,exit,tick,redraw,which,x,picked;\r
- ControlInfo ci;\r
-\r
-\r
- ShootSnd();\r
- PrintY=CST_Y+13*index;\r
- IN_ClearKeysDown();\r
- exit=0;\r
- redraw=1;\r
- //\r
- // FIND FIRST SPOT IN ALLOWED ARRAY\r
- //\r
- for (j=0;j<4;j++)\r
- if (cust->allowed[j])\r
- {\r
- which=j;\r
- break;\r
- }\r
-\r
- do\r
- {\r
- if (redraw)\r
- {\r
- x=CST_START+CST_SPC*which;\r
- DrawWindow(5,PrintY-1,310,13,BKGDCOLOR);\r
-\r
- DrawRtn(1);\r
- DrawWindow(x-2,PrintY,CST_SPC,11,TEXTCOLOR);\r
- DrawOutline(x-2,PrintY,CST_SPC,11,0,HIGHLIGHT);\r
- SETFONTCOLOR(0,TEXTCOLOR);\r
- PrintRtn(which);\r
- PrintX=x;\r
- SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);\r
- VW_UpdateScreen();\r
- WaitKeyUp();\r
- redraw=0;\r
- }\r
-\r
- ReadAnyControl(&ci);\r
-\r
- if (type==MOUSE || type==JOYSTICK)\r
- if (IN_KeyDown(sc_Enter)||IN_KeyDown(sc_Control)||IN_KeyDown(sc_Alt))\r
- {\r
- IN_ClearKeysDown();\r
- ci.button0=ci.button1=false;\r
- }\r
-\r
- //\r
- // CHANGE BUTTON VALUE?\r
- //\r
- if ((ci.button0|ci.button1|ci.button2|ci.button3)||\r
- ((type==KEYBOARDBTNS||type==KEYBOARDMOVE) && LastScan==sc_Enter))\r
- {\r
- tick=TimeCount=picked=0;\r
- SETFONTCOLOR(0,TEXTCOLOR);\r
-\r
- do\r
- {\r
- int button,result=0;\r
-\r
-\r
- if (type==KEYBOARDBTNS||type==KEYBOARDMOVE)\r
- IN_ClearKeysDown();\r
-\r
- //\r
- // FLASH CURSOR\r
- //\r
- if (TimeCount>10)\r
- {\r
- switch(tick)\r
- {\r
- case 0:\r
- VWB_Bar(x,PrintY+1,CST_SPC-2,10,TEXTCOLOR);\r
- break;\r
- case 1:\r
- PrintX=x;\r
- US_Print("?");\r
- SD_PlaySound(HITWALLSND);\r
- }\r
- tick^=1;\r
- TimeCount=0;\r
- VW_UpdateScreen();\r
- }\r
-\r
- //\r
- // WHICH TYPE OF INPUT DO WE PROCESS?\r
- //\r
- switch(type)\r
- {\r
- case MOUSE:\r
- Mouse(3);\r
- button=_BX;\r
- switch(button)\r
- {\r
- case 1: result=1; break;\r
- case 2: result=2; break;\r
- case 4: result=3; break;\r
- }\r
-\r
- if (result)\r
- {\r
- int z;\r
-\r
-\r
- for (z=0;z<4;z++)\r
- if (order[which]==buttonmouse[z])\r
- {\r
- buttonmouse[z]=bt_nobutton;\r
- break;\r
- }\r
-\r
- buttonmouse[result-1]=order[which];\r
- picked=1;\r
- SD_PlaySound(SHOOTDOORSND);\r
- }\r
- break;\r
-\r
- case JOYSTICK:\r
- if (ci.button0) result=1;\r
- else\r
- if (ci.button1) result=2;\r
- else\r
- if (ci.button2) result=3;\r
- else\r
- if (ci.button3) result=4;\r
-\r
- if (result)\r
- {\r
- int z;\r
-\r
-\r
- for (z=0;z<4;z++)\r
- if (order[which]==buttonjoy[z])\r
- {\r
- buttonjoy[z]=bt_nobutton;\r
- break;\r
- }\r
-\r
- buttonjoy[result-1]=order[which];\r
- picked=1;\r
- SD_PlaySound(SHOOTDOORSND);\r
- }\r
- break;\r
-\r
- case KEYBOARDBTNS:\r
- if (LastScan)\r
- {\r
- buttonscan[order[which]]=LastScan;\r
- picked=1;\r
- ShootSnd();\r
- IN_ClearKeysDown();\r
- }\r
- break;\r
-\r
- case KEYBOARDMOVE:\r
- if (LastScan)\r
- {\r
- dirscan[moveorder[which]]=LastScan;\r
- picked=1;\r
- ShootSnd();\r
- IN_ClearKeysDown();\r
- }\r
- break;\r
- }\r
-\r
- //\r
- // EXIT INPUT?\r
- //\r
- if (IN_KeyDown(sc_Escape))\r
- {\r
- picked=1;\r
- continue;\r
- }\r
-\r
- } while(!picked);\r
-\r
- SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);\r
- redraw=1;\r
- WaitKeyUp();\r
- continue;\r
- }\r
-\r
- if (ci.button1 || IN_KeyDown(sc_Escape))\r
- exit=1;\r
-\r
- //\r
- // MOVE TO ANOTHER SPOT?\r
- //\r
- switch(ci.dir)\r
- {\r
- case dir_West:\r
- do\r
- {\r
- which--;\r
- if (which<0)\r
- which=3;\r
- } while(!cust->allowed[which]);\r
- redraw=1;\r
- SD_PlaySound(MOVEGUN1SND);\r
- while(ReadAnyControl(&ci),ci.dir!=dir_None);\r
- IN_ClearKeysDown();\r
- break;\r
-\r
- case dir_East:\r
- do\r
- {\r
- which++;\r
- if (which>3)\r
- which=0;\r
- } while(!cust->allowed[which]);\r
- redraw=1;\r
- SD_PlaySound(MOVEGUN1SND);\r
- while(ReadAnyControl(&ci),ci.dir!=dir_None);\r
- IN_ClearKeysDown();\r
- break;\r
- case dir_North:\r
- case dir_South:\r
- exit=1;\r
- }\r
- } while(!exit);\r
-\r
- SD_PlaySound(ESCPRESSEDSND);\r
- WaitKeyUp();\r
- DrawWindow(5,PrintY-1,310,13,BKGDCOLOR);\r
-}\r
-\r
-\r
-////////////////////////\r
-//\r
-// FIXUP GUN CURSOR OVERDRAW SHIT\r
-//\r
-void FixupCustom(int w)\r
-{\r
- static int lastwhich=-1;\r
- int y=CST_Y+26+w*13;\r
-\r
-\r
- VWB_Hlin(7,32,y-1,DEACTIVE);\r
- VWB_Hlin(7,32,y+12,BORD2COLOR);\r
-#ifndef SPEAR\r
- VWB_Hlin(7,32,y-2,BORDCOLOR);\r
- VWB_Hlin(7,32,y+13,BORDCOLOR);\r
-#else\r
- VWB_Hlin(7,32,y-2,BORD2COLOR);\r
- VWB_Hlin(7,32,y+13,BORD2COLOR);\r
-#endif\r
-\r
- switch(w)\r
- {\r
- case 0: DrawCustMouse(1); break;\r
- case 3: DrawCustJoy(1); break;\r
- case 6: DrawCustKeybd(1); break;\r
- case 8: DrawCustKeys(1);\r
- }\r
-\r
-\r
- if (lastwhich>=0)\r
- {\r
- y=CST_Y+26+lastwhich*13;\r
- VWB_Hlin(7,32,y-1,DEACTIVE);\r
- VWB_Hlin(7,32,y+12,BORD2COLOR);\r
-#ifndef SPEAR\r
- VWB_Hlin(7,32,y-2,BORDCOLOR);\r
- VWB_Hlin(7,32,y+13,BORDCOLOR);\r
-#else\r
- VWB_Hlin(7,32,y-2,BORD2COLOR);\r
- VWB_Hlin(7,32,y+13,BORD2COLOR);\r
-#endif\r
-\r
- if (lastwhich!=w)\r
- switch(lastwhich)\r
- {\r
- case 0: DrawCustMouse(0); break;\r
- case 3: DrawCustJoy(0); break;\r
- case 6: DrawCustKeybd(0); break;\r
- case 8: DrawCustKeys(0);\r
- }\r
- }\r
-\r
- lastwhich=w;\r
-}\r
-\r
-\r
-////////////////////////\r
-//\r
-// DRAW CUSTOMIZE SCREEN\r
-//\r
-void DrawCustomScreen(void)\r
-{\r
- int i;\r
-\r
-\r
-#ifdef JAPAN\r
- CA_CacheScreen(S_CUSTOMPIC);\r
- fontnumber=1;\r
-\r
- PrintX=CST_START;\r
- PrintY = CST_Y+26;\r
- DrawCustMouse(0);\r
-\r
- PrintX=CST_START;\r
- US_Print("\n\n\n");\r
- DrawCustJoy(0);\r
-\r
- PrintX=CST_START;\r
- US_Print("\n\n\n");\r
- DrawCustKeybd(0);\r
-\r
- PrintX=CST_START;\r
- US_Print("\n\n\n");\r
- DrawCustKeys(0);\r
-#else\r
- ClearMScreen();\r
- WindowX=0;\r
- WindowW=320;\r
- VWB_DrawPic(112,184,C_MOUSELBACKPIC);\r
- DrawStripes(10);\r
- VWB_DrawPic(80,0,C_CUSTOMIZEPIC);\r
-\r
- //\r
- // MOUSE\r
- //\r
- SETFONTCOLOR(READCOLOR,BKGDCOLOR);\r
- WindowX=0;\r
- WindowW=320;\r
-\r
-#ifndef SPEAR\r
- PrintY=CST_Y;\r
- US_CPrint("Mouse\n");\r
-#else\r
- PrintY = CST_Y+13;\r
- VWB_DrawPic (128,48,C_MOUSEPIC);\r
-#endif\r
-\r
- SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);\r
- #ifdef SPANISH\r
- PrintX=CST_START-16;\r
- US_Print(STR_CRUN);\r
- PrintX=CST_START-16+CST_SPC*1;\r
- US_Print(STR_COPEN);\r
- PrintX=CST_START-16+CST_SPC*2;\r
- US_Print(STR_CFIRE);\r
- PrintX=CST_START-16+CST_SPC*3;\r
- US_Print(STR_CSTRAFE"\n");\r
- #else\r
- PrintX=CST_START;\r
- US_Print(STR_CRUN);\r
- PrintX=CST_START+CST_SPC*1;\r
- US_Print(STR_COPEN);\r
- PrintX=CST_START+CST_SPC*2;\r
- US_Print(STR_CFIRE);\r
- PrintX=CST_START+CST_SPC*3;\r
- US_Print(STR_CSTRAFE"\n");\r
- #endif\r
-\r
- DrawWindow(5,PrintY-1,310,13,BKGDCOLOR);\r
- DrawCustMouse(0);\r
- US_Print("\n");\r
-\r
-\r
- //\r
- // JOYSTICK/PAD\r
- //\r
-#ifndef SPEAR\r
- SETFONTCOLOR(READCOLOR,BKGDCOLOR);\r
- US_CPrint("Joystick/Gravis GamePad\n");\r
-#else\r
- PrintY += 13;\r
- VWB_DrawPic (40,88,C_JOYSTICKPIC);\r
-#endif\r
-\r
-#ifdef SPEAR\r
- VWB_DrawPic (112,120,C_KEYBOARDPIC);\r
-#endif\r
-\r
- SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);\r
- #ifdef SPANISH\r
- PrintX=CST_START-16;\r
- US_Print(STR_CRUN);\r
- PrintX=CST_START-16+CST_SPC*1;\r
- US_Print(STR_COPEN);\r
- PrintX=CST_START-16+CST_SPC*2;\r
- US_Print(STR_CFIRE);\r
- PrintX=CST_START-16+CST_SPC*3;\r
- US_Print(STR_CSTRAFE"\n");\r
- #else\r
- PrintX=CST_START;\r
- US_Print(STR_CRUN);\r
- PrintX=CST_START+CST_SPC*1;\r
- US_Print(STR_COPEN);\r
- PrintX=CST_START+CST_SPC*2;\r
- US_Print(STR_CFIRE);\r
- PrintX=CST_START+CST_SPC*3;\r
- US_Print(STR_CSTRAFE"\n");\r
- #endif\r
- DrawWindow(5,PrintY-1,310,13,BKGDCOLOR);\r
- DrawCustJoy(0);\r
- US_Print("\n");\r
-\r
-\r
- //\r
- // KEYBOARD\r
- //\r
-#ifndef SPEAR\r
- SETFONTCOLOR(READCOLOR,BKGDCOLOR);\r
- US_CPrint("Keyboard\n");\r
-#else\r
- PrintY += 13;\r
-#endif\r
- SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);\r
- #ifdef SPANISH\r
- PrintX=CST_START-16;\r
- US_Print(STR_CRUN);\r
- PrintX=CST_START-16+CST_SPC*1;\r
- US_Print(STR_COPEN);\r
- PrintX=CST_START-16+CST_SPC*2;\r
- US_Print(STR_CFIRE);\r
- PrintX=CST_START-16+CST_SPC*3;\r
- US_Print(STR_CSTRAFE"\n");\r
- #else\r
- PrintX=CST_START;\r
- US_Print(STR_CRUN);\r
- PrintX=CST_START+CST_SPC*1;\r
- US_Print(STR_COPEN);\r
- PrintX=CST_START+CST_SPC*2;\r
- US_Print(STR_CFIRE);\r
- PrintX=CST_START+CST_SPC*3;\r
- US_Print(STR_CSTRAFE"\n");\r
- #endif\r
- DrawWindow(5,PrintY-1,310,13,BKGDCOLOR);\r
- DrawCustKeybd(0);\r
- US_Print("\n");\r
-\r
-\r
- //\r
- // KEYBOARD MOVE KEYS\r
- //\r
- SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);\r
- #ifdef SPANISH\r
- PrintX=4;\r
- US_Print(STR_LEFT);\r
- US_Print("/");\r
- US_Print(STR_RIGHT);\r
- US_Print("/");\r
- US_Print(STR_FRWD);\r
- US_Print("/");\r
- US_Print(STR_BKWD"\n");\r
- #else\r
- PrintX=CST_START;\r
- US_Print(STR_LEFT);\r
- PrintX=CST_START+CST_SPC*1;\r
- US_Print(STR_RIGHT);\r
- PrintX=CST_START+CST_SPC*2;\r
- US_Print(STR_FRWD);\r
- PrintX=CST_START+CST_SPC*3;\r
- US_Print(STR_BKWD"\n");\r
- #endif\r
- DrawWindow(5,PrintY-1,310,13,BKGDCOLOR);\r
- DrawCustKeys(0);\r
-#endif\r
- //\r
- // PICK STARTING POINT IN MENU\r
- //\r
- if (CusItems.curpos<0)\r
- for (i=0;i<CusItems.amount;i++)\r
- if (CusMenu[i].active)\r
- {\r
- CusItems.curpos=i;\r
- break;\r
- }\r
-\r
-\r
- VW_UpdateScreen();\r
- MenuFadeIn();\r
-}\r
-\r
-\r
-void PrintCustMouse(int i)\r
-{\r
- int j;\r
-\r
- for (j=0;j<4;j++)\r
- if (order[i]==buttonmouse[j])\r
- {\r
- PrintX=CST_START+CST_SPC*i;\r
- US_Print(mbarray[j]);\r
- break;\r
- }\r
-}\r
-\r
-void DrawCustMouse(int hilight)\r
-{\r
- int i,color;\r
-\r
-\r
- color=TEXTCOLOR;\r
- if (hilight)\r
- color=HIGHLIGHT;\r
- SETFONTCOLOR(color,BKGDCOLOR);\r
-\r
- if (!mouseenabled)\r
- {\r
- SETFONTCOLOR(DEACTIVE,BKGDCOLOR);\r
- CusMenu[0].active=0;\r
- }\r
- else\r
- CusMenu[0].active=1;\r
-\r
- PrintY=CST_Y+13*2;\r
- for (i=0;i<4;i++)\r
- PrintCustMouse(i);\r
-}\r
-\r
-void PrintCustJoy(int i)\r
-{\r
- int j;\r
-\r
- for (j=0;j<4;j++)\r
- if (order[i]==buttonjoy[j])\r
- {\r
- PrintX=CST_START+CST_SPC*i;\r
- US_Print(mbarray[j]);\r
- break;\r
- }\r
-}\r
-\r
-void DrawCustJoy(int hilight)\r
-{\r
- int i,color;\r
-\r
-\r
- color=TEXTCOLOR;\r
- if (hilight)\r
- color=HIGHLIGHT;\r
- SETFONTCOLOR(color,BKGDCOLOR);\r
-\r
- if (!joystickenabled)\r
- {\r
- SETFONTCOLOR(DEACTIVE,BKGDCOLOR);\r
- CusMenu[3].active=0;\r
- }\r
- else\r
- CusMenu[3].active=1;\r
-\r
- PrintY=CST_Y+13*5;\r
- for (i=0;i<4;i++)\r
- PrintCustJoy(i);\r
-}\r
-\r
-\r
-void PrintCustKeybd(int i)\r
-{\r
- PrintX=CST_START+CST_SPC*i;\r
- US_Print(IN_GetScanName(buttonscan[order[i]]));\r
-}\r
-\r
-void DrawCustKeybd(int hilight)\r
-{\r
- int i,color;\r
-\r
-\r
- color=TEXTCOLOR;\r
- if (hilight)\r
- color=HIGHLIGHT;\r
- SETFONTCOLOR(color,BKGDCOLOR);\r
-\r
- PrintY=CST_Y+13*8;\r
- for (i=0;i<4;i++)\r
- PrintCustKeybd(i);\r
-}\r
-\r
-void PrintCustKeys(int i)\r
-{\r
- PrintX=CST_START+CST_SPC*i;\r
- US_Print(IN_GetScanName(dirscan[moveorder[i]]));\r
-}\r
-\r
-void DrawCustKeys(int hilight)\r
-{\r
- int i,color;\r
-\r
-\r
- color=TEXTCOLOR;\r
- if (hilight)\r
- color=HIGHLIGHT;\r
- SETFONTCOLOR(color,BKGDCOLOR);\r
-\r
- PrintY=CST_Y+13*10;\r
- for (i=0;i<4;i++)\r
- PrintCustKeys(i);\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// CHANGE SCREEN VIEWING SIZE\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void CP_ChangeView(void)\r
-{\r
- int exit=0,oldview,newview;\r
- ControlInfo ci;\r
-\r
-\r
- WindowX=WindowY=0;\r
- WindowW=320;\r
- WindowH=200;\r
- newview=oldview=viewwidth/16;\r
- DrawChangeView(oldview);\r
-\r
- do\r
- {\r
- CheckPause();\r
- ReadAnyControl(&ci);\r
- switch(ci.dir)\r
- {\r
- case dir_South:\r
- case dir_West:\r
- newview--;\r
- if (newview<4)\r
- newview=4;\r
- ShowViewSize(newview);\r
- VW_UpdateScreen();\r
- SD_PlaySound(HITWALLSND);\r
- TicDelay(10);\r
- break;\r
-\r
- case dir_North:\r
- case dir_East:\r
- newview++;\r
- if (newview>19)\r
- newview=19;\r
- ShowViewSize(newview);\r
- VW_UpdateScreen();\r
- SD_PlaySound(HITWALLSND);\r
- TicDelay(10);\r
- break;\r
- }\r
-\r
- #ifndef SPEAR\r
- if (Keyboard[sc_Tab] && Keyboard[sc_P] && MS_CheckParm("goobers"))\r
- #else\r
- if (Keyboard[sc_Tab] && Keyboard[sc_P] && MS_CheckParm("debugmode"))\r
- #endif\r
- PicturePause();\r
-\r
- if (ci.button0 || Keyboard[sc_Enter])\r
- exit=1;\r
- else\r
- if (ci.button1 || Keyboard[sc_Escape])\r
- {\r
- viewwidth=oldview*16;\r
- SD_PlaySound(ESCPRESSEDSND);\r
- MenuFadeOut();\r
- return;\r
- }\r
-\r
- } while(!exit);\r
-\r
-\r
- if (oldview!=newview)\r
- {\r
- SD_PlaySound (SHOOTSND);\r
- Message(STR_THINK"...");\r
- NewViewSize(newview);\r
- }\r
-\r
- ShootSnd();\r
- MenuFadeOut();\r
-}\r
-\r
-\r
-/////////////////////////////\r
-//\r
-// DRAW THE CHANGEVIEW SCREEN\r
-//\r
-void DrawChangeView(int view)\r
-{\r
-#ifdef JAPAN\r
- CA_CacheScreen(S_CHANGEPIC);\r
-\r
- ShowViewSize(view);\r
-#else\r
- VWB_Bar(0,160,320,40,VIEWCOLOR);\r
- ShowViewSize(view);\r
-\r
- PrintY=161;\r
- WindowX=0;\r
- WindowY=320;\r
- SETFONTCOLOR(HIGHLIGHT,BKGDCOLOR);\r
-\r
- US_CPrint(STR_SIZE1"\n");\r
- US_CPrint(STR_SIZE2"\n");\r
- US_CPrint(STR_SIZE3);\r
-#endif\r
- VW_UpdateScreen();\r
-\r
- MenuFadeIn();\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// QUIT THIS INFERNAL GAME!\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void CP_Quit(void)\r
-{\r
- int i;\r
-\r
-\r
- #ifdef JAPAN\r
- if (GetYorN(7,11,C_QUITMSGPIC))\r
- #else\r
-\r
- #ifdef SPANISH\r
- if (Confirm(ENDGAMESTR))\r
- #else\r
- if (Confirm(endStrings[US_RndT()&0x7+(US_RndT()&1)]))\r
- #endif\r
-\r
- #endif\r
- {\r
- VW_UpdateScreen();\r
- SD_MusicOff();\r
- SD_StopSound();\r
- MenuFadeOut();\r
- //\r
- // SHUT-UP THE ADLIB\r
- //\r
- for (i=1;i<=0xf5;i++)\r
- alOut(i,0);\r
- Quit(NULL);\r
- }\r
-\r
- DrawMainMenu();\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// HANDLE INTRO SCREEN (SYSTEM CONFIG)\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void IntroScreen(void)\r
-{\r
-#ifdef SPEAR\r
-\r
-#define MAINCOLOR 0x4f\r
-#define EMSCOLOR 0x4f\r
-#define XMSCOLOR 0x4f\r
-\r
-#else\r
-\r
-#define MAINCOLOR 0x6c\r
-#define EMSCOLOR 0x6c\r
-#define XMSCOLOR 0x6c\r
-\r
-#endif\r
-#define FILLCOLOR 14\r
-\r
- long memory,emshere,xmshere;\r
- int i,num,ems[10]={100,200,300,400,500,600,700,800,900,1000},\r
- xms[10]={100,200,300,400,500,600,700,800,900,1000},\r
- main[10]={32,64,96,128,160,192,224,256,288,320};\r
-\r
-\r
- //\r
- // DRAW MAIN MEMORY\r
- //\r
- memory=(1023l+mminfo.nearheap+mminfo.farheap)/1024l;\r
- for (i=0;i<10;i++)\r
- if (memory>=main[i])\r
- VWB_Bar(49,163-8*i,6,5,MAINCOLOR-i);\r
-\r
-\r
- //\r
- // DRAW EMS MEMORY\r
- //\r
- if (EMSPresent)\r
- {\r
- emshere=4l*EMSPagesAvail;\r
- for (i=0;i<10;i++)\r
- if (emshere>=ems[i])\r
- VWB_Bar(89,163-8*i,6,5,EMSCOLOR-i);\r
- }\r
-\r
- //\r
- // DRAW XMS MEMORY\r
- //\r
- if (XMSPresent)\r
- {\r
- xmshere=4l*XMSPagesAvail;\r
- for (i=0;i<10;i++)\r
- if (xmshere>=xms[i])\r
- VWB_Bar(129,163-8*i,6,5,XMSCOLOR-i);\r
- }\r
-\r
- //\r
- // FILL BOXES\r
- //\r
- if (MousePresent)\r
- VWB_Bar(164,82,12,2,FILLCOLOR);\r
-\r
- if (JoysPresent[0] || JoysPresent[1])\r
- VWB_Bar(164,105,12,2,FILLCOLOR);\r
-\r
- if (AdLibPresent && !SoundBlasterPresent)\r
- VWB_Bar(164,128,12,2,FILLCOLOR);\r
-\r
- if (SoundBlasterPresent)\r
- VWB_Bar(164,151,12,2,FILLCOLOR);\r
-\r
- if (SoundSourcePresent)\r
- VWB_Bar(164,174,12,2,FILLCOLOR);\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// SUPPORT ROUTINES\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// Clear Menu screens to dark red\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void ClearMScreen(void)\r
-{\r
-#ifndef SPEAR\r
- VWB_Bar(0,0,320,200,BORDCOLOR);\r
-#else\r
- VWB_DrawPic(0,0,C_BACKDROPPIC);\r
-#endif\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// Un/Cache a LUMP of graphics\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void CacheLump(int lumpstart,int lumpend)\r
-{\r
- int i;\r
-\r
- for (i=lumpstart;i<=lumpend;i++)\r
- CA_CacheGrChunk(i);\r
-}\r
-\r
-\r
-void UnCacheLump(int lumpstart,int lumpend)\r
-{\r
- int i;\r
-\r
- for (i=lumpstart;i<=lumpend;i++)\r
- if (grsegs[i])\r
- UNCACHEGRCHUNK(i);\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// Draw a window for a menu\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void DrawWindow(int x,int y,int w,int h,int wcolor)\r
-{\r
- VWB_Bar(x,y,w,h,wcolor);\r
- DrawOutline(x,y,w,h,BORD2COLOR,DEACTIVE);\r
-}\r
-\r
-\r
-void DrawOutline(int x,int y,int w,int h,int color1,int color2)\r
-{\r
- VWB_Hlin(x,x+w,y,color2);\r
- VWB_Vlin(y,y+h,x,color2);\r
- VWB_Hlin(x,x+w,y+h,color1);\r
- VWB_Vlin(y,y+h,x+w,color1);\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// Setup Control Panel stuff - graphics, etc.\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void SetupControlPanel(void)\r
-{\r
- struct ffblk f;\r
- char name[13];\r
- int which,i;\r
-\r
-\r
- //\r
- // CACHE GRAPHICS & SOUNDS\r
- //\r
- CA_CacheGrChunk(STARTFONT+1);\r
-#ifndef SPEAR\r
- CacheLump(CONTROLS_LUMP_START,CONTROLS_LUMP_END);\r
-#else\r
- CacheLump(BACKDROP_LUMP_START,BACKDROP_LUMP_END);\r
-#endif\r
-\r
- SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);\r
- fontnumber=1;\r
- WindowH=200;\r
-\r
- if (!ingame)\r
- CA_LoadAllSounds();\r
- else\r
- MainMenu[savegame].active=1;\r
-\r
- //\r
- // SEE WHICH SAVE GAME FILES ARE AVAILABLE & READ STRING IN\r
- //\r
- strcpy(name,SaveName);\r
- if (!findfirst(name,&f,0))\r
- do\r
- {\r
- which=f.ff_name[7]-'0';\r
- if (which<10)\r
- {\r
- int handle;\r
- char temp[32];\r
-\r
- SaveGamesAvail[which]=1;\r
- handle=open(f.ff_name,O_BINARY);\r
- read(handle,temp,32);\r
- close(handle);\r
- strcpy(&SaveGameNames[which][0],temp);\r
- }\r
- } while(!findnext(&f));\r
-\r
- //\r
- // CENTER MOUSE\r
- //\r
- _CX=_DX=CENTER;\r
- Mouse(4);\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// Clean up all the Control Panel stuff\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void CleanupControlPanel(void)\r
-{\r
-#ifndef SPEAR\r
- UnCacheLump(CONTROLS_LUMP_START,CONTROLS_LUMP_END);\r
-#else\r
- UnCacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);\r
-#endif\r
-\r
- fontnumber = 0;\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// Handle moving gun around a menu\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-int HandleMenu(CP_iteminfo *item_i,CP_itemtype far *items,void (*routine)(int w))\r
-{\r
- char key;\r
- static int redrawitem=1,lastitem=-1;\r
- int i,x,y,basey,exit,which,shape,timer;\r
- ControlInfo ci;\r
-\r
-\r
- which=item_i->curpos;\r
- x=item_i->x&-8;\r
- basey=item_i->y-2;\r
- y=basey+which*13;\r
-\r
- VWB_DrawPic(x,y,C_CURSOR1PIC);\r
- SetTextColor(items+which,1);\r
- if (redrawitem)\r
- {\r
- PrintX=item_i->x+item_i->indent;\r
- PrintY=item_i->y+which*13;\r
- US_Print((items+which)->string);\r
- }\r
- //\r
- // CALL CUSTOM ROUTINE IF IT IS NEEDED\r
- //\r
- if (routine)\r
- routine(which);\r
- VW_UpdateScreen();\r
-\r
- shape=C_CURSOR1PIC;\r
- timer=8;\r
- exit=0;\r
- TimeCount=0;\r
- IN_ClearKeysDown();\r
-\r
-\r
- do\r
- {\r
- //\r
- // CHANGE GUN SHAPE\r
- //\r
- if (TimeCount>timer)\r
- {\r
- TimeCount=0;\r
- if (shape==C_CURSOR1PIC)\r
- {\r
- shape=C_CURSOR2PIC;\r
- timer=8;\r
- }\r
- else\r
- {\r
- shape=C_CURSOR1PIC;\r
- timer=70;\r
- }\r
- VWB_DrawPic(x,y,shape);\r
- if (routine)\r
- routine(which);\r
- VW_UpdateScreen();\r
- }\r
-\r
- CheckPause();\r
-\r
- //\r
- // SEE IF ANY KEYS ARE PRESSED FOR INITIAL CHAR FINDING\r
- //\r
- key=LastASCII;\r
- if (key)\r
- {\r
- int ok=0;\r
-\r
- //\r
- // CHECK FOR SCREEN CAPTURE\r
- //\r
- #ifndef SPEAR\r
- if (Keyboard[sc_Tab] && Keyboard[sc_P] && MS_CheckParm("goobers"))\r
- #else\r
- if (Keyboard[sc_Tab] && Keyboard[sc_P] && MS_CheckParm("debugmode"))\r
- #endif\r
- PicturePause();\r
-\r
-\r
- if (key>='a')\r
- key-='a'-'A';\r
-\r
- for (i=which+1;i<item_i->amount;i++)\r
- if ((items+i)->active && (items+i)->string[0]==key)\r
- {\r
- EraseGun(item_i,items,x,y,which);\r
- which=i;\r
- DrawGun(item_i,items,x,&y,which,basey,routine);\r
- ok=1;\r
- IN_ClearKeysDown();\r
- break;\r
- }\r
-\r
- //\r
- // DIDN'T FIND A MATCH FIRST TIME THRU. CHECK AGAIN.\r
- //\r
- if (!ok)\r
- {\r
- for (i=0;i<which;i++)\r
- if ((items+i)->active && (items+i)->string[0]==key)\r
- {\r
- EraseGun(item_i,items,x,y,which);\r
- which=i;\r
- DrawGun(item_i,items,x,&y,which,basey,routine);\r
- IN_ClearKeysDown();\r
- break;\r
- }\r
- }\r
- }\r
-\r
- //\r
- // GET INPUT\r
- //\r
- ReadAnyControl(&ci);\r
- switch(ci.dir)\r
- {\r
- ////////////////////////////////////////////////\r
- //\r
- // MOVE UP\r
- //\r
- case dir_North:\r
-\r
- EraseGun(item_i,items,x,y,which);\r
-\r
- //\r
- // ANIMATE HALF-STEP\r
- //\r
- if (which && (items+which-1)->active)\r
- {\r
- y-=6;\r
- DrawHalfStep(x,y);\r
- }\r
-\r
- //\r
- // MOVE TO NEXT AVAILABLE SPOT\r
- //\r
- do\r
- {\r
- if (!which)\r
- which=item_i->amount-1;\r
- else\r
- which--;\r
- } while(!(items+which)->active);\r
-\r
- DrawGun(item_i,items,x,&y,which,basey,routine);\r
- //\r
- // WAIT FOR BUTTON-UP OR DELAY NEXT MOVE\r
- //\r
- TicDelay(20);\r
- break;\r
-\r
- ////////////////////////////////////////////////\r
- //\r
- // MOVE DOWN\r
- //\r
- case dir_South:\r
-\r
- EraseGun(item_i,items,x,y,which);\r
- //\r
- // ANIMATE HALF-STEP\r
- //\r
- if (which!=item_i->amount-1 && (items+which+1)->active)\r
- {\r
- y+=6;\r
- DrawHalfStep(x,y);\r
- }\r
-\r
- do\r
- {\r
- if (which==item_i->amount-1)\r
- which=0;\r
- else\r
- which++;\r
- } while(!(items+which)->active);\r
-\r
- DrawGun(item_i,items,x,&y,which,basey,routine);\r
-\r
- //\r
- // WAIT FOR BUTTON-UP OR DELAY NEXT MOVE\r
- //\r
- TicDelay(20);\r
- break;\r
- }\r
-\r
- if (ci.button0 ||\r
- Keyboard[sc_Space] ||\r
- Keyboard[sc_Enter])\r
- exit=1;\r
-\r
- if (ci.button1 ||\r
- Keyboard[sc_Escape])\r
- exit=2;\r
-\r
- } while(!exit);\r
-\r
-\r
- IN_ClearKeysDown();\r
-\r
- //\r
- // ERASE EVERYTHING\r
- //\r
- if (lastitem!=which)\r
- {\r
- VWB_Bar(x-1,y,25,16,BKGDCOLOR);\r
- PrintX=item_i->x+item_i->indent;\r
- PrintY=item_i->y+which*13;\r
- US_Print((items+which)->string);\r
- redrawitem=1;\r
- }\r
- else\r
- redrawitem=0;\r
-\r
- if (routine)\r
- routine(which);\r
- VW_UpdateScreen();\r
-\r
- item_i->curpos=which;\r
-\r
- lastitem=which;\r
- switch(exit)\r
- {\r
- case 1:\r
- //\r
- // CALL THE ROUTINE\r
- //\r
- if ((items+which)->routine!=NULL)\r
- {\r
- ShootSnd();\r
- MenuFadeOut();\r
- (items+which)->routine(0);\r
- }\r
- return which;\r
-\r
- case 2:\r
- SD_PlaySound(ESCPRESSEDSND);\r
- return -1;\r
- }\r
-\r
- return 0; // JUST TO SHUT UP THE ERROR MESSAGES!\r
-}\r
-\r
-\r
-//\r
-// ERASE GUN & DE-HIGHLIGHT STRING\r
-//\r
-void EraseGun(CP_iteminfo *item_i,CP_itemtype far *items,int x,int y,int which)\r
-{\r
- VWB_Bar(x-1,y,25,16,BKGDCOLOR);\r
- SetTextColor(items+which,0);\r
-\r
- PrintX=item_i->x+item_i->indent;\r
- PrintY=item_i->y+which*13;\r
- US_Print((items+which)->string);\r
- VW_UpdateScreen();\r
-}\r
-\r
-\r
-//\r
-// DRAW HALF STEP OF GUN TO NEXT POSITION\r
-//\r
-void DrawHalfStep(int x,int y)\r
-{\r
- VWB_DrawPic(x,y,C_CURSOR1PIC);\r
- VW_UpdateScreen();\r
- SD_PlaySound(MOVEGUN1SND);\r
- TimeCount=0;\r
- while(TimeCount<8);\r
-}\r
-\r
-\r
-//\r
-// DRAW GUN AT NEW POSITION\r
-//\r
-void DrawGun(CP_iteminfo *item_i,CP_itemtype far *items,int x,int *y,int which,int basey,void (*routine)(int w))\r
-{\r
- VWB_Bar(x-1,*y,25,16,BKGDCOLOR);\r
- *y=basey+which*13;\r
- VWB_DrawPic(x,*y,C_CURSOR1PIC);\r
- SetTextColor(items+which,1);\r
-\r
- PrintX=item_i->x+item_i->indent;\r
- PrintY=item_i->y+which*13;\r
- US_Print((items+which)->string);\r
-\r
- //\r
- // CALL CUSTOM ROUTINE IF IT IS NEEDED\r
- //\r
- if (routine)\r
- routine(which);\r
- VW_UpdateScreen();\r
- SD_PlaySound(MOVEGUN2SND);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// DELAY FOR AN AMOUNT OF TICS OR UNTIL CONTROLS ARE INACTIVE\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void TicDelay(int count)\r
-{\r
- ControlInfo ci;\r
-\r
-\r
- TimeCount=0;\r
- do\r
- {\r
- ReadAnyControl(&ci);\r
- } while(TimeCount<count && ci.dir!=dir_None);\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// Draw a menu\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void DrawMenu(CP_iteminfo *item_i,CP_itemtype far *items)\r
-{\r
- int i,which=item_i->curpos;\r
-\r
-\r
- WindowX=PrintX=item_i->x+item_i->indent;\r
- WindowY=PrintY=item_i->y;\r
- WindowW=320;\r
- WindowH=200;\r
-\r
- for (i=0;i<item_i->amount;i++)\r
- {\r
- SetTextColor(items+i,which==i);\r
-\r
- PrintY=item_i->y+i*13;\r
- if ((items+i)->active)\r
- US_Print((items+i)->string);\r
- else\r
- {\r
- SETFONTCOLOR(DEACTIVE,BKGDCOLOR);\r
- US_Print((items+i)->string);\r
- SETFONTCOLOR(TEXTCOLOR,BKGDCOLOR);\r
- }\r
-\r
- US_Print("\n");\r
- }\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// SET TEXT COLOR (HIGHLIGHT OR NO)\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void SetTextColor(CP_itemtype far *items,int hlight)\r
-{\r
- if (hlight)\r
- {SETFONTCOLOR(color_hlite[items->active],BKGDCOLOR);}\r
- else\r
- {SETFONTCOLOR(color_norml[items->active],BKGDCOLOR);}\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// WAIT FOR CTRLKEY-UP OR BUTTON-UP\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void WaitKeyUp(void)\r
-{\r
- ControlInfo ci;\r
- while(ReadAnyControl(&ci), ci.button0|\r
- ci.button1|\r
- ci.button2|\r
- ci.button3|\r
- Keyboard[sc_Space]|\r
- Keyboard[sc_Enter]|\r
- Keyboard[sc_Escape]);\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// READ KEYBOARD, JOYSTICK AND MOUSE FOR INPUT\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void ReadAnyControl(ControlInfo *ci)\r
-{\r
- int mouseactive=0;\r
-\r
-\r
- IN_ReadControl(0,ci);\r
-\r
- if (mouseenabled)\r
- {\r
- int mousey,mousex;\r
-\r
-\r
- // READ MOUSE MOTION COUNTERS\r
- // RETURN DIRECTION\r
- // HOME MOUSE\r
- // CHECK MOUSE BUTTONS\r
-\r
- Mouse(3);\r
- mousex=_CX;\r
- mousey=_DX;\r
-\r
- if (mousey<CENTER-SENSITIVE)\r
- {\r
- ci->dir=dir_North;\r
- _CX=_DX=CENTER;\r
- Mouse(4);\r
- mouseactive=1;\r
- }\r
- else\r
- if (mousey>CENTER+SENSITIVE)\r
- {\r
- ci->dir=dir_South;\r
- _CX=_DX=CENTER;\r
- Mouse(4);\r
- mouseactive=1;\r
- }\r
-\r
- if (mousex<CENTER-SENSITIVE)\r
- {\r
- ci->dir=dir_West;\r
- _CX=_DX=CENTER;\r
- Mouse(4);\r
- mouseactive=1;\r
- }\r
- else\r
- if (mousex>CENTER+SENSITIVE)\r
- {\r
- ci->dir=dir_East;\r
- _CX=_DX=CENTER;\r
- Mouse(4);\r
- mouseactive=1;\r
- }\r
-\r
- if (IN_MouseButtons())\r
- {\r
- ci->button0=IN_MouseButtons()&1;\r
- ci->button1=IN_MouseButtons()&2;\r
- ci->button2=IN_MouseButtons()&4;\r
- ci->button3=false;\r
- mouseactive=1;\r
- }\r
- }\r
-\r
- if (joystickenabled && !mouseactive)\r
- {\r
- int jx,jy,jb;\r
-\r
-\r
- INL_GetJoyDelta(joystickport,&jx,&jy);\r
- if (jy<-SENSITIVE)\r
- ci->dir=dir_North;\r
- else\r
- if (jy>SENSITIVE)\r
- ci->dir=dir_South;\r
-\r
- if (jx<-SENSITIVE)\r
- ci->dir=dir_West;\r
- else\r
- if (jx>SENSITIVE)\r
- ci->dir=dir_East;\r
-\r
- jb=IN_JoyButtons();\r
- if (jb)\r
- {\r
- ci->button0=jb&1;\r
- ci->button1=jb&2;\r
- if (joypadenabled)\r
- {\r
- ci->button2=jb&4;\r
- ci->button3=jb&8;\r
- }\r
- else\r
- ci->button2=ci->button3=false;\r
- }\r
- }\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// DRAW DIALOG AND CONFIRM YES OR NO TO QUESTION\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-int Confirm(char far *string)\r
-{\r
- int xit=0,i,x,y,tick=0,time,whichsnd[2]={ESCPRESSEDSND,SHOOTSND};\r
-\r
-\r
- Message(string);\r
- IN_ClearKeysDown();\r
-\r
- //\r
- // BLINK CURSOR\r
- //\r
- x=PrintX;\r
- y=PrintY;\r
- TimeCount=0;\r
-\r
- do\r
- {\r
- if (TimeCount>=10)\r
- {\r
- switch(tick)\r
- {\r
- case 0:\r
- VWB_Bar(x,y,8,13,TEXTCOLOR);\r
- break;\r
- case 1:\r
- PrintX=x;\r
- PrintY=y;\r
- US_Print("_");\r
- }\r
- VW_UpdateScreen();\r
- tick^=1;\r
- TimeCount=0;\r
- }\r
-\r
- #ifndef SPEAR\r
- if (Keyboard[sc_Tab] && Keyboard[sc_P] && MS_CheckParm("goobers"))\r
- PicturePause();\r
- #endif\r
-\r
- #ifdef SPANISH\r
- } while(!Keyboard[sc_S] && !Keyboard[sc_N] && !Keyboard[sc_Escape]);\r
- #else\r
- } while(!Keyboard[sc_Y] && !Keyboard[sc_N] && !Keyboard[sc_Escape]);\r
- #endif\r
-\r
- #ifdef SPANISH\r
- if (Keyboard[sc_S])\r
- {\r
- xit=1;\r
- ShootSnd();\r
- }\r
-\r
- while(Keyboard[sc_S] || Keyboard[sc_N] || Keyboard[sc_Escape]);\r
-\r
- #else\r
-\r
- if (Keyboard[sc_Y])\r
- {\r
- xit=1;\r
- ShootSnd();\r
- }\r
-\r
- while(Keyboard[sc_Y] || Keyboard[sc_N] || Keyboard[sc_Escape]);\r
- #endif\r
-\r
- IN_ClearKeysDown();\r
- SD_PlaySound(whichsnd[xit]);\r
- return xit;\r
-}\r
-\r
-#ifdef JAPAN\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// DRAW MESSAGE & GET Y OR N\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-int GetYorN(int x,int y,int pic)\r
-{\r
- int xit=0,whichsnd[2]={ESCPRESSEDSND,SHOOTSND};\r
-\r
-\r
- CA_CacheGrChunk(pic);\r
- VWB_DrawPic(x * 8,y * 8,pic);\r
- UNCACHEGRCHUNK(pic);\r
- VW_UpdateScreen();\r
- IN_ClearKeysDown();\r
-\r
- do\r
- {\r
- #ifndef SPEAR\r
- if (Keyboard[sc_Tab] && Keyboard[sc_P] && MS_CheckParm("goobers"))\r
- PicturePause();\r
- #endif\r
-\r
- #ifdef SPANISH\r
- } while(!Keyboard[sc_S] && !Keyboard[sc_N] && !Keyboard[sc_Escape]);\r
- #else\r
- } while(!Keyboard[sc_Y] && !Keyboard[sc_N] && !Keyboard[sc_Escape]);\r
- #endif\r
-\r
- #ifdef SPANISH\r
- if (Keyboard[sc_S])\r
- {\r
- xit=1;\r
- ShootSnd();\r
- }\r
-\r
- while(Keyboard[sc_S] || Keyboard[sc_N] || Keyboard[sc_Escape]);\r
-\r
- #else\r
-\r
- if (Keyboard[sc_Y])\r
- {\r
- xit=1;\r
- ShootSnd();\r
- }\r
-\r
- while(Keyboard[sc_Y] || Keyboard[sc_N] || Keyboard[sc_Escape]);\r
- #endif\r
-\r
- IN_ClearKeysDown();\r
- SD_PlaySound(whichsnd[xit]);\r
- return xit;\r
-}\r
-#endif\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// PRINT A MESSAGE IN A WINDOW\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-void Message(char far *string)\r
-{\r
- int h=0,w=0,mw=0,i,x,y,time;\r
- fontstruct _seg *font;\r
-\r
-\r
- CA_CacheGrChunk (STARTFONT+1);\r
- fontnumber=1;\r
- font=grsegs[STARTFONT+fontnumber];\r
- h=font->height;\r
- for (i=0;i<_fstrlen(string);i++)\r
- if (string[i]=='\n')\r
- {\r
- if (w>mw)\r
- mw=w;\r
- w=0;\r
- h+=font->height;\r
- }\r
- else\r
- w+=font->width[string[i]];\r
-\r
- if (w+10>mw)\r
- mw=w+10;\r
-\r
- PrintY=(WindowH/2)-h/2;\r
- PrintX=WindowX=160-mw/2;\r
-\r
- DrawWindow(WindowX-5,PrintY-5,mw+10,h+10,TEXTCOLOR);\r
- DrawOutline(WindowX-5,PrintY-5,mw+10,h+10,0,HIGHLIGHT);\r
- SETFONTCOLOR(0,TEXTCOLOR);\r
- US_Print(string);\r
- VW_UpdateScreen();\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////\r
-//\r
-// THIS MAY BE FIXED A LITTLE LATER...\r
-//\r
-////////////////////////////////////////////////////////////////////\r
-static int lastmusic;\r
-\r
-void StartCPMusic(int song)\r
-{\r
- musicnames chunk;\r
-\r
- if (audiosegs[STARTMUSIC + lastmusic]) // JDC\r
- MM_FreePtr ((memptr *)&audiosegs[STARTMUSIC + lastmusic]);\r
- lastmusic = song;\r
-\r
- SD_MusicOff();\r
- chunk = song;\r
-\r
- MM_BombOnError (false);\r
- CA_CacheAudioChunk(STARTMUSIC + chunk);\r
- MM_BombOnError (true);\r
- if (mmerror)\r
- mmerror = false;\r
- else\r
- {\r
- MM_SetLock(&((memptr)audiosegs[STARTMUSIC + chunk]),true);\r
- SD_StartMusic((MusicGroup far *)audiosegs[STARTMUSIC + chunk]);\r
- }\r
-}\r
-\r
-void FreeMusic (void)\r
-{\r
- if (audiosegs[STARTMUSIC + lastmusic]) // JDC\r
- MM_FreePtr ((memptr *)&audiosegs[STARTMUSIC + lastmusic]);\r
-}\r
-\r
-\r
-///////////////////////////////////////////////////////////////////////////\r
-//\r
-// IN_GetScanName() - Returns a string containing the name of the\r
-// specified scan code\r
-//\r
-///////////////////////////////////////////////////////////////////////////\r
-byte *\r
-IN_GetScanName(ScanCode scan)\r
-{\r
- byte **p;\r
- ScanCode far *s;\r
-\r
- for (s = ExtScanCodes,p = ExtScanNames;*s;p++,s++)\r
- if (*s == scan)\r
- return(*p);\r
-\r
- return(ScanNames[scan]);\r
-}\r
-\r
-\r
-///////////////////////////////////////////////////////////////////////////\r
-//\r
-// CHECK FOR PAUSE KEY (FOR MUSIC ONLY)\r
-//\r
-///////////////////////////////////////////////////////////////////////////\r
-void CheckPause(void)\r
-{\r
- if (Paused)\r
- {\r
- switch(SoundStatus)\r
- {\r
- case 0: SD_MusicOn(); break;\r
- case 1: SD_MusicOff(); break;\r
- }\r
-\r
- SoundStatus^=1;\r
- VW_WaitVBL(3);\r
- IN_ClearKeysDown();\r
- Paused=false;\r
- }\r
-}\r
-\r
-\r
-///////////////////////////////////////////////////////////////////////////\r
-//\r
-// DRAW GUN CURSOR AT CORRECT POSITION IN MENU\r
-//\r
-///////////////////////////////////////////////////////////////////////////\r
-void DrawMenuGun(CP_iteminfo *iteminfo)\r
-{\r
- int x,y;\r
-\r
-\r
- x=iteminfo->x;\r
- y=iteminfo->y+iteminfo->curpos*13-2;\r
- VWB_DrawPic(x,y,C_CURSOR1PIC);\r
-}\r
-\r
-\r
-///////////////////////////////////////////////////////////////////////////\r
-//\r
-// DRAW SCREEN TITLE STRIPES\r
-//\r
-///////////////////////////////////////////////////////////////////////////\r
-void DrawStripes(int y)\r
-{\r
-#ifndef SPEAR\r
- VWB_Bar(0,y,320,24,0);\r
- VWB_Hlin(0,319,y+22,STRIPE);\r
-#else\r
- VWB_Bar(0,y,320,22,0);\r
- VWB_Hlin(0,319,y+23,0);\r
-#endif\r
-}\r
-\r
-void ShootSnd(void)\r
-{\r
- SD_PlaySound(SHOOTSND);\r
-}\r
-\r
-\r
-///////////////////////////////////////////////////////////////////////////\r
-//\r
-// CHECK FOR EPISODES\r
-//\r
-///////////////////////////////////////////////////////////////////////////\r
-void CheckForEpisodes(void)\r
-{\r
- struct ffblk f;\r
-\r
-//\r
-// JAPANESE VERSION\r
-//\r
-#ifdef JAPAN\r
-#ifdef JAPDEMO\r
- if (!findfirst("*.WJ1",&f,FA_ARCH))\r
- {\r
- strcpy(extension,"WJ1");\r
-#else\r
- if (!findfirst("*.WJ6",&f,FA_ARCH))\r
- {\r
- strcpy(extension,"WJ6");\r
-#endif\r
- strcat(configname,extension);\r
- strcat(SaveName,extension);\r
- strcat(PageFileName,extension);\r
- strcat(audioname,extension);\r
- strcat(demoname,extension);\r
- EpisodeSelect[1] =\r
- EpisodeSelect[2] =\r
- EpisodeSelect[3] =\r
- EpisodeSelect[4] =\r
- EpisodeSelect[5] = 1;\r
- }\r
- else\r
- Quit("NO JAPANESE WOLFENSTEIN 3-D DATA FILES to be found!");\r
-#else\r
-\r
-//\r
-// ENGLISH\r
-//\r
-#ifndef UPLOAD\r
-#ifndef SPEAR\r
- if (!findfirst("*.WL6",&f,FA_ARCH))\r
- {\r
- strcpy(extension,"WL6");\r
- NewEmenu[2].active =\r
- NewEmenu[4].active =\r
- NewEmenu[6].active =\r
- NewEmenu[8].active =\r
- NewEmenu[10].active =\r
- EpisodeSelect[1] =\r
- EpisodeSelect[2] =\r
- EpisodeSelect[3] =\r
- EpisodeSelect[4] =\r
- EpisodeSelect[5] = 1;\r
- }\r
- else\r
- if (!findfirst("*.WL3",&f,FA_ARCH))\r
- {\r
- strcpy(extension,"WL3");\r
- NewEmenu[2].active =\r
- NewEmenu[4].active =\r
- EpisodeSelect[1] =\r
- EpisodeSelect[2] = 1;\r
- }\r
- else\r
-#endif\r
-#endif\r
-\r
-\r
-\r
-#ifdef SPEAR\r
-#ifndef SPEARDEMO\r
- if (!findfirst("*.SOD",&f,FA_ARCH))\r
- {\r
- strcpy(extension,"SOD");\r
- }\r
- else\r
- Quit("NO SPEAR OF DESTINY DATA FILES TO BE FOUND!");\r
-#else\r
- if (!findfirst("*.SDM",&f,FA_ARCH))\r
- {\r
- strcpy(extension,"SDM");\r
- }\r
- else\r
- Quit("NO SPEAR OF DESTINY DEMO DATA FILES TO BE FOUND!");\r
-#endif\r
-\r
-#else\r
- if (!findfirst("*.WL1",&f,FA_ARCH))\r
- {\r
- strcpy(extension,"WL1");\r
- }\r
- else\r
- Quit("NO WOLFENSTEIN 3-D DATA FILES to be found!");\r
-#endif\r
-\r
- strcat(configname,extension);\r
- strcat(SaveName,extension);\r
- strcat(PageFileName,extension);\r
- strcat(audioname,extension);\r
- strcat(demoname,extension);\r
-#ifndef SPEAR\r
-#ifndef GOODTIMES\r
- strcat(helpfilename,extension);\r
-#endif\r
- strcat(endfilename,extension);\r
-#endif\r
-#endif\r
-}\r