rnd-19980918
[rocksndiamonds.git] / src / main.h
index 6023c372f332b454e04b7d5a3cf58f9aaa39e87b..d34fbb96085bbae64644fcad02f29afde17b0bd2 100644 (file)
 #ifndef MAIN_H
 #define MAIN_H
 
+#ifndef MSDOS
 #define XK_MISCELLANY
 #define XK_LATIN1
 
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
+#include <X11/Xatom.h>
 #include <X11/Xos.h>
 #include <X11/Intrinsic.h>
 #include <X11/keysymdef.h>
@@ -27,6 +29,9 @@
 #ifdef   XPM_INCLUDE_FILE
 #include XPM_INCLUDE_FILE
 #endif
+#else
+#include "msdos.h"
+#endif  // von #ifndef MSDOS
 
 #include <sys/types.h>
 #include <sys/stat.h>
 
 typedef int BOOL;
 
-#define TRUE           1
-#define FALSE          0
+#ifndef FALSE
+#define FALSE 0
+#define TRUE (!FALSE)
+#endif
 
-#define WIN_XPOS       0
-#define WIN_YPOS       0
 #define WIN_XSIZE      672
 #define WIN_YSIZE      560
+#ifndef MSDOS
+#define WIN_XPOS       0
+#define WIN_YPOS       0
+#else
+#define WIN_XPOS       (XRES-WIN_XSIZE)/2
+#define WIN_YPOS       (YRES-WIN_YSIZE)/2
+#endif
 #define SCR_FIELDX     17
 #define SCR_FIELDY     17
+#define MAX_BUF_XSIZE  (SCR_FIELDX + 2)
+#define MAX_BUF_YSIZE  (SCR_FIELDY + 2)
 
 #define MIN_LEV_FIELDX (SCR_FIELDX-2)
 #define MIN_LEV_FIELDY (SCR_FIELDY-2)
@@ -54,22 +68,31 @@ typedef int BOOL;
 #define MAX_LEV_FIELDX 128
 #define MAX_LEV_FIELDY 128
 
+#ifndef MIN
 #define MIN(a,b)       ((a)<(b) ? (a) : (b))
+#endif
+#ifndef MAX
 #define MAX(a,b)       ((a)>(b) ? (a) : (b))
+#endif
+#ifndef ABS
 #define ABS(a)         ((a)<0 ? -(a) : (a))
+#endif
+#ifndef SIGN
 #define SIGN(a)                ((a)<0 ? -1 : ((a)>0 ? 1 : 0))
+#endif
 #define SCROLLX(a)     ((a)-scroll_x)
 #define SCROLLY(a)     ((a)-scroll_y)
 #define UNSCROLLX(a)   ((a)+scroll_x)
 #define UNSCROLLY(a)   ((a)+scroll_y)
-#define IN_SCR_FIELD(x,y) ((x)>=0 && (x)<SCR_FIELDX && (y)>=0 &&(y)<SCR_FIELDY)
+#define IN_SCR_FIELD(x,y) ((x)>=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2)
 #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)<lev_fieldx && (y)>=0 &&(y)<lev_fieldy)
 
-/*
+
 #define IS_PLAYER(x,y)         (JX==(x) && JY==(y))
-*/
 
-#define IS_PLAYER(x,y)         ((JX==(x) && JY==(y)) || (JX2==(x) && JY2==(y)))
+/*
+#define IS_PLAYER(x,y)         ((JX==(x) && JY==(y)) || (lastJX==(x) && lastJY==(y)))
+*/
 
 #define IS_FREE(x,y)           (Feld[x][y]==EL_LEERRAUM && !IS_PLAYER(x,y))
 #define IS_FREE_OR_PLAYER(x,y) (Feld[x][y]==EL_LEERRAUM)
@@ -240,12 +263,12 @@ struct JoystickInfo
 };
 
 extern Display        *display;
+extern Visual         *visual;
 extern int             screen;
 extern Window                  window;
-extern GC              gc, clip_gc[];
-extern XImage         *image[];
-extern Pixmap          clipmask[];
+extern GC              gc, clip_gc[], tile_clip_gc;
 extern Pixmap          pix[];
+extern Pixmap          clipmask[], tile_clipmask[];
 
 #ifdef XPM_INCLUDE_FILE
 extern XpmAttributes   xpm_att[];
@@ -261,7 +284,6 @@ extern int          joystick_device;
 extern char           *joystick_device_name[2];
 extern char           *level_directory;
 extern int                     width, height;
-extern unsigned long   pen_fg, pen_bg;
 
 extern int             game_status;
 extern int             game_emulation;
@@ -275,12 +297,15 @@ extern int                sound_simple_on;
 extern int             toons_on;
 extern int             direct_draw_on;
 extern int             scroll_delay_on;
+extern int             soft_scrolling_on;
 extern int             fading_on;
 extern int             autorecord_on;
 extern int             joystick_nr;
 extern int             quick_doors;
+extern int             cpu_friendly;
 
-extern BOOL            redraw[SCR_FIELDX][SCR_FIELDY];
+extern BOOL            redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
+extern int             redraw_x1, redraw_y1;
 extern int             redraw_mask;
 extern int             redraw_tiles;
 
@@ -301,8 +326,12 @@ extern long                Elementeigenschaften[MAX_ELEMENTS];
 extern int             level_nr, leveldir_nr, num_leveldirs;
 extern int             lev_fieldx,lev_fieldy, scroll_x,scroll_y;
 
