diff --git a/macsrc/Makefile b/macsrc/Makefile index 2307948549788cc0cd70a1e79a95341dfe7697c0..0b301c0e33a772e825f2d9d5b64566c7568eb762 100644 --- a/macsrc/Makefile +++ b/macsrc/Makefile @@ -26,10 +26,8 @@ LFLAGS = -lm SLFLAGS = $(LFLAGS) -lvga #XLFLAGS = $(LFLAGS) -L/usr/X11R6/lib -lX11 -lXext -lXxf86vm -lXxf86dga XLFLAGS = $(LFLAGS) -L/usr/X11R6/lib -lX11 -XMLFLAGS = $(LFLAGS) -L/usr/X11R6/lib -lX11 -L/usr/local/motif/lib GLFLAGS = $(LFLAGS) `gtk-config --libs` # -L/usr/X11R6/lib -lX11 -lXi -lXext -lgdk -lgtk GLLFLAGS = $(LFLAGS) -L/usr/lib -L/usr/X11R6/lib -lX11 -lXext -lGL -GLXMLFLAGS = $(LFLAGS) -L/usr/lib -L/usr/X11R6/lib -L/usr/local/motif/lib -lX11 -lXext -lGL NASM = nasm @@ -39,43 +37,29 @@ all: swolf3d xwolf3d glwolf3d $(SOBJS): Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h $(XOBJS): Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h -$(XMOBJS): Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h $(GOBJS): Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h $(GLOBJS): Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h -$(GLXMOBJS): Sounds.h Sprites.h States.h Wolf.h burger.h wolfdef.h .asm.o: $(NASM) -f elf -o $@ $< -vi_xm.o: vi_xm.c - gcc -c vi_xm.c $(CFLAGS) -I/usr/local/motif/include - vi_gtk.o: vi_gtk.c gcc -c vi_gtk.c $(CFLAGS) `gtk-config --cflags` -vi_glxm.o: vi_glxm.c - gcc -c vi_glxm.c $(CFLAGS) -I/usr/local/motif/include - swolf3d: $(SOBJS) gcc -o swolf3d $(SOBJS) $(SLFLAGS) xwolf3d: $(XOBJS) gcc -o xwolf3d $(XOBJS) $(XLFLAGS) -xmwolf3d: $(XMOBJS) - gcc -o xmwolf3d $(XMOBJS) $(XMLFLAGS) - gwolf3d: $(GOBJS) gcc -o gwolf3d $(GOBJS) $(GLFLAGS) glwolf3d: $(GLOBJS) gcc -o glwolf3d $(GLOBJS) $(GLLFLAGS) -glxmwolf3d: $(GLXMOBJS) - gcc -o glxmwolf3d $(GLXMOBJS) $(GLXMLFLAGS) - clean: - rm -rf swolf3d xwolf3d gwolf3d glwolf3d xmwolf3d glxmwolf3d *.o + rm -rf swolf3d xwolf3d gwolf3d glwolf3d *.o distclean: clean rm -rf core *~ DEADJOE diff --git a/macsrc/vi_glxm.c b/macsrc/vi_glxm.c deleted file mode 100644 index d5bc24ee33087495b98b25eb417d7ffeda4714f4..0000000000000000000000000000000000000000 --- a/macsrc/vi_glxm.c +++ /dev/null @@ -1,674 +0,0 @@ -/* -Copyright (C) 1992-1994 Id Software, Inc. -Copyright (C) 2000 Steven Fuller <relnev@atdot.org> - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -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 <setjmp.h> - -#include <Xm/MainW.h> - -#include <X11/keysym.h> - -#include <GL/gl.h> -#include <GL/glx.h> -#include <GL/glext.h> - -#include "wolfdef.h" - -Display *dpy; -int screen; -Window win, root; -XVisualInfo *vi; -GLXContext ctx; -Atom wmDeleteWindow; - -#ifdef GL_EXT_shared_texture_palette -extern int UseSharedTexturePalette; -extern PFNGLCOLORTABLEEXTPROC pglColorTableEXT; -#endif - -extern int CheckToken(const char *str, const char *item); - -int VidWidth, VidHeight, ViewHeight; - -int HandleEvents(); - -extern jmp_buf ResetJmp; -extern Boolean JumpOK; - -int attrib[] = { - GLX_RGBA, - GLX_RED_SIZE, 5, - GLX_GREEN_SIZE, 5, - GLX_BLUE_SIZE, 5, - GLX_DEPTH_SIZE, 16, - GLX_DOUBLEBUFFER, - None -}; - -int main(int argc, char *argv[]) -{ - XSetWindowAttributes attr; - Colormap cmap; - Pixmap bitmap; - Cursor cursor; - XColor bg = { 0 }; - XColor fg = { 0 }; - char data[8] = { 0x01 }; - char *display; - const char *ext; - int mask, major, minor, verbose = 0; - int opt; - - 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[optind])) { - fprintf(stderr, "could not load %s\n", argv[optind]); - exit(EXIT_FAILURE); - } - - display = getenv("DISPLAY"); - dpy = XOpenDisplay(getenv(display)); - if (dpy == NULL) { - fprintf(stderr, "Unable to open display %s\n", XDisplayName(display)); - exit(EXIT_FAILURE); - } - - screen = DefaultScreen(dpy); - - root = RootWindow(dpy, screen); - - if (glXQueryExtension(dpy, NULL, NULL) == False) { - fprintf(stderr, "Display %s does not support the GLX Extension\n", XDisplayName(display)); - exit(EXIT_FAILURE); - } - - if (glXQueryVersion(dpy, &major, &minor) == False) { - fprintf(stderr, "glXQueryVersion returned False?\n"); - exit(EXIT_FAILURE); - } else if (verbose) { - printf("GLX Version %d.%d\n", major, minor); - printf("GLX Client:\n"); - printf("GLX_VENDOR: %s\n", glXGetClientString(dpy, GLX_VENDOR)); - printf("GLX_VERSION: %s\n", glXGetClientString(dpy, GLX_VERSION)); - printf("GLX_EXTENSIONS: %s\n", glXGetClientString(dpy, GLX_EXTENSIONS)); - printf("GLX Server:\n"); - printf("GLX_VENDOR: %s\n", glXQueryServerString(dpy, screen, GLX_VENDOR)); - printf("GLX_VERSION: %s\n", glXQueryServerString(dpy, screen, GLX_VERSION)); - printf("GLX_EXTENSIONS: %s\n", glXQueryServerString(dpy, screen, GLX_EXTENSIONS)); - printf("Both:\n"); - printf("GLX_EXTENSIONS: %s\n", glXQueryExtensionsString(dpy, screen)); - } - - vi = glXChooseVisual(dpy, screen, attrib); - if (vi == NULL) { - fprintf(stderr, "No usable GL visual found on %s:%d\n", XDisplayName(display), screen); - exit(EXIT_FAILURE); - } - - ctx = glXCreateContext(dpy, vi, NULL, True); - if (ctx == NULL) { - fprintf(stderr, "GLX context creation failed\n"); - exit(EXIT_FAILURE); - } - - cmap = XCreateColormap(dpy, root, vi->visual, AllocNone); - - attr.colormap = cmap; - attr.event_mask = KeyPressMask | KeyReleaseMask | ExposureMask | - StructureNotifyMask; - mask = CWColormap | CWEventMask; - - win = XCreateWindow(dpy, root, 0, 0, 640, 480, 0, CopyFromParent, - InputOutput, vi->visual, mask, &attr); - - if (win == None) { - fprintf(stderr, "Unable to create window\n"); - exit(EXIT_FAILURE); - } - - XSetWMProperties(dpy, win, NULL, NULL, argv, argc, None, None, None); - - XStoreName(dpy, win, "Wolfenstein 3D"); - XSetIconName(dpy, win, "Wolfenstein 3D"); - - wmDeleteWindow = XInternAtom(dpy, "WM_DELETE_WINDOW", False); - XSetWMProtocols(dpy, win, &wmDeleteWindow, 1); - - bitmap = XCreateBitmapFromData(dpy, win, data, 8, 8); - cursor = XCreatePixmapCursor(dpy, bitmap, bitmap, &fg, &bg, 0, 0); - XDefineCursor(dpy, win, cursor); - - glXMakeCurrent(dpy, win, ctx); - - if (verbose) { - printf("GL Library:\n"); - printf("GL_VENDOR: %s\n", glGetString(GL_VENDOR)); - printf("GL_RENDERER: %s\n", glGetString(GL_RENDERER)); - printf("GL_VERSION: %s\n", glGetString(GL_VERSION)); - printf("GL_EXTENSIONS: %s\n", glGetString(GL_EXTENSIONS)); - } - - XMapWindow(dpy, win); - XFlush(dpy); - - ext = (const char *)glGetString(GL_EXTENSIONS); -#ifdef GL_EXT_shared_texture_palette - UseSharedTexturePalette = 0; - if (CheckToken(ext, "GL_EXT_shared_texture_palette")) { - pglColorTableEXT = glXGetProcAddressARB((unsigned const char *)"glColorTableEXT"); - if (pglColorTableEXT) { - UseSharedTexturePalette = 1; - printf("GL_EXT_shared_texture_palette found...\n"); - } - } -#endif - - glShadeModel(GL_FLAT); - - InitData(); - - SlowDown = 1; - GameViewSize = 3; - NewGameWindow(GameViewSize); - - ClearTheScreen(BLACK); - BlastScreen(); - - /* NoEnemies = 1; */ - - return WolfMain(argc, argv); -} - -void Quit(char *str) -{ - FreeResources(); - - glXDestroyContext(dpy, ctx); - - if (str && *str) { - fprintf(stderr, "%s\n", str); - exit(EXIT_FAILURE); - } - - exit(EXIT_SUCCESS); -} - -void BlastScreen2(Rect *BlastRect) -{ - BlastScreen(); -} - -#define w VidWidth -#define h VidHeight -#define v ViewHeight - -void BlastScreen() -{ - GLint error; - - glXSwapBuffers(dpy, win); - - error = glGetError(); - if (error != GL_NO_ERROR) { - do { - fprintf(stderr, "GL Error: %d\n", error); - error = glGetError(); - } while (error != GL_NO_ERROR); - exit(EXIT_FAILURE); - } -} - -Word VidXs[] = {320,512,640,640}; -Word VidYs[] = {200,384,400,480}; -Word VidVs[] = {160,320,320,400}; -Word VidPics[] = {rFaceShapes,rFace512,rFace640,rFace640}; -Word VidSize = -1; - -Word NewGameWindow(Word NewVidSize) -{ - XSizeHints sizehints; - - if (NewVidSize == VidSize) - return VidSize; - - if (NewVidSize < 4) { - w = VidXs[NewVidSize]; - h = VidYs[NewVidSize]; - v = VidVs[NewVidSize]; - } else { - fprintf(stderr, "Invalid Vid size: %d\n", NewVidSize); - exit(EXIT_FAILURE); - } - - sizehints.min_width = w; - sizehints.min_height = h; - sizehints.flags = PMinSize; - XSetWMNormalHints(dpy, win, &sizehints); - XResizeWindow(dpy, win, w, h); - - SetAPalette(rBlackPal); - ClearTheScreen(BLACK); - BlastScreen(); - - VidSize = NewVidSize; - - XSync(dpy, False); - glXWaitGL(); - glXWaitX(); - HandleEvents(); - - return VidSize; -} - -/* Keyboard Hack */ -static int RSJ; - -static int keys[128]; - -void FlushKeys() -{ - joystick1 = 0; - memset(keys, 0, sizeof(keys)); -} - -struct { - char code[13]; -} CheatCodes[] = { -{ "XUSCNIELPPA" }, { "IDDQD" }, -{ "BURGER" }, { "WOWZERS" }, -{ "LEDOUX" }, { "SEGER" }, -{ "MCCALL" }, { "APPLEIIGS" } -}; - -const int CheatCount = sizeof(CheatCodes) / sizeof(CheatCodes[0]); -int CheatIndex; - -#define SC_CURSORUPLEFT 1 -#define SC_CURSORUP 2 -#define SC_CURSORUPRIGHT 3 -#define SC_CURSORRIGHT 4 -#define SC_CURSORDOWNRIGHT 5 -#define SC_CURSORDOWN 6 -#define SC_CURSORDOWNLEFT 7 -#define SC_CURSORLEFT 8 -#define SC_CURSORBLOCKLEFT 9 -#define SC_CURSORBLOCKRIGHT 10 -#define SC_CURSORBLOCKUP 11 -#define SC_CURSORBLOCKDOWN 12 -#define SC_KEYPADENTER 13 -#define SC_ENTER 14 -#define SC_SPACE 15 -#define SC_LEFTALT 16 -#define SC_RIGHTALT 17 -#define SC_LEFTCONTROL 18 -#define SC_RIGHTCONTROL 19 -#define SC_LEFTSHIFT 20 -#define SC_RIGHTSHIFT 21 -#define SC_B 22 - -void UpdateKeys(KeySym key, int press) -{ - switch(key) { - case XK_KP_Home: - keys[SC_CURSORUPLEFT] = press; - break; - case XK_KP_Up: - keys[SC_CURSORUP] = press; - break; - case XK_KP_Page_Up: - keys[SC_CURSORUPRIGHT] = press; - break; - case XK_KP_Right: - keys[SC_CURSORRIGHT] = press; - break; - case XK_KP_Page_Down: - keys[SC_CURSORDOWNRIGHT] = press; - break; - case XK_KP_Down: - keys[SC_CURSORDOWN] = press; - break; - case XK_KP_End: - keys[SC_CURSORDOWNLEFT] = press; - break; - case XK_KP_Left: - keys[SC_CURSORLEFT] = press; - break; - - case XK_Up: - keys[SC_CURSORBLOCKUP] = press; - break; - case XK_Down: - keys[SC_CURSORBLOCKDOWN] = press; - break; - case XK_Left: - keys[SC_CURSORBLOCKLEFT] = press; - break; - case XK_Right: - keys[SC_CURSORBLOCKRIGHT] = press; - break; - - case XK_KP_Enter: - keys[SC_KEYPADENTER] = press; - break; - case XK_Return: - keys[SC_ENTER] = press; - break; - case XK_space: - keys[SC_SPACE] = press; - break; - - case XK_Alt_L: - keys[SC_LEFTALT] = press; - break; - case XK_Alt_R: - keys[SC_RIGHTALT] = press; - break; - - case XK_Control_L: - keys[SC_LEFTCONTROL] = press; - break; - case XK_Control_R: - keys[SC_RIGHTCONTROL] = press; - break; - - case XK_Shift_L: - keys[SC_LEFTSHIFT] = press; - break; - case XK_Shift_R: - keys[SC_RIGHTSHIFT] = press; - break; - - case XK_b: - keys[SC_B] = press; - break; - } -} - -void keyboard_handler(KeySym keycode, int press) -{ - int i; - - UpdateKeys(keycode, press); - - if (press == 0) { - switch(keycode) { - case XK_Escape: - Quit(NULL); /* fast way out */ - case XK_F2: - if (playstate == EX_STILLPLAYING) { - if (!SaveGame("wolf3d.sav")) - fprintf(stderr, "Unable to save game\n"); - } - break; - case XK_F3: - if (!LoadGame("wolf3d.sav")) { - fprintf(stderr, "Unable to load game\n"); - } else { - longjmp(ResetJmp, EX_LOADGAME); - } - break; - default: - break; - } - } - - if (RSJ) { - if (press == 0) { - for (i = 0; i < CheatCount; i++) { - char *key = XKeysymToString(keycode); - if (key == NULL) - break; - if (strlen(key) != 1) - break; - if (CheatCodes[i].code[CheatIndex] == toupper(key[0])) { - CheatIndex++; - if (CheatCodes[i].code[CheatIndex] == 0) { - PlaySound(SND_BONUS); - switch (i) { - case 0: - case 4: - GiveKey(0); - GiveKey(1); - gamestate.godmode = TRUE; - break; - case 1: - gamestate.godmode^=TRUE; - break; - case 2: - gamestate.machinegun = TRUE; - gamestate.chaingun = TRUE; - gamestate.flamethrower = TRUE; - gamestate.missile = TRUE; - GiveAmmo(gamestate.maxammo); - GiveGas(99); - GiveMissile(99); - break; - case 3: - gamestate.maxammo = 999; - GiveAmmo(999); - break; - case 5: - GiveKey(0); - GiveKey(1); - break; - case 6: - playstate=EX_WARPED; - nextmap = gamestate.mapon+1; - if (MapListPtr->MaxMap<=nextmap) - nextmap = 0; - break; - case 7: - ShowPush ^= TRUE; - break; - } - CheatIndex = 0; - } - break; - } - } - if (i == CheatCount) - CheatIndex = 0; - } - - joystick1 = 0; - - if (press == 0) { - switch(keycode) { - case XK_1: - gamestate.pendingweapon = WP_KNIFE; - break; - case XK_2: - if (gamestate.ammo) { - gamestate.pendingweapon = WP_PISTOL; - } - break; - case XK_3: - if (gamestate.ammo && gamestate.machinegun) { - gamestate.pendingweapon = WP_MACHINEGUN; - } - break; - case XK_4: - if (gamestate.ammo && gamestate.chaingun) { - gamestate.pendingweapon = WP_CHAINGUN; - } - break; - case XK_5: - if (gamestate.gas && gamestate.flamethrower) { - gamestate.pendingweapon = WP_FLAMETHROWER; - } - break; - case XK_6: - if (gamestate.missiles && gamestate.missile) { - gamestate.pendingweapon = WP_MISSILE; - } - break; - case XK_period: - case XK_slash: - joystick1 = JOYPAD_START; - break; - } - } - - if (keys[SC_CURSORUPLEFT]) - joystick1 |= (JOYPAD_UP|JOYPAD_LFT); - if (keys[SC_CURSORUP]) - joystick1 |= JOYPAD_UP; - if (keys[SC_CURSORUPRIGHT]) - joystick1 |= (JOYPAD_UP|JOYPAD_RGT); - if (keys[SC_CURSORRIGHT]) - joystick1 |= JOYPAD_RGT; - if (keys[SC_CURSORDOWNRIGHT]) - joystick1 |= (JOYPAD_DN|JOYPAD_RGT); - if (keys[SC_CURSORDOWN]) - joystick1 |= JOYPAD_DN; - if (keys[SC_CURSORDOWNLEFT]) - joystick1 |= (JOYPAD_DN|JOYPAD_LFT); - if (keys[SC_CURSORLEFT]) - joystick1 |= JOYPAD_LFT; - - if (keys[SC_CURSORBLOCKLEFT]) - joystick1 |= JOYPAD_LFT; - if (keys[SC_CURSORBLOCKRIGHT]) - joystick1 |= JOYPAD_RGT; - if (keys[SC_CURSORBLOCKUP]) - joystick1 |= JOYPAD_UP; - if (keys[SC_CURSORBLOCKDOWN]) - joystick1 |= JOYPAD_DN; - - if (keys[SC_KEYPADENTER]) - joystick1 |= JOYPAD_A; - if (keys[SC_ENTER]) - joystick1 |= JOYPAD_A; - if (keys[SC_SPACE]) - joystick1 |= JOYPAD_A; - - if (keys[SC_LEFTALT]) - joystick1 |= JOYPAD_TR; - if (keys[SC_RIGHTALT]) - joystick1 |= JOYPAD_TR; - - if (keys[SC_LEFTCONTROL]) - joystick1 |= JOYPAD_B; - if (keys[SC_RIGHTCONTROL]) - joystick1 |= JOYPAD_B; - - if (keys[SC_LEFTSHIFT]) - joystick1 |= (JOYPAD_X|JOYPAD_Y); - if (keys[SC_RIGHTSHIFT]) - joystick1 |= (JOYPAD_X|JOYPAD_Y); - - if ((joystick1 & (JOYPAD_LFT|JOYPAD_RGT)) == (JOYPAD_LFT|JOYPAD_RGT)) - joystick1 &= ~(JOYPAD_LFT|JOYPAD_RGT); - if ((joystick1 & (JOYPAD_UP|JOYPAD_DN)) == (JOYPAD_UP|JOYPAD_DN)) - joystick1 &= ~(JOYPAD_UP|JOYPAD_DN); - - if (joystick1 & JOYPAD_TR) { - if (joystick1 & JOYPAD_LFT) { - joystick1 = (joystick1 & ~(JOYPAD_TR|JOYPAD_LFT)) | JOYPAD_TL; - } else if (joystick1 & JOYPAD_RGT) { - joystick1 = joystick1 & ~JOYPAD_RGT; - } else { - joystick1 &= ~JOYPAD_TR; - } - } - } -} - -int HandleEvents() -{ - XEvent event; - int ret = 0; - - if (XPending(dpy)) { - do { - XNextEvent(dpy, &event); - switch(event.type) { - case KeyPress: - keyboard_handler(XKeycodeToKeysym(dpy, event.xkey.keycode, 0), 1); - ret = 1; - break; - case KeyRelease: - keyboard_handler(XKeycodeToKeysym(dpy, event.xkey.keycode, 0), 0); - ret = 0; - break; - case Expose: - RedrawScreen(); - break; - case ConfigureNotify: - glViewport(0, 0, event.xconfigure.width, event.xconfigure.height); - glPixelZoom(1.0f, -1.0f); - glRasterPos2f(-1.0f, 1.0f); - RedrawScreen(); - break; - case ClientMessage: - if (event.xclient.data.l[0] == wmDeleteWindow) - Quit(NULL); - break; - default: - break; - } - } while (XPending(dpy)); - } - return ret; -} - -void ReadSystemJoystick() -{ - RSJ = 1; - HandleEvents(); -} - -int DoEvents() -{ - RSJ = 0; - if (HandleEvents()) { - if (keys[SC_B]) { /* Special */ - return 'B'; - } - return 1; - } - return 0; -} - -Word ChooseGameDiff() -{ -/* 0 = easy, 1 = normal, 2 = hard, 3 = death incarnate */ - difficulty = 1; - SetAPalette(rGamePal); - - return 1; -} diff --git a/macsrc/vi_sdl.c b/macsrc/vi_sdl.c deleted file mode 100644 index 443f8947ae82db8f3aa6408f2bfabf800923a234..0000000000000000000000000000000000000000 --- a/macsrc/vi_sdl.c +++ /dev/null @@ -1,32 +0,0 @@ -/* -Copyright (C) 1992-1994 Id Software, Inc. -Copyright (C) 2000 Steven Fuller <relnev@atdot.org> - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include <sdl.h> - -#include "wolfdef.h" - -/* -This is currently unimplemented. -*/ - -int main(int argc, char *argv[]) -{ - fprintf(stderr, "TO BE IMPLEMENTED\n"); -} diff --git a/macsrc/vi_xm.c b/macsrc/vi_xm.c deleted file mode 100644 index 0e61a565360620939d20f780ea6fcb136b86f48c..0000000000000000000000000000000000000000 --- a/macsrc/vi_xm.c +++ /dev/null @@ -1,613 +0,0 @@ -/* -Copyright (C) 1992-1994 Id Software, Inc. -Copyright (C) 2000 Steven Fuller <relnev@atdot.org> - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include <stdio.h> -#include <stdlib.h> -#include <ctype.h> - -#include <X11/Xlib.h> -#include <X11/Xutil.h> -#include <X11/keysym.h> - -#include "wolfdef.h" - -Display *dpy; -int screen; -Window win, root; -XVisualInfo *vi; -GC gc; -XImage *img; -Colormap cmap; -Atom wmDeleteWindow; - -XColor clr[256]; - -Byte *gfxbuf; - -int main(int argc, char *argv[]) -{ - XSetWindowAttributes attr; - XVisualInfo vitemp; - XGCValues gcvalues; - Pixmap bitmap; - Cursor cursor; - XColor bg = { 0 }; - XColor fg = { 0 }; - char data[8] = { 0x01 }; - char *display; - int mask, i; - - if (argc != 2) { - 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]); - exit(EXIT_FAILURE); - } - - display = getenv("DISPLAY"); - dpy = XOpenDisplay(getenv(display)); - if (dpy == NULL) { - fprintf(stderr, "Unable to open display %s\n", XDisplayName(display)); - exit(EXIT_FAILURE); - } - - screen = DefaultScreen(dpy); - - root = RootWindow(dpy, screen); - - vitemp.screen = screen; - vitemp.depth = 8; - vitemp.class = PseudoColor; - mask = VisualScreenMask | VisualDepthMask | VisualClassMask; - - vi = XGetVisualInfo(dpy, mask, &vitemp, &i); - - if ( !(vi && i) ) { - fprintf(stderr, "Unable to get a depth 8 PseudoColor visual on screen %d\n", screen); - exit(EXIT_FAILURE); - } - - cmap = XCreateColormap(dpy, root, vi->visual, AllocAll); - for (i = 0; i < 256; i++) { - clr[i].pixel = i; - clr[i].flags = DoRed | DoGreen | DoBlue; - } - - attr.colormap = cmap; - attr.event_mask = KeyPressMask | KeyReleaseMask | ExposureMask; - mask = CWColormap | CWEventMask; - - win = XCreateWindow(dpy, root, 0, 0, 320, 200, 0, CopyFromParent, - InputOutput, vi->visual, mask, &attr); - - if (win == None) { - fprintf(stderr, "Unable to create window\n"); - exit(EXIT_FAILURE); - } - - gcvalues.foreground = BlackPixel(dpy, screen); - gcvalues.background = WhitePixel(dpy, screen); - mask = GCForeground | GCBackground; - - gc = XCreateGC(dpy, win, mask, &gcvalues); - - XSetWMProperties(dpy, win, NULL, NULL, argv, argc, None, None, None); - - XStoreName(dpy, win, "Wolfenstein 3D"); - XSetIconName(dpy, win, "Wolfenstein 3D"); - - wmDeleteWindow = XInternAtom(dpy, "WM_DELETE_WINDOW", False); - XSetWMProtocols(dpy, win, &wmDeleteWindow, 1); - - bitmap = XCreateBitmapFromData(dpy, win, data, 8, 8); - cursor = XCreatePixmapCursor(dpy, bitmap, bitmap, &fg, &bg, 0, 0); - XDefineCursor(dpy, win, cursor); - - XMapWindow(dpy, win); - XFlush(dpy); - - InitData(); - - GameViewSize = 3; - NewGameWindow(GameViewSize); - - ClearTheScreen(BLACK); - BlastScreen(); - - return WolfMain(argc, argv); -} - -void Quit(char *str) -{ - FreeResources(); - - if (img) - XDestroyImage(img); - - if (str && *str) { - fprintf(stderr, "%s\n", str); - exit(EXIT_FAILURE); - } - - exit(EXIT_SUCCESS); -} - -void SetPalette(Byte *pal) -{ - int i; - - for (i = 0; i < 256; i++) { - clr[i].red = pal[i*3+0] << 8; - clr[i].green = pal[i*3+1] << 8; - clr[i].blue = pal[i*3+2] << 8; - } - XStoreColors(dpy, cmap, clr, 256); -} - -void BlastScreen2(Rect *BlastRect) -{ - BlastScreen(); -} - -int VidWidth, VidHeight, ViewHeight; -#define w VidWidth -#define h VidHeight -#define v ViewHeight - -void BlastScreen() -{ - XPutImage(dpy, win, gc, img, 0, 0, 0, 0, w, h); -} - -Word VidXs[] = {320,512,640,640}; /* Screen sizes to play with */ -Word VidYs[] = {200,384,400,480}; -Word VidVs[] = {160,320,320,400}; -Word VidPics[] = {rFaceShapes,rFace512,rFace640,rFace640}; -Word VidSize = -1; - -Word NewGameWindow(Word NewVidSize) -{ - XSizeHints sizehints; - LongWord *LongPtr; - Byte *DestPtr; - int i; - - printf("Called: %d\n", NewVidSize); - - if (NewVidSize == VidSize) - return VidSize; - - printf("Setting Size: %d (from %d)\n", NewVidSize, VidSize); - - if (NewVidSize < 4) { - w = VidXs[NewVidSize]; - h = VidYs[NewVidSize]; - v = VidVs[NewVidSize]; - } else { - fprintf(stderr, "Invalid Vid size: %d\n", NewVidSize); - exit(EXIT_FAILURE); - } - - if (img) { - XDestroyImage(img); - /* free(gfxbuf); */ - } - - sizehints.min_width = sizehints.max_width = sizehints.base_width = w; - sizehints.min_height = sizehints.max_height = sizehints.base_height = h; - sizehints.flags = PMinSize | PMaxSize | PBaseSize; - XSetWMNormalHints(dpy, win, &sizehints); - XResizeWindow(dpy, win, w, h); - - gfxbuf = (Byte *)malloc(w * h); - - img = XCreateImage(dpy, vi->visual, vi->depth, ZPixmap, 0, - (char *)gfxbuf, w, h, 8, w); - - if (img == NULL) { - fprintf(stderr, "XCreateImage returned NULL, Unable to create an XImage\n"); - exit(EXIT_FAILURE); - } - - VideoPointer = gfxbuf; - VideoWidth = w; - InitYTable(); - SetAPalette(rBlackPal); - ClearTheScreen(BLACK); - BlastScreen(); - - LongPtr = (LongWord *) LoadAResource(VidPics[NewVidSize]); - - if (GameShapes) - FreeSomeMem(GameShapes); - - GameShapes = (Byte **)AllocSomeMem(lMSB(LongPtr[0])); - DLZSS((Byte *)GameShapes, (Byte *)&LongPtr[1], lMSB(LongPtr[0])); - ReleaseAResource(VidPics[NewVidSize]); - - LongPtr = (LongWord *)GameShapes; - DestPtr = (Byte *)GameShapes; - for (i = 0; i < ((NewVidSize == 1) ? 57 : 47); i++) - GameShapes[i] = DestPtr + lMSB(LongPtr[i]); - - VidSize = NewVidSize; - - return VidSize; -} - -/* Keyboard Hack */ -static int RSJ; - -static int keys[128]; - -void FlushKeys() -{ - joystick1 = 0; - memset(keys, 0, sizeof(keys)); -} - -struct { - char code[13]; -} CheatCodes[] = { -{ "XUSCNIELPPA" }, /* "XUSCNIELPPA" */ -{ "IDDQD" }, /* "IDDQD" */ -{ "BURGER" }, /* "BURGER" */ -{ "WOWZERS" }, /* "WOWZERS" */ -{ "LEDOUX" }, /* "LEDOUX" */ -{ "SEGER" }, /* "SEGER" */ -{ "MCCALL" }, /* "MCCALL" */ -{ "APPLEIIGS" } /* "APPLEIIGS" */ -}; -const int CheatCount = sizeof(CheatCodes) / sizeof(CheatCodes[0]); -int CheatIndex; - -#define SC_CURSORUPLEFT 1 -#define SC_CURSORUP 2 -#define SC_CURSORUPRIGHT 3 -#define SC_CURSORRIGHT 4 -#define SC_CURSORDOWNRIGHT 5 -#define SC_CURSORDOWN 6 -#define SC_CURSORDOWNLEFT 7 -#define SC_CURSORLEFT 8 -#define SC_CURSORBLOCKLEFT 9 -#define SC_CURSORBLOCKRIGHT 10 -#define SC_CURSORBLOCKUP 11 -#define SC_CURSORBLOCKDOWN 12 -#define SC_KEYPADENTER 13 -#define SC_ENTER 14 -#define SC_SPACE 15 -#define SC_LEFTALT 16 -#define SC_RIGHTALT 17 -#define SC_LEFTCONTROL 18 -#define SC_RIGHTCONTROL 19 -#define SC_LEFTSHIFT 20 -#define SC_RIGHTSHIFT 21 -#define SC_B 22 - -void UpdateKeys(KeySym key, int press) -{ - switch(key) { - case XK_KP_Home: - keys[SC_CURSORUPLEFT] = press; - break; - case XK_KP_Up: - keys[SC_CURSORUP] = press; - break; - case XK_KP_Page_Up: - keys[SC_CURSORUPRIGHT] = press; - break; - case XK_KP_Right: - keys[SC_CURSORRIGHT] = press; - break; - case XK_KP_Page_Down: - keys[SC_CURSORDOWNRIGHT] = press; - break; - case XK_KP_Down: - keys[SC_CURSORDOWN] = press; - break; - case XK_KP_End: - keys[SC_CURSORDOWNLEFT] = press; - break; - case XK_KP_Left: - keys[SC_CURSORLEFT] = press; - break; - - case XK_Up: - keys[SC_CURSORBLOCKUP] = press; - break; - case XK_Down: - keys[SC_CURSORBLOCKDOWN] = press; - break; - case XK_Left: - keys[SC_CURSORBLOCKLEFT] = press; - break; - case XK_Right: - keys[SC_CURSORBLOCKRIGHT] = press; - break; - - case XK_KP_Enter: - keys[SC_KEYPADENTER] = press; - break; - case XK_Return: - keys[SC_ENTER] = press; - break; - case XK_space: - keys[SC_SPACE] = press; - break; - - case XK_Alt_L: - keys[SC_LEFTALT] = press; - break; - case XK_Alt_R: - keys[SC_RIGHTALT] = press; - break; - - case XK_Control_L: - keys[SC_LEFTCONTROL] = press; - break; - case XK_Control_R: - keys[SC_RIGHTCONTROL] = press; - break; - - case XK_Shift_L: - keys[SC_LEFTSHIFT] = press; - break; - case XK_Shift_R: - keys[SC_RIGHTSHIFT] = press; - break; - - case XK_b: - keys[SC_B] = press; - break; - } -} - -void keyboard_handler(KeySym keycode, int press) -{ - int i; - - UpdateKeys(keycode, press); - - if (RSJ) { - if (press == 0) { - for (i = 0; i < CheatCount; i++) { - char *key = XKeysymToString(keycode); - if (key == NULL) - break; - if (strlen(key) != 1) - break; - if (CheatCodes[i].code[CheatIndex] == toupper(key[0])) { - CheatIndex++; - if (CheatCodes[i].code[CheatIndex] == 0) { - PlaySound(SND_BONUS); - switch (i) { - case 0: - case 4: - GiveKey(0); - GiveKey(1); - gamestate.godmode = TRUE; - break; - case 1: - gamestate.godmode^=TRUE; - break; - case 2: - gamestate.machinegun = TRUE; - gamestate.chaingun = TRUE; - gamestate.flamethrower = TRUE; - gamestate.missile = TRUE; - GiveAmmo(gamestate.maxammo); - GiveGas(99); - GiveMissile(99); - break; - case 3: - gamestate.maxammo = 999; - GiveAmmo(999); - break; - case 5: - GiveKey(0); - GiveKey(1); - break; - case 6: - playstate=EX_WARPED; - nextmap = gamestate.mapon+1; - if (MapListPtr->MaxMap<=nextmap) - nextmap = 0; - break; - case 7: - ShowPush ^= TRUE; - break; - } - CheatIndex = 0; - } - break; - } - } - if (i == CheatCount) - CheatIndex = 0; - } - - joystick1 = 0; - - if (press == 0) { - switch(keycode) { - case XK_1: - gamestate.pendingweapon = WP_KNIFE; - break; - case XK_2: - if (gamestate.ammo) { - gamestate.pendingweapon = WP_PISTOL; - } - break; - case XK_3: - if (gamestate.ammo && gamestate.machinegun) { - gamestate.pendingweapon = WP_MACHINEGUN; - } - break; - case XK_4: - if (gamestate.ammo && gamestate.chaingun) { - gamestate.pendingweapon = WP_CHAINGUN; - } - break; - case XK_5: - if (gamestate.gas && gamestate.flamethrower) { - gamestate.pendingweapon = WP_FLAMETHROWER; - } - break; - case XK_6: - if (gamestate.missiles && gamestate.missile) { - gamestate.pendingweapon = WP_MISSILE; - } - break; - case XK_period: - case XK_slash: - joystick1 = JOYPAD_START; - break; - case XK_Escape: - Quit(NULL); /* fast way out */ - } - } - - if (keys[SC_CURSORUPLEFT]) - joystick1 |= (JOYPAD_UP|JOYPAD_LFT); - if (keys[SC_CURSORUP]) - joystick1 |= JOYPAD_UP; - if (keys[SC_CURSORUPRIGHT]) - joystick1 |= (JOYPAD_UP|JOYPAD_RGT); - if (keys[SC_CURSORRIGHT]) - joystick1 |= JOYPAD_RGT; - if (keys[SC_CURSORDOWNRIGHT]) - joystick1 |= (JOYPAD_DN|JOYPAD_RGT); - if (keys[SC_CURSORDOWN]) - joystick1 |= JOYPAD_DN; - if (keys[SC_CURSORDOWNLEFT]) - joystick1 |= (JOYPAD_DN|JOYPAD_LFT); - if (keys[SC_CURSORLEFT]) - joystick1 |= JOYPAD_LFT; - - if (keys[SC_CURSORBLOCKLEFT]) - joystick1 |= JOYPAD_LFT; - if (keys[SC_CURSORBLOCKRIGHT]) - joystick1 |= JOYPAD_RGT; - if (keys[SC_CURSORBLOCKUP]) - joystick1 |= JOYPAD_UP; - if (keys[SC_CURSORBLOCKDOWN]) - joystick1 |= JOYPAD_DN; - - if (keys[SC_KEYPADENTER]) - joystick1 |= JOYPAD_A; - if (keys[SC_ENTER]) - joystick1 |= JOYPAD_A; - if (keys[SC_SPACE]) - joystick1 |= JOYPAD_A; - - if (keys[SC_LEFTALT]) - joystick1 |= JOYPAD_TR; - if (keys[SC_RIGHTALT]) - joystick1 |= JOYPAD_TR; - - if (keys[SC_LEFTCONTROL]) - joystick1 |= JOYPAD_B; - if (keys[SC_RIGHTCONTROL]) - joystick1 |= JOYPAD_B; - - if (keys[SC_LEFTSHIFT]) - joystick1 |= (JOYPAD_X|JOYPAD_Y); - if (keys[SC_RIGHTSHIFT]) - joystick1 |= (JOYPAD_X|JOYPAD_Y); - } - - if ((joystick1 & (JOYPAD_LFT|JOYPAD_RGT)) == (JOYPAD_LFT|JOYPAD_RGT)) - joystick1 &= ~(JOYPAD_LFT|JOYPAD_RGT); - if ((joystick1 & (JOYPAD_UP|JOYPAD_DN)) == (JOYPAD_UP|JOYPAD_DN)) - joystick1 &= ~(JOYPAD_UP|JOYPAD_DN); - - if (joystick1 & JOYPAD_TR) { - if (joystick1 & JOYPAD_LFT) { - joystick1 = (joystick1 & ~(JOYPAD_TR|JOYPAD_LFT)) | JOYPAD_TL; - } else if (joystick1 & JOYPAD_RGT) { - joystick1 = joystick1 & ~JOYPAD_RGT; - } else { - joystick1 &= ~JOYPAD_TR; - } - } - -} - -int HandleEvents() -{ - XEvent event; - int ret = 0; - - if (XPending(dpy)) { - do { - XNextEvent(dpy, &event); - switch(event.type) { - case KeyPress: - keyboard_handler(XKeycodeToKeysym(dpy, event.xkey.keycode, 0), 1); - ret = 1; - break; - case KeyRelease: - keyboard_handler(XKeycodeToKeysym(dpy, event.xkey.keycode, 0), 0); - ret = 0; - break; - case Expose: - BlastScreen(); - break; - case ClientMessage: - if (event.xclient.data.l[0] == wmDeleteWindow) - Quit(NULL); - break; - default: - break; - } - } while (XPending(dpy)); - } - return ret; -} - -void ReadSystemJoystick() -{ - RSJ = 1; - HandleEvents(); -} - -int DoEvents() -{ - RSJ = 0; - if (HandleEvents()) { - if (keys[SC_B]) { /* Special */ - return 'B'; - } - return 1; - } - return 0; -} - -Word ChooseGameDiff() -{ -/* 0 = easy, 1 = normal, 2 = hard, 3 = death incarnate */ - difficulty = 1; - SetAPalette(rGamePal); - - return 1; -}