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