--- /dev/null
+// WL_INTER.C\r
+\r
+#include "WL_DEF.H"\r
+#pragma hdrstop\r
+\r
+\r
+//==========================================================================\r
+\r
+/*\r
+==================\r
+=\r
+= CLearSplitVWB\r
+=\r
+==================\r
+*/\r
+\r
+void ClearSplitVWB (void)\r
+{\r
+ memset (update,0,sizeof(update));\r
+ WindowX = 0;\r
+ WindowY = 0;\r
+ WindowW = 320;\r
+ WindowH = 160;\r
+}\r
+\r
+\r
+//==========================================================================\r
+\r
+#ifdef SPEAR\r
+#ifndef SPEARDEMO\r
+////////////////////////////////////////////////////////\r
+//\r
+// End of Spear of Destiny\r
+//\r
+////////////////////////////////////////////////////////\r
+\r
+void EndScreen (int palette, int screen)\r
+{\r
+ CA_CacheScreen (screen);\r
+ VW_UpdateScreen ();\r
+ CA_CacheGrChunk (palette);\r
+ VL_FadeIn(0,255,grsegs[palette],30);\r
+ UNCACHEGRCHUNK (palette);\r
+ IN_ClearKeysDown ();\r
+ IN_Ack ();\r
+ VW_FadeOut ();\r
+}\r
+\r
+\r
+void EndSpear(void)\r
+{\r
+ EndScreen (END1PALETTE, ENDSCREEN11PIC);\r
+\r
+ CA_CacheScreen (ENDSCREEN3PIC);\r
+ VW_UpdateScreen ();\r
+ CA_CacheGrChunk (END3PALETTE);\r
+ VL_FadeIn(0,255,grsegs[END3PALETTE],30);\r
+ UNCACHEGRCHUNK (END3PALETTE);\r
+ fontnumber = 0;\r
+ fontcolor = 0xd0;\r
+ WindowX = 0;\r
+ WindowW = 320;\r
+ PrintX = 0;\r
+ PrintY = 180;\r
+ US_CPrint (STR_ENDGAME1"\n");\r
+ US_CPrint (STR_ENDGAME2);\r
+ VW_UpdateScreen ();\r
+ IN_StartAck ();\r
+ TimeCount = 0;\r
+ while (!IN_CheckAck () && TimeCount < 700);\r
+\r
+ PrintX = 0;\r
+ PrintY = 180;\r
+ VWB_Bar(0,180,320,20,0);\r
+ US_CPrint (STR_ENDGAME3"\n");\r
+ US_CPrint (STR_ENDGAME4);\r
+ VW_UpdateScreen ();\r
+ IN_StartAck ();\r
+ TimeCount = 0;\r
+ while (!IN_CheckAck () && TimeCount < 700);\r
+\r
+ VW_FadeOut ();\r
+\r
+ EndScreen (END4PALETTE, ENDSCREEN4PIC);\r
+ EndScreen (END5PALETTE, ENDSCREEN5PIC);\r
+ EndScreen (END6PALETTE, ENDSCREEN6PIC);\r
+ EndScreen (END7PALETTE, ENDSCREEN7PIC);\r
+ EndScreen (END8PALETTE, ENDSCREEN8PIC);\r
+ EndScreen (END9PALETTE, ENDSCREEN9PIC);\r
+\r
+ EndScreen (END2PALETTE, ENDSCREEN12PIC);\r
+\r
+ MainMenu[savegame].active = 0;\r
+}\r
+#endif\r
+#endif\r
+\r
+//==========================================================================\r
+\r
+/*\r
+==================\r
+=\r
+= Victory\r
+=\r
+==================\r
+*/\r
+\r
+void Victory (void)\r
+{\r
+#ifndef SPEARDEMO\r
+ long sec;\r
+ int i,min,kr,sr,tr,x;\r
+ char tempstr[8];\r
+\r
+#define RATIOX 6\r
+#define RATIOY 14\r
+#define TIMEX 14\r
+#define TIMEY 8\r
+\r
+\r
+#ifdef SPEAR\r
+ StartCPMusic (XTHEEND_MUS);\r
+\r
+ CA_CacheGrChunk(BJCOLLAPSE1PIC);\r
+ CA_CacheGrChunk(BJCOLLAPSE2PIC);\r
+ CA_CacheGrChunk(BJCOLLAPSE3PIC);\r
+ CA_CacheGrChunk(BJCOLLAPSE4PIC);\r
+\r
+ VWB_Bar(0,0,320,200,VIEWCOLOR);\r
+ VWB_DrawPic (124,44,BJCOLLAPSE1PIC);\r
+ VW_UpdateScreen ();\r
+ VW_FadeIn ();\r
+ VW_WaitVBL(2*70);\r
+ VWB_DrawPic (124,44,BJCOLLAPSE2PIC);\r
+ VW_UpdateScreen ();\r
+ VW_WaitVBL(105);\r
+ VWB_DrawPic (124,44,BJCOLLAPSE3PIC);\r
+ VW_UpdateScreen ();\r
+ VW_WaitVBL(105);\r
+ VWB_DrawPic (124,44,BJCOLLAPSE4PIC);\r
+ VW_UpdateScreen ();\r
+ VW_WaitVBL(3*70);\r
+\r
+ UNCACHEGRCHUNK(BJCOLLAPSE1PIC);\r
+ UNCACHEGRCHUNK(BJCOLLAPSE2PIC);\r
+ UNCACHEGRCHUNK(BJCOLLAPSE3PIC);\r
+ UNCACHEGRCHUNK(BJCOLLAPSE4PIC);\r
+ VL_FadeOut (0,255,0,17,17,5);\r
+#endif\r
+\r
+ StartCPMusic (URAHERO_MUS);\r
+ ClearSplitVWB ();\r
+ CacheLump(LEVELEND_LUMP_START,LEVELEND_LUMP_END);\r
+ CA_CacheGrChunk(STARTFONT);\r
+\r
+#ifndef SPEAR\r
+ CA_CacheGrChunk(C_TIMECODEPIC);\r
+#endif\r
+\r
+\r
+ VWB_Bar (0,0,320,200-STATUSLINES,127);\r
+#ifdef JAPAN\r
+#ifndef JAPDEMO\r
+ CA_CacheGrChunk(C_ENDRATIOSPIC);\r
+ VWB_DrawPic(0,0,C_ENDRATIOSPIC);\r
+ UNCACHEGRCHUNK(C_ENDRATIOSPIC);\r
+#endif\r
+#else\r
+ Write(18,2,STR_YOUWIN);\r
+\r
+ Write(TIMEX,TIMEY-2,STR_TOTALTIME);\r
+\r
+ Write(12,RATIOY-2,"averages");\r
+\r
+ #ifdef SPANISH\r
+ Write(RATIOX+2, RATIOY, STR_RATKILL);\r
+ Write(RATIOX+2, RATIOY+2, STR_RATSECRET);\r
+ Write(RATIOX+2, RATIOY+4,STR_RATTREASURE);\r
+ #else\r
+ Write(RATIOX+8,RATIOY, STR_RATKILL);\r
+ Write(RATIOX+4,RATIOY+2, STR_RATSECRET);\r
+ Write(RATIOX, RATIOY+4,STR_RATTREASURE);\r
+ #endif\r
+\r
+#endif\r
+\r
+#ifndef JAPDEMO\r
+ VWB_DrawPic (8,4,L_BJWINSPIC);\r
+#endif\r
+\r
+\r
+#ifndef SPEAR\r
+ for (kr = sr = tr = sec = i = 0;i < 8;i++)\r
+#else\r
+ for (kr = sr = tr = sec = i = 0;i < 20;i++)\r
+#endif\r
+ {\r
+ sec += LevelRatios[i].time;\r
+ kr += LevelRatios[i].kill;\r
+ sr += LevelRatios[i].secret;\r
+ tr += LevelRatios[i].treasure;\r
+ }\r
+\r
+#ifndef SPEAR\r
+ kr /= 8;\r
+ sr /= 8;\r
+ tr /= 8;\r
+#else\r
+ kr /= 14;\r
+ sr /= 14;\r
+ tr /= 14;\r
+#endif\r
+\r
+ min = sec/60;\r
+ sec %= 60;\r
+\r
+ if (min > 99)\r
+ min = sec = 99;\r
+\r
+ i = TIMEX*8+1;\r
+ VWB_DrawPic(i,TIMEY*8,L_NUM0PIC+(min/10));\r
+ i += 2*8;\r
+ VWB_DrawPic(i,TIMEY*8,L_NUM0PIC+(min%10));\r
+ i += 2*8;\r
+ Write(i/8,TIMEY,":");\r
+ i += 1*8;\r
+ VWB_DrawPic(i,TIMEY*8,L_NUM0PIC+(sec/10));\r
+ i += 2*8;\r
+ VWB_DrawPic(i,TIMEY*8,L_NUM0PIC+(sec%10));\r
+ VW_UpdateScreen ();\r
+\r
+ itoa(kr,tempstr,10);\r
+ x=RATIOX+24-strlen(tempstr)*2;\r
+ Write(x,RATIOY,tempstr);\r
+\r
+ itoa(sr,tempstr,10);\r
+ x=RATIOX+24-strlen(tempstr)*2;\r
+ Write(x,RATIOY+2,tempstr);\r
+\r
+ itoa(tr,tempstr,10);\r
+ x=RATIOX+24-strlen(tempstr)*2;\r
+ Write(x,RATIOY+4,tempstr);\r
+\r
+\r
+#ifndef SPANISH\r
+#ifndef UPLOAD\r
+#ifndef SPEAR\r
+ //\r
+ // TOTAL TIME VERIFICATION CODE\r
+ //\r
+ if (gamestate.difficulty>=gd_medium)\r
+ {\r
+ VWB_DrawPic (30*8,TIMEY*8,C_TIMECODEPIC);\r
+ fontnumber = 0;\r
+ fontcolor = READHCOLOR;\r
+ PrintX = 30*8-3;\r
+ PrintY = TIMEY*8+8;\r
+ PrintX+=4;\r
+ tempstr[0] = (((min/10)^(min%10))^0xa)+'A';\r
+ tempstr[1] = (((sec/10)^(sec%10))^0xa)+'A';\r
+ tempstr[2] = (tempstr[0]^tempstr[1])+'A';\r
+ tempstr[3] = 0;\r
+ US_Print(tempstr);\r
+ }\r
+#endif\r
+#endif\r
+#endif\r
+\r
+\r
+ fontnumber = 1;\r
+\r
+ VW_UpdateScreen ();\r
+ VW_FadeIn ();\r
+\r
+ IN_Ack();\r
+\r
+ #ifndef SPEAR\r
+ if (Keyboard[sc_P] && MS_CheckParm("goobers"))\r
+ PicturePause();\r
+ #endif\r
+\r
+ VW_FadeOut ();\r
+\r
+#ifndef SPEAR\r
+ UNCACHEGRCHUNK(C_TIMECODEPIC);\r
+#endif\r
+ UnCacheLump(LEVELEND_LUMP_START,LEVELEND_LUMP_END);\r
+\r
+#ifndef SPEAR\r
+ EndText();\r
+#else\r
+ EndSpear();\r
+#endif\r
+\r
+#endif // SPEARDEMO\r
+}\r
+\r
+\r
+//==========================================================================\r
+\r
+#ifndef JAPAN\r
+/*\r
+==================\r
+=\r
+= PG13\r
+=\r
+==================\r
+*/\r
+\r
+void PG13 (void)\r
+{\r
+ VW_FadeOut();\r
+ VWB_Bar(0,0,320,200,0x82); // background\r
+\r
+ CA_CacheGrChunk (PG13PIC);\r
+ VWB_DrawPic (216,110,PG13PIC);\r
+ VW_UpdateScreen ();\r
+\r
+ UNCACHEGRCHUNK (PG13PIC);\r
+\r
+ VW_FadeIn();\r
+ IN_UserInput(TickBase*7);\r
+\r
+ VW_FadeOut ();\r
+}\r
+#endif\r
+\r
+\r
+//==========================================================================\r
+\r
+void Write(int x,int y,char *string)\r
+{\r
+ int alpha[]={L_NUM0PIC,L_NUM1PIC,L_NUM2PIC,L_NUM3PIC,L_NUM4PIC,L_NUM5PIC,\r
+ L_NUM6PIC,L_NUM7PIC,L_NUM8PIC,L_NUM9PIC,L_COLONPIC,0,0,0,0,0,0,L_APIC,L_BPIC,\r
+ L_CPIC,L_DPIC,L_EPIC,L_FPIC,L_GPIC,L_HPIC,L_IPIC,L_JPIC,L_KPIC,\r
+ L_LPIC,L_MPIC,L_NPIC,L_OPIC,L_PPIC,L_QPIC,L_RPIC,L_SPIC,L_TPIC,\r
+ L_UPIC,L_VPIC,L_WPIC,L_XPIC,L_YPIC,L_ZPIC};\r
+\r
+ int i,ox,nx,ny;\r
+ char ch;\r
+\r
+\r
+ ox=nx=x*8;\r
+ ny=y*8;\r
+ for (i=0;i<strlen(string);i++)\r
+ if (string[i]=='\n')\r
+ {\r
+ nx=ox;\r
+ ny+=16;\r
+ }\r
+ else\r
+ {\r
+ ch=string[i];\r
+ if (ch>='a')\r
+ ch-=('a'-'A');\r
+ ch-='0';\r
+\r
+ switch(string[i])\r
+ {\r
+ case '!':\r
+ VWB_DrawPic(nx,ny,L_EXPOINTPIC);\r
+ nx+=8;\r
+ continue;\r
+\r
+ case '\'':\r
+ VWB_DrawPic(nx,ny,L_APOSTROPHEPIC);\r
+ nx+=8;\r
+ continue;\r
+\r
+ case ' ': break;\r
+ case 0x3a: // ':'\r
+\r
+ VWB_DrawPic(nx,ny,L_COLONPIC);\r
+ nx+=8;\r
+ continue;\r
+\r
+ case '%':\r
+ VWB_DrawPic(nx,ny,L_PERCENTPIC);\r
+ break;\r
+\r
+ default:\r
+ VWB_DrawPic(nx,ny,alpha[ch]);\r
+ }\r
+ nx+=16;\r
+ }\r
+}\r
+\r
+\r
+//\r
+// Breathe Mr. BJ!!!\r
+//\r
+void BJ_Breathe(void)\r
+{\r
+ static int which=0,max=10;\r
+ int pics[2]={L_GUYPIC,L_GUY2PIC};\r
+\r
+\r
+ if (TimeCount>max)\r
+ {\r
+ which^=1;\r
+ VWB_DrawPic(0,16,pics[which]);\r
+ VW_UpdateScreen();\r
+ TimeCount=0;\r
+ max=35;\r
+ }\r
+}\r
+\r
+\r
+\r
+/*\r
+==================\r
+=\r
+= LevelCompleted\r
+=\r
+= Entered with the screen faded out\r
+= Still in split screen mode with the status bar\r
+=\r
+= Exit with the screen faded out\r
+=\r
+==================\r
+*/\r
+\r
+#ifndef SPEAR\r
+LRstruct LevelRatios[8];\r
+#else\r
+LRstruct LevelRatios[20];\r
+#endif\r
+\r
+void LevelCompleted (void)\r
+{\r
+ #define VBLWAIT 30\r
+ #define PAR_AMOUNT 500\r
+ #define PERCENT100AMT 10000\r
+ typedef struct {\r
+ float time;\r
+ char timestr[6];\r
+ } times;\r
+\r
+ int x,i,min,sec,ratio,kr,sr,tr;\r
+ unsigned temp;\r
+ char tempstr[10];\r
+ long bonus,timeleft=0;\r
+ times parTimes[]=\r
+ {\r
+#ifndef SPEAR\r
+ //\r
+ // Episode One Par Times\r
+ //\r
+ {1.5, "01:30"},\r
+ {2, "02:00"},\r
+ {2, "02:00"},\r
+ {3.5, "03:30"},\r
+ {3, "03:00"},\r
+ {3, "03:00"},\r
+ {2.5, "02:30"},\r
+ {2.5, "02:30"},\r
+ {0, "??:??"}, // Boss level\r
+ {0, "??:??"}, // Secret level\r
+\r
+ //\r
+ // Episode Two Par Times\r
+ //\r
+ {1.5, "01:30"},\r
+ {3.5, "03:30"},\r
+ {3, "03:00"},\r
+ {2, "02:00"},\r
+ {4, "04:00"},\r
+ {6, "06:00"},\r
+ {1, "01:00"},\r
+ {3, "03:00"},\r
+ {0, "??:??"},\r
+ {0, "??:??"},\r
+\r
+ //\r
+ // Episode Three Par Times\r
+ //\r
+ {1.5, "01:30"},\r
+ {1.5, "01:30"},\r
+ {2.5, "02:30"},\r
+ {2.5, "02:30"},\r
+ {3.5, "03:30"},\r
+ {2.5, "02:30"},\r
+ {2, "02:00"},\r
+ {6, "06:00"},\r
+ {0, "??:??"},\r
+ {0, "??:??"},\r
+\r
+ //\r
+ // Episode Four Par Times\r
+ //\r
+ {2, "02:00"},\r
+ {2, "02:00"},\r
+ {1.5, "01:30"},\r
+ {1, "01:00"},\r
+ {4.5, "04:30"},\r
+ {3.5, "03:30"},\r
+ {2, "02:00"},\r
+ {4.5, "04:30"},\r
+ {0, "??:??"},\r
+ {0, "??:??"},\r
+\r
+ //\r
+ // Episode Five Par Times\r
+ //\r
+ {2.5, "02:30"},\r
+ {1.5, "01:30"},\r
+ {2.5, "02:30"},\r
+ {2.5, "02:30"},\r
+ {4, "04:00"},\r
+ {3, "03:00"},\r
+ {4.5, "04:30"},\r
+ {3.5, "03:30"},\r
+ {0, "??:??"},\r
+ {0, "??:??"},\r
+\r
+ //\r
+ // Episode Six Par Times\r
+ //\r
+ {6.5, "06:30"},\r
+ {4, "04:00"},\r
+ {4.5, "04:30"},\r
+ {6, "06:00"},\r
+ {5, "05:00"},\r
+ {5.5, "05:30"},\r
+ {5.5, "05:30"},\r
+ {8.5, "08:30"},\r
+ {0, "??:??"},\r
+ {0, "??:??"}\r
+#else\r
+ //\r
+ // SPEAR OF DESTINY TIMES\r
+ //\r
+ {1.5, "01:30"},\r
+ {3.5, "03:30"},\r
+ {2.75, "02:45"},\r
+ {3.5, "03:30"},\r
+ {0, "??:??"}, // Boss 1\r
+ {4.5, "04:30"},\r
+ {3.25, "03:15"},\r
+ {2.75, "02:45"},\r
+ {4.75, "04:45"},\r
+ {0, "??:??"}, // Boss 2\r
+ {6.5, "06:30"},\r
+ {4.5, "04:30"},\r
+ {2.75, "02:45"},\r
+ {4.5, "04:30"},\r
+ {6, "06:00"},\r
+ {0, "??:??"}, // Boss 3\r
+ {6, "06:00"},\r
+ {0, "??:??"}, // Boss 4\r
+ {0, "??:??"}, // Secret level 1\r
+ {0, "??:??"}, // Secret level 2\r
+#endif\r
+ };\r
+\r
+\r
+\r
+ CacheLump(LEVELEND_LUMP_START,LEVELEND_LUMP_END);\r
+ ClearSplitVWB (); // set up for double buffering in split screen\r
+ VWB_Bar (0,0,320,200-STATUSLINES,127);\r
+ StartCPMusic(ENDLEVEL_MUS);\r
+\r
+//\r
+// do the intermission\r
+//\r
+ IN_ClearKeysDown();\r
+ IN_StartAck();\r
+\r
+#ifdef JAPAN\r
+ CA_CacheGrChunk(C_INTERMISSIONPIC);\r
+ VWB_DrawPic(0,0,C_INTERMISSIONPIC);\r
+ UNCACHEGRCHUNK(C_INTERMISSIONPIC);\r
+#endif\r
+ VWB_DrawPic(0,16,L_GUYPIC);\r
+\r
+#ifndef SPEAR\r
+ if (mapon<8)\r
+#else\r
+ if (mapon != 4 &&\r
+ mapon != 9 &&\r
+ mapon != 15 &&\r
+ mapon < 17)\r
+#endif\r
+ {\r
+#ifndef JAPAN\r
+ #ifdef SPANISH\r
+ Write(14,2,"piso\ncompletado");\r
+ #else\r
+ Write(14,2,"floor\ncompleted");\r
+ #endif\r
+\r
+ Write(14,7,STR_BONUS" 0");\r
+ Write(16,10,STR_TIME);\r
+ Write(16,12,STR_PAR);\r
+\r
+ #ifdef SPANISH\r
+ Write(11,14, STR_RAT2KILL);\r
+ Write(11,16, STR_RAT2SECRET);\r
+ Write(11,18,STR_RAT2TREASURE);\r
+ #else\r
+ Write(9,14, STR_RAT2KILL);\r
+ Write(5,16, STR_RAT2SECRET);\r
+ Write(1,18,STR_RAT2TREASURE);\r
+ #endif\r
+\r
+ Write(26,2,itoa(gamestate.mapon+1,tempstr,10));\r
+#endif\r
+\r
+ #ifdef SPANISH\r
+ Write(30,12,parTimes[gamestate.episode*10+mapon].timestr);\r
+ #else\r
+ Write(26,12,parTimes[gamestate.episode*10+mapon].timestr);\r
+ #endif\r
+\r
+ //\r
+ // PRINT TIME\r
+ //\r
+ sec=gamestate.TimeCount/70;\r
+\r
+ if (sec > 99*60) // 99 minutes max\r
+ sec = 99*60;\r
+\r
+ if (gamestate.TimeCount<parTimes[gamestate.episode*10+mapon].time*4200)\r
+ timeleft=(parTimes[gamestate.episode*10+mapon].time*4200)/70-sec;\r
+\r
+ min=sec/60;\r
+ sec%=60;\r
+\r
+ #ifdef SPANISH\r
+ i=30*8;\r
+ #else\r
+ i=26*8;\r
+ #endif\r
+ VWB_DrawPic(i,10*8,L_NUM0PIC+(min/10));\r
+ i+=2*8;\r
+ VWB_DrawPic(i,10*8,L_NUM0PIC+(min%10));\r
+ i+=2*8;\r
+ Write(i/8,10,":");\r
+ i+=1*8;\r
+ VWB_DrawPic(i,10*8,L_NUM0PIC+(sec/10));\r
+ i+=2*8;\r
+ VWB_DrawPic(i,10*8,L_NUM0PIC+(sec%10));\r
+\r
+ VW_UpdateScreen ();\r
+ VW_FadeIn ();\r
+\r
+\r
+ //\r
+ // FIGURE RATIOS OUT BEFOREHAND\r
+ //\r
+ kr = sr = tr = 0;\r
+ if (gamestate.killtotal)\r
+ kr=(gamestate.killcount*100)/gamestate.killtotal;\r
+ if (gamestate.secrettotal)\r
+ sr=(gamestate.secretcount*100)/gamestate.secrettotal;\r
+ if (gamestate.treasuretotal)\r
+ tr=(gamestate.treasurecount*100)/gamestate.treasuretotal;\r
+\r
+\r
+ //\r
+ // PRINT TIME BONUS\r
+ //\r
+ bonus=timeleft*PAR_AMOUNT;\r
+ if (bonus)\r
+ {\r
+ for (i=0;i<=timeleft;i++)\r
+ {\r
+ ltoa((long)i*PAR_AMOUNT,tempstr,10);\r
+ x=36-strlen(tempstr)*2;\r
+ Write(x,7,tempstr);\r
+ if (!(i%(PAR_AMOUNT/10)))\r
+ SD_PlaySound(ENDBONUS1SND);\r
+ VW_UpdateScreen();\r
+ while(SD_SoundPlaying())\r
+ BJ_Breathe();\r
+ if (IN_CheckAck())\r
+ goto done;\r
+ }\r
+\r
+ VW_UpdateScreen();\r
+ SD_PlaySound(ENDBONUS2SND);\r
+ while(SD_SoundPlaying())\r
+ BJ_Breathe();\r
+ }\r
+\r
+\r
+ #ifdef SPANISH\r
+ #define RATIOXX 33\r
+ #else\r
+ #define RATIOXX 37\r
+ #endif\r
+ //\r
+ // KILL RATIO\r
+ //\r
+ ratio=kr;\r
+ for (i=0;i<=ratio;i++)\r
+ {\r
+ itoa(i,tempstr,10);\r
+ x=RATIOXX-strlen(tempstr)*2;\r
+ Write(x,14,tempstr);\r
+ if (!(i%10))\r
+ SD_PlaySound(ENDBONUS1SND);\r
+ VW_UpdateScreen ();\r
+ while(SD_SoundPlaying())\r
+ BJ_Breathe();\r
+\r
+ if (IN_CheckAck())\r
+ goto done;\r
+ }\r
+ if (ratio==100)\r
+ {\r
+ VW_WaitVBL(VBLWAIT);\r
+ SD_StopSound();\r
+ bonus+=PERCENT100AMT;\r
+ ltoa(bonus,tempstr,10);\r
+ x=(RATIOXX-1)-strlen(tempstr)*2;\r
+ Write(x,7,tempstr);\r
+ VW_UpdateScreen();\r
+ SD_PlaySound(PERCENT100SND);\r
+ }\r
+ else\r
+ if (!ratio)\r
+ {\r
+ VW_WaitVBL(VBLWAIT);\r
+ SD_StopSound();\r
+ SD_PlaySound(NOBONUSSND);\r
+ }\r
+ else\r
+ SD_PlaySound(ENDBONUS2SND);\r
+\r
+ VW_UpdateScreen();\r
+ while(SD_SoundPlaying())\r
+ BJ_Breathe();\r
+\r
+\r
+ //\r
+ // SECRET RATIO\r
+ //\r
+ ratio=sr;\r
+ for (i=0;i<=ratio;i++)\r
+ {\r
+ itoa(i,tempstr,10);\r
+ x=RATIOXX-strlen(tempstr)*2;\r
+ Write(x,16,tempstr);\r
+ if (!(i%10))\r
+ SD_PlaySound(ENDBONUS1SND);\r
+ VW_UpdateScreen ();\r
+ while(SD_SoundPlaying())\r
+ BJ_Breathe();\r
+ BJ_Breathe();\r
+\r
+ if (IN_CheckAck())\r
+ goto done;\r
+ }\r
+ if (ratio==100)\r
+ {\r
+ VW_WaitVBL(VBLWAIT);\r
+ SD_StopSound();\r
+ bonus+=PERCENT100AMT;\r
+ ltoa(bonus,tempstr,10);\r
+ x=(RATIOXX-1)-strlen(tempstr)*2;\r
+ Write(x,7,tempstr);\r
+ VW_UpdateScreen();\r
+ SD_PlaySound(PERCENT100SND);\r
+ }\r
+ else\r
+ if (!ratio)\r
+ {\r
+ VW_WaitVBL(VBLWAIT);\r
+ SD_StopSound();\r
+ SD_PlaySound(NOBONUSSND);\r
+ }\r
+ else\r
+ SD_PlaySound(ENDBONUS2SND);\r
+ VW_UpdateScreen();\r
+ while(SD_SoundPlaying())\r
+ BJ_Breathe();\r
+\r
+\r
+ //\r
+ // TREASURE RATIO\r
+ //\r
+ ratio=tr;\r
+ for (i=0;i<=ratio;i++)\r
+ {\r
+ itoa(i,tempstr,10);\r
+ x=RATIOXX-strlen(tempstr)*2;\r
+ Write(x,18,tempstr);\r
+ if (!(i%10))\r
+ SD_PlaySound(ENDBONUS1SND);\r
+ VW_UpdateScreen ();\r
+ while(SD_SoundPlaying())\r
+ BJ_Breathe();\r
+ if (IN_CheckAck())\r
+ goto done;\r
+ }\r
+ if (ratio==100)\r
+ {\r
+ VW_WaitVBL(VBLWAIT);\r
+ SD_StopSound();\r
+ bonus+=PERCENT100AMT;\r
+ ltoa(bonus,tempstr,10);\r
+ x=(RATIOXX-1)-strlen(tempstr)*2;\r
+ Write(x,7,tempstr);\r
+ VW_UpdateScreen();\r
+ SD_PlaySound(PERCENT100SND);\r
+ }\r
+ else\r
+ if (!ratio)\r
+ {\r
+ VW_WaitVBL(VBLWAIT);\r
+ SD_StopSound();\r
+ SD_PlaySound(NOBONUSSND);\r
+ }\r
+ else\r
+ SD_PlaySound(ENDBONUS2SND);\r
+ VW_UpdateScreen();\r
+ while(SD_SoundPlaying())\r
+ BJ_Breathe();\r
+\r
+\r
+ //\r
+ // JUMP STRAIGHT HERE IF KEY PRESSED\r
+ //\r
+ done:\r
+\r
+ itoa(kr,tempstr,10);\r
+ x=RATIOXX-strlen(tempstr)*2;\r
+ Write(x,14,tempstr);\r
+\r
+ itoa(sr,tempstr,10);\r
+ x=RATIOXX-strlen(tempstr)*2;\r
+ Write(x,16,tempstr);\r
+\r
+ itoa(tr,tempstr,10);\r
+ x=RATIOXX-strlen(tempstr)*2;\r
+ Write(x,18,tempstr);\r
+\r
+ bonus=(long)timeleft*PAR_AMOUNT+\r
+ (PERCENT100AMT*(kr==100))+\r
+ (PERCENT100AMT*(sr==100))+\r
+ (PERCENT100AMT*(tr==100));\r
+\r
+ GivePoints(bonus);\r
+ ltoa(bonus,tempstr,10);\r
+ x=36-strlen(tempstr)*2;\r
+ Write(x,7,tempstr);\r
+\r
+ //\r
+ // SAVE RATIO INFORMATION FOR ENDGAME\r
+ //\r
+ LevelRatios[mapon].kill=kr;\r
+ LevelRatios[mapon].secret=sr;\r
+ LevelRatios[mapon].treasure=tr;\r
+ LevelRatios[mapon].time=min*60+sec;\r
+ }\r
+ else\r
+ {\r
+#ifdef SPEAR\r
+#ifndef SPEARDEMO\r
+ switch(mapon)\r
+ {\r
+ case 4: Write(14,4," trans\n"\r
+ " grosse\n"\r
+ STR_DEFEATED); break;\r
+ case 9: Write(14,4,"barnacle\n"\r
+ "wilhelm\n"\r
+ STR_DEFEATED); break;\r
+ case 15: Write(14,4,"ubermutant\n"\r
+ STR_DEFEATED); break;\r
+ case 17: Write(14,4," death\n"\r
+ " knight\n"\r
+ STR_DEFEATED); break;\r
+ case 18: Write(13,4,"secret tunnel\n"\r
+ " area\n"\r
+ " completed!"); break;\r
+ case 19: Write(13,4,"secret castle\n"\r
+ " area\n"\r
+ " completed!"); break;\r
+ }\r
+#endif\r
+#else\r
+ Write(14,4,"secret floor\n completed!");\r
+#endif\r
+\r
+ Write(10,16,"15000 bonus!");\r
+\r
+ VW_UpdateScreen();\r
+ VW_FadeIn();\r
+\r
+ GivePoints(15000);\r
+ }\r
+\r
+\r
+ DrawScore();\r
+ VW_UpdateScreen();\r
+\r
+ TimeCount=0;\r
+ IN_StartAck();\r
+ while(!IN_CheckAck())\r
+ BJ_Breathe();\r
+\r
+//\r
+// done\r
+//\r
+#ifdef SPEARDEMO\r
+ if (gamestate.mapon == 1)\r
+ {\r
+ SD_PlaySound (BONUS1UPSND);\r
+\r
+ CA_CacheGrChunk (STARTFONT+1);\r
+ Message ("This concludes your demo\n"\r
+ "of Spear of Destiny! Now,\n"\r
+ "go to your local software\n"\r
+ "store and buy it!");\r
+ UNCACHEGRCHUNK (STARTFONT+1);\r
+\r
+ IN_ClearKeysDown();\r
+ IN_Ack();\r
+ }\r
+#endif\r
+\r
+#ifdef JAPDEMO\r
+ if (gamestate.mapon == 3)\r
+ {\r
+ SD_PlaySound (BONUS1UPSND);\r
+\r
+ CA_CacheGrChunk (STARTFONT+1);\r
+ Message ("This concludes your demo\n"\r
+ "of Wolfenstein 3-D! Now,\n"\r
+ "go to your local software\n"\r
+ "store and buy it!");\r
+ UNCACHEGRCHUNK (STARTFONT+1);\r
+\r
+ IN_ClearKeysDown();\r
+ IN_Ack();\r
+ }\r
+#endif\r
+\r
+ #ifndef SPEAR\r
+ if (Keyboard[sc_P] && MS_CheckParm("goobers"))\r
+ PicturePause();\r
+ #endif\r
+\r
+ VW_FadeOut ();\r
+ temp = bufferofs;\r
+ for (i=0;i<3;i++)\r
+ {\r
+ bufferofs = screenloc[i];\r
+ DrawPlayBorder ();\r
+ }\r
+ bufferofs = temp;\r
+\r
+ UnCacheLump(LEVELEND_LUMP_START,LEVELEND_LUMP_END);\r
+}\r
+\r
+\r
+\r
+//==========================================================================\r
+\r
+\r
+/*\r
+=================\r
+=\r
+= PreloadGraphics\r
+=\r
+= Fill the cache up\r
+=\r
+=================\r
+*/\r
+\r
+boolean PreloadUpdate(unsigned current, unsigned total)\r
+{\r
+ unsigned w = WindowW - 10;\r
+\r
+\r
+ VWB_Bar(WindowX + 5,WindowY + WindowH - 3,w,2,BLACK);\r
+ w = ((long)w * current) / total;\r
+ if (w)\r
+ {\r
+ VWB_Bar(WindowX + 5,WindowY + WindowH - 3,w,2,0x37); //SECONDCOLOR);\r
+ VWB_Bar(WindowX + 5,WindowY + WindowH - 3,w-1,1,0x32);\r
+\r
+ }\r
+ VW_UpdateScreen();\r
+// if (LastScan == sc_Escape)\r
+// {\r
+// IN_ClearKeysDown();\r
+// return(true);\r
+// }\r
+// else\r
+ return(false);\r
+}\r
+\r
+void PreloadGraphics(void)\r
+{\r
+ DrawLevel ();\r
+ ClearSplitVWB (); // set up for double buffering in split screen\r
+\r
+ VWB_Bar (0,0,320,200-STATUSLINES,127);\r
+\r
+ LatchDrawPic (20-14,80-3*8,GETPSYCHEDPIC);\r
+\r
+ WindowX = 160-14*8;\r
+ WindowY = 80-3*8;\r
+ WindowW = 28*8;\r
+ WindowH = 48;\r
+ VW_UpdateScreen();\r
+ VW_FadeIn ();\r
+\r
+ PM_Preload (PreloadUpdate);\r
+ IN_UserInput (70);\r
+ VW_FadeOut ();\r
+\r
+ DrawPlayBorder ();\r
+ VW_UpdateScreen ();\r
+}\r
+\r
+\r
+//==========================================================================\r
+\r
+/*\r
+==================\r
+=\r
+= DrawHighScores\r
+=\r
+==================\r
+*/\r
+\r
+void DrawHighScores(void)\r
+{\r
+ char buffer[16],*str,buffer1[5];\r
+ byte temp,temp1,temp2,temp3;\r
+ word i,j,\r
+ w,h,\r
+ x,y;\r
+ HighScore *s;\r
+\r
+\r
+ MM_SortMem ();\r
+\r
+#ifndef SPEAR\r
+// CA_CacheGrChunk (C_CODEPIC);\r
+ CA_CacheGrChunk (HIGHSCORESPIC);\r
+ CA_CacheGrChunk (STARTFONT);\r
+ CA_CacheGrChunk (C_LEVELPIC);\r
+ CA_CacheGrChunk (C_SCOREPIC);\r
+ CA_CacheGrChunk (C_NAMEPIC);\r
+\r
+ ClearMScreen();\r
+ DrawStripes(10);\r
+\r
+ VWB_DrawPic(48,0,HIGHSCORESPIC);\r
+ UNCACHEGRCHUNK (HIGHSCORESPIC);\r
+\r
+ VWB_DrawPic(4*8,68,C_NAMEPIC);\r
+ VWB_DrawPic(20*8,68,C_LEVELPIC);\r
+ VWB_DrawPic(28*8,68,C_SCOREPIC);\r
+#ifndef UPLOAD\r
+// VWB_DrawPic(35*8,68,C_CODEPIC);\r
+#endif\r
+ fontnumber=0;\r
+\r
+#else\r
+ CacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);\r
+ ClearMScreen();\r
+ DrawStripes(10);\r
+ UnCacheLump (BACKDROP_LUMP_START,BACKDROP_LUMP_END);\r
+\r
+ CacheLump (HIGHSCORES_LUMP_START,HIGHSCORES_LUMP_END);\r
+ CA_CacheGrChunk (STARTFONT+1);\r
+ VWB_DrawPic (0,0,HIGHSCORESPIC);\r
+\r
+ fontnumber = 1;\r
+#endif\r
+\r
+\r
+#ifndef SPEAR\r
+ SETFONTCOLOR(15,0x29);\r
+#else\r
+ SETFONTCOLOR(HIGHLIGHT,0x29);\r
+#endif\r
+\r
+ for (i = 0,s = Scores;i < MaxScores;i++,s++)\r
+ {\r
+ PrintY = 76 + (16 * i);\r
+\r
+ //\r
+ // name\r
+ //\r
+#ifndef SPEAR\r
+ PrintX = 4*8;\r
+#else\r
+ PrintX = 16;\r
+#endif\r
+ US_Print(s->name);\r
+\r
+ //\r
+ // level\r
+ //\r
+ ultoa(s->completed,buffer,10);\r
+#ifndef SPEAR\r
+ for (str = buffer;*str;str++)\r
+ *str = *str + (129 - '0'); // Used fixed-width numbers (129...)\r
+ USL_MeasureString(buffer,&w,&h);\r
+ PrintX = (22 * 8)-w;\r
+#else\r
+ USL_MeasureString(buffer,&w,&h);\r
+ PrintX = 194 - w;\r
+#endif\r
+\r
+#ifndef UPLOAD\r
+#ifndef SPEAR\r
+ PrintX -= 6;\r
+ itoa(s->episode+1,buffer1,10);\r
+ US_Print("E");\r
+ US_Print(buffer1);\r
+ US_Print("/L");\r
+#endif\r
+#endif\r
+\r
+#ifdef SPEAR\r
+ if (s->completed == 21)\r
+ VWB_DrawPic (PrintX+8,PrintY-1,C_WONSPEARPIC);\r
+ else\r
+#endif\r
+ US_Print(buffer);\r
+\r
+ //\r
+ // score\r
+ //\r
+ ultoa(s->score,buffer,10);\r
+#ifndef SPEAR\r
+ for (str = buffer;*str;str++)\r
+ *str = *str + (129 - '0'); // Used fixed-width numbers (129...)\r
+ USL_MeasureString(buffer,&w,&h);\r
+ PrintX = (34 * 8) - 8 - w;\r
+#else\r
+ USL_MeasureString(buffer,&w,&h);\r
+ PrintX = 292 - w;\r
+#endif\r
+ US_Print(buffer);\r
+\r
+ #if 0\r
+#ifndef UPLOAD\r
+#ifndef SPEAR\r
+ //\r
+ // verification #\r
+ //\r
+ if (!i)\r
+ {\r
+ temp=(((s->score >> 28)& 0xf)^\r
+ ((s->score >> 24)& 0xf))+'A';\r
+ temp1=(((s->score >> 20)& 0xf)^\r
+ ((s->score >> 16)& 0xf))+'A';\r
+ temp2=(((s->score >> 12)& 0xf)^\r
+ ((s->score >> 8)& 0xf))+'A';\r
+ temp3=(((s->score >> 4)& 0xf)^\r
+ ((s->score >> 0)& 0xf))+'A';\r
+\r
+ SETFONTCOLOR(0x49,0x29);\r
+ PrintX = 35*8;\r
+ buffer[0]=temp;\r
+ buffer[1]=temp1;\r
+ buffer[2]=temp2;\r
+ buffer[3]=temp3;\r
+ buffer[4]=0;\r
+ US_Print(buffer);\r
+ SETFONTCOLOR(15,0x29);\r
+ }\r
+#endif\r
+#endif\r
+ #endif\r
+ }\r
+\r
+ VW_UpdateScreen ();\r
+\r
+#ifdef SPEAR\r
+ UnCacheLump (HIGHSCORES_LUMP_START,HIGHSCORES_LUMP_END);\r
+ fontnumber = 0;\r
+#endif\r
+}\r
+\r
+//===========================================================================\r
+\r
+\r
+/*\r
+=======================\r
+=\r
+= CheckHighScore\r
+=\r
+=======================\r
+*/\r
+\r
+void CheckHighScore (long score,word other)\r
+{\r
+ word i,j;\r
+ int n;\r
+ HighScore myscore;\r
+\r
+ strcpy(myscore.name,"");\r
+ myscore.score = score;\r
+ myscore.episode = gamestate.episode;\r
+ myscore.completed = other;\r
+\r
+ for (i = 0,n = -1;i < MaxScores;i++)\r
+ {\r
+ if\r
+ (\r
+ (myscore.score > Scores[i].score)\r
+ || (\r
+ (myscore.score == Scores[i].score)\r
+ && (myscore.completed > Scores[i].completed)\r
+ )\r
+ )\r
+ {\r
+ for (j = MaxScores;--j > i;)\r
+ Scores[j] = Scores[j - 1];\r
+ Scores[i] = myscore;\r
+ n = i;\r
+ break;\r
+ }\r
+ }\r
+\r
+#ifdef SPEAR\r
+ StartCPMusic (XAWARD_MUS);\r
+#else\r
+ StartCPMusic (ROSTER_MUS);\r
+#endif\r
+ DrawHighScores ();\r
+\r
+ VW_FadeIn ();\r
+\r
+ if (n != -1)\r
+ {\r
+ //\r
+ // got a high score\r
+ //\r
+ PrintY = 76 + (16 * n);\r
+#ifndef SPEAR\r
+ PrintX = 4*8;\r
+ backcolor = BORDCOLOR;\r
+ fontcolor = 15;\r
+ US_LineInput(PrintX,PrintY,Scores[n].name,nil,true,MaxHighName,100);\r
+#else\r
+ PrintX = 16;\r
+ fontnumber = 1;\r
+ VWB_Bar (PrintX-2,PrintY-2,145,15,0x9c);\r
+ VW_UpdateScreen ();\r
+ backcolor = 0x9c;\r
+ fontcolor = 15;\r
+ US_LineInput(PrintX,PrintY,Scores[n].name,nil,true,MaxHighName,130);\r
+#endif\r
+ }\r
+ else\r
+ {\r
+ IN_ClearKeysDown ();\r
+ IN_UserInput(500);\r
+ }\r
+\r
+}\r
+\r
+\r
+#ifndef UPLOAD\r
+#ifndef SPEAR\r
+#ifndef JAPAN\r
+////////////////////////////////////////////////////////\r
+//\r
+// NON-SHAREWARE NOTICE\r
+//\r
+////////////////////////////////////////////////////////\r
+void NonShareware(void)\r
+{\r
+ VW_FadeOut();\r
+\r
+ ClearMScreen();\r
+ DrawStripes(10);\r
+\r
+ CA_CacheGrChunk(STARTFONT+1);\r
+ fontnumber = 1;\r
+\r
+ SETFONTCOLOR(READHCOLOR,BKGDCOLOR);\r
+ PrintX=110;\r
+ PrintY=15;\r
+\r
+ #ifdef SPANISH\r
+ US_Print("Atencion");\r
+ #else\r
+ US_Print("Attention");\r
+ #endif\r
+\r
+ SETFONTCOLOR(HIGHLIGHT,BKGDCOLOR);\r
+ WindowX=PrintX=40;\r
+ PrintY=60;\r
+ #ifdef SPANISH\r
+ US_Print("Este juego NO es gratis y\n");\r
+ US_Print("NO es Shareware; favor de\n");\r
+ US_Print("no distribuirlo.\n\n");\r
+ #else\r
+ US_Print("This game is NOT shareware.\n");\r
+ US_Print("Please do not distribute it.\n");\r
+ US_Print("Thanks.\n\n");\r
+ #endif\r
+ US_Print(" Id Software\n");\r
+\r
+ VW_UpdateScreen ();\r
+ VW_FadeIn();\r
+ IN_Ack();\r
+}\r
+#endif\r
+#endif\r
+#endif\r
+\r
+#ifdef SPEAR\r
+#ifndef SPEARDEMO\r
+////////////////////////////////////////////////////////\r
+//\r
+// COPY PROTECTION FOR FormGen\r
+//\r
+////////////////////////////////////////////////////////\r
+char far CopyProFailedStrs[][100] = {\r
+ STR_COPY1,\r
+ STR_COPY2,\r
+\r
+ STR_COPY3,\r
+ STR_COPY4,\r
+\r
+ STR_COPY5,\r
+ STR_COPY6,\r
+\r
+ STR_COPY7,\r
+ STR_COPY8,\r
+\r
+ STR_COPY9,\r
+ "",\r
+\r
+ STR_COPY10,\r
+ STR_COPY11,\r
+\r
+ STR_COPY12,\r
+ "",\r
+\r
+ STR_COPY13,\r
+ "",\r
+\r
+ STR_COPY14,\r
+ ""\r
+ },\r
+\r
+ far BackDoorStrs[5][16] = {\r
+ "a spoon?",\r
+ "bite me!",\r
+ "joshua",\r
+ "pelt",\r
+#ifdef BETA\r
+ "beta"\r
+#else\r
+ "snoops"\r
+#endif\r
+ },\r
+\r
+ far GoodBoyStrs[10][40] = {\r
+ "...is the CORRECT ANSWER!",\r
+ "",\r
+\r
+ "Consider yourself bitten, sir.",\r
+ "",\r
+\r
+ "Greetings Professor Falken, would you",\r
+ "like to play Spear of Destiny?",\r
+\r
+ "Do you have any gold spray paint?",\r
+ "",\r
+\r
+#ifdef BETA\r
+ "Beta testing approved.",\r
+#else\r
+ "I wish I had a 21\" monitor...",\r
+#endif\r
+ ""\r
+ },\r
+\r
+ far bossstrs[4][24] = {\r
+ "DEATH KNIGHT",\r
+ "BARNACLE WILHELM",\r
+ "UBERMUTANTUBER MUTANT",\r
+ "TRANS GROSSE"\r
+ },\r
+\r
+ far WordStr[5][20] = {\r
+ "New Game",\r
+ "Sound...F4",\r
+ "Control...F6",\r
+ "Change View...F5",\r
+ "Quit...F10"},\r
+\r
+ far WordCorrect[5][2] = {"3","4","4","5","5"},\r
+\r
+ far MemberStr[10][40] = {\r
+ STR_COPY15,\r
+ "",\r
+\r
+ STR_COPY16,\r
+ "",\r
+\r
+ STR_COPY17,\r
+ STR_COPY18,\r
+\r
+ STR_COPY19,\r
+ STR_COPY20,\r
+\r
+ STR_COPY21,\r
+ STR_COPY22},\r
+\r
+ far MemberCorrect[5][24] = {\r
+ "adrian carmack",\r
+ "john carmackjohn romero",\r
+ "tom hall",\r
+ "jay wilbur",\r
+ "kevin cloud"},\r
+\r
+ far DosMessages[9][80] = {\r
+ STR_NOPE1,\r
+ STR_NOPE2,\r
+ STR_NOPE3,\r
+ STR_NOPE4,\r
+ STR_NOPE5,\r
+ STR_NOPE6,\r
+ STR_NOPE7,\r
+ STR_NOPE8,\r
+ STR_NOPE9},\r
+\r
+ far MiscTitle[4][20] = {\r
+ "BLOOD TEST",\r
+ "STRAIGHT-LACED",\r
+ "QUITE SHAPELY",\r
+ "I AM WHAT I AMMO"\r
+ },\r
+\r
+ far MiscStr[12][40] = {\r
+ STR_MISC1,\r
+ STR_MISC2,\r
+ "",\r
+\r
+ STR_MISC3,\r
+ STR_MISC4,\r
+ "",\r
+\r
+ STR_MISC5,\r
+ STR_MISC6,\r
+ "",\r
+\r
+ STR_MISC7,\r
+ STR_MISC8,\r
+ STR_MISC9\r
+ },\r
+\r
+ far MiscCorrect[4][5] = {"ss","8",STR_STAR,"45"};\r
+\r
+\r
+int BackDoor(char *s)\r
+{\r
+ int i;\r
+\r
+\r
+ strlwr(s);\r
+\r
+ for (i=0;i<5;i++)\r
+ if (!_fstrcmp(s,BackDoorStrs[i]))\r
+ {\r
+ SETFONTCOLOR(14,15);\r
+ fontnumber = 0;\r
+ PrintY = 175;\r
+ VWB_DrawPic (0,20*8,COPYPROTBOXPIC);\r
+ US_CPrint(GoodBoyStrs[i*2]);\r
+ US_CPrint(GoodBoyStrs[i*2+1]);\r
+ VW_UpdateScreen();\r
+ return 1;\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r
+\r
+void CopyProtection(void)\r
+{\r
+#define TYPEBOX_Y 177\r
+#define TYPEBOX_BKGD 0x9c\r
+#define PRINTCOLOR HIGHLIGHT\r
+\r
+ int i,match,whichboss,bossnum,try,whichline,enemypicked[4]={0,0,0,0},\r
+ bosses[4] = { BOSSPIC1PIC,BOSSPIC2PIC,BOSSPIC3PIC,BOSSPIC4PIC },\r
+ whichone,whichpicked[4]={0,0,0,0},quiztype,whichmem,\r
+ memberpicked[5]={0,0,0,0,0},wordpicked[5]={0,0,0,0,0},whichword;\r
+\r
+ char inputbuffer[20],\r
+ message[80];\r
+\r
+ enum\r
+ {\r
+ debriefing,\r
+ checkmanual,\r
+ staffquiz,\r
+ miscquiz,\r
+\r
+ totaltypes\r
+ };\r
+\r
+\r
+\r
+ try = 0;\r
+ VW_FadeOut();\r
+ CA_CacheGrChunk(C_BACKDROPPIC);\r
+ CacheLump(COPYPROT_LUMP_START,COPYPROT_LUMP_END);\r
+ CA_CacheGrChunk(STARTFONT+1);\r
+ CA_LoadAllSounds();\r
+ StartCPMusic(COPYPRO_MUS);\r
+ US_InitRndT(true);\r
+\r
+ while (try<3)\r
+ {\r
+ fontnumber = 1;\r
+ SETFONTCOLOR(PRINTCOLOR-2,15);\r
+ VWB_DrawPic (0,0,C_BACKDROPPIC);\r
+ VWB_DrawPic (0,0,COPYPROTTOPPIC);\r
+ VWB_DrawPic (0,20*8,COPYPROTBOXPIC);\r
+ WindowX = WindowY = 0;\r
+ WindowW = 320;\r
+ WindowH = 200;\r
+ PrintY = 65;\r
+\r
+ quiztype = US_RndT()%totaltypes;\r
+ switch(quiztype)\r
+ {\r
+ //\r
+ // BOSSES QUIZ\r
+ //\r
+ case debriefing:\r
+ PrintX = 0;\r
+ US_Print(STR_DEBRIEF);\r
+ SETFONTCOLOR(PRINTCOLOR,15);\r
+\r
+ while (enemypicked[whichboss = US_RndT()&3]);\r
+ enemypicked[whichboss] = 1;\r
+ bossnum = bosses[whichboss];\r
+ VWB_DrawPic(128,60,bossnum);\r
+ fontnumber = 0;\r
+ PrintY = 130;\r
+ US_CPrint(STR_ENEMY1"\n");\r
+ US_CPrint(STR_ENEMY2"\n\n");\r
+\r
+ VW_UpdateScreen();\r
+ VW_FadeIn();\r
+\r
+ PrintX = 100;\r
+ fontcolor = 15;\r
+ backcolor = TYPEBOX_BKGD;\r
+ inputbuffer[0] = 0;\r
+ PrintY = TYPEBOX_Y;\r
+ fontnumber = 1;\r
+ US_LineInput(PrintX,PrintY,inputbuffer,nil,true,20,100);\r
+\r
+ match = 0;\r
+ for (i=0;i<_fstrlen(bossstrs[whichboss]);i++)\r
+ if (!_fstrnicmp(inputbuffer,bossstrs[whichboss]+i,strlen(inputbuffer)) &&\r
+ strlen(inputbuffer)>3)\r
+ match = 1;\r
+\r
+ match += BackDoor(inputbuffer);\r
+ break;\r
+\r
+ //\r
+ // MANUAL CHECK\r
+ //\r
+ case checkmanual:\r
+ while (wordpicked[whichword = US_RndT()%5]);\r
+ wordpicked[whichword] = 1;\r
+ US_CPrint(STR_CHECKMAN);\r
+ SETFONTCOLOR(PRINTCOLOR,15);\r
+ PrintY += 25;\r
+ US_CPrint(STR_MAN1);\r
+ US_CPrint(STR_MAN2);\r
+ _fstrcpy(message,STR_MAN3" \"");\r
+ _fstrcat(message,WordStr[whichword]);\r
+ _fstrcat(message,"\" "STR_MAN4);\r
+ US_CPrint(message);\r
+ VW_UpdateScreen();\r
+ VW_FadeIn();\r
+\r
+ PrintX = 146;\r
+ fontcolor = 15;\r
+ backcolor = TYPEBOX_BKGD;\r
+ inputbuffer[0] = 0;\r
+ PrintY = TYPEBOX_Y;\r
+ US_LineInput(PrintX,PrintY,inputbuffer,nil,true,6,100);\r
+\r
+ strlwr(inputbuffer);\r
+ match = 1-(_fstrcmp(inputbuffer,WordCorrect[whichword])!=0);\r
+ match += BackDoor(inputbuffer);\r
+ break;\r
+\r
+ //\r
+ // STAFF QUIZ\r
+ //\r
+ case staffquiz:\r
+ while (memberpicked[whichmem = US_RndT()%5]);\r
+ memberpicked[whichmem] = 1;\r
+ US_CPrint(STR_ID1);\r
+ SETFONTCOLOR(PRINTCOLOR,15);\r
+ PrintY += 25;\r
+ US_CPrint(MemberStr[whichmem*2]);\r
+ US_CPrint(MemberStr[whichmem*2+1]);\r
+ VW_UpdateScreen();\r
+ VW_FadeIn();\r
+\r
+ PrintX = 100;\r
+ fontcolor = 15;\r
+ backcolor = TYPEBOX_BKGD;\r
+ inputbuffer[0] = 0;\r
+ PrintY = TYPEBOX_Y;\r
+ US_LineInput(PrintX,PrintY,inputbuffer,nil,true,20,120);\r
+\r
+ strlwr(inputbuffer);\r
+ match = 0;\r
+ for (i=0;i<_fstrlen(MemberCorrect[whichmem]);i++)\r
+ if (!_fstrnicmp(inputbuffer,MemberCorrect[whichmem]+i,strlen(inputbuffer)) &&\r
+ strlen(inputbuffer)>2)\r
+ match = 1;\r
+ match += BackDoor(inputbuffer);\r
+ break;\r
+\r
+ //\r
+ // MISCELLANEOUS QUESTIONS\r
+ //\r
+ case miscquiz:\r
+ while (whichpicked[whichone = US_RndT()&3]);\r
+ whichpicked[whichone] = 1;\r
+ US_CPrint(MiscTitle[whichone]);\r
+ SETFONTCOLOR(PRINTCOLOR,15);\r
+ PrintY += 25;\r
+ US_CPrint(MiscStr[whichone*3]);\r
+ US_CPrint(MiscStr[whichone*3+1]);\r
+ US_CPrint(MiscStr[whichone*3+2]);\r
+ VW_UpdateScreen();\r
+ VW_FadeIn();\r
+\r
+ PrintX = 146;\r
+ fontcolor = 15;\r
+ backcolor = TYPEBOX_BKGD;\r
+ inputbuffer[0] = 0;\r
+ PrintY = TYPEBOX_Y;\r
+ US_LineInput(PrintX,PrintY,inputbuffer,nil,true,6,100);\r
+\r
+ strlwr(inputbuffer);\r
+ match = 1-(_fstrcmp(inputbuffer,MiscCorrect[whichone])!=0);\r
+ match += BackDoor(inputbuffer);\r
+ break;\r
+ }\r
+\r
+ //\r
+ // IF NO MATCH, WE'VE GOT A (MINOR) PROBLEM!\r
+ //\r
+\r
+ if (!match)\r
+ {\r
+ whichline = 2*(US_RndT()%9);\r
+ SETFONTCOLOR(14,15);\r
+ fontnumber = 0;\r
+ PrintY = 175;\r
+ VWB_DrawPic (0,20*8,COPYPROTBOXPIC);\r
+ US_CPrint(CopyProFailedStrs[whichline]);\r
+ US_CPrint(CopyProFailedStrs[whichline+1]);\r
+\r
+ VW_UpdateScreen();\r
+ SD_PlaySound(NOWAYSND);\r
+ IN_UserInput(TickBase*3);\r
+ VW_FadeOut();\r
+ try++;\r
+ }\r
+ else\r
+ {\r
+ int start;\r
+\r
+\r
+ SD_PlaySound(BONUS1UPSND);\r
+ SD_WaitSoundDone();\r
+ UNCACHEGRCHUNK (STARTFONT+1);\r
+ UNCACHEGRCHUNK (C_BACKDROPPIC);\r
+ UnCacheLump (COPYPROT_LUMP_START,COPYPROT_LUMP_END);\r
+\r
+ switch(SoundMode)\r
+ {\r
+ case sdm_Off: return;\r
+ case sdm_PC: start = STARTPCSOUNDS; break;\r
+ case sdm_AdLib: start = STARTADLIBSOUNDS;\r
+ }\r
+\r
+ for (i=0;i<NUMSOUNDS;i++,start++)\r
+ MM_FreePtr ((memptr *)&audiosegs[start]);\r
+ return;\r
+ }\r
+ }\r
+\r
+ ClearMemory();\r
+ ShutdownId();\r
+\r
+ _fstrcpy(message,DosMessages[US_RndT()%9]);\r
+\r
+ _AX = 3;\r
+ geninterrupt(0x10);\r
+\r
+ printf("%s\n",message);\r
+ exit(1);\r
+}\r
+\r
+#endif // SPEARDEMO\r
+#endif // SPEAR\r
+//===========================================================================\r