From 9c43bda51b4cc085fe9c2770c1e45fbce104412a Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Mon, 16 Aug 2004 00:15:52 +0200 Subject: [PATCH] rnd-20040816-1-src --- src/Makefile | 4 +- src/conftime.h | 2 +- src/libem/display.h | 24 ++++++- src/libem/graphics.c | 165 +++++++++++++++++++++++++------------------ src/libem/init.c | 86 ++++++++++++++++++++++ src/libem/input.c | 7 +- src/libem/main.c | 26 ++++++- src/main.c | 3 - src/screens.c | 4 ++ 9 files changed, 241 insertions(+), 80 deletions(-) diff --git a/src/Makefile b/src/Makefile index 5caa6051..2fdc412c 100644 --- a/src/Makefile +++ b/src/Makefile @@ -22,9 +22,7 @@ ifdef X11_PATH # path to X11 specified by top level Makefile XINC_PATH = $(X11_PATH)/include XLIB_PATH = $(X11_PATH)/lib X11_INCL = -I$(XINC_PATH) -# X11_LIBS = -L$(XLIB_PATH) -lX11 -# !!! remove Xpm dependency !!! -X11_LIBS = -L$(XLIB_PATH) -lX11 -lXpm +X11_LIBS = -L$(XLIB_PATH) -lX11 endif AR = ar diff --git a/src/conftime.h b/src/conftime.h index d8ec00d9..d022fcf1 100644 --- a/src/conftime.h +++ b/src/conftime.h @@ -1 +1 @@ -#define COMPILE_DATE_STRING "[2004-08-14 22:53]" +#define COMPILE_DATE_STRING "[2004-08-16 00:11]" diff --git a/src/libem/display.h b/src/libem/display.h index a13d3a7b..b0511c46 100644 --- a/src/libem/display.h +++ b/src/libem/display.h @@ -11,12 +11,30 @@ #include #include +#if 0 + extern Display *display; extern Window window; -#if 0 -extern Window xwindow; -#else #define xwindow window + +#else + +#include "../libgame/system.h" + +#define xwindow (window->drawable) + +#endif + +#if 1 + +extern Bitmap *screenBitmap; +extern Bitmap *scoreBitmap; + +extern Bitmap *objBitmap; +extern Bitmap *sprBitmap; +extern Bitmap *ttlBitmap; +extern Bitmap *botBitmap; + #endif extern Pixmap screenPixmap; diff --git a/src/libem/graphics.c b/src/libem/graphics.c index 0951468f..fb667b6e 100644 --- a/src/libem/graphics.c +++ b/src/libem/graphics.c @@ -16,7 +16,7 @@ unsigned int frame; /* current frame */ unsigned int screen_x; /* current scroll position */ unsigned int screen_y; -static unsigned short screen[14][22]; /* tiles currently on screen */ +static unsigned short screentiles[14][22]; /* tiles currently on screen */ static unsigned int colours[8]; static unsigned int colour_anim; @@ -32,8 +32,8 @@ void xdebug(char *msg) static void colour_shuffle(void) { unsigned int i, j, k; - for(i = 0; i < 8; i++) colours[i] = i; - for(i = 0; i < 8; i++) { + for (i = 0; i < 8; i++) colours[i] = i; + for (i = 0; i < 8; i++) { Random = Random * 129 + 1; j = (Random >> 10) & 7; k = colours[i]; @@ -57,7 +57,7 @@ void blitscreen(void) printf("::: %d, %d [%d, %d]\n", x, y, TILEX, TILEY); #endif - if(x < 2 * TILEX && y < 2 * TILEY) { + if (x < 2 * TILEX && y < 2 * TILEY) { #if 0 printf("!!! %ld, %ld, %ld, %ld\n", @@ -65,10 +65,10 @@ void blitscreen(void) #endif XCopyArea(display, screenPixmap, xwindow, screenGC, x, y, 20 * TILEX, 12 * TILEY, 0, 0); - } else if(x < 2 * TILEX && y >= 2 * TILEY) { + } else if (x < 2 * TILEX && y >= 2 * TILEY) { XCopyArea(display, screenPixmap, xwindow, screenGC, x, y, 20 * TILEX, 14 * TILEY - y, 0, 0); XCopyArea(display, screenPixmap, xwindow, screenGC, x, 0, 20 * TILEX, y - 2 * TILEY, 0, 14 * TILEY - y); - } else if(x >= 2 * TILEX && y < 2 * TILEY) { + } else if (x >= 2 * TILEX && y < 2 * TILEY) { XCopyArea(display, screenPixmap, xwindow, screenGC, x, y, 22 * TILEX - x, 12 * TILEY, 0, 0); XCopyArea(display, screenPixmap, xwindow, screenGC, 0, y, x - 2 * TILEX, 12 * TILEY, 22 * TILEX - x, 0); } else { @@ -99,13 +99,13 @@ static void animscreen(void) xdebug("animscreen"); - for(y = top; y < top + 14; y++) { + for (y = top; y < top + 14; y++) { dy = y % 14; - for(x = left; x < left + 22; x++) { + for (x = left; x < left + 22; x++) { dx = x % 22; obj = map_obj[frame][Draw[y][x]]; - if(screen[dy][dx] != obj) { - screen[dy][dx] = obj; + if (screentiles[dy][dx] != obj) { + screentiles[dy][dx] = obj; XCopyArea(display, objPixmap, screenPixmap, screenGC, (obj / 512) * TILEX, (obj % 512) * TILEY / 16, TILEX, TILEY, dx * TILEX, dy * TILEY); } } @@ -116,41 +116,70 @@ static void animscreen(void) * * handles transparency and movement */ -static void blitplayer(struct PLAYER *ply) { - unsigned int x, y, dx, dy; - unsigned short obj, spr; - - xdebug("blitplayer"); - - if(ply->alive) { - x = (frame * ply->oldx + (8 - frame) * ply->x) * TILEX / 8; dx = x + TILEX - 1; - y = (frame * ply->oldy + (8 - frame) * ply->y) * TILEY / 8; dy = y + TILEY - 1; - if((unsigned int)(dx - screen_x) < (21 * TILEX - 1) && (unsigned int)(dy - screen_y) < (13 * TILEY - 1)) { - spr = map_spr[ply->num][frame][ply->anim]; - x %= 22 * TILEX; dx %= 22 * TILEX; - y %= 14 * TILEY; dy %= 14 * TILEY; - if(objmaskBitmap) { - obj = screen[y / TILEY][x / TILEX]; - XCopyArea(display, objmaskBitmap, spriteBitmap, spriteGC, (obj / 512) * TILEX, (obj % 512) * TILEY / 16, TILEX, TILEY, -(x % TILEX), -(y % TILEY)); - obj = screen[dy / TILEY][dx / TILEX]; - XCopyArea(display, objmaskBitmap, spriteBitmap, spriteGC, (obj / 512) * TILEX, (obj % 512) * TILEY / 16, TILEX, TILEY, (22 * TILEX - x) % TILEX, (14 * TILEY - y) % TILEY); - } else if(sprmaskBitmap) { - XCopyArea(display, sprmaskBitmap, spriteBitmap, spriteGC, (spr / 8) * TILEX, (spr % 8) * TILEY, TILEX, TILEY, 0, 0); - } else { - XFillRectangle(display, spriteBitmap, spriteGC, 0, 0, TILEX, TILEY); - } - screen[y / TILEY][x / TILEX] = -1; /* mark screen as dirty */ - screen[dy / TILEY][dx / TILEX] = -1; - XSetClipMask(display, screenGC, spriteBitmap); - XSetClipOrigin(display, screenGC, x, y); - XCopyArea(display, sprPixmap, screenPixmap, screenGC, (spr / 8) * TILEX, (spr % 8) * TILEY, TILEX, TILEY, x, y); - XSetClipOrigin(display, screenGC, x - 22 * TILEX, y); - XCopyArea(display, sprPixmap, screenPixmap, screenGC, (spr / 8) * TILEX, (spr % 8) * TILEY, TILEX, TILEY, x - 22 * TILEX, y); - XSetClipOrigin(display, screenGC, x, y - 14 * TILEY); - XCopyArea(display, sprPixmap, screenPixmap, screenGC, (spr / 8) * TILEX, (spr % 8) * TILEY, TILEX, TILEY, x, y - 14 * TILEY); - XSetClipMask(display, screenGC, None); - } - } +static void blitplayer(struct PLAYER *ply) +{ + unsigned int x, y, dx, dy; + unsigned short obj, spr; + + xdebug("blitplayer"); + + if (ply->alive) + { + x = (frame * ply->oldx + (8 - frame) * ply->x) * TILEX / 8; + y = (frame * ply->oldy + (8 - frame) * ply->y) * TILEY / 8; + dx = x + TILEX - 1; + dy = y + TILEY - 1; + + if ((unsigned int)(dx - screen_x) < (21 * TILEX - 1) && + (unsigned int)(dy - screen_y) < (13 * TILEY - 1)) + { + spr = map_spr[ply->num][frame][ply->anim]; + x %= 22 * TILEX; + y %= 14 * TILEY; + dx %= 22 * TILEX; + dy %= 14 * TILEY; + + if (objmaskBitmap) + { + obj = screentiles[y / TILEY][x / TILEX]; + XCopyArea(display, objmaskBitmap, spriteBitmap, spriteGC, + (obj / 512) * TILEX, (obj % 512) * TILEY / 16, TILEX, TILEY, + -(x % TILEX), -(y % TILEY)); + + obj = screentiles[dy / TILEY][dx / TILEX]; + XCopyArea(display, objmaskBitmap, spriteBitmap, spriteGC, + (obj / 512) * TILEX, (obj % 512) * TILEY / 16, TILEX, TILEY, + (22 * TILEX - x) % TILEX, (14 * TILEY - y) % TILEY); + } + else if (sprmaskBitmap) + { + XCopyArea(display, sprmaskBitmap, spriteBitmap, spriteGC, + (spr / 8) * TILEX, (spr % 8) * TILEY, TILEX, TILEY, 0, 0); + } + else + { + XFillRectangle(display, spriteBitmap, spriteGC, 0, 0, TILEX, TILEY); + } + + screentiles[y / TILEY][x / TILEX] = -1; /* mark screen as dirty */ + screentiles[dy / TILEY][dx / TILEX] = -1; + + XSetClipMask(display, screenGC, spriteBitmap); + XSetClipOrigin(display, screenGC, x, y); + XCopyArea(display, sprPixmap, screenPixmap, screenGC, + (spr / 8) * TILEX, (spr % 8) * TILEY, TILEX, TILEY, + x, y); + XSetClipOrigin(display, screenGC, x - 22 * TILEX, y); + XCopyArea(display, sprPixmap, screenPixmap, screenGC, + (spr / 8) * TILEX, (spr % 8) * TILEY, TILEX, TILEY, + x - 22 * TILEX, y); + XSetClipOrigin(display, screenGC, x, y - 14 * TILEY); + XCopyArea(display, sprPixmap, screenPixmap, screenGC, + (spr / 8) * TILEX, (spr % 8) * TILEY, TILEX, TILEY, + x, y - 14 * TILEY); + XSetClipMask(display, screenGC, None); + } + } } void game_initscreen(void) @@ -172,15 +201,15 @@ void game_initscreen(void) printf("--> M5.2: xwindow == %ld\n", xwindow); printf("--> M5.2: &xwindow == %ld\n", &xwindow); printf("--> M5.2: screen == %ld\n", screen); - printf("--> M5.2: &screen[0][0] == %ld\n", &screen[0][0]); + printf("--> M5.2: &screentiles[0][0] == %ld\n", &screentiles[0][0]); #endif - for(y = 0; y < 14; y++) { - for(x = 0; x < 22; x++) { + for (y = 0; y < 14; y++) { + for (x = 0; x < 22; x++) { #if 0 printf("--> M5.2.A: xwindow == %ld [%d,%d]\n", xwindow, x,y); #endif - screen[y][x] = -1; + screentiles[y][x] = -1; #if 0 printf("--> M5.2.B: xwindow == %ld [%d,%d]\n", xwindow, x,y); #endif @@ -227,17 +256,17 @@ void game_blitscore(void) XCopyArea(display, botPixmap, scorePixmap, scoreGC, (i % 10) * SCOREX, colours[1] * SCOREY, SCOREX, SCOREY, 38 * SCOREX, 0); i /= 10; XCopyArea(display, botPixmap, scorePixmap, scoreGC, (i % 10) * SCOREX, colours[1] * SCOREY, SCOREX, SCOREY, 37 * SCOREX, 0); i /= 10; XCopyArea(display, botPixmap, scorePixmap, scoreGC, (i % 10) * SCOREX, colours[1] * SCOREY, SCOREX, SCOREY, 36 * SCOREX, 0); - if(lev.home == 0) { + if (lev.home == 0) { XCopyArea(display, botPixmap, scorePixmap, scoreGC, 12 * SCOREX, 24 * SCOREY, 12 * SCOREX, SCOREY, 14 * SCOREX, 0); /* relax */ goto done; } - if(ply1.alive + ply2.alive >= lev.home && lev.required == 0) { + if (ply1.alive + ply2.alive >= lev.home && lev.required == 0) { XCopyArea(display, botPixmap, scorePixmap, scoreGC, 24 * SCOREX, colours[2] * SCOREY, 12 * SCOREX, SCOREY, 14 * SCOREX, 0); /* find the exit */ goto done; } - if(ply1.alive + ply2.alive < lev.home) { - if(++colour_anim > 11) colour_anim = 0; - if(colour_anim < 6) { + if (ply1.alive + ply2.alive < lev.home) { + if (++colour_anim > 11) colour_anim = 0; + if (colour_anim < 6) { XCopyArea(display, botPixmap, scorePixmap, scoreGC, 0, 24 * SCOREY, 12 * SCOREX, SCOREY, 14 * SCOREX, 0); /* forget it */ goto done; } @@ -259,10 +288,10 @@ void game_animscreen(void) x = (frame * ply1.oldx + (8 - frame) * ply1.x) * TILEX / 8 + (19 * TILEX) / 2; y = (frame * ply1.oldy + (8 - frame) * ply1.y) * TILEY / 8 + (11 * TILEY) / 2; - if(x > lev.width * TILEX) x = lev.width * TILEX; - if(y > lev.height * TILEY) y = lev.height * TILEY; - if(x < 20 * TILEX) x = 20 * TILEY; - if(y < 12 * TILEY) y = 12 * TILEY; + if (x > lev.width * TILEX) x = lev.width * TILEX; + if (y > lev.height * TILEY) y = lev.height * TILEY; + if (x < 20 * TILEX) x = 20 * TILEY; + if (y < 12 * TILEY) y = 12 * TILEY; screen_x = x - 19 * TILEX; screen_y = y - 11 * TILEY; @@ -287,13 +316,13 @@ void title_initscreen(void) colour_anim = 0; XCopyArea(display, ttlPixmap, screenPixmap, screenGC, 0, 0, 20 * TILEX, 12 * TILEY, 0, 0); - if(botmaskBitmap) { + if (botmaskBitmap) { XCopyArea(display, botPixmap, scorePixmap, scoreGC, 0, colours[1] * SCOREY, 20 * TILEX, SCOREY, 0, 0); XSetClipMask(display, scoreGC, botmaskBitmap); XSetClipOrigin(display, scoreGC, 0, 0 - colours[0] * SCOREY); } XCopyArea(display, botPixmap, scorePixmap, scoreGC, 0, colours[0] * SCOREY, 20 * TILEX, SCOREY, 0, 0); - if(botmaskBitmap) { + if (botmaskBitmap) { XSetClipMask(display, scoreGC, None); } } @@ -304,18 +333,18 @@ void title_blitscore(void) xdebug("title_blitscore"); - if(++colour_anim > 30) colour_anim = 0; + if (++colour_anim > 30) colour_anim = 0; i = colour_anim >= 16 ? 31 - colour_anim : colour_anim; x = (i / 8 + 18) * 2 * SCOREX; y = (i % 8 + 16) * SCOREY; - if(botmaskBitmap) { + if (botmaskBitmap) { XCopyArea(display, botPixmap, scorePixmap, scoreGC, 32 * SCOREX, colours[1] * SCOREY, 2 * SCOREX, SCOREY, 32 * SCOREX, 0); XSetClipMask(display, scoreGC, botmaskBitmap); XSetClipOrigin(display, scoreGC, 32 * SCOREX - x, 0 - y); } XCopyArea(display, botPixmap, scorePixmap, scoreGC, x, y, 2 * SCOREX, SCOREY, 32 * SCOREX, 0); - if(botmaskBitmap) { + if (botmaskBitmap) { XSetClipMask(display, scoreGC, None); } } @@ -347,17 +376,17 @@ void title_string(unsigned int y, unsigned int left, unsigned int right, char *s y *= TILEY; left *= SCOREX; right *= SCOREX; x = (left + right - strlen(string) * 12) / 2; - if(x < left || x >= right) x = left; + if (x < left || x >= right) x = left; XCopyArea(display, ttlPixmap, screenPixmap, screenGC, left, y, right - left, TILEY, left, y); - if(ttlmaskBitmap) XSetClipMask(display, screenGC, ttlmaskBitmap); - for(i = 0; string[i] && x < right; i++) { + if (ttlmaskBitmap) XSetClipMask(display, screenGC, ttlmaskBitmap); + for (i = 0; string[i] && x < right; i++) { unsigned short ch_pos, ch_x, ch_y; ch_pos = map_ttl[string[i] & 127]; - if(ch_pos < 640) { + if (ch_pos < 640) { ch_x = (ch_pos % 320); ch_y = (ch_pos / 320 + 12) * TILEY; - if(ttlmaskBitmap) XSetClipOrigin(display, screenGC, x - ch_x, y - ch_y); + if (ttlmaskBitmap) XSetClipOrigin(display, screenGC, x - ch_x, y - ch_y); XCopyArea(display, ttlPixmap, screenPixmap, screenGC, ch_x, ch_y, 12, TILEY, x, y); } x += 12; diff --git a/src/libem/init.c b/src/libem/init.c index 59a688d2..33012f9c 100644 --- a/src/libem/init.c +++ b/src/libem/init.c @@ -3,6 +3,15 @@ * open X11 display and sound */ +#if 1 +#include +#include +#include +#include +#include +#include +#endif + #include #include #include @@ -24,8 +33,22 @@ #include "display.h" #include "sample.h" +#if 0 Display *display; Window xwindow; +#endif + +#if 1 +Bitmap *objBitmap; +Bitmap *botBitmap; +Bitmap *sprBitmap; +Bitmap *ttlBitmap; +#endif + +#if 1 +Bitmap *screenBitmap; +Bitmap *scoreBitmap; +#endif Pixmap screenPixmap; Pixmap scorePixmap; @@ -73,10 +96,12 @@ static unsigned int screenHeight; static unsigned long screenBlackPixel; static unsigned long screenWhitePixel; +#if 0 static XSizeHints sizeHints; static XSetWindowAttributes setWindowAttributes; static XWMHints wmHints; static XVisualInfo visualInfo; +#endif static XGCValues gcValues; static Colormap privateColourmap; @@ -90,17 +115,30 @@ static XColor whiteColour; static int gotRed; static int gotWhite; +#if 1 +static Bitmap *pcxBitmaps[4]; +#endif + +#if 0 static Pixmap xpmPixmaps[4]; static Pixmap xpmBitmaps[4]; static XpmAttributes xpmAttributes[4]; static int xpmGot[4]; +#endif static int xpmAllocColourFunc(Display *, Colormap, char *, XColor *, void *); static int xpmFreeColoursFunc(Display *, Colormap, unsigned long *, int, void *); static KeyCode keycodes[16]; +#if 0 static const char *xpmNames[4] = { "object.xpm", "score.xpm", "sprite.xpm", "title.xpm" }; +#endif + +#if 1 +static const char *pcxNames[4] = { "object.pcx", "score.pcx", "sprite.pcx", "title.pcx" }; +#endif + static const int xpmCloseness[4] = { 10000, 10000, 40000, 50000 }; static const KeySym keysyms[16] = { XK_Up, XK_KP_Up, XK_r, /* north */ @@ -129,15 +167,19 @@ static const int sound_volume[SAMPLE_MAX] = { int open_all(void) { char name[MAXNAME+2]; +#if 0 void *dummyptr; int dummyint; +#endif int i; +#if 0 display = XOpenDisplay(arg_display); if(display == 0) { fprintf(stderr, "%s: \"%s\": %s: %s\n", progname, XDisplayName(arg_display), "failed to open display", strerror(errno)); return(1); } +#endif defaultScreen = DefaultScreenOfDisplay(display); defaultVisual = DefaultVisualOfScreen(defaultScreen); @@ -149,6 +191,7 @@ int open_all(void) screenBlackPixel = BlackPixelOfScreen(defaultScreen); screenWhitePixel = WhitePixelOfScreen(defaultScreen); +#if 0 if(arg_install) { visualInfo.visualid = XVisualIDFromVisual(defaultVisual); dummyptr = XGetVisualInfo(display, VisualIDMask, &visualInfo, &dummyint); @@ -231,7 +274,9 @@ int open_all(void) if(cursor) XDefineCursor(display, xwindow, cursor); XMapWindow(display, xwindow); +#endif +#if 0 for(i = 0; i < 4; i++) { name[MAXNAME] = 0; if(arg_basedir) { @@ -254,7 +299,29 @@ int open_all(void) } xpmGot[i] = 1; } +#endif + + for(i = 0; i < 4; i++) + { + name[MAXNAME] = 0; + snprintf(name, MAXNAME+2, "%s/%s", EM_GFX_DIR, pcxNames[i]); + + if (name[MAXNAME]) + snprintf_overflow("read graphics/ files"); + + if ((pcxBitmaps[i] = LoadImage(name)) == NULL) + { + printf("::: LoadImage() failed for file '%s'\n", name); + return 1; + } + } + + objBitmap = pcxBitmaps[0]; + botBitmap = pcxBitmaps[1]; + sprBitmap = pcxBitmaps[2]; + ttlBitmap = pcxBitmaps[3]; +#if 0 objPixmap = xpmPixmaps[0]; botPixmap = xpmPixmaps[1]; sprPixmap = xpmPixmaps[2]; @@ -263,6 +330,21 @@ int open_all(void) botmaskBitmap = xpmBitmaps[1]; sprmaskBitmap = xpmBitmaps[2]; ttlmaskBitmap = xpmBitmaps[3]; +#else + objPixmap = pcxBitmaps[0]->drawable; + botPixmap = pcxBitmaps[1]->drawable; + sprPixmap = pcxBitmaps[2]->drawable; + ttlPixmap = pcxBitmaps[3]->drawable; + objmaskBitmap = pcxBitmaps[0]->clip_mask; + botmaskBitmap = pcxBitmaps[1]->clip_mask; + sprmaskBitmap = pcxBitmaps[2]->clip_mask; + ttlmaskBitmap = pcxBitmaps[3]->clip_mask; +#endif + +#if 1 + screenBitmap = CreateBitmap(22 * TILEX, 14 * TILEY, DEFAULT_DEPTH); + scoreBitmap = CreateBitmap(20 * TILEX, SCOREY, DEFAULT_DEPTH); +#endif screenPixmap = XCreatePixmap(display, xwindow, 22 * TILEX, 14 * TILEY, screenDepth); if(screenPixmap == 0) { @@ -380,14 +462,18 @@ void close_all(void) if(sound_pipe[1] != -1) close(sound_pipe[1]); for(i = 0; i < SAMPLE_MAX; i++) if(sound_data[i]) free(sound_data[i]); +#if 0 for(i = 0; i < 4; i++) if(xpmPixmaps[i]) XFreePixmap(display, xpmPixmaps[i]); for(i = 0; i < 4; i++) if(xpmBitmaps[i]) XFreePixmap(display, xpmBitmaps[i]); for(i = 0; i < 4; i++) if(xpmGot[i]) { xpmFreeColoursFunc(display, xpmAttributes[i].colormap, xpmAttributes[i].alloc_pixels, xpmAttributes[i].nalloc_pixels, 0); XpmFreeAttributes(&xpmAttributes[i]); } +#endif + if(gotRed) xpmFreeColoursFunc(display, privateColourmap ? privateColourmap : defaultColourmap, &redColour.pixel, 1, 0); if(gotWhite) xpmFreeColoursFunc(display, privateColourmap ? privateColourmap : defaultColourmap, &whiteColour.pixel, 1, 0); + if(screenGC) XFreeGC(display, screenGC); if(scoreGC) XFreeGC(display, scoreGC); if(spriteGC) XFreeGC(display, spriteGC); diff --git a/src/libem/input.c b/src/libem/input.c index 7c6437c9..3ccf6a4f 100644 --- a/src/libem/input.c +++ b/src/libem/input.c @@ -118,7 +118,7 @@ int game_start(void) strcpy(player_name, "dave"); player_level = 0; - input_pause = 1; + input_pause = 1 * 0; for(;;) { @@ -259,6 +259,11 @@ void readjoy(void) ply1.joy_s = south; ply1.joy_w = west; } + +#if 0 + printf("::: JOY == %d/%d/%d/%d/%d\n", + north, east, south, west, fire); +#endif } /* handle events from x windows and block until the next frame diff --git a/src/libem/main.c b/src/libem/main.c index 308bfa2a..ca79044c 100644 --- a/src/libem/main.c +++ b/src/libem/main.c @@ -25,7 +25,7 @@ int arg_silence; extern void tab_generate(); extern void ulaw_generate(); -int em_main(int argc, char **argv) +int em_main_OLD(int argc, char **argv) { int result; int option; @@ -65,6 +65,30 @@ fail: return(result); } +int em_main() +{ + int result; + + /* pre-calculate some data */ + tab_generate(); + ulaw_generate(); + + progname = "emerald mine"; + + result = open_all(); + if(result) + goto fail; + + result = game_start(); + if(result) + goto fail; + + result = 0; +fail: + close_all(); + return(result); +} + /* massive kludge for buffer overflows * i cant think of an elegant way to handle this situation. * oh wait yes i can. dynamically allocate each string. oh well diff --git a/src/main.c b/src/main.c index 2d823ea2..596f996a 100644 --- a/src/main.c +++ b/src/main.c @@ -4173,9 +4173,6 @@ static void print_usage() int main(int argc, char *argv[]) { - em_main(argc, argv); - return 0; - InitProgramInfo(argv[0], USERDATA_DIRECTORY, PROGRAM_TITLE_STRING, getWindowTitleString(), ICON_TITLE_STRING, X11_ICON_FILENAME, X11_ICONMASK_FILENAME, diff --git a/src/screens.c b/src/screens.c index 12901f03..9211c573 100644 --- a/src/screens.c +++ b/src/screens.c @@ -501,9 +501,13 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) else #endif { +#if 1 + em_main(); +#else game_status = GAME_MODE_PLAYING; StopAnimation(); InitGame(); +#endif } } else if (y == 6) -- 2.34.1