-extern int             JX,JY, JX2,JY2, ZX,ZY, ExitX,ExitY;
-extern int             PlayerMovDir, PlayerMovPos, PlayerFrame, PlayerPushing;
+extern int             FX,FY, ScreenMovPos, ScrollStepSize;
+extern int             GameSpeed, MoveSpeed;
+extern int             BX1,BY1, BX2,BY2;
+extern int             JX,JY, lastJX,lastJY, ZX,ZY, ExitX,ExitY;
+extern int             PlayerMovDir, PlayerMovPos, PlayerPushing;
+extern int             PlayerFrame, PlayerGfxPos;
 extern int             PlayerGone,LevelSolved,GameOver;
 extern int             FrameCounter,TimeFrames,TimeLeft,Score;
 extern int             Gems,SokobanFields,Lights,Friends;
@@ -344,6 +373,8 @@ extern char         *progname;
 #define MIDPOSY                        (SCR_FIELDY/2)
 #define SXSIZE                 (SCR_FIELDX*TILEX)
 #define SYSIZE                 (SCR_FIELDY*TILEY)
+#define FXSIZE                 ((SCR_FIELDX+2)*TILEX)
+#define FYSIZE                 ((SCR_FIELDY+2)*TILEY)
 #define DXSIZE                 100
 #define DYSIZE                 280
 #define VXSIZE                 DXSIZE
@@ -556,6 +587,7 @@ extern char         *progname;
 #define EL_AMOEBING            305
 #define EL_MAUERND             306
 #define EL_BURNING             307
+#define EL_PLAYER_IS_LEAVING   308
 
 /* game graphics:
 **       0 - 255: graphics from "RocksScreen"
@@ -570,6 +602,8 @@ extern char         *progname;
 #define GFX_START_ROCKSHEROES  512
 #define GFX_END_ROCKSHEROES    767
 
+#define NUM_TILES              768
+
 /* graphics from "RocksScreen" */
 /* Zeile 0 (0) */
 #define GFX_LEERRAUM           (-1)
@@ -718,6 +752,10 @@ extern char                *progname;
 #define GFX_FIREFLY_L          206
 #define GFX_FIREFLY_U          207
 
+/* CHANGE THIS!!!! (NO REGULAR POSITIONS...) */
+#define GFX_MASK_SPARKLING     210
+/* CHANGE THIS!!!! (NO REGULAR POSITIONS...) */
+
 #define GFX_SCHLUESSEL         GFX_SCHLUESSEL1
 #define GFX_SPIELFIGUR         GFX_SPIELER1
 
@@ -924,10 +962,17 @@ extern char               *progname;
 #define JOYDAT_PATH            GAME_DIR
 #endif
 
+#ifndef MSDOS
 #define SCORE_FILENAME         "ROCKS.score"
 #define NAMES_FILENAME         "ROCKS.names"
 #define LEVDIR_FILENAME                "ROCKS.levelinfo"
 #define JOYDAT_FILENAME                "ROCKS.joystick"
+#else
+#define SCORE_FILENAME         "ROCKS.sco"
+#define NAMES_FILENAME         "ROCKS.nam"
+#define LEVDIR_FILENAME                "ROCKS.lev"
+#define JOYDAT_FILENAME                "ROCKS.joy"
+#endif
 
 #define JOYDAT_FILE            JOYDAT_PATH "/" JOYDAT_FILENAME
 
@@ -954,7 +999,7 @@ extern char         *progname;
 #define LEVELREC_COOKIE_LEN    (strlen(LEVELREC_COOKIE)+1)
 #define JOYSTICK_COOKIE_LEN    (strlen(JOYSTICK_COOKIE)+1)
 
-#define VERSION_STRING         "1.1"
+#define VERSION_STRING         "1.2"
 #define GAMETITLE_STRING       "Rocks'n'Diamonds"
 #define WINDOWTITLE_STRING     GAMETITLE_STRING " " VERSION_STRING
 #define COPYRIGHT_STRING       "Copyright ^1995-98 by Holger Schemel"
@@ -971,8 +1016,13 @@ extern char               *progname;
 #define MB_MENU_MARK           TRUE
 #define MB_MENU_INITIALIZE     (-1)
 #define MB_LEFT                        1
+#ifdef MSDOS
+#define MB_MIDDLE              4
+#define MB_RIGHT               2
+#else
 #define MB_MIDDLE              2
 #define MB_RIGHT               3
+#endif
 
 /* values for key_status */
 #define KEY_NOT_PRESSED                FALSE
@@ -988,10 +1038,11 @@ extern char              *progname;
 #define REDRAW_VIDEO_2         (1L<<5)
 #define REDRAW_VIDEO_3         (1L<<6)
 #define REDRAW_MICROLEV                (1L<<7)
+#define REDRAW_FROM_BACKBUFFER (1L<<8)
 #define REDRAW_DOOR_2  (REDRAW_VIDEO_1 | REDRAW_VIDEO_2 | REDRAW_VIDEO_3)
 #define REDRAW_DOORS   (REDRAW_DOOR_1 | REDRAW_DOOR_2)
 #define REDRAW_MAIN    (REDRAW_FIELD | REDRAW_TILES | REDRAW_MICROLEV)
-#define REDRAWTILES_TH         SCR_FIELDX*SCR_FIELDY/2
+#define REDRAWTILES_THRESHOLD  SCR_FIELDX*SCR_FIELDY/2
 
 /* positions in the game control window */
 #define XX_LEVEL               37
@@ -1040,5 +1091,6 @@ extern char               *progname;
 /* für DrawGraphicAnimation (tools.c) und AnimateToon (cartoons.c) */
 #define ANIM_NORMAL    0
 #define ANIM_OSCILLATE 1
+#define ANIM_REVERSE   2
 
 #endif