rnd-19981121-1
authorHolger Schemel <info@artsoft.org>
Fri, 20 Nov 1998 23:44:47 +0000 (00:44 +0100)
committerHolger Schemel <info@artsoft.org>
Sat, 30 Aug 2014 08:31:56 +0000 (10:31 +0200)
src/buttons.c
src/buttons.h
src/game.c
src/screens.c
src/tape.c
src/tools.c
src/tools.h

index 6471e75e6fa2bbfd79b3517b156c87f36c6b9d8e..d3eb443adb263bd85aeab0bf176ed36c3c31c6d2 100644 (file)
@@ -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<<i))
@@ -127,6 +140,19 @@ void DrawVideoDisplay(unsigned long state, unsigned long value)
              VY + VIDEO_PLAY_SYMBOL_YPOS);
   }
 
+  if (state & VIDEO_STATE_PBEND_ON)
+  {
+    int cx = DOOR_GFX_PAGEX6, cy = DOOR_GFX_PAGEY1;
+
+    XCopyArea(display,pix[PIX_DOOR],drawto,gc,
+             cx + VIDEO_PBEND_LABEL_XPOS,
+             cy + VIDEO_PBEND_LABEL_YPOS,
+             VIDEO_PBEND_LABEL_XSIZE,
+             VIDEO_PBEND_LABEL_YSIZE,
+             VX + VIDEO_REC_LABEL_XPOS,
+             VY + VIDEO_REC_LABEL_YPOS);
+  }
+
   if (state & VIDEO_STATE_DATE_ON)
   {
     int tag = value % 100;
index f6d3341fadda24c517ef6687feab6af044be93fc..c34a1ab64589a28c4ae08d9fa793f5e24790c8ba 100644 (file)
 #define VIDEO_TIME_XSIZE       50
 #define VIDEO_TIME_YSIZE       16
 
+/* special */
+#define VIDEO_PBEND_LABEL_XPOS 6
+#define VIDEO_PBEND_LABEL_YPOS 220
+#define VIDEO_PBEND_LABEL_XSIZE        35
+#define VIDEO_PBEND_LABEL_YSIZE        30
+
 #define ON_VIDEO_BUTTON(x,y)   ((x)>=(VX+VIDEO_CONTROL_XPOS) &&        \
                                 (x)< (VX+VIDEO_CONTROL_XPOS +          \
                                       VIDEO_CONTROL_XSIZE) &&          \
 #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
                                 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   |       \
                                 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    |       \
index c5520d4ae89a754d8a5c638726acb0a7f1801afd..79d917d6934020d551e6387a90e0b4cf203fdf5d 100644 (file)
@@ -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()
 {
index bd0f13a361649033b6166bffbbd64aa30a0fa230..87d7c39c995a1037b839115094bac5a5af6f210d 100644 (file)
@@ -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_nr<leveldir[leveldir_nr].levels ? FC_RED : FC_YELLOW));
+          (leveldir[leveldir_nr].readonly ? FC_RED : FC_YELLOW));
   DrawText(SX + 32,    SY + 4*32, "Hall Of Fame", FS_BIG, FC_GREEN);
   DrawText(SX + 32,    SY + 5*32, "Level Creator", FS_BIG, FC_GREEN);
   DrawText(SY + 32,    SY + 6*32, "Info Screen", FS_BIG, FC_GREEN);
@@ -66,26 +66,26 @@ void DrawMainMenu()
 
   DrawMicroLevel(MICROLEV_XPOS,MICROLEV_YPOS);
 
-  for(i=2;i<10;i++)
-    DrawGraphic(0,i,GFX_KUGEL_BLAU);
-  DrawGraphic(10,3,GFX_PFEIL_L);
-  DrawGraphic(14,3,GFX_PFEIL_R);
+  for(i=2; i<10; i++)
+    DrawGraphic(0, i, GFX_KUGEL_BLAU);
+  DrawGraphic(10, 3, GFX_PFEIL_L);
+  DrawGraphic(14, 3, GFX_PFEIL_R);
 
