From a4bf969413cdda68ab8bb54a2a1181bdc09cf63a Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Sat, 21 Nov 1998 00:44:47 +0100 Subject: [PATCH] rnd-19981121-1 --- src/buttons.c | 26 +++++ src/buttons.h | 11 ++ src/game.c | 2 + src/screens.c | 308 ++++++++++++++++++++++---------------------------- src/tape.c | 10 +- src/tools.c | 53 ++++++--- src/tools.h | 1 + 7 files changed, 216 insertions(+), 195 deletions(-) diff --git a/src/buttons.c b/src/buttons.c index 6471e75e..d3eb443a 100644 --- a/src/buttons.c +++ b/src/buttons.c @@ -84,6 +84,19 @@ void DrawVideoDisplay(unsigned long state, unsigned long value) 0,0 }} }; + if (state & VIDEO_STATE_PBEND_OFF) + { + int cx = DOOR_GFX_PAGEX3, cy = DOOR_GFX_PAGEY2; + + XCopyArea(display,pix[PIX_DOOR],drawto,gc, + cx + VIDEO_REC_LABEL_XPOS, + cy + VIDEO_REC_LABEL_YPOS, + VIDEO_PBEND_LABEL_XSIZE, + VIDEO_PBEND_LABEL_YSIZE, + VX + VIDEO_REC_LABEL_XPOS, + VY + VIDEO_REC_LABEL_YPOS); + } + for(i=0;i<20;i++) { if (state & (1<=(VX+VIDEO_CONTROL_XPOS) && \ (x)< (VX+VIDEO_CONTROL_XPOS + \ VIDEO_CONTROL_XSIZE) && \ @@ -121,6 +127,9 @@ #define VIDEO_STATE_FFWD_OFF ((1L<<20) | VIDEO_STATE_PAUSE_OFF) #define VIDEO_STATE_FFWD_ON (1L<<21) #define VIDEO_STATE_FFWD (VIDEO_STATE_FFWD_OFF | VIDEO_STATE_FFWD_ON) +#define VIDEO_STATE_PBEND_OFF (1L<<22) +#define VIDEO_STATE_PBEND_ON (1L<<23) +#define VIDEO_STATE_PBEND (VIDEO_STATE_PBEND_OFF | VIDEO_STATE_PBEND_ON) #define BUTTON_VIDEO_EJECT 1 #define BUTTON_VIDEO_STOP 2 @@ -132,6 +141,7 @@ VIDEO_STATE_REC_OFF | \ VIDEO_STATE_PAUSE_OFF | \ VIDEO_STATE_FFWD_OFF | \ + VIDEO_STATE_PBEND_OFF | \ VIDEO_STATE_DATE_OFF | \ VIDEO_STATE_TIME_OFF) #define VIDEO_PRESS_OFF (VIDEO_PRESS_PLAY_OFF | \ @@ -145,6 +155,7 @@ VIDEO_STATE_REC_ON | \ VIDEO_STATE_PAUSE_ON | \ VIDEO_STATE_FFWD_ON | \ + VIDEO_STATE_PBEND_ON | \ VIDEO_STATE_DATE_ON | \ VIDEO_STATE_TIME_ON) #define VIDEO_PRESS_ON (VIDEO_PRESS_PLAY_ON | \ diff --git a/src/game.c b/src/game.c index c5520d4a..79d917d6 100644 --- a/src/game.c +++ b/src/game.c @@ -24,6 +24,7 @@ #include "network.h" #ifdef DEBUG +#if 0 static unsigned int getStateCheckSum(int counter) { int x, y; @@ -70,6 +71,7 @@ static unsigned int getStateCheckSum(int counter) return checksum; } #endif +#endif void GetPlayerConfig() { diff --git a/src/screens.c b/src/screens.c index bd0f13a3..87d7c39c 100644 --- a/src/screens.c +++ b/src/screens.c @@ -32,13 +32,13 @@ extern unsigned char get_ascii(KeySym); void DrawHeadline() { - int x1 = SX+(SXSIZE - strlen(GAMETITLE_STRING) * FONT1_XSIZE) / 2; - int y1 = SY+8; - int x2 = SX+(SXSIZE - strlen(COPYRIGHT_STRING) * FONT2_XSIZE) / 2; - int y2 = SY+46; + int x1 = SX + (SXSIZE - strlen(GAMETITLE_STRING) * FONT1_XSIZE) / 2; + int y1 = SY + 8; + int x2 = SX + (SXSIZE - strlen(COPYRIGHT_STRING) * FONT2_XSIZE) / 2; + int y2 = SY + 46; - DrawText(x1,y1, GAMETITLE_STRING, FS_BIG, FC_YELLOW); - DrawText(x2,y2, COPYRIGHT_STRING, FS_SMALL, FC_RED); + DrawText(x1, y1, GAMETITLE_STRING, FS_BIG, FC_YELLOW); + DrawText(x2, y2, COPYRIGHT_STRING, FS_SMALL, FC_RED); } void DrawMainMenu() @@ -56,7 +56,7 @@ void DrawMainMenu() DrawText(SX + 6*32, SY + 2*32, setup.player_name, FS_BIG, FC_RED); DrawText(SX + 32, SY + 3*32, "Level:", FS_BIG, FC_GREEN); DrawText(SX + 11*32, SY + 3*32, int2str(level_nr,3), FS_BIG, - (level_nr10) + else if (y > 10) y = 10; } @@ -140,32 +140,33 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) y = choice; } - if (y==4 && ((x==11 && level_nr>0) || - (x==15 && level_nr 0) || + (x == 15 && level_nr < leveldir[leveldir_nr].levels - 1)) && button) { static long level_delay = 0; - int step = (button==1 ? 1 : button==2 ? 5 : 10); + int step = (button == 1 ? 1 : button == 2 ? 5 : 10); int new_level_nr, old_level_nr = level_nr; + int font_color = (leveldir[leveldir_nr].readonly ? FC_RED : FC_YELLOW); - new_level_nr = level_nr + (x==11 ? -step : +step); - if (new_level_nr<0) + new_level_nr = level_nr + (x == 11 ? -step : +step); + if (new_level_nr < 0) new_level_nr = 0; - if (new_level_nr>leveldir[leveldir_nr].levels-1) - new_level_nr = leveldir[leveldir_nr].levels-1; + if (new_level_nr > leveldir[leveldir_nr].levels - 1) + new_level_nr = leveldir[leveldir_nr].levels - 1; - if (old_level_nr==new_level_nr || !DelayReached(&level_delay,150)) + if (old_level_nr == new_level_nr || !DelayReached(&level_delay, 150)) goto out; level_nr = new_level_nr; - DrawTextExt(drawto,gc,SX+11*32,SY+3*32, - int2str(level_nr,3), FS_BIG,FC_RED); - DrawTextExt(window,gc,SX+11*32,SY+3*32, - int2str(level_nr,3), FS_BIG,FC_RED); + DrawTextExt(drawto, gc, SX + 11 * 32, SY + 3 * 32, + int2str(level_nr, 3), FS_BIG, font_color); + DrawTextExt(window, gc, SX + 11 * 32, SY + 3 * 32, + int2str(level_nr, 3), FS_BIG, font_color); LoadLevel(level_nr); - DrawMicroLevel(MICROLEV_XPOS,MICROLEV_YPOS); + DrawMicroLevel(MICROLEV_XPOS, MICROLEV_YPOS); TapeErase(); LoadTape(level_nr); @@ -173,28 +174,28 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) /* needed because DrawMicroLevel() takes some time */ BackToFront(); - XSync(display,FALSE); - DelayReached(&level_delay,0); /* reset delay counter */ + XSync(display, FALSE); + DelayReached(&level_delay, 0); /* reset delay counter */ } - else if (x==1 && y>=3 && y<=10) + else if (x == 1 && y >= 3 && y <= 10) { if (button) { - if (y!=choice) + if (y != choice) { - DrawGraphic(0,y-1,GFX_KUGEL_ROT); - DrawGraphic(0,choice-1,GFX_KUGEL_BLAU); + DrawGraphic(0, y-1, GFX_KUGEL_ROT); + DrawGraphic(0, choice - 1, GFX_KUGEL_BLAU); } choice = y; } else { - if (y==3) + if (y == 3) { game_status = TYPENAME; HandleTypeName(strlen(setup.player_name), 0); } - else if (y==4) + else if (y == 4) { if (num_leveldirs) { @@ -203,24 +204,24 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) DrawChooseLevel(); } } - else if (y==5) + else if (y == 5) { game_status = HALLOFFAME; DrawHallOfFame(-1); } - else if (y==6) + else if (y == 6) { - game_status = LEVELED; if (leveldir[leveldir_nr].readonly) - Request("This level is read only !",REQ_CONFIRM); + Request("This level is read only !", REQ_CONFIRM); + game_status = LEVELED; DrawLevelEd(); } - else if (y==7) + else if (y == 7) { game_status = HELPSCREEN; DrawHelpScreen(); } - else if (y==8) + else if (y == 8) { if (setup.autorecord) TapeStartRecording(); @@ -233,12 +234,12 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) InitGame(); } } - else if (y==9) + else if (y == 9) { game_status = SETUP; DrawSetupScreen(); } - else if (y==10) + else if (y == 10) { SaveLevelSetup(); if (Request("Do you really want to quit ?", REQ_ASK | REQ_STAY_CLOSED)) @@ -252,7 +253,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) out: - if (game_status==MAINMENU) + if (game_status == MAINMENU) DoAnimation(); } @@ -506,64 +507,51 @@ void DrawHelpScreenElAction(int start) void DrawHelpScreenElText(int start) { int i; - int xstart = SX+56, ystart = SY+65+2*32, ystep = TILEY+4; - char text[FULL_SXSIZE/FONT2_XSIZE+10]; + int xstart = SX + 56, ystart = SY + 65 + 2 * 32, ystep = TILEY + 4; + int ybottom = SYSIZE - 20; ClearWindow(); DrawHeadline(); - sprintf(text,"The game elements:"); - DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+100, - text,FS_SMALL,FC_GREEN); + DrawTextCentered(100, FC_GREEN, "The game elements:"); - for(i=start;i + AUTO PAUSE */ { tape.pause_before_death = TRUE; - DrawVideoDisplay(VIDEO_STATE_PAUSE_ON, VIDEO_DISPLAY_LABEL_ONLY); + DrawVideoDisplay(VIDEO_STATE_PBEND_ON, VIDEO_DISPLAY_LABEL_ONLY); } else /* -> NORMAL PLAY */ { tape.fast_forward = FALSE; tape.pause_before_death = FALSE; - DrawVideoDisplay(VIDEO_STATE_FFWD_OFF | VIDEO_STATE_PAUSE_OFF, 0); + DrawVideoDisplay(VIDEO_STATE_FFWD_OFF | VIDEO_STATE_PBEND_OFF, 0); } } break; diff --git a/src/tape.c b/src/tape.c index 6b43d318..2c600226 100644 --- a/src/tape.c +++ b/src/tape.c @@ -113,7 +113,7 @@ void TapeTogglePause() tape.pause_before_death = FALSE; DrawVideoDisplay((tape.pausing ? VIDEO_STATE_PAUSE_ON : - VIDEO_STATE_PAUSE_OFF), + VIDEO_STATE_PAUSE_OFF) | VIDEO_STATE_PBEND_OFF, 0); } @@ -187,12 +187,12 @@ boolean TapePlayDelay() if (tape.pause_before_death) /* STOP 10s BEFORE PLAYER GETS KILLED... */ { - if (!(FrameCounter % 5)) + if (!(FrameCounter % 20)) { - if (2*(FrameCounter/10) == FrameCounter/5) - DrawVideoDisplay(VIDEO_STATE_PAUSE_ON, VIDEO_DISPLAY_LABEL_ONLY); + if ((FrameCounter / 20) % 2) + DrawVideoDisplay(VIDEO_STATE_PBEND_ON, VIDEO_DISPLAY_LABEL_ONLY); else - DrawVideoDisplay(VIDEO_STATE_PAUSE_OFF, VIDEO_DISPLAY_LABEL_ONLY); + DrawVideoDisplay(VIDEO_STATE_PBEND_OFF, VIDEO_DISPLAY_LABEL_ONLY); } if (level.time-TimeLeft > tape.length_seconds - PAUSE_SECONDS_BEFORE_DEATH) diff --git a/src/tools.c b/src/tools.c index b37667c1..a5aeb218 100644 --- a/src/tools.c +++ b/src/tools.c @@ -11,6 +11,9 @@ * tools.c * ***********************************************************/ +#include +#include + #ifdef __FreeBSD__ #include #endif @@ -25,8 +28,6 @@ #include "cartoons.h" #include "network.h" -#include - #ifdef MSDOS extern boolean wait_for_vsync; #endif @@ -281,9 +282,27 @@ void ClearWindow() redraw_mask |= REDRAW_FIELD; } -void DrawText(int x, int y, char *text, int font, int col) +void DrawTextCentered(int y, int font_type, char *format, ...) { - DrawTextExt(drawto, gc, x, y, text, font, col); + char buffer[FULL_SXSIZE / FONT3_XSIZE + 10]; + int font_xsize; + va_list ap; + + font_xsize = (font_type < FC_SPECIAL1 ? FONT2_XSIZE : + font_type < FC_SPECIAL2 ? FONT3_XSIZE : FONT4_XSIZE); + + va_start(ap, format); + vsprintf(buffer, format, ap); + va_end(ap); + + DrawText(SX + (SXSIZE - strlen(buffer) * font_xsize) / 2, SY + y, + buffer, FS_SMALL, font_type); +} + +void DrawText(int x, int y, char *text, int font_size, int font_type) +{ + DrawTextExt(drawto, gc, x, y, text, font_size, font_type); + if (x < DX) redraw_mask |= REDRAW_FIELD; else if (y < VY) @@ -291,23 +310,23 @@ void DrawText(int x, int y, char *text, int font, int col) } void DrawTextExt(Drawable d, GC gc, int x, int y, - char *text, int font, int font_color) + char *text, int font_size, int font_type) { int font_width, font_height, font_start; int font_pixmap; - if (font != FS_SMALL && font != FS_BIG) - font = FS_SMALL; - if (font_color < FC_RED || font_color > FC_SPECIAL2) - font_color = FC_RED; - - font_width = (font == FS_BIG ? FONT1_XSIZE : - font_color < FC_SPECIAL1 ? FONT2_XSIZE : - font_color < FC_SPECIAL2 ? FONT3_XSIZE : FONT4_XSIZE); - font_height = (font == FS_BIG ? FONT1_XSIZE : - font_color < FC_SPECIAL2 ? FONT2_XSIZE : FONT4_XSIZE); - font_pixmap = (font == FS_BIG ? PIX_BIGFONT : PIX_SMALLFONT); - font_start = (font_color * (font == FS_BIG ? FONT1_YSIZE : FONT2_YSIZE) * + if (font_size != FS_SMALL && font_size != FS_BIG) + font_size = FS_SMALL; + if (font_type < FC_RED || font_type > FC_SPECIAL2) + font_type = FC_RED; + + font_width = (font_size == FS_BIG ? FONT1_XSIZE : + font_type < FC_SPECIAL1 ? FONT2_XSIZE : + font_type < FC_SPECIAL2 ? FONT3_XSIZE : FONT4_XSIZE); + font_height = (font_size == FS_BIG ? FONT1_XSIZE : + font_type < FC_SPECIAL2 ? FONT2_XSIZE : FONT4_XSIZE); + font_pixmap = (font_size == FS_BIG ? PIX_BIGFONT : PIX_SMALLFONT); + font_start = (font_type * (font_size == FS_BIG ? FONT1_YSIZE : FONT2_YSIZE) * FONT_LINES_PER_FONT); while(*text) diff --git a/src/tools.h b/src/tools.h index ab49aded..e94f195b 100644 --- a/src/tools.h +++ b/src/tools.h @@ -62,6 +62,7 @@ void SetDrawtoField(int); void BackToFront(); void FadeToFront(); void ClearWindow(); +void DrawTextCentered(int, int, char *, ...); void DrawText(int, int, char *, int, int); void DrawTextExt(Drawable, GC, int, int, char *, int, int); void DrawAllPlayers(void); -- 2.34.1