Wolf3D-Mac/WolfIO.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;
}
}