-  DrawText(SX+56, SY+326, "A Game by Artsoft Entertainment",
+  DrawText(SX + 56, SY + 326, "A Game by Artsoft Entertainment",
           FS_SMALL, FC_RED);
 
   if (leveldir[leveldir_nr].name)
   {
     int len = strlen(leveldir[leveldir_nr].name);
-    int lxpos = SX+(SXSIZE-len*FONT4_XSIZE)/2;
-    int lypos = SY+352;
+    int lxpos = SX + (SXSIZE - len * FONT4_XSIZE) / 2;
+    int lypos = SY + 352;
 
-    DrawText(lxpos,lypos,leveldir[leveldir_nr].name,FS_SMALL,FC_SPECIAL2);
+    DrawText(lxpos, lypos, leveldir[leveldir_nr].name, FS_SMALL, FC_SPECIAL2);
   }
 
   FadeToFront();
   InitAnimation();
-  HandleMainMenu(0,0,0,0,MB_MENU_INITIALIZE);
+  HandleMainMenu(0,0, 0,0, MB_MENU_INITIALIZE);
 
   TapeStop();
   if (TAPE_IS_EMPTY(tape))
@@ -102,11 +102,11 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
 {
   static int choice = 3;
   static int redraw = TRUE;
-  int x = (mx+32-SX)/32, y = (my+32-SY)/32;
+  int x = (mx + 32 - SX) / 32, y = (my + 32 - SY) / 32;
 
   if (redraw || button == MB_MENU_INITIALIZE)
   {
-    DrawGraphic(0,choice-1,GFX_KUGEL_ROT);
+    DrawGraphic(0, choice - 1, GFX_KUGEL_ROT);
     redraw = FALSE;
   }
 
@@ -115,22 +115,22 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button)
 
   if (dx || dy)
   {
-    if (dx && choice==4)
+    if (dx && choice == 4)
     {
-      x = (dx<0 ? 11 : 15);
+      x = (dx < 0 ? 11 : 15);
       y = 4;
     }
     else if (dy)
     {
       x = 1;
-      y = choice+dy;
+      y = choice + dy;
     }
     else
       x = y = 0;
 
-    if (y<3)
+    if (y < 3)
       y = 3;
-    else if (y>10)
+    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<leveldir[leveldir_nr].levels-1)) &&
+  if (y == 4 && ((x == 11 && 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<start+MAX_HELPSCREEN_ELS && i<num_helpscreen_els;i++)
+  for(i=start; i < start + MAX_HELPSCREEN_ELS && i < num_helpscreen_els; i++)
   {
-    DrawText(xstart,ystart+(i-start)*ystep+(*helpscreen_eltext[i][1] ? 0 : 8),
-            helpscreen_eltext[i][0],FS_SMALL,FC_YELLOW);
-    DrawText(xstart,ystart+(i-start)*ystep+16,
-            helpscreen_eltext[i][1],FS_SMALL,FC_YELLOW);
+    DrawText(xstart,
+            ystart + (i - start) * ystep + (*helpscreen_eltext[i][1] ? 0 : 8),
+            helpscreen_eltext[i][0], FS_SMALL, FC_YELLOW);
+    DrawText(xstart, ystart + (i - start) * ystep + 16,
+            helpscreen_eltext[i][1], FS_SMALL, FC_YELLOW);
   }
 
-  sprintf(text,"Press any key or button for next page");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+SYSIZE-20,
-          text,FS_SMALL,FC_BLUE);
+  DrawTextCentered(ybottom, FC_BLUE, "Press any key or button for next page");
 }
 
 void DrawHelpScreenMusicText(int num)
 {
   int ystart = 150, ystep = 30;
-  char text[FULL_SXSIZE/FONT2_XSIZE+10];
+  int ybottom = SYSIZE - 20;
 
   FadeSounds();
   ClearWindow();
   DrawHeadline();
 
-  sprintf(text,"The game background music loops:");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+100,
-          text,FS_SMALL,FC_GREEN);
-
-  sprintf(text,"Excerpt from");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+0*ystep,
-          text,FS_SMALL,FC_YELLOW);
-  sprintf(text,"%c%s%c",'\"',helpscreen_music[num][0],'\"');
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+1*ystep,
-          text,FS_SMALL,FC_RED);
-  sprintf(text,"by");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+2*ystep,
-          text,FS_SMALL,FC_YELLOW);
-  sprintf(text,"%s",helpscreen_music[num][1]);
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+3*ystep,
-          text,FS_SMALL,FC_RED);
-  sprintf(text,"from the album");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+4*ystep,
-          text,FS_SMALL,FC_YELLOW);
-  sprintf(text,"%c%s%c",'\"',helpscreen_music[num][2],'\"');
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+5*ystep,
-          text,FS_SMALL,FC_RED);
-
-  sprintf(text,"Press any key or button for next page");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+SYSIZE-20,
-          text,FS_SMALL,FC_BLUE);
+  DrawTextCentered(100, FC_GREEN, "The game background music loops:");
+
+  DrawTextCentered(ystart + 0 * ystep, FC_YELLOW,
+                  "Excerpt from");
+  DrawTextCentered(ystart + 1 * ystep, FC_RED, "\"%s\"",
+                  helpscreen_music[num][0]);
+  DrawTextCentered(ystart + 2 * ystep, FC_YELLOW,
+                  "by");
+  DrawTextCentered(ystart + 3 * ystep, FC_RED,
+                  "%s", helpscreen_music[num][1]);
+  DrawTextCentered(ystart + 4 * ystep, FC_YELLOW,
+                  "from the album");
+  DrawTextCentered(ystart + 5 * ystep, FC_RED, "\"%s\"",
+                  helpscreen_music[num][2]);
+
+  DrawTextCentered(ybottom, FC_BLUE, "Press any key or button for next page");
 
   PlaySoundLoop(background_loop[num]);
 }
