X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fmain.h;h=d1abeccc52462bd684590a231af72f3dbd16531d;hp=90dcd6d2672a2feb1f827e4bd0c4efb06e390d23;hb=823bddb0d9cc63ddda17a2cd20266aa3b82bde38;hpb=19b6c35938826bfd71478d7ddaf1a4729420d3b2 diff --git a/src/main.h b/src/main.h index 90dcd6d2..d1abeccc 100644 --- a/src/main.h +++ b/src/main.h @@ -1,13 +1,12 @@ /*********************************************************** * Rocks'n'Diamonds -- McDuffin Strikes Back! * *----------------------------------------------------------* -* ©1995 Artsoft Development * -* Holger Schemel * -* 33659 Bielefeld-Senne * -* Telefon: (0521) 493245 * -* eMail: aeglos@valinor.owl.de * -* aeglos@uni-paderborn.de * -* q99492@pbhrzx.uni-paderborn.de * +* (c) 1995-98 Artsoft Entertainment * +* Holger Schemel * +* Oststrasse 11a * +* 33604 Bielefeld * +* phone: ++49 +521 290471 * +* email: aeglos@valinor.owl.de * *----------------------------------------------------------* * main.h * ***********************************************************/ @@ -15,11 +14,13 @@ #ifndef MAIN_H #define MAIN_H +#ifndef MSDOS #define XK_MISCELLANY #define XK_LATIN1 #include #include +#include #include #include #include @@ -27,6 +28,9 @@ #ifdef XPM_INCLUDE_FILE #include XPM_INCLUDE_FILE #endif +#else +#include "msdos.h" +#endif /* #ifndef MSDOS */ #include #include @@ -37,48 +41,54 @@ 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 MIN_LEV_FIELDX (SCR_FIELDX - 2) +#define MIN_LEV_FIELDY (SCR_FIELDY - 2) #define STD_LEV_FIELDX 64 #define STD_LEV_FIELDY 32 #define MAX_LEV_FIELDX 128 #define MAX_LEV_FIELDY 128 -#define MIN(a,b) ((a)<(b) ? (a) : (b)) -#define MAX(a,b) ((a)>(b) ? (a) : (b)) -#define ABS(a) ((a)<0 ? -(a) : (a)) -#define SIGN(a) ((a)<0 ? -1 : ((a)>0 ? 1 : 0)) -#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 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 SCREENX(a) ((a) - scroll_x) +#define SCREENY(a) ((a) - scroll_y) +#define LEVELX(a) ((a) + scroll_x) +#define LEVELY(a) ((a) + scroll_y) +#define IN_VIS_FIELD(x,y) ((x)>=0 && (x)=0 &&(y)=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2) #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)=0 &&(y)=EL_BLOCKED) -#define TIMESIZE (TimeLeft*100/level.time) +#define IS_DRAWABLE(e) ((e) < EL_BLOCKED) +#define IS_NOT_DRAWABLE(e) ((e) >= EL_BLOCKED) +#define TIMESIZE (TimeLeft * 100 / level.time) #define TAPE_IS_EMPTY(x) ((x).length == 0) #define TAPE_IS_STOPPED(x) (!(x).recording && !(x).playing &&!(x).pausing) +#define PLAYERINFO(x,y) (&stored_player[StorePlayer[x][y]-EL_SPIELER1]) + /* Pixmaps with Xpm or X11 Bitmap files */ #define PIX_BACK 0 #define PIX_DOOR 1 @@ -185,12 +212,41 @@ struct HiScore struct PlayerInfo { + int nr, 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, last_jx,last_jy; + int MovDir, MovPos, GfxPos; + int Pushing, Frame; + + int gone, LevelSolved, GameOver; + + long actual_frame_counter; + + int frame_reset_delay; + + long move_delay; + int last_move_dir; + + long push_delay; + int push_delay_value; + + int snapped; + + 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 @@ -231,7 +287,7 @@ struct RecordingInfo BOOL changed; struct { - unsigned char joystickdata; + unsigned char joystickdata[MAX_PLAYERS]; unsigned char delay; } pos[MAX_TAPELEN]; }; @@ -243,12 +299,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[]; @@ -264,7 +320,9 @@ 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 char *server_host; +extern int server_port; extern int game_status; extern int game_emulation; @@ -283,6 +341,7 @@ extern int fading_on; extern int autorecord_on; extern int joystick_nr; extern int quick_doors; +extern int networking; extern BOOL redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; extern int redraw_x1, redraw_y1; @@ -296,6 +355,7 @@ extern int MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern int StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; extern int JustHit[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; @@ -306,20 +366,21 @@ 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 FX,FY, ScreenMovPos; +extern int FX,FY, ScrollStepSize; +extern int ScreenMovDir, ScreenMovPos, ScreenGfxPos; +extern int GameFrameDelay, MoveSpeed; extern int BX1,BY1, BX2,BY2; -extern int JX,JY, JX2,JY2, ZX,ZY, ExitX,ExitY; -extern int PlayerMovDir, PlayerMovPos, PlayerFrame, PlayerPushing; -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 ZX,ZY, ExitX,ExitY; +extern int AllPlayersGone; +extern int FrameCounter, TimeFrames, TimeLeft; +extern int MampferNr, SiebAktiv; + +extern int TestPlayer; extern struct LevelDirInfo leveldir[]; extern struct LevelInfo level; -extern struct PlayerInfo player; +extern struct PlayerInfo stored_player[]; +extern struct PlayerInfo *local_player; extern struct HiScore highscore[]; extern struct RecordingInfo tape; extern struct SoundInfo Sound[]; @@ -565,6 +626,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" @@ -579,6 +641,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) @@ -733,13 +797,31 @@ extern char *progname; /* graphics from "RocksHeroes" */ -#define GFX_SPIELER_DOWN (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE + 0) -#define GFX_SPIELER_UP (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE + 4) -#define GFX_SPIELER_LEFT (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE + 0) -#define GFX_SPIELER_RIGHT (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE + 4) -#define GFX_SPIELER_PUSH_RIGHT (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE + 0) -#define GFX_SPIELER_PUSH_LEFT (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE + 4) -#define GFX_SONDE_START (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE + 0) +#define GFX_SPIELER1_DOWN (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE + 0) +#define GFX_SPIELER1_UP (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE + 4) +#define GFX_SPIELER1_LEFT (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE + 0) +#define GFX_SPIELER1_RIGHT (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE + 4) +#define GFX_SPIELER1_PUSH_RIGHT (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE + 0) +#define GFX_SPIELER1_PUSH_LEFT (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE + 4) +#define GFX_SPIELER2_DOWN (GFX_START_ROCKSHEROES + 3*HEROES_PER_LINE + 0) +#define GFX_SPIELER2_UP (GFX_START_ROCKSHEROES + 3*HEROES_PER_LINE + 4) +#define GFX_SPIELER2_LEFT (GFX_START_ROCKSHEROES + 4*HEROES_PER_LINE + 0) +#define GFX_SPIELER2_RIGHT (GFX_START_ROCKSHEROES + 4*HEROES_PER_LINE + 4) +#define GFX_SPIELER2_PUSH_RIGHT (GFX_START_ROCKSHEROES + 5*HEROES_PER_LINE + 0) +#define GFX_SPIELER2_PUSH_LEFT (GFX_START_ROCKSHEROES + 5*HEROES_PER_LINE + 4) +#define GFX_SPIELER3_DOWN (GFX_START_ROCKSHEROES + 6*HEROES_PER_LINE + 0) +#define GFX_SPIELER3_UP (GFX_START_ROCKSHEROES + 6*HEROES_PER_LINE + 4) +#define GFX_SPIELER3_LEFT (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE + 0) +#define GFX_SPIELER3_RIGHT (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE + 4) +#define GFX_SPIELER3_PUSH_RIGHT (GFX_START_ROCKSHEROES + 8*HEROES_PER_LINE + 0) +#define GFX_SPIELER3_PUSH_LEFT (GFX_START_ROCKSHEROES + 8*HEROES_PER_LINE + 4) +#define GFX_SPIELER4_DOWN (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE + 0) +#define GFX_SPIELER4_UP (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE + 4) +#define GFX_SPIELER4_LEFT (GFX_START_ROCKSHEROES +10*HEROES_PER_LINE + 0) +#define GFX_SPIELER4_RIGHT (GFX_START_ROCKSHEROES +10*HEROES_PER_LINE + 4) +#define GFX_SPIELER4_PUSH_RIGHT (GFX_START_ROCKSHEROES +11*HEROES_PER_LINE + 0) +#define GFX_SPIELER4_PUSH_LEFT (GFX_START_ROCKSHEROES +11*HEROES_PER_LINE + 4) +#define GFX_SONDE_START (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE + 8) #define GFX_SCHWEIN_DOWN (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE + 8) #define GFX_SCHWEIN_UP (GFX_START_ROCKSHEROES + 0*HEROES_PER_LINE +12) #define GFX_SCHWEIN_LEFT (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE + 8) @@ -752,16 +834,18 @@ extern char *progname; #define GFX_MAULWURF_UP (GFX_START_ROCKSHEROES + 4*HEROES_PER_LINE +12) #define GFX_MAULWURF_LEFT (GFX_START_ROCKSHEROES + 5*HEROES_PER_LINE + 8) #define GFX_MAULWURF_RIGHT (GFX_START_ROCKSHEROES + 5*HEROES_PER_LINE +12) -#define GFX_PINGUIN_DOWN (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE + 8) -#define GFX_PINGUIN_UP (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE +12) -#define GFX_PINGUIN_LEFT (GFX_START_ROCKSHEROES + 8*HEROES_PER_LINE + 8) -#define GFX_PINGUIN_RIGHT (GFX_START_ROCKSHEROES + 8*HEROES_PER_LINE +12) -#define GFX_BLURB_LEFT (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE + 8) -#define GFX_BLURB_RIGHT (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE +12) -#define GFX_FLAMMEN_LEFT (GFX_START_ROCKSHEROES + 8*HEROES_PER_LINE + 0) -#define GFX_FLAMMEN_RIGHT (GFX_START_ROCKSHEROES + 9*HEROES_PER_LINE + 0) -#define GFX_FLAMMEN_UP (GFX_START_ROCKSHEROES +10*HEROES_PER_LINE + 0) -#define GFX_FLAMMEN_DOWN (GFX_START_ROCKSHEROES +11*HEROES_PER_LINE + 0) +#define GFX_PINGUIN_DOWN (GFX_START_ROCKSHEROES + 6*HEROES_PER_LINE + 8) +#define GFX_PINGUIN_UP (GFX_START_ROCKSHEROES + 6*HEROES_PER_LINE +12) +#define GFX_PINGUIN_LEFT (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE + 8) +#define GFX_PINGUIN_RIGHT (GFX_START_ROCKSHEROES + 7*HEROES_PER_LINE +12) +#define GFX_BLURB_LEFT (GFX_START_ROCKSHEROES +10*HEROES_PER_LINE + 8) +#define GFX_BLURB_RIGHT (GFX_START_ROCKSHEROES +10*HEROES_PER_LINE +12) +#define GFX_FUNKELN_BLAU (GFX_START_ROCKSHEROES +11*HEROES_PER_LINE + 8) +#define GFX_FUNKELN_WEISS (GFX_START_ROCKSHEROES +11*HEROES_PER_LINE +12) +#define GFX_FLAMMEN_LEFT (GFX_START_ROCKSHEROES +12*HEROES_PER_LINE + 8) +#define GFX_FLAMMEN_RIGHT (GFX_START_ROCKSHEROES +13*HEROES_PER_LINE + 8) +#define GFX_FLAMMEN_UP (GFX_START_ROCKSHEROES +14*HEROES_PER_LINE + 8) +#define GFX_FLAMMEN_DOWN (GFX_START_ROCKSHEROES +15*HEROES_PER_LINE + 8) /* graphics from "RocksFont" */ #define GFX_CHAR_START (GFX_START_ROCKSFONT) @@ -874,10 +958,10 @@ extern char *progname; /* directions for moving */ #define MV_NO_MOVING 0 -#define MV_LEFT 1 -#define MV_RIGHT 2 -#define MV_UP 4 -#define MV_DOWN 8 +#define MV_LEFT (1<<0) +#define MV_RIGHT (1<<1) +#define MV_UP (1<<2) +#define MV_DOWN (1<<3) /* font types */ #define FS_SMALL 0 @@ -933,10 +1017,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 @@ -949,12 +1040,13 @@ extern char *progname; /* old cookies */ #define NAMES_COOKIE_10 "ROCKSNDIAMONDS_NAMES_FILE_VERSION_1.0" +#define LEVELREC_COOKIE_10 "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.0" #define LEVEL_COOKIE "ROCKSNDIAMONDS_LEVEL_FILE_VERSION_1.0" #define SCORE_COOKIE "ROCKSNDIAMONDS_SCORE_FILE_VERSION_1.0" #define NAMES_COOKIE "ROCKSNDIAMONDS_NAMES_FILE_VERSION_1.1" #define LEVELDIR_COOKIE "ROCKSNDIAMONDS_LEVELDIR_FILE_VERSION_1.0" -#define LEVELREC_COOKIE "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.0" +#define LEVELREC_COOKIE "ROCKSNDIAMONDS_LEVELREC_FILE_VERSION_1.2" #define JOYSTICK_COOKIE "ROCKSNDIAMONDS_JOYSTICK_FILE_VERSION_1.0" #define LEVEL_COOKIE_LEN (strlen(LEVEL_COOKIE)+1) #define SCORE_COOKIE_LEN (strlen(SCORE_COOKIE)+1) @@ -963,7 +1055,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" @@ -980,8 +1072,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 @@ -1050,5 +1147,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