#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>
#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)
#define MAX_LEV_FIELDX 128
#define MAX_LEV_FIELDY 128
+#define MAX_PLAYERS 4
+
+#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)) || (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)
#define IS_MOVING(x,y) (MovPos[x][y]!=0)
/* Pixmaps without them */
#define PIX_DB_BACK 6
#define PIX_DB_DOOR 7
+#define PIX_DB_FIELD 8
#define NUM_PICTURES 6
-#define NUM_PIXMAPS 8
+#define NUM_PIXMAPS 9
/* boundaries of arrays etc. */
#define MAX_NAMELEN (10+1)
struct PlayerInfo
{
+ BOOL active, local;
+
char login_name[MAX_NAMELEN];
char alias_name[MAX_NAMELEN];
int handicap;
unsigned int setup;
int leveldir_nr;
int level_nr;
+
+ int JX,JY, lastJX,lastJY, ZX,ZY, ExitX,ExitY;
+ int PlayerMovDir, PlayerMovPos, PlayerPushing;
+ int PlayerFrame, PlayerGfxPos;
+ int PlayerGone, LevelSolved, GameOver;
+
+ int score;
+ int gems_still_needed;
+ int sokobanfields_still_needed;
+ int lights_still_needed;
+ int friends_still_needed;
+ int key[4];
+ int dynamite;
+ int dynabomb_count, dynabomb_size, dynabombs_left, dynabomb_xl;
};
struct LevelInfo
};
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[];
#endif
-extern Drawable drawto, drawto_field, backbuffer;
+extern Drawable drawto, drawto_field, backbuffer, fieldbuffer;
extern Colormap cmap;
extern int sound_pipe[2];
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;
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 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;
extern int level_nr, leveldir_nr, num_leveldirs;
extern int lev_fieldx,lev_fieldy, scroll_x,scroll_y;
-extern int JX,JY, ZX,ZY, ExitX,ExitY;
-extern int PlayerMovDir, PlayerFrame, PlayerPushing;
+extern int FX,FY, ScreenMovPos, ScrollStepSize;
+extern int GameFrameDelay, 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;
-extern int Dynamite,Key[4],MampferNr;
-extern int DynaBombCount, DynaBombSize, DynaBombsLeft, DynaBombXL;
-extern int SiebAktiv;
+extern int FrameCounter,TimeFrames,TimeLeft;
+extern int MampferNr, SiebAktiv;
extern struct LevelDirInfo leveldir[];
extern struct LevelInfo level;
-extern struct PlayerInfo player;
+extern struct PlayerInfo stored_player[];
+extern struct PlayerInfo *local_player, *actual_player;
extern struct HiScore highscore[];
extern struct RecordingInfo tape;
extern struct SoundInfo Sound[];
#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
#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"
#define GFX_START_ROCKSHEROES 512
#define GFX_END_ROCKSHEROES 767
+#define NUM_TILES 768
+
/* graphics from "RocksScreen" */
/* Zeile 0 (0) */
#define GFX_LEERRAUM (-1)
#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
#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
#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-97 by Holger Schemel"
+#define COPYRIGHT_STRING "Copyright ^1995-98 by Holger Schemel"
/* Leerer Login- und Alias-Name */
#define EMPTY_LOGIN "NO_LOGIN"
#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
#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
/* für DrawGraphicAnimation (tools.c) und AnimateToon (cartoons.c) */
#define ANIM_NORMAL 0
#define ANIM_OSCILLATE 1
+#define ANIM_REVERSE 2
#endif