@@ -571,93 +559,66 @@ void DrawHelpScreenMusicText(int num)
 void DrawHelpScreenCreditsText()
 {
   int ystart = 150, ystep = 30;
-  char text[FULL_SXSIZE/FONT2_XSIZE+10];
+  int ybottom = SYSIZE - 20;
 
   FadeSounds();
   ClearWindow();
   DrawHeadline();
 
-  sprintf(text,"Credits:");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+100,
-          text,FS_SMALL,FC_GREEN);
-
-  sprintf(text,"DOS/Windows port of the game:");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+0*ystep,
-          text,FS_SMALL,FC_YELLOW);
-  sprintf(text,"Guido Schulz");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+1*ystep,
-          text,FS_SMALL,FC_RED);
-
-  sprintf(text,"Additional toons:");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+2*ystep,
-          text,FS_SMALL,FC_YELLOW);
-  sprintf(text,"Karl Hörnell");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+3*ystep,
-          text,FS_SMALL,FC_RED);
-
-  sprintf(text,"...and many thanks to all contributors");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+5*ystep,
-          text,FS_SMALL,FC_YELLOW);
-  sprintf(text,"of new levels!");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+6*ystep,
-          text,FS_SMALL,FC_YELLOW);
-
-  sprintf(text,"Press any key or button for next page");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+SYSIZE-20,
-          text,FS_SMALL,FC_BLUE);
+  DrawTextCentered(100, FC_GREEN,
+                  "Credits:");
+  DrawTextCentered(ystart + 0 * ystep, FC_YELLOW,
+                  "DOS/Windows port of the game:");
+  DrawTextCentered(ystart + 1 * ystep, FC_RED,
+                  "Guido Schulz");
+  DrawTextCentered(ystart + 2 * ystep, FC_YELLOW,
+                  "Additional toons:");
+  DrawTextCentered(ystart + 3 * ystep, FC_RED,
+                  "Karl Hörnell");
+  DrawTextCentered(ystart + 5 * ystep, FC_YELLOW,
+                  "...and many thanks to all contributors");
+  DrawTextCentered(ystart + 6 * ystep, FC_YELLOW,
+                  "of new levels!");
+
+  DrawTextCentered(ybottom, FC_BLUE, "Press any key or button for next page");
 }
 
 void DrawHelpScreenContactText()
 {
   int ystart = 150, ystep = 30;
-  char text[FULL_SXSIZE/FONT2_XSIZE+10];
+  int ybottom = SYSIZE - 20;
 
-  FadeSounds();
   ClearWindow();
   DrawHeadline();
 
-  sprintf(text,"Program information:");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+100,
-          text,FS_SMALL,FC_GREEN);
-
-  sprintf(text,"This game is Freeware!");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+0*ystep,
-          text,FS_SMALL,FC_YELLOW);
-  sprintf(text,"If you like it, send e-mail to:");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+1*ystep,
-          text,FS_SMALL,FC_YELLOW);
-  sprintf(text,"aeglos@valinor.owl.de");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+2*ystep,
-          text,FS_SMALL,FC_RED);
-  sprintf(text,"or SnailMail to:");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+3*ystep,
-          text,FS_SMALL,FC_YELLOW);
-  sprintf(text,"Holger Schemel");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+4*ystep,
-          text,FS_SMALL,FC_RED);
-  sprintf(text,"Sennehof 28");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+4*ystep+20,
-          text,FS_SMALL,FC_RED);
-  sprintf(text,"33659 Bielefeld");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+4*ystep+40,
-          text,FS_SMALL,FC_RED);
-  sprintf(text,"Germany");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+4*ystep+60,
-          text,FS_SMALL,FC_RED);
-
-  sprintf(text,"If you have created new levels,");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+7*ystep,
-          text,FS_SMALL,FC_YELLOW);
-  sprintf(text,"send them to me to include them!");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+8*ystep,
-          text,FS_SMALL,FC_YELLOW);
-  sprintf(text,":-)");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+ystart+9*ystep,
-          text,FS_SMALL,FC_YELLOW);
-
-  sprintf(text,"Press any key or button for main menu");
-  DrawText(SX+(SXSIZE-strlen(text)*FONT2_XSIZE)/2,SY+SYSIZE-20,
-          text,FS_SMALL,FC_BLUE);
+  DrawTextCentered(100, FC_GREEN, "Program information:");
+
+  DrawTextCentered(ystart + 0 * ystep, FC_YELLOW,
+                  "This game is Freeware!");
+  DrawTextCentered(ystart + 1 * ystep, FC_YELLOW,
+                  "If you like it, send e-mail to:");
+  DrawTextCentered(ystart + 2 * ystep, FC_RED,
+                  "aeglos@valinor.owl.de");
+  DrawTextCentered(ystart + 3 * ystep, FC_YELLOW,
+                  "or SnailMail to:");
+  DrawTextCentered(ystart + 4 * ystep + 0, FC_RED,
+                  "Holger Schemel");
+  DrawTextCentered(ystart + 4 * ystep + 20, FC_RED,
+                  "Oststrasse 11a");
+  DrawTextCentered(ystart + 4 * ystep + 40, FC_RED,
+                  "33604 Bielefeld");
+  DrawTextCentered(ystart + 4 * ystep + 60, FC_RED,
+                  "Germany");
+
+  DrawTextCentered(ystart + 7 * ystep, FC_YELLOW,
+                  "If you have created new levels,");
+  DrawTextCentered(ystart + 8 * ystep, FC_YELLOW,
+                  "send them to me to include them!");
+  DrawTextCentered(ystart + 9 * ystep, FC_YELLOW,
+                  ":-)");
+
+  DrawTextCentered(ybottom, FC_BLUE,
+                  "Press any key or button for main menu");
 }
 
 void DrawHelpScreen()
