Commit ca350592 authored by Steven Fuller's avatar Steven Fuller

id_heads.c, misc.c: moved some includes from id_heads to misc.c

vi_null.c: updated for the vi_comm changes

vi_sdl.c: Chuck Mason suggested using SDL_Flip instead of SDL_UpdateRect
parent b5746514
...@@ -5,11 +5,9 @@ ...@@ -5,11 +5,9 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <time.h> #include <time.h>
#include <sys/stat.h>
#include <sys/types.h> #include <sys/types.h>
#include <stdint.h> #include <stdint.h>
#include <unistd.h> #include <unistd.h>
#include <sys/time.h>
#include <glob.h> #include <glob.h>
#include <ctype.h> #include <ctype.h>
#include <fcntl.h> #include <fcntl.h>
......
...@@ -27,8 +27,8 @@ int xfrac, yfrac; ...@@ -27,8 +27,8 @@ int xfrac, yfrac;
boolean FizzleFade(unsigned xx, unsigned yy, unsigned width, unsigned height, unsigned frames, boolean abortable) boolean FizzleFade(unsigned xx, unsigned yy, unsigned width, unsigned height, unsigned frames, boolean abortable)
{ {
int pixperframe; int pixperframe;
unsigned x, y, p, frame; int x, y, p, frame;
long rndval; unsigned int rndval;
int retr; int retr;
rndval = 1; rndval = 1;
...@@ -44,6 +44,8 @@ boolean FizzleFade(unsigned xx, unsigned yy, unsigned width, unsigned height, un ...@@ -44,6 +44,8 @@ boolean FizzleFade(unsigned xx, unsigned yy, unsigned width, unsigned height, un
retr = -1; retr = -1;
/* VL_DirectPlotInit(); */
do { do {
if (abortable && IN_CheckAck()) if (abortable && IN_CheckAck())
retr = true; retr = true;
...@@ -70,6 +72,7 @@ boolean FizzleFade(unsigned xx, unsigned yy, unsigned width, unsigned height, un ...@@ -70,6 +72,7 @@ boolean FizzleFade(unsigned xx, unsigned yy, unsigned width, unsigned height, un
} }
} }
VL_DirectPlotFlush(); VL_DirectPlotFlush();
frame++; frame++;
...@@ -287,9 +290,10 @@ void VW_DrawPropString(char *string) ...@@ -287,9 +290,10 @@ void VW_DrawPropString(char *string)
} }
} }
static void VWL_MeasureString(char *string, word *width, word *height, byte *font) void VW_MeasurePropString(char *string, word *width, word *height)
{ {
int w, mw; int w, mw;
byte *font = grsegs[STARTFONT+fontnumber];
w = 0; w = 0;
mw = 0; mw = 0;
...@@ -311,11 +315,6 @@ static void VWL_MeasureString(char *string, word *width, word *height, byte *fon ...@@ -311,11 +315,6 @@ static void VWL_MeasureString(char *string, word *width, word *height, byte *fon
*width = mw; *width = mw;
} }
void VW_MeasurePropString(char *string, word *width, word *height)
{
VWL_MeasureString(string,width,height,grsegs[STARTFONT+fontnumber]);
}
void VWB_DrawTile8(int x, int y, int tile) void VWB_DrawTile8(int x, int y, int tile)
{ {
VL_MemToScreen(grsegs[STARTTILE8]+(tile*64), 8, 8, x, y); VL_MemToScreen(grsegs[STARTTILE8]+(tile*64), 8, 8, x, y);
...@@ -324,14 +323,12 @@ void VWB_DrawTile8(int x, int y, int tile) ...@@ -324,14 +323,12 @@ void VWB_DrawTile8(int x, int y, int tile)
void VWB_DrawPic(int x, int y, int chunknum) void VWB_DrawPic(int x, int y, int chunknum)
{ {
int picnum = chunknum - STARTPICS; int picnum = chunknum - STARTPICS;
unsigned width,height; int width, height;
x &= ~7;
width = pictable[picnum].width; width = pictable[picnum].width;
height = pictable[picnum].height; height = pictable[picnum].height;
VL_MemToScreen(grsegs[chunknum],width,height,x,y); VL_MemToScreen(grsegs[chunknum], width, height, x, y);
} }
/* /*
......
#include <sys/stat.h>
#include <sys/time.h>
#include <unistd.h>
#include "wl_def.h" #include "wl_def.h"
/* TimeCount from David Haslam -- dch@sirius.demon.co.uk */ /* TimeCount from David Haslam -- dch@sirius.demon.co.uk */
......
...@@ -57,7 +57,7 @@ void VW_UpdateScreen() ...@@ -57,7 +57,7 @@ void VW_UpdateScreen()
======================= =======================
*/ */
void VL_Startup (void) void VL_Startup()
{ {
if (gfxbuf == NULL) if (gfxbuf == NULL)
gfxbuf = malloc(320 * 200 * 1); gfxbuf = malloc(320 * 200 * 1);
...@@ -105,505 +105,22 @@ void VL_GetPalette(byte *palette) ...@@ -105,505 +105,22 @@ void VL_GetPalette(byte *palette)
{ {
} }
void VL_DirectPlot(int x1, int y1, int x2, int y2) void VL_DirectPlotFlush()
{
}
/*
=============================================================================
GLOBAL VARIABLES
=============================================================================
*/
//
// configuration variables
//
boolean MousePresent;
boolean JoysPresent[MaxJoys];
// Global variables
boolean Keyboard[NumCodes];
boolean Paused;
char LastASCII;
ScanCode LastScan;
KeyboardDef KbdDefs = {sc_Control, sc_Alt, sc_Home, sc_UpArrow, sc_PgUp, sc_LeftArrow, sc_RightArrow, sc_End, sc_DownArrow, sc_PgDn};
ControlType Controls[MaxPlayers];
/*
=============================================================================
LOCAL VARIABLES
=============================================================================
*/
static byte ASCIINames[] = // Unshifted ASCII for scan codes
{
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 ,27 ,'1','2','3','4','5','6','7','8','9','0','-','=',8 ,9 , // 0
'q','w','e','r','t','y','u','i','o','p','[',']',13 ,0 ,'a','s', // 1
'd','f','g','h','j','k','l',';',39 ,'`',0 ,92 ,'z','x','c','v', // 2
'b','n','m',',','.','/',0 ,'*',0 ,' ',0 ,0 ,0 ,0 ,0 ,0 , // 3
0 ,0 ,0 ,0 ,0 ,0 ,0 ,'7','8','9','-','4','5','6','+','1', // 4
'2','3','0',127,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7
},
ShiftNames[] = // Shifted ASCII for scan codes
{
// 0 1 2 3 4 5 6 7 8 9 A B C D E F
0 ,27 ,'!','@','#','$','%','^','&','*','(',')','_','+',8 ,9 , // 0
'Q','W','E','R','T','Y','U','I','O','P','{','}',13 ,0 ,'A','S', // 1
'D','F','G','H','J','K','L',':',34 ,'~',0 ,'|','Z','X','C','V', // 2
'B','N','M','<','>','?',0 ,'*',0 ,' ',0 ,0 ,0 ,0 ,0 ,0 , // 3
0 ,0 ,0 ,0 ,0 ,0 ,0 ,'7','8','9','-','4','5','6','+','1', // 4
'2','3','0',127,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 5
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 , // 6
0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 // 7
};
static boolean IN_Started;
static boolean CapsLock;
static ScanCode CurCode,LastCode;
static Direction DirTable[] = { // Quick lookup for total direction
dir_NorthWest, dir_North, dir_NorthEast,
dir_West, dir_None, dir_East,
dir_SouthWest, dir_South, dir_SouthEast
};
void keyboard_handler(int code, int press)
{
byte k, c = 0;
k = code;
{
if (press == 0)
{
Keyboard[k] = false;
}
else // Make code
{
LastCode = CurCode;
CurCode = LastScan = k;
Keyboard[k] = true;
if (k == sc_CapsLock)
{
CapsLock ^= true;
}
if (Keyboard[sc_LShift] || Keyboard[sc_RShift]) // If shifted
{
c = ShiftNames[k];
if ((c >= 'A') && (c <= 'Z') && CapsLock)
c += 'a' - 'A';
}
else
{
c = ASCIINames[k];
if ((c >= 'a') && (c <= 'z') && CapsLock)
c -= 'a' - 'A';
}
if (c)
LastASCII = c;
}
}
}
///////////////////////////////////////////////////////////////////////////
//
// INL_GetMouseDelta() - Gets the amount that the mouse has moved from the
// mouse driver
//
///////////////////////////////////////////////////////////////////////////
static void INL_GetMouseDelta(int *x,int *y)
{
*x = 0;
*y = 0;
}
///////////////////////////////////////////////////////////////////////////
//
// INL_GetMouseButtons() - Gets the status of the mouse buttons from the
// mouse driver
//
///////////////////////////////////////////////////////////////////////////
static word INL_GetMouseButtons(void)
{
return 0;
}
///////////////////////////////////////////////////////////////////////////
//
// IN_GetJoyAbs() - Reads the absolute position of the specified joystick
//
///////////////////////////////////////////////////////////////////////////
void IN_GetJoyAbs(word joy,word *xp,word *yp)
{
*xp = 0;
*yp = 0;
}
///////////////////////////////////////////////////////////////////////////
//
// INL_GetJoyDelta() - Returns the relative movement of the specified
// joystick (from +/-127)
//
///////////////////////////////////////////////////////////////////////////
void INL_GetJoyDelta(word joy,int *dx,int *dy)
{
*dx = 0;
*dy = 0;
}
///////////////////////////////////////////////////////////////////////////
//
// INL_GetJoyButtons() - Returns the button status of the specified
// joystick
//
///////////////////////////////////////////////////////////////////////////
static word INL_GetJoyButtons(word joy)
{
return 0;
}
///////////////////////////////////////////////////////////////////////////
//
// INL_StartKbd() - Sets up my keyboard stuff for use
//
///////////////////////////////////////////////////////////////////////////
static void INL_StartKbd(void)
{
IN_ClearKeysDown();
}
///////////////////////////////////////////////////////////////////////////
//
// INL_ShutKbd() - Restores keyboard control to the BIOS
//
///////////////////////////////////////////////////////////////////////////
static void INL_ShutKbd(void)
{
}
///////////////////////////////////////////////////////////////////////////
//
// INL_StartMouse() - Detects and sets up the mouse
//
///////////////////////////////////////////////////////////////////////////
static boolean INL_StartMouse(void)
{
return false;
}
///////////////////////////////////////////////////////////////////////////
//
// INL_ShutMouse() - Cleans up after the mouse
//
///////////////////////////////////////////////////////////////////////////
static void INL_ShutMouse(void)
{
}
///////////////////////////////////////////////////////////////////////////
//
// IN_SetupJoy() - Sets up thresholding values and calls INL_SetJoyScale()
// to set up scaling values
//
///////////////////////////////////////////////////////////////////////////
void IN_SetupJoy(word joy,word minx,word maxx,word miny,word maxy)
{
}
///////////////////////////////////////////////////////////////////////////
//
// INL_StartJoy() - Detects & auto-configures the specified joystick
// The auto-config assumes the joystick is centered
//
///////////////////////////////////////////////////////////////////////////
static boolean INL_StartJoy(word joy)
{
return false;
}
///////////////////////////////////////////////////////////////////////////
//
// INL_ShutJoy() - Cleans up the joystick stuff
//
///////////////////////////////////////////////////////////////////////////
static void INL_ShutJoy(word joy)
{ {
JoysPresent[joy] = false;
} }
void VL_DirectPlot(int x1, int y1, int x2, int y2)
///////////////////////////////////////////////////////////////////////////
//
// IN_Startup() - Starts up the Input Mgr
//
///////////////////////////////////////////////////////////////////////////
void IN_Startup(void)
{
boolean checkjoys,checkmouse;
word i;
if (IN_Started)
return;
checkjoys = true;
checkmouse = true;
if (MS_CheckParm("nojoy"))
checkjoys = false;
if (MS_CheckParm("nomouse"))
checkmouse = false;
INL_StartKbd();
MousePresent = checkmouse ? INL_StartMouse() : false;
for (i = 0;i < MaxJoys;i++)
JoysPresent[i] = checkjoys ? INL_StartJoy(i) : false;
IN_Started = true;
}
///////////////////////////////////////////////////////////////////////////
//
// IN_Shutdown() - Shuts down the Input Mgr
//
///////////////////////////////////////////////////////////////////////////
void IN_Shutdown()
{
word i;
if (!IN_Started)
return;
INL_ShutMouse();
for (i = 0;i < MaxJoys;i++)
INL_ShutJoy(i);
INL_ShutKbd();
IN_Started = false;
}
///////////////////////////////////////////////////////////////////////////
//
// IN_ClearKeysDown() - Clears the keyboard array
//
///////////////////////////////////////////////////////////////////////////
void IN_ClearKeysDown()
{
LastScan = sc_None;
LastASCII = key_None;
memset(Keyboard, 0, sizeof(Keyboard));
}
///////////////////////////////////////////////////////////////////////////
//
// IN_ReadControl() - Reads the device associated with the specified
// player and fills in the control info struct
//
///////////////////////////////////////////////////////////////////////////
void IN_ReadControl(int player,ControlInfo *info)
{
boolean realdelta = false;
word buttons;
int dx,dy;
Motion mx,my;
ControlType type;
KeyboardDef *def;
dx = dy = 0;
mx = my = motion_None;
buttons = 0;
IN_CheckAck();
switch (type = Controls[player])
{
case ctrl_Keyboard:
def = &KbdDefs;
if (Keyboard[def->upleft])
mx = motion_Left,my = motion_Up;
else if (Keyboard[def->upright])
mx = motion_Right,my = motion_Up;
else if (Keyboard[def->downleft])
mx = motion_Left,my = motion_Down;
else if (Keyboard[def->downright])
mx = motion_Right,my = motion_Down;
if (Keyboard[def->up])
my = motion_Up;
else if (Keyboard[def->down])
my = motion_Down;
if (Keyboard[def->left])
mx = motion_Left;
else if (Keyboard[def->right])
mx = motion_Right;
if (Keyboard[def->button0])
buttons += 1 << 0;
if (Keyboard[def->button1])
buttons += 1 << 1;
realdelta = false;
break;
case ctrl_Joystick1:
case ctrl_Joystick2:
INL_GetJoyDelta(type - ctrl_Joystick,&dx,&dy);
buttons = INL_GetJoyButtons(type - ctrl_Joystick);
realdelta = true;
break;
case ctrl_Mouse:
INL_GetMouseDelta(&dx,&dy);
buttons = INL_GetMouseButtons();
realdelta = true;
break;
}
if (realdelta)
{
mx = (dx < 0)? motion_Left : ((dx > 0)? motion_Right : motion_None);
my = (dy < 0)? motion_Up : ((dy > 0)? motion_Down : motion_None);
}
else
{
dx = mx * 127;
dy = my * 127;
}
info->x = dx;
info->xaxis = mx;
info->y = dy;
info->yaxis = my;
info->button0 = buttons & (1 << 0);
info->button1 = buttons & (1 << 1);
info->button2 = buttons & (1 << 2);
info->button3 = buttons & (1 << 3);
info->dir = DirTable[((my + 1) * 3) + (mx + 1)];
}
///////////////////////////////////////////////////////////////////////////
//
// IN_Ack() - waits for a button or key press. If a button is down, upon
// calling, it must be released for it to be recognized
//
///////////////////////////////////////////////////////////////////////////
boolean btnstate[8];
void IN_StartAck()
{
unsigned i,buttons;
//
// get initial state of everything
//
IN_ClearKeysDown();
memset (btnstate,0,sizeof(btnstate));
buttons = IN_JoyButtons () << 4;
if (MousePresent)
buttons |= IN_MouseButtons ();
for (i=0;i<8;i++,buttons>>=1)
if (buttons&1)
btnstate[i] = true;
}
boolean IN_CheckAck()
{
unsigned i,buttons;
if (LastScan)
return true;
buttons = IN_JoyButtons() << 4;
if (MousePresent)
buttons |= IN_MouseButtons ();
for (i=0;i<8;i++,buttons>>=1)
if ( buttons&1 )
{
if (!btnstate[i])
return true;
}
else
btnstate[i]=false;
return false;
}
void IN_Ack (void)
{
IN_StartAck ();
// return; /* TODO: fix when keyboard implemented */
while (!IN_CheckAck ()) ;
}
///////////////////////////////////////////////////////////////////////////
//
// IN_UserInput() - Waits for the specified delay time (in ticks) or the
// user pressing a key or a mouse button. If the clear flag is set, it
// then either clears the key or waits for the user to let the mouse
// button up.
//
///////////////////////////////////////////////////////////////////////////
boolean IN_UserInput(longword delay)
{
longword lasttime;
lasttime = get_TimeCount();
IN_StartAck ();
do {
if (IN_CheckAck())
return true;
} while ( (get_TimeCount() - lasttime) < delay );
return false;
}
//===========================================================================
/*
===================
=
= IN_MouseButtons
=
===================
*/
byte IN_MouseButtons (void)
{ {
return 0;
} }
/* void INL_Update()
===================
=
= IN_JoyButtons
=
===================
*/
byte IN_JoyButtons (void)
{ {
return 0;
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
vwidth = 320;
vheight = 200;
return WolfMain(argc, argv); return WolfMain(argc, argv);
} }
...@@ -58,8 +58,10 @@ void VL_WaitVBL(int vbls) ...@@ -58,8 +58,10 @@ void VL_WaitVBL(int vbls)
void VW_UpdateScreen() void VW_UpdateScreen()
{ {
//VL_WaitVBL(1); //VL_WaitVBL(1);
memcpy(surface->pixels, gfxbuf, vwidth*vheight); //memcpy(surface->pixels, gfxbuf, vwidth*vheight);
SDL_UpdateRect(surface, 0, 0, 0, 0); //SDL_UpdateRect(surface, 0, 0, 0, 0);
SDL_Flip(surface);
} }
/* /*
...@@ -83,22 +85,25 @@ void VL_Startup() ...@@ -83,22 +85,25 @@ void VL_Startup()
vheight *= 3; vheight *= 3;
} }
if (gfxbuf == NULL) //if (gfxbuf == NULL)
gfxbuf = malloc(vwidth * vheight * 1); // gfxbuf = malloc(vwidth * vheight * 1);
if (SDL_Init(SDL_INIT_VIDEO) < 0) { if (SDL_Init(SDL_INIT_VIDEO) < 0) {
Quit("Couldn't init SDL"); Quit("Couldn't init SDL");
} }
if (MS_CheckParm("fullscreen")) if (MS_CheckParm("fullscreen"))
surface = SDL_SetVideoMode(vwidth, vheight, 8, SDL_SWSURFACE|SDL_HWPALETTE|SDL_FULLSCREEN); //surface = SDL_SetVideoMode(vwidth, vheight, 8, SDL_SWSURFACE|SDL_HWPALETTE|SDL_FULLSCREEN);
surface = SDL_SetVideoMode(vwidth, vheight, 8, SDL_SWSURFACE|SDL_HWPALETTE|SDL_FULLSCREEN|SDL_DOUBLEBUF);
else else
surface = SDL_SetVideoMode(vwidth, vheight, 8, SDL_SWSURFACE|SDL_HWPALETTE); //surface = SDL_SetVideoMode(vwidth, vheight, 8, SDL_SWSURFACE|SDL_HWPALETTE);
surface = SDL_SetVideoMode(vwidth, vheight, 8, SDL_SWSURFACE|SDL_HWPALETTE|SDL_DOUBLEBUF);
if (surface == NULL) { if (surface == NULL) {
SDL_Quit(); SDL_Quit();
Quit ("Couldn't set 320x200 mode"); Quit("Couldn't set 320x200 mode");
} }
gfxbuf = surface->pixels;
SDL_WM_SetCaption(GAMENAME, GAMENAME); SDL_WM_SetCaption(GAMENAME, GAMENAME);
...@@ -115,10 +120,10 @@ void VL_Startup() ...@@ -115,10 +120,10 @@ void VL_Startup()
void VL_Shutdown() void VL_Shutdown()
{ {
if (gfxbuf != NULL) { //if (gfxbuf != NULL) {
free(gfxbuf); // free(gfxbuf);
gfxbuf = NULL; // gfxbuf = NULL;
} //}
SDL_Quit(); SDL_Quit();
} }
...@@ -174,7 +179,8 @@ void VL_DirectPlot(int x1, int y1, int x2, int y2) ...@@ -174,7 +179,8 @@ void VL_DirectPlot(int x1, int y1, int x2, int y2)
void VL_DirectPlotFlush() void VL_DirectPlotFlush()
{ {
SDL_UpdateRect(surface, 0, 0, 0, 0); //SDL_UpdateRect(surface, 0, 0, 0, 0);
SDL_Flip(surface);
} }
static int XKeysymToScancode(unsigned int keysym) static int XKeysymToScancode(unsigned int keysym)
......
...@@ -151,12 +151,12 @@ void ParseTimedCommand() ...@@ -151,12 +151,12 @@ void ParseTimedCommand()
void TimedPicCommand() void TimedPicCommand()
{ {
ParseTimedCommand (); ParseTimedCommand();
// //
// update the screen, and wait for time delay // update the screen, and wait for time delay
// //
VW_UpdateScreen (); VW_UpdateScreen();
// //
// wait for time // wait for time
...@@ -167,7 +167,7 @@ void TimedPicCommand() ...@@ -167,7 +167,7 @@ void TimedPicCommand()
// //
// draw pic // draw pic
// //
VWB_DrawPic (picx&~7,picy,picnum); VWB_DrawPic(picx&~7, picy, picnum);
} }
...@@ -234,7 +234,7 @@ void HandleCommand() ...@@ -234,7 +234,7 @@ void HandleCommand()
break; break;
case 'T': // ^Tyyy,xxx,ppp,ttt waits ttt tics, then draws pic case 'T': // ^Tyyy,xxx,ppp,ttt waits ttt tics, then draws pic
TimedPicCommand (); TimedPicCommand();
break; break;
case 'G': // ^Gyyy,xxx,ppp draws graphic case 'G': // ^Gyyy,xxx,ppp draws graphic
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment