planet-strike/3D_INTER.C
2013-07-08 00:00:00 +00:00

357 lines
6.7 KiB
C

// 3D_INTER.C
#include "3D_DEF.H"
#pragma hdrstop
//==========================================================================
//
// LOCAL CONSTANTS
//
//==========================================================================
//==========================================================================
//
// LOCAL VARABLES
//
//==========================================================================
#ifndef ID_CACHE_BRIEFS
char BreifingText[13] = {"BRIEF_Wx.TXT"};
#endif
//==========================================================================
/*
==================
=
= CLearSplitVWB
=
==================
*/
void ClearSplitVWB (void)
{
memset (update,0,sizeof(update));
WindowX = 0;
WindowY = 0;
WindowW = 320;
WindowH = 152;
}
//==========================================================================
/*
==================
=
= Breifing
=
==================
*/
boolean Breifing(breifing_type BreifingType,unsigned episode)
{
#ifndef ID_CACHE_BRIEFS
char chars[3] = {'L','W','I'};
BreifingText[6] = chars[BreifingType];
BreifingText[7] = '1'+episode;
HelpPresenter(BreifingText,true,0,false);
#else
HelpPresenter(NULL,true,BRIEF_W1+(episode*2)+BreifingType-1,false);
#endif
return(EscPressed);
}
//==========================================================================
/*
=================
=
= PreloadGraphics
=
= Fill the cache up
=
=================
*/
void ShPrint(char far *text, char shadow_color, boolean single_char)
{
unsigned old_color=fontcolor,old_x=px,old_y=py;
char far *str,buf[2]={0,0};
if (single_char)
{
str = buf;
buf[0]=*text;
}
else
str = text;
fontcolor = shadow_color;
py++;
px++;
USL_DrawString(str); // JTR - This marks blocks!
fontcolor = old_color;
py = old_y;
px = old_x;
USL_DrawString(str); // JTR - This marks blocks!
}
void PreloadUpdate(unsigned current, unsigned total)
{
unsigned w=WindowW-10;
if (current > total)
current=total;
w = ((long)w * current) / total;
if (w)
VWB_Bar(WindowX,WindowY,w-1,1,BORDER_TEXT_COLOR);
VW_UpdateScreen();
}
char far prep_msg[]="^ST1^CEGet Ready, Blake!\r^XX";
void DisplayPrepingMsg(char far *text)
{
#if GAME_VERSION != SHAREWARE_VERSION
// Bomb out if FILE_ID.DIZ is bad!!
//
if (((gamestate.mapon != 1) || (gamestate.episode != 0)) &&
(gamestate.flags & GS_BAD_DIZ_FILE))
Quit(NULL);
#endif
// Cache-in font
//
fontnumber=1;
CA_CacheGrChunk(STARTFONT+1);
BMAmsg(text);
UNCACHEGRCHUNK(STARTFONT+1);
// Set thermometer boundaries
//
WindowX = 36;
WindowY = 188;
WindowW = 260;
WindowH = 32;
// Init MAP and GFX thermometer areas
//
VWB_Bar(WindowX,WindowY-7,WindowW-10,2,BORDER_LO_COLOR);
VWB_Bar(WindowX,WindowY-7,WindowW-11,1,BORDER_TEXT_COLOR-15);
VWB_Bar(WindowX,WindowY,WindowW-10,2,BORDER_LO_COLOR);
VWB_Bar(WindowX,WindowY,WindowW-11,1,BORDER_TEXT_COLOR-15);
// Update screen and fade in
//
VW_UpdateScreen();
if (screenfaded)
VW_FadeIn();
}
void PreloadGraphics(void)
{
WindowY=188;
if (!(gamestate.flags & GS_QUICKRUN))
VW_FadeIn ();
PM_Preload(PreloadUpdate);
IN_UserInput(70);
if (playstate != ex_transported)
VW_FadeOut ();
DrawPlayBorder ();
VW_UpdateScreen ();
}
//==========================================================================
/*
==================
=
= DrawHighScores
=
==================
*/
#define SCORE_Y_SPACING 7 //
void DrawHighScores(void)
{
char buffer[16],*str;
word i,
w,h;
HighScore *s;
ClearMScreen();
CA_CacheScreen (BACKGROUND_SCREENPIC);
DrawMenuTitle("HIGH SCORES");
if (playstate != ex_title)
DrawInstructions(IT_HIGHSCORES);
fontnumber=2;
SETFONTCOLOR(ENABLED_TEXT_COLOR,TERM_BACK_COLOR);
ShadowPrint("NAME",86,60);
// ShadowPrint("MISSION",150,60);
ShadowPrint("SCORE",175,60);
ShadowPrint("MISSION",247,53);
ShadowPrint("RATIO",254,60);
for (i = 0,s = Scores;i < MaxScores;i++,s++)
{
SETFONTCOLOR(HIGHLIGHT_TEXT_COLOR-1,TERM_BACK_COLOR);
//
// name
//
if (*s->name)
ShadowPrint(s->name,45,68 + (SCORE_Y_SPACING * i));
#if 0
//
// mission
//
ltoa(s->episode+1,buffer,10);
ShadowPrint(buffer,165,68 + (SCORE_Y_SPACING * i));
#endif
//
// score
//
if (s->score > 9999999)
SETFONTCOLOR(HIGHLIGHT_TEXT_COLOR+1,TERM_BACK_COLOR);
ltoa(s->score,buffer,10);
USL_MeasureString(buffer,&w,&h);
ShadowPrint(buffer,205 - w,68 + (SCORE_Y_SPACING * i)); // 235
//
// mission ratio
//
ltoa(s->ratio,buffer,10);
USL_MeasureString(buffer,&w,&h);
ShadowPrint(buffer,272-w,68 + (SCORE_Y_SPACING * i));
}
VW_UpdateScreen ();
}
//===========================================================================
/*
=======================
=
= CheckHighScore
=
=======================
*/
void CheckHighScore (long score,word other)
{
word i,j;
int n;
HighScore myscore;
US_CursorStruct TermCursor = {'@',0,HIGHLIGHT_TEXT_COLOR,2};
// Check for cheaters
if (DebugOk)
{
SD_PlaySound(NOWAYSND);
return;
}
strcpy(myscore.name,"");
myscore.score = score;
myscore.episode = gamestate.episode;
myscore.completed = other;
myscore.ratio = ShowStats(0,0,ss_justcalc,&gamestuff.level[gamestate.mapon].stats);
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;
}
}
StartCPMusic (ROSTER_MUS);
DrawHighScores ();
VW_FadeIn ();
if (n != -1)
{
//
// got a high score
//
DrawInstructions(IT_ENTER_HIGHSCORE);
SETFONTCOLOR(HIGHLIGHT_TEXT_COLOR,TERM_BACK_COLOR);
PrintY = 68+(SCORE_Y_SPACING * n);
PrintX = 45;
use_custom_cursor = true;
allcaps = true;
US_CustomCursor = TermCursor;
US_LineInput(PrintX,PrintY,Scores[n].name,nil,true,MaxHighName,100);
}
else
{
IN_ClearKeysDown ();
IN_UserInput(500);
}
StopMusic();
use_custom_cursor = false;
}
//===========================================================================
//--------------------------------------------------------------------------
// Random()
//--------------------------------------------------------------------------
unsigned Random(unsigned Max)
{
unsigned returnval;
if (Max)
{
if (Max > 255)
returnval = (US_RndT()<<8) + US_RndT();
else
returnval = US_RndT();
return(returnval % Max);
}
else
return(0);
}