@@ -791,16 +752,17 @@ void DrawChooseLevel()
   CloseDoor(DOOR_CLOSE_2);
 
   ClearWindow();
-  DrawText(SX,SY,"Level Directories",FS_BIG,FC_GREEN);
-  for(i=0;i<num_leveldirs;i++)
+  DrawText(SX, SY, "Level Directories", FS_BIG, FC_GREEN);
+  for(i=0; i<num_leveldirs; i++)
   {
-    DrawText(SX+32,SY+(i+2)*32,leveldir[i].name,FS_BIG,FC_YELLOW);
-    DrawGraphic(0,i+2,GFX_KUGEL_BLAU);
+    DrawText(SX + 32, SY + (i + 2) * 32, leveldir[i].name, FS_BIG,
+            (leveldir[i].readonly ? FC_RED : FC_YELLOW));
+    DrawGraphic(0, i + 2, GFX_KUGEL_BLAU);
   }
 
   FadeToFront();
   InitAnimation();
-  HandleChooseLevel(0,0,0,0,MB_MENU_INITIALIZE);
+  HandleChooseLevel(0,0, 0,0, MB_MENU_INITIALIZE);
 }
 
 void HandleChooseLevel(int mx, int my, int dx, int dy, int button)
@@ -2063,13 +2025,13 @@ void HandleVideoButtons(int mx, int my, int button)
        else if (!tape.pause_before_death)      /* FFWD PLAY -> + 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;
index 6b43d3186cd24d3f199579829bde2bc7d59afa66..2c600226716fcdb2988c5f7381b5dcbeb0116078 100644 (file)
@@ -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)
index b37667c1f4d334223400ebbfe87ad8d65c08cbf4..a5aeb218940df516e836c1f544abbd022d3d0d39 100644 (file)
@@ -11,6 +11,9 @@
 *  tools.c                                                 *
 ***********************************************************/
 
+#include <math.h>
+#include <stdarg.h>
+
 #ifdef __FreeBSD__
 #include <machine/joystick.h>
 #endif
@@ -25,8 +28,6 @@
 #include "cartoons.h"
 #include "network.h"
 
-#include <math.h>
-
 #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)
index ab49adedad979831569b229873c27e1268cc6b1f..e94f195b48ae9fd324ace6bd6487b072f54d6e66 100644 (file)
@@ -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);