mirror of
https://github.com/Blzut3/Wolf3D-Mac.git
synced 2024-11-24 18:32:30 +00:00
1 line
5.6 KiB
C
1 line
5.6 KiB
C
#include "WolfDef.h"
|
|
#include <string.h>
|
|
|
|
/**********************************
|
|
|
|
Draw a space padded list of numbers
|
|
for the score
|
|
|
|
**********************************/
|
|
|
|
LongWord pow10[] = {1,10,100,1000,10000,100000,1000000};
|
|
Word NumberIndex = 36; /* First number in the shape list... */
|
|
|
|
void SetNumber(LongWord number,Word x,Word y,Word digits)
|
|
{
|
|
LongWord val;
|
|
Word count;
|
|
Word empty;
|
|
|
|
empty = 1; /* No char's drawn yet */
|
|
while (digits) { /* Any digits left? */
|
|
count = 0; /* No value yet */
|
|
val = pow10[digits-1]; /* Get the power of 10 */
|
|
while (number >= val) { /* Any value here? */
|
|
count++; /* +1 to the count */
|
|
number -= val; /* Remove the value */
|
|
}
|
|
if (empty && !count && digits!=1) { /* pad on left with blanks rather than 0 */
|
|
DrawShape(x,y,GameShapes[NumberIndex]);
|
|
} else {
|
|
empty = 0; /* I have drawn... */
|
|
DrawShape(x,y,GameShapes[count+NumberIndex]); /* Draw the digit */
|
|
}
|
|
x+=ScaleX(8);
|
|
digits--; /* Count down */
|
|
}
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Read from the Mac's keyboard/mouse system
|
|
|
|
**********************************/
|
|
|
|
void IO_CheckInput(void)
|
|
{
|
|
ReadSystemJoystick(); /* Set the variable "joystick1" */
|
|
|
|
/* check for auto map */
|
|
|
|
if (joystick1 & JOYPAD_START) {
|
|
RunAutoMap(); /* Do the auto map */
|
|
}
|
|
|
|
/*
|
|
** get game control flags from joypad
|
|
*/
|
|
memset(buttonstate,0,sizeof(buttonstate)); /* Zap the buttonstates */
|
|
if (joystick1 & JOYPAD_UP)
|
|
buttonstate[bt_north] = 1;
|
|
if (joystick1 & JOYPAD_DN)
|
|
buttonstate[bt_south] = 1;
|
|
if (joystick1 & JOYPAD_LFT)
|
|
buttonstate[bt_west] = 1;
|
|
if (joystick1 & JOYPAD_RGT)
|
|
buttonstate[bt_east] = 1;
|
|
if (joystick1 & JOYPAD_TL)
|
|
buttonstate[bt_left] = 1;
|
|
if (joystick1 & JOYPAD_TR)
|
|
buttonstate[bt_right] = 1;
|
|
if (joystick1 & JOYPAD_B)
|
|
buttonstate[bt_attack] = 1;
|
|
if (joystick1 & (JOYPAD_Y|JOYPAD_X) )
|
|
buttonstate[bt_run] = 1;
|
|
if (joystick1 & JOYPAD_A)
|
|
buttonstate[bt_use] = 1;
|
|
if (joystick1 & JOYPAD_SELECT) {
|
|
buttonstate[bt_select] = 1;
|
|
}
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Draw the floor and castle #
|
|
|
|
**********************************/
|
|
|
|
void IO_DrawFloor(Word floor)
|
|
{
|
|
SetNumber(MapListPtr->InfoArray[floor].ScenarioNum,ScaleX(8),ScaleY(176),1);
|
|
SetNumber(MapListPtr->InfoArray[floor].FloorNum,ScaleX(32),ScaleY(176),1);
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Draw the score
|
|
|
|
**********************************/
|
|
|
|
void IO_DrawScore(LongWord score)
|
|
{
|
|
if (!IntermissionHack) { /* Don't draw during intermission! */
|
|
SetNumber(score,ScaleX(56),ScaleY(176),7);
|
|
}
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Draw the number of live remaining
|
|
|
|
**********************************/
|
|
|
|
void IO_DrawLives(Word lives)
|
|
{
|
|
|
|
if (!IntermissionHack) { /* Don't draw during intermission! */
|
|
--lives; /* Adjust for zero start value */
|
|
if (lives > 9) {
|
|
lives = 9; /* Failsafe */
|
|
}
|
|
SetNumber(lives,ScaleX(188),ScaleY(176),1); /* Draw the lives count */
|
|
}
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Draw the health
|
|
|
|
**********************************/
|
|
|
|
void IO_DrawHealth(Word health)
|
|
{
|
|
SetNumber(health,ScaleX(210),ScaleY(176),3);
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Draw the ammo remaining
|
|
|
|
**********************************/
|
|
|
|
void IO_DrawAmmo(Word ammo)
|
|
{
|
|
SetNumber(ammo,ScaleX(268),ScaleY(176),3);
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Draw the treasure score
|
|
|
|
**********************************/
|
|
|
|
void IO_DrawTreasure(Word treasure)
|
|
{
|
|
SetNumber(treasure,ScaleX(128),ScaleY(176),2);
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Draw the keys held
|
|
|
|
**********************************/
|
|
|
|
void IO_DrawKeys(Word keys)
|
|
{
|
|
if (keys&1) {
|
|
DrawShape(ScaleX(310),ScaleY(164),GameShapes[10]);
|
|
}
|
|
if (keys&2) {
|
|
DrawShape(ScaleX(310),ScaleY(184),GameShapes[11]);
|
|
}
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Draw the gun in the foreground
|
|
|
|
**********************************/
|
|
|
|
void IO_AttackShape(Word shape)
|
|
{
|
|
DrawXMShape(ScaleX(128),ScaleY(96),GameShapes[shape+12]);
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Draw the BJ's face
|
|
|
|
**********************************/
|
|
|
|
void IO_DrawFace(Word face)
|
|
{
|
|
DrawShape(ScaleX(160),ScaleY(164),GameShapes[face]); /* Draw the face */
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Redraw the main status bar
|
|
|
|
**********************************/
|
|
|
|
void IO_DrawStatusBar(void)
|
|
{
|
|
DrawShape(ScaleX(0),ScaleY(160),GameShapes[46]);
|
|
}
|
|
|
|
/**********************************
|
|
|
|
Erase the floor and ceiling
|
|
|
|
**********************************/
|
|
|
|
#ifndef __APPLEIIGS__ /* Done in assembly on the IIgs version */
|
|
#ifndef __3DO__
|
|
void IO_ClearViewBuffer(void)
|
|
{
|
|
unsigned char *Screenad;
|
|
Word Count,WCount;
|
|
LongWord *LScreenad;
|
|
LongWord Fill;
|
|
|
|
Screenad = VideoPointer;
|
|
Count = VIEWHEIGHT/2;
|
|
Fill = 0x2f2f2f2f;
|
|
do {
|
|
WCount = SCREENWIDTH/4;
|
|
LScreenad = (LongWord *) Screenad;
|
|
do {
|
|
*LScreenad++ = Fill; /* 004 */
|
|
} while (--WCount);
|
|
Screenad+=VideoWidth;
|
|
} while (--Count);
|
|
Count = VIEWHEIGHT/2;
|
|
Fill = 0x2A2A2A2A;
|
|
do {
|
|
WCount = SCREENWIDTH/4;
|
|
LScreenad = (LongWord *) Screenad;
|
|
do {
|
|
*LScreenad++ = Fill;
|
|
} while (--WCount);
|
|
Screenad+=VideoWidth;
|
|
} while (--Count);
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
/**********************************
|
|
|
|
Copy the 3-D screen to display memory
|
|
|
|
**********************************/
|
|
|
|
void IO_DisplayViewBuffer (void)
|
|
{
|
|
BlastScreen();
|
|
/* if this is the first frame rendered, upload everything and fade in */
|
|
if (firstframe) {
|
|
FadeTo(rGamePal);
|
|
firstframe = 0;
|
|
}
|
|
}
|