Commit 8ecd574b authored by Steven Fuller's avatar Steven Fuller

* Now compiles with no errors/warnings with -Wall -ansi -pedantic

* Fixed bug with missing textures (moved InitRenderView call to correct
place)
* Doesn't call glBindTexture if texture is the same.
* Floors are drawn the correct color (glColor3ub instead of glColor3b).
* Updated README (lots of text) and TODO
parent 5da70105
......@@ -18,8 +18,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "wolfdef.h" /* Get the prototypes */
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
unsigned char *VideoPointer;
Word VideoWidth;
......
......@@ -82,6 +82,8 @@ void KillActor(actor_t *ActorPtr)
case CL_DKNIGHT:
PlaceItemType(S_G_KEY,ActorPtr); /* Drop a key */
break;
default:
break;
}
++gamestate.killcount; /* I killed someone! */
ActorPtr->flags = FL_DEAD; /* remove old actor marker*/
......
......@@ -26,7 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "wolfdef.h"
void DisplayScreen(int res)
void DisplayScreen(Word res)
{
}
......@@ -72,6 +72,8 @@ void DrawXMShape(Word x, Word y, void *ShapePtr)
{
}
GLuint LastTexture;
GLuint smltex[65];
void MakeSmallFont()
......@@ -84,6 +86,8 @@ void MakeSmallFont()
pal = LoadAResource(rGamePal);
LastTexture = 0;
for (i = 0; i < 64; i++) {
ArtStart = ArtData[i];
......@@ -181,6 +185,7 @@ void DrawSmall(Word x, Word y, Word tile)
glPushMatrix();
glLoadIdentity();
LastTexture = smltex[tile];
glBindTexture(GL_TEXTURE_2D, smltex[tile]);
glBegin(GL_QUADS);
......@@ -246,6 +251,7 @@ Byte *DeSprite(Byte *data, Byte *pal)
void IO_ClearViewBuffer()
{
LastTexture = 0;
glBindTexture(GL_TEXTURE_2D, 0);
/* glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); */
......@@ -260,10 +266,10 @@ void IO_ClearViewBuffer()
glPushMatrix();
glLoadIdentity();
glColor3b(Pal[0x2F*3+0], Pal[0x2F*3+1], Pal[0x2F*3+2]);
glColor3ub(Pal[0x2F*3+0], Pal[0x2F*3+1], Pal[0x2F*3+2]);
glRectf(-1, 0, 1, 1);
glColor3b(Pal[0x2A*3+0], Pal[0x2A*3+1], Pal[0x2A*3+2]);
glColor3ub(Pal[0x2A*3+0], Pal[0x2A*3+1], Pal[0x2A*3+2]);
glRectf(1, -1, -1, 0);
glColor3f(1.0, 1.0, 1.0);
......@@ -281,6 +287,7 @@ void InitRenderView()
Byte *pal;
int i;
LastTexture = 0;
glEnable(GL_TEXTURE_2D);
pal = LoadAResource(rGamePal);
......@@ -305,12 +312,13 @@ void InitRenderView()
buf = Pal256toRGB(buf2, 128 * 128, pal);
free(buf2);
/*
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
///*
*/
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//*/
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
......@@ -321,11 +329,12 @@ void InitRenderView()
for (i = 1; i < S_LASTONE; i++) {
Byte *buf;
if (sprtex[i]) {
if (SpriteArray[i] == NULL) {
glDeleteTextures(1, &sprtex[i]);
sprtex[i] = 0;
} else {
}
continue;
} else if (SpriteArray[i]) {
......@@ -336,13 +345,13 @@ void InitRenderView()
glBindTexture(GL_TEXTURE_2D, sprtex[i]);
buf = DeSprite(SpriteArray[i], pal);
/*
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
///*
*/
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//*/
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
......@@ -392,7 +401,15 @@ void DrawSprite(thing_t *t)
glTranslatef(-(double)t->x / 256.0, 0, -(double)t->y / 256.0);
glRotatef(90.0+((double)gamestate.viewangle / (double)ANGLES * 360.0), 0.0, 1.0, 0.0);
glBindTexture(GL_TEXTURE_2D, sprtex[t->sprite]);
if (sprtex[t->sprite] == 0) {
fprintf(stderr, "ERROR: 0 texture in DrawSprite (%d)\n", t->sprite);
}
if (LastTexture != sprtex[t->sprite]) {
LastTexture = sprtex[t->sprite];
glBindTexture(GL_TEXTURE_2D, sprtex[t->sprite]);
}
glBegin(GL_QUADS);
glTexCoord2f(1.0, 0.0); glVertex2f( 0.5, 1);
glTexCoord2f(1.0, 1.0); glVertex2f( 0.5, -1);
......@@ -411,7 +428,11 @@ void DrawTopSprite()
glPushMatrix();
glLoadIdentity();
glBindTexture(GL_TEXTURE_2D, sprtex[topspritenum]);
if (LastTexture != sprtex[topspritenum]) {
LastTexture = sprtex[topspritenum];
glBindTexture(GL_TEXTURE_2D, sprtex[topspritenum]);
}
glBegin(GL_QUADS);
glTexCoord2f(1.0, 0.0); glVertex3f( 0.5, 1, z);
glTexCoord2f(1.0, 1.0); glVertex3f( 0.5, -1, z);
......@@ -611,7 +632,6 @@ void AddSprite (thing_t *thing, Word actornum)
void DrawSprites(void)
{
vissprite_t *dseg; /* Pointer to visible sprite record */
int x1,x2; /* Left x, Right x */
Word i; /* Index */
static_t *stat; /* Pointer to static sprite record */
actor_t *actor; /* Pointer to active actor record */
......@@ -665,11 +685,11 @@ void DrawSprites(void)
/* draw from smallest scale to largest */
/* TODO: GL should raw back to front with depth */
xe=firstevent;
xe = &firstevent[i-1];
do {
dseg = &vissprites[xe[0]&(MAXVISSPRITES-1)]; /* Which one? */
DrawSprite(dseg->pos);
++xe;
--xe;
} while (--i);
}
}
......@@ -928,11 +948,14 @@ void P_DrawSegx(saveseg_t *seg)
smin = -((float)pos + texslide);
smax = -((float)pos + (max - min));
if (waltex[t] == 0)
fprintf(stderr, "ERROR: 0 texture in P_DrawSegx!\n");
if (waltex[t])
if (LastTexture != waltex[t]) {
LastTexture = waltex[t];
glBindTexture(GL_TEXTURE_2D, waltex[t]);
else
fprintf(stderr, "ERROR: 0 texture in P_DrawSegx!\n");
}
glBegin(GL_QUADS);
switch(seg->dir&3) {
......@@ -951,16 +974,20 @@ void P_DrawSegx(saveseg_t *seg)
}
break;
case di_south:
min += texslide;
if (min == 0.5 && texslide == 0.0) { min -= 0.5; max -= 0.5; }
if (texslide == 0.0 && min == 0.5)
{ min -= 0.5; max -= 0.5; }
else
min += texslide;
glTexCoord2f(max, 0.0); glVertex3f(plane, -1, smin);
glTexCoord2f(min, 0.0); glVertex3f(plane, -1, smax);
glTexCoord2f(min, 1.0); glVertex3f(plane, 1, smax);
glTexCoord2f(max, 1.0); glVertex3f(plane, 1, smin);
break;
case di_east:
min += texslide;
if (min == 0.5 && texslide == 0.0) { min -= 0.5; max -= 0.5; }
if (texslide == 0.0 && min == 0.5)
{ min -= 0.5; max -= 0.5; }
else
min += texslide;
glTexCoord2f(max, 0.0); glVertex3f(smin, -1, plane);
glTexCoord2f(min, 0.0); glVertex3f(smax, -1, plane);
glTexCoord2f(min, 1.0); glVertex3f(smax, 1, plane);
......
......@@ -228,11 +228,10 @@ static void RollRatio(Word x,Word y,Word ratio)
**********************************/
void LevelCompleted (void)
void LevelCompleted(void)
{
Word k;
LongWord *PackPtr;
Byte *ShapePtr;
LongWord PackLength;
/* setup */
......
......@@ -303,10 +303,6 @@ void SpawnStand(Word x,Word y,class_t which)
if (NoEnemies) /* DEBUG MODE */
return;
if (numactors >= MAXACTORS) {
fprintf("SpawnStand DEBUG (%d, %d)\n", numactors, MAXACTORS);
}
if (numactors==MAXACTORS) { /* Too many actors already? */
return; /* Exit */
}
......@@ -353,10 +349,6 @@ void SpawnAmbush(Word x,Word y,class_t which)
if (NoEnemies) /* DEBUG MODE */
return;
if (numactors >= MAXACTORS) {
fprintf("SpawnAmbush DEBUG (%d, %d)\n", numactors, MAXACTORS);
}
ActorPtr = &actors[numactors]; /* Get the pointer to the new actor entry */
SpawnStand(x,y,which); /* Fill in all the entries */
ActorPtr->flags |= FL_AMBUSH; /* Set the ambush flag */
......@@ -644,7 +636,7 @@ Boolean SetupGameLevel(void)
if (!LoadWallArt()) { /* Get the wall shapes */
return FALSE;
}
/* map.tilemap is now used to hold actor numbers if the TI_ACTOR bit is set in
/* map.tilemap is now used to hold actor numbers if the TI_ACTOR bit is set in
the word tilemap*/
memset(WallHits,0,sizeof(WallHits)); /* Init the wall table */
......@@ -653,7 +645,14 @@ Boolean SetupGameLevel(void)
WallHits[Count] = 1; /* Force the permanent sprites to load */
} while (++Count<S_VICTORY+1);
SpawnThings(); /* Create all the characters in the game level */
return LoadSpriteArt(); /* Load in the sprite art */
if (!LoadSpriteArt()) { /* Load in the sprite art */
return FALSE;
}
InitRenderView();
return TRUE;
}
/************************************
......
......@@ -3,8 +3,8 @@ CC = gcc
#CFLAGS = -Wall -O6 -fomit-frame-pointer -ffast-math -funroll-loops -mpentiumpro -mcpu=pentiumpro -march=pentiumpro
#CFLAGS = -g -Wall -O6 -fomit-frame-pointer -ffast-math -funroll-loops -mpentiumpro -mcpu=pentiumpro -march=pentiumpro
#CFLAGS = -g -Wall
#CFLAGS = -g -Wall -ansi -pedantic
CFLAGS = -g
CFLAGS = -g -Wall -ansi -pedantic
#CFLAGS = -g
#CFLAGS = -Os -g
#CFLAGS = -g -Wall -I/home/relnev/cvs/oal/include
......
......@@ -181,6 +181,8 @@ void GiveAmmo(Word ammo)
gamestate.pendingweapon = WP_CHAINGUN;
}
}
default:
break;
}
}
......
......@@ -72,6 +72,8 @@ void ChangeWeapon (void)
break;
case WP_MISSILE:
IO_DrawAmmo(gamestate.missiles); /* Draw missiles */
default:
break;
}
}
......@@ -100,6 +102,9 @@ void Cmd_Fire(void)
if (!gamestate.missiles) {
OutOfAmmo(); /* Change the weapon */
}
break;
default:
break;
}
gamestate.attackframe = 1; /* Begin the attack */
gamestate.attackcount = SHOTRATE; /* Time before next action */
......@@ -476,6 +481,9 @@ void MovePlayer(void)
return;
}
MissileAttack(); /* Shoot the missile */
break;
default:
break;
}
}
......@@ -538,6 +546,9 @@ void MovePlayer(void)
if (!gamestate.missiles) { /* Out of missiles? */
OutOfAmmo(); /* Switch weapons */
}
break;
default:
break;
}
gamestate.attackcount = 0; /* Shut down the attack */
gamestate.attackframe = 0;
......
This is not yet finished, but:
Wolfenstein 3D is an id Software game. This is a port of the Macintosh
version that was released by MacPlay in 1994. You can find information about
the source release at: http://www.maccentral.com/news/0001/24.wolf3d.shtml
To use this, you need the resource fork from the First Encounter (the two
level shareware version) or the Second Encounter (the for-sell version).
You can find the First Encounter on many web sites (Search for: Macintosh
Wolfenstein 3D download) and you can get the Second Encounter on eBay (I
believe it is no longer sold by Interplay, but I got my unopened copy from
eBay).
To get the resource fork from the shareware version, you need something that
can extract .sit files and then save resource forks TO A DIFFERENT FILE.
There is a linux version of Alladin StuffIT Expander but I could not get it
to work; I had to use the Windows version -- which defaults to ignoring
resource forks.
If you have the Second Encounter on CD, then it is easy. Just mount the Mac
CD and ".resource/Wolfenstein 3D:aa" is your resource fork (make sure you
have HFS support in the kernel (or load the module) and mount -t hfs
/dev/cdrom /cdrom. Resource forks by default on HFS-mounted partitions in
Linux are kept seperately in .resource directories).
If the First/Second Encounter on some other sort of medium (such as .sit or on
disks) then I don't know how to get the resource fork -- you could try
something similiar to what was outlined above.
For comparison:
First Encounter reosurce fork size: 1537319
md5sum: 0283e4ab0143ad47bd32db9bd686b0fa
Second Encounter resource fork size: 2441827
md5sum: c5984ef902523430426a8976e1527742
(No, I won't send them to you... Getting them is part of the challenge!)
The Third Encounter is not supported by this code -- as far as I know, the
formats are totally different.
The current code does not check for the validity of a resource fork, but if
you get errors with LoadAResource2, then most likely the file is not a
resource fork.
Status of the port:
You can play the game, but not save, load, change difficulty, hear sounds
and music, use the mouse, and change window size. View TODO for the
specifics.
Specifically:
swolf3d : The SVGAlib Version. Only supports 320x200x256 at the moment, so
only parts of the intro screens are shown (they are 512x384).
xwolf3d : The Xlib Version. Only supports 8bpp PseudoColor visuals.
gwolf3d : The gtk+ Version. Only supports 8bpp visuals, but has a menu that
has a Quit option. I currently don't really like gtk+; anyone know of a
more complete api reference than the one on http://www.gtk.org? But I'll
use it so I can have menus and dialogs without having to create them in Xlib.
Any suggestions?
glwolf3d: The OpenGL Version (written using Xlib w/ GLX). I like it. Not
all graphics are currently shown.
To build these binaries, type 'make' in the directory with the source... If
you don't want to build a certain binary, edit the Makefile. On the line
"all: swolf3d xwolf3d gwolf3d glwolf3d" in the Makefile, you can remove the
names of which binaries that you do not wish to build.
Now you should be able to do something like:
./swolf3d <resource file>
and off you go!
Thanks to id Software for allowing me to release this source under the GNU
GPL (see LICENSE) and Bill Heineman (Programmer and Project Lead of the
Macintosh version) for answering my inquiries. WolfReadMe.txt is included
from the original Mac Wolf3d source release.
Steven Fuller <relnev@users.sourceforge.net>
----------------------------
TODO (Stuff to Write About):
Contents:
* About (General)
* How to Compile
......
......@@ -321,9 +321,7 @@ Boolean StartupRendering(Word NewSize)
return FALSE;
}
MathSize = NewSize;
InitRenderView();
return TRUE;
}
......
......@@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "wolfdef.h"
void DisplayScreen(int res)
void DisplayScreen(Word res)
{
LongWord *PackPtr;
LongWord PackLength;
......
......@@ -47,7 +47,6 @@ void DLZSSSound(Byte *Dest,Byte *Src,LongWord Length)
if (Length >= RunCount) {
Length -= RunCount;
} else {
printf("Overrun: l:%d r:%d\n", Length, RunCount);
RunCount = Length;
Length = 0;
}
......
......@@ -10,24 +10,31 @@ TODO:
with the keypad arrow keys if only mode supported 320x200x256 (center if
640x400 or 480 is supported?)
* Finish moving all 2D code to SoftDraw.c
* Compile with -Wall -ansi -pedantic (there shouldn't be much in the way)
* Finish OpenGL
- Check if top sprite drawing is correct
+ Status bars, Introscreens, etc. [Draw(XM)Shape]
- Not sure exactly yet how I will implement this.
- Correct viewing frustum
+ Allow window resizing
- Not sure what to about the currently loaded GameShapes (keep or load
most appropiate for the new video mode).
- Could use the LastTexture to have less glBegin/Ends (would need to know
where to stop though (try IO_DisplayViewBuffer).
* Save/Load Games
* Documentation
* Sound!
- Waiting for information about music.
* Command line (temporary workaround for no menus).
* Interface
+ Menus and dialog boxes
- Command line (temporary workaround for no menus).
- Text only menus (similar to what snes9x has).
* Different depths/visuals for software clients.
BUGS:
* Software Drawing seems like its imprecise, stationary sprites move back and
forth, and walls 'swim' when you move around, or sprites pop into different
sizes when are far enough and get closer/farther away
- Possibly caused by 8.8 imprecision?
* Floors are drawn with wrong color in GL version?
IDEAS:
* Menu Keys
......
......@@ -18,7 +18,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "wolfdef.h"
#include <string.h>
/**********************************
......@@ -314,7 +313,6 @@ void PrepPlayLoop()
ReleaseScalers(); /* Release the compiled scalers */
PlaySong(0);
while (!SetupGameLevel()) { /* Try loading it again */
printf("SetGameLevel returned 0...\n");
Again:
ReleaseMap(); /* Oh oh... */
if (!GameViewSize) { /* Smallest screen? */
......@@ -325,7 +323,6 @@ Again:
}
}
if (!StartupRendering(GameViewSize)) {
printf("StartupRendering returned 0...\n");
ReleaseScalers();
goto Again;
}
......
......@@ -127,7 +127,7 @@ void *LoadAResource2(Word RezNum, LongWord Type)
memcpy(c->buf, c->dat, c->size);
} else {
/* DEBUG: we want a fresh copy... */
printf("DEBUG: Item %d/%d already loaded!\n", Type, RezNum);
printf("DEBUG: Item %ld/%d already loaded!\n", Type, RezNum);
free(c->buf);
c->buf = malloc(c->size);
memcpy(c->buf, c->dat, c->size);
......
......@@ -157,7 +157,7 @@ void EndGetPsyched(void)
void ShareWareEnd(void)
{
SetAPalette(rGamePal);
printf("ShareWareEnd()\n");
/* printf("ShareWareEnd()\n"); */
SetAPalette(rBlackPal);
}
......
......@@ -21,6 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <getopt.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
......@@ -64,15 +65,27 @@ int main(int argc, char *argv[])
XColor fg = { 0 };
char data[8] = { 0x01 };
char *display;
int mask, i, major, minor, verbose = 0;
int mask, major, minor, verbose = 0;
int opt;
if (argc != 2) {
while ((opt = getopt(argc, argv, "v")) != -1) {
switch(opt) {
case 'v':
verbose = 1;
break;
default:
fprintf(stderr, "%d (%c) is unknown to me\n", opt, opt);
break;
}
}
if ((argc - optind) != 1) {
fprintf(stderr, "usage: %s <mac wolf3d resource fork>\n", argv[0]);
exit(EXIT_FAILURE);
}
if (InitResources(argv[1])) {
fprintf(stderr, "could not load %s\n", argv[1]);
if (InitResources(argv[optind])) {
fprintf(stderr, "could not load %s\n", argv[optind]);
exit(EXIT_FAILURE);
}
......
......@@ -93,7 +93,7 @@ static void image_focus_out(GtkWidget *widget, GdkEventButton *event, gpointer d
image_focus = 0;
}
extern int KeyPressed;
static int KeyPressed;
void keyboard_handler(int key, int press);
......@@ -127,7 +127,6 @@ static GtkItemFactoryEntry menu_items[] = {
int main(int argc, char *argv[])
{
gboolean s[256];
int i;
if (argc != 2) {
......@@ -155,7 +154,6 @@ int main(int argc, char *argv[])
cmap = gdk_colormap_new(visual, TRUE);
for (i = 0; i < 256; i++)
colors[i].pixel = i;
/* printf("%d\n", gdk_colormap_alloc_colors(cmap, colors, 256, TRUE, TRUE, s)); */
gtk_widget_set_default_colormap(cmap);
......@@ -208,17 +206,8 @@ int main(int argc, char *argv[])
gtk_signal_connect(GTK_OBJECT(event_box), "button_press_event", GTK_SIGNAL_FUNC(image_focus_in), NULL);
gtk_signal_connect(GTK_OBJECT(menubar), "button_press_event", GTK_SIGNAL_FUNC(image_focus_out), NULL);
/* gtk_widget_set_usize(GTK_WIDGET(image_area), 320, 200); */
/* gtk_box_pack_start(GTK_BOX(main_vbox), event_box, FALSE, TRUE, 0); */
/* gtk_widget_show(event_box); */
gtk_widget_realize(event_box);
/* gtk_box_pack_start(GTK_BOX(main_vbox), GTK_WIDGET(image_area), FALSE, TRUE, 0);
*/
/* gtk_widget_show(GTK_WIDGET(image_area)); */
/* UpdateColors(); */
gtk_widget_show(win);
......@@ -274,9 +263,10 @@ void BlastScreen2(Rect *BlastRect)
{
/* BlastScreen(); */
GdkRectangle r;
/*
int x;
char *ptrs, *ptrd;
*/
r.x = BlastRect->left;
r.y = BlastRect->top;
r.width = BlastRect->right - BlastRect->left;
......@@ -380,7 +370,6 @@ Word NewGameWindow(Word NewVidSize)
/* Keyboard Hack */
static int RSJ;
static int KeyPressed;
static int keys[128];
void FlushKeys()
......
......@@ -213,7 +213,7 @@ struct {
{ { SC(L), SC(E), SC(D), SC(O), SC(U), SC(X) }, 0 }, /* "LEDOUX" */
{ { SC(S), SC(E), SC(G), SC(E), SC(R) }, 0 }, /* "SEGER" */
{ { SC(M), SC(C), SC(C), SC(A), SC(L), SC(L) }, 0 }, /* "MCCALL" */
{ { SC(A), SC(P), SC(P), SC(L), SC(E), SC(I), SC(I), SC(G), SC(S) } }, 0 /* "APPLEIIGS" */
{ { SC(A), SC(P), SC(P), SC(L), SC(E), SC(I), SC(I), SC(G), SC(S) }, 0 } /* "APPLEIIGS" */
};
const int CheatCount = sizeof(CheatCodes) / sizeof(CheatCodes[0]);
int CheatIndex;
......@@ -398,4 +398,3 @@ Word ChooseGameDiff(void)
return 1;
}
\ No newline at end of file
......@@ -555,6 +555,17 @@ extern Boolean rw_downside; /* True for dir_east and dir_south*/
extern Byte *ArtData[64];
extern Byte textures[MAPSIZE*2+5][MAPSIZE]; /* 0-63 is horizontal, 64-127 is vertical*/
extern void SetPalette(Byte *pal);
extern void DisplayScreen(Word res);
extern void InitRenderView();
extern void StartRenderView();
extern void Quit(char *str);
extern int DoEvents();
extern int InitResources(char *name);
extern void InitData();
extern int WolfMain(int argc, char *argv[]);
extern void FreeResources();
extern void BlastScreen(void);
extern void BlastScreen2(Rect *BlastRect);
extern void ReadSystemJoystick(void);
......@@ -712,7 +723,6 @@ extern void IO_DisplayViewBuffer(void);
/* In SetupScalers.c */
extern Boolean BuildCompScale (Word height, void **finalspot,Byte *WorkPtr);
extern Boolean SetupScalers(void);
extern void ReleaseScalers(void);
extern void IO_ScaleMaskedColumn(Word x,Word scale, unsigned short *sprite,Word column);
......
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