X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fmain.h;h=fed17ca6a049a68e12801eb688aaf460c4420ad8;hp=6cf2bb23891b4c939dbb1b3ba4c6240afad33b8e;hb=0918c3eb2f6219a8cc72aa85bd9c4889788dd474;hpb=a5a03e15b395ba1942c180d1cd0d3a4f43b87f56 diff --git a/src/main.h b/src/main.h index 6cf2bb23..fed17ca6 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,91 +14,117 @@ #ifndef MAIN_H #define MAIN_H +#include +#include +#include +#include +#include +#include + +#ifndef MSDOS #define XK_MISCELLANY #define XK_LATIN1 #include #include +#include #include #include #include #ifdef XPM_INCLUDE_FILE +#define USE_XPM_LIBRARY #include XPM_INCLUDE_FILE -#else -#include "YOU HAVE TO SET 'XPM_INCLUDE_FILE' IN THE 'Makefile'!!!" #endif +#else /* MSDOS */ +#include "msdos.h" +#endif /* MSDOS */ -#include -#include -#include -#include -#include -#include +#ifdef DEBUG +#define DEBUG_TIMING 0 +#endif -typedef int BOOL; +typedef unsigned char boolean; +typedef unsigned char byte; -#define TRUE 1 +#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 /* MSDOS */ +#define WIN_XPOS ((XRES - WIN_XSIZE) / 2) +#define WIN_YPOS ((YRES - WIN_YSIZE) / 2) +#endif /* MSDOS */ #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 IN_SCR_FIELD(x,y) ((x)>=0 && (x)=0 &&(y)=0 && (x)=0 &&(y) (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 IS_PLAYER(x,y) (JX==(x) && JY==(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) -#define IS_BLOCKED(x,y) (Feld[x][y]==EL_BLOCKED) +#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 -#define PIX_TOONS 2 -#define PIX_BIGFONT 3 -#define PIX_SMALLFONT 4 +#define PIX_HEROES 2 +#define PIX_TOONS 3 +#define PIX_BIGFONT 4 +#define PIX_SMALLFONT 5 /* Pixmaps without them */ -#define PIX_DB_BACK 5 -#define PIX_DB_DOOR 6 +#define PIX_DB_BACK 6 +#define PIX_DB_DOOR 7 +#define PIX_DB_FIELD 8 -#define NUM_PICTURES 5 -#define NUM_PIXMAPS 7 +#define NUM_PICTURES 6 +#define NUM_PIXMAPS 9 /* boundaries of arrays etc. */ #define MAX_NAMELEN (10+1) - #define MAX_LEVNAMLEN 32 -#define MAX_LEVSCORE_ENTRIES 16 -#define NUM_FREE_LVHD_BYTES 18 -#define MAX_TAPELEN 10000 - -#define MAX_LEVDIR_FILENAME (64+1) -#define MAX_LEVDIR_NAME (16+1) -#define MAX_LEVDIR_ENTRIES 15 -#define MAX_SCORE_ENTRIES 15 - -#define MAX_FILENAME 256 -#define MAX_NUM_AMOEBA 100 +#define MAX_TAPELEN (1000 * 50) /* max. time * framerate */ +#define MAX_LEVDIR_ENTRIES 100 +#define MAX_SCORE_ENTRIES 100 #define MAX_ELEMENTS 512 +#define MAX_NUM_AMOEBA 100 -struct PictureFile -{ - char *picture_filename; - char *picturemask_filename; -}; +#define LEVEL_SCORE_ELEMENTS 16 /* level elements with score */ + +/* fundamental game speed values */ +#define GAME_FRAME_DELAY 20 /* frame delay in milliseconds */ +#define FFWD_FRAME_DELAY 10 /* 200% speed for fast forward */ +#define FRAMES_PER_SECOND (1000 / GAME_FRAME_DELAY) struct HiScore { @@ -177,14 +211,113 @@ struct HiScore int Score; }; +struct OptionInfo +{ + char *display_name; + char *server_host; + int server_port; + char *base_directory; + char *level_directory; + boolean serveronly; + boolean network; + boolean verbose; +}; + +struct SetupJoystickInfo +{ + char *device_name; + int xleft, xmiddle, xright; + int yupper, ymiddle, ylower; + int snap; + int bomb; +}; + +struct SetupKeyboardInfo +{ + KeySym left; + KeySym right; + KeySym up; + KeySym down; + KeySym snap; + KeySym bomb; +}; + +struct SetupInputInfo +{ + boolean use_joystick; + struct SetupJoystickInfo joy; + struct SetupKeyboardInfo key; +}; + +struct SetupInfo +{ + char *player_name; + + boolean sound; + boolean sound_loops; + boolean sound_music; + boolean sound_simple; + boolean toons; + boolean double_buffering; + boolean direct_draw; /* !double_buffering (redundant!) */ + boolean scroll_delay; + boolean soft_scrolling; + boolean fading; + boolean autorecord; + boolean quick_doors; + boolean team_mode; + + struct SetupInputInfo input[MAX_PLAYERS]; +}; + +struct SetupFileList +{ + char *token; + char *value; + struct SetupFileList *next; +}; + struct PlayerInfo { - char login_name[MAX_NAMELEN]; - char alias_name[MAX_NAMELEN]; - int handicap; - unsigned int setup; - int leveldir_nr; - int level_nr; + boolean present; /* player present in level playfield */ + boolean connected; /* player connected (locally or via network) */ + boolean active; /* player (present && connected) */ + + int index_nr, client_nr, element_nr; + + byte action; /* action from local input device */ + byte effective_action; /* action aknowledged from network server + or summarized over all configured input + devices when in single player mode */ + + int joystick_fd; /* file descriptor of player's joystick */ + + int jx,jy, last_jx,last_jy; + int MovDir, MovPos, GfxPos; + int Frame; + + boolean Pushing; + boolean gone, LevelSolved, GameOver; + boolean snapped; + + unsigned long move_delay; + int last_move_dir; + + unsigned long push_delay; + unsigned long push_delay_value; + + int frame_reset_delay; + + unsigned long actual_frame_counter; + + 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 @@ -194,7 +327,7 @@ struct LevelInfo int time; int edelsteine; char name[MAX_LEVNAMLEN]; - int score[MAX_LEVSCORE_ENTRIES]; + int score[LEVEL_SCORE_ELEMENTS]; int mampfer_inhalt[4][3][3]; int tempo_amoebe; int dauer_sieb; @@ -204,114 +337,119 @@ struct LevelInfo struct LevelDirInfo { - char filename[MAX_LEVDIR_FILENAME]; - char name[MAX_LEVDIR_NAME]; + char *filename; + char *name; int levels; - int readonly; + int sort_priority; + boolean user_defined; + boolean readonly; }; -struct RecordingInfo +struct TapeInfo { int level_nr; - unsigned int random_seed; + unsigned long random_seed; unsigned long date; unsigned long counter; unsigned long length; unsigned long length_seconds; unsigned int delay_played; - BOOL pause_before_death; - BOOL changed; - BOOL recording, playing, pausing; - BOOL fast_forward; + boolean pause_before_death; + boolean recording, playing, pausing; + boolean fast_forward; + boolean changed; + boolean player_participates[MAX_PLAYERS]; struct { - unsigned char joystickdata; - unsigned char delay; + byte action[MAX_PLAYERS]; + byte delay; } pos[MAX_TAPELEN]; }; -struct JoystickInfo -{ - int xleft, xright, xmiddle; - int yupper, ylower, ymiddle; -}; - 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 USE_XPM_LIBRARY extern XpmAttributes xpm_att[]; -extern Drawable drawto, drawto_field, backbuffer; +#endif + +extern Drawable drawto, drawto_field, backbuffer, fieldbuffer; extern Colormap cmap; extern int sound_pipe[2]; extern int sound_device; extern char *sound_device_name; 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 *joystick_device_name[]; + +extern char *program_name; extern int game_status; -extern int game_emulation; -extern int button_status, motion_status; +extern boolean network_playing; +extern int button_status; +extern boolean motion_status; extern int key_joystick_mapping; extern int global_joystick_status, joystick_status; -extern int sound_status, sound_on; -extern int sound_loops_allowed, sound_loops_on; -extern int sound_music_on; -extern int sound_simple_on; -extern int toons_on; -extern int direct_draw_on; -extern int scroll_delay_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 int sound_status; +extern boolean sound_loops_allowed; + +extern boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; +extern int redraw_x1, redraw_y1; extern int redraw_mask; extern int redraw_tiles; -extern int Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern int Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern int MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -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 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]; -extern int AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern int AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA]; -extern long Elementeigenschaften[MAX_ELEMENTS]; +extern short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short JustHit[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA]; +extern unsigned long Elementeigenschaften[MAX_ELEMENTS]; extern int level_nr, leveldir_nr, num_leveldirs; extern int lev_fieldx,lev_fieldy, scroll_x,scroll_y; -extern int LevelSolved,GameOver, JX,JY, ZX,ZY; -extern int FrameCounter,TimeFrames,TimeLeft,Score; -extern int Gems,SokobanFields,Lights,Dynamite,Key[4],MampferNr; -extern int DynaBombCount, DynaBombSize, DynaBombsLeft, DynaBombXL; -extern int SiebAktiv; +extern int FX,FY, ScrollStepSize; +extern int ScreenMovDir, ScreenMovPos, ScreenGfxPos; +extern int GameFrameDelay; +extern int FfwdFrameDelay; +extern int MoveSpeed; +extern int BX1,BY1, BX2,BY2; +extern int ZX,ZY, ExitX,ExitY; +extern int AllPlayersGone; +extern int FrameCounter, TimeFrames, TimeLeft; +extern int MampferNr, SiebAktiv; + +extern boolean network_player_action_received; extern struct LevelDirInfo leveldir[]; extern struct LevelInfo level; -extern struct PlayerInfo player; +extern struct PlayerInfo stored_player[], *local_player; extern struct HiScore highscore[]; -extern struct RecordingInfo tape; +extern struct TapeInfo tape; +extern struct SoundInfo Sound[]; extern struct JoystickInfo joystick[]; +extern struct OptionInfo options; +extern struct SetupInfo setup; +extern struct SetupFileList *setup_list; +extern struct SetupFileList *level_setup_list; +extern char *sound_name[]; extern int background_loop[]; extern int num_bg_loops; -extern char *progname; - /* often used screen positions */ #define SX 8 @@ -332,6 +470,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 @@ -361,6 +501,7 @@ extern char *progname; #define GFX_PER_LINE 16 #define MINI_GFX_PER_LINE 32 #define MICRO_GFX_PER_LINE 128 +#define HEROES_PER_LINE 16 #define FONT_CHARS_PER_LINE 16 #define FONT_LINES_PER_FONT 4 @@ -381,7 +522,7 @@ extern char *progname; #define EL_KAEFER 9 #define EL_FLIEGER 10 #define EL_MAMPFER 11 -#define EL_ZOMBIE 12 +#define EL_ROBOT 12 #define EL_BETON 13 #define EL_DIAMANT 14 #define EL_AMOEBE_TOT 15 @@ -487,6 +628,17 @@ extern char *progname; #define EL_AUSGANG_AUF 107 #define EL_SIEB2_TOT 108 #define EL_AMOEBA2DIAM 109 +#define EL_MAULWURF 110 +#define EL_PINGUIN 111 +#define EL_SONDE 112 +#define EL_PFEIL_L 113 +#define EL_PFEIL_R 114 +#define EL_PFEIL_O 115 +#define EL_PFEIL_U 116 +#define EL_SCHWEIN 117 +#define EL_DRACHE 118 + +#define EL_UNUSED_119 119 #define EL_CHAR_START 120 #define EL_CHAR_ASCII0 (EL_CHAR_START-32) @@ -519,6 +671,14 @@ extern char *progname; #define EL_CHAR_COPY (EL_CHAR_ASCII0+94) #define EL_CHAR_END (EL_CHAR_START+79) +#define EL_MAUER_X 200 +#define EL_MAUER_Y 201 +#define EL_MAUER_XY 202 + +#define EL_UNUSED_200 203 +/* ... */ +#define EL_UNUSED_255 255 + /* "unreal" runtime elements */ #define EL_BLOCKED 300 #define EL_EXPLODING 301 @@ -527,8 +687,25 @@ extern char *progname; #define EL_BLURB_RIGHT 304 #define EL_AMOEBING 305 #define EL_MAUERND 306 +#define EL_BURNING 307 +#define EL_PLAYER_IS_LEAVING 308 -/* names for the graphic objects */ +/* game graphics: +** 0 - 255: graphics from "RocksScreen" +** 256 - 511: graphics from "RocksFont" +** 512 - 767: graphics from "RocksHeroes" +*/ + +#define GFX_START_ROCKSSCREEN 0 +#define GFX_END_ROCKSSCREEN 255 +#define GFX_START_ROCKSFONT 256 +#define GFX_END_ROCKSFONT 511 +#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_ERDREICH 0 @@ -560,7 +737,7 @@ extern char *progname; #define GFX_BADEWANNE3 32 #define GFX_BADEWANNE4 33 #define GFX_BADEWANNE5 34 -#define GFX_SPIELFIGUR 35 +#define GFX_SMILEY 35 #define GFX_PFORTE1 36 #define GFX_PFORTE2 37 #define GFX_PFORTE3 38 @@ -586,7 +763,7 @@ extern char *progname; #define GFX_KAEFER_U 75 /* Zeile 5 (80) */ #define GFX_MAMPFER 80 -#define GFX_ZOMBIE 84 +#define GFX_ROBOT 84 #define GFX_PACMAN 88 #define GFX_PACMAN_R 88 #define GFX_PACMAN_O 89 @@ -608,6 +785,10 @@ extern char *progname; #define GFX_BIRNE_EIN 113 #define GFX_ZEIT_VOLL 114 #define GFX_ZEIT_LEER 115 +#define GFX_SPIELER1 116 +#define GFX_SPIELER2 117 +#define GFX_SPIELER3 118 +#define GFX_SPIELER4 119 #define GFX_AMOEBE_VOLL 120 #define GFX_AMOEBE_BD GFX_AMOEBE_VOLL #define GFX_SOKOBAN_OBJEKT 121 @@ -630,16 +811,24 @@ extern char *progname; #define GFX_KUGEL_GELB 142 #define GFX_KUGEL_GRAU 143 /* Zeile 9 (144) */ -#define GFX_BLURB_LEFT 144 -#define GFX_BLURB_RIGHT 148 +#define GFX_PINGUIN 144 +#define GFX_MAULWURF 145 +#define GFX_SCHWEIN 146 +#define GFX_DRACHE 147 +#define GFX_MAUER_XY 148 +#define GFX_MAUER_X 149 +#define GFX_MAUER_Y 150 #define GFX_EDELSTEIN_ROT 152 #define GFX_EDELSTEIN_LILA 154 #define GFX_DYNABOMB_XL 156 +#define GFX_SONDE 159 /* Zeile 10 (160) */ #define GFX_EDELSTEIN_BD 163 -#define GFX_MAUER_R1 165 +#define GFX_MAUER_RIGHT 165 +#define GFX_MAUER_R1 GFX_MAUER_RIGHT #define GFX_MAUER_R 167 -#define GFX_MAUER_L1 168 +#define GFX_MAUER_LEFT 168 +#define GFX_MAUER_L1 GFX_MAUER_LEFT #define GFX_MAUER_L 170 #define GFX_MAUER_LEBT 171 #define GFX_SIEB2_LEER 172 @@ -669,15 +858,67 @@ extern char *progname; #define GFX_FIREFLY_L 206 #define GFX_FIREFLY_U 207 -#define GFX_SCHLUESSEL GFX_SCHLUESSEL1 - -#define GFX_SPIELER1 116 -#define GFX_SPIELER2 117 -#define GFX_SPIELER3 118 -#define GFX_SPIELER4 119 - -/* nicht in "RocksScreen" sondern woanders :) */ -#define GFX_CHAR_START 256 +#define GFX_SCHLUESSEL GFX_SCHLUESSEL1 +#define GFX_SPIELFIGUR GFX_SPIELER1 + + +/* graphics from "RocksHeroes" */ + +#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_MAUER_DOWN (GFX_START_ROCKSHEROES +12*HEROES_PER_LINE + 0) +#define GFX_MAUER_UP (GFX_START_ROCKSHEROES +12*HEROES_PER_LINE + 3) + +#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) +#define GFX_SCHWEIN_RIGHT (GFX_START_ROCKSHEROES + 1*HEROES_PER_LINE +12) +#define GFX_DRACHE_DOWN (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE + 8) +#define GFX_DRACHE_UP (GFX_START_ROCKSHEROES + 2*HEROES_PER_LINE +12) +#define GFX_DRACHE_LEFT (GFX_START_ROCKSHEROES + 3*HEROES_PER_LINE + 8) +#define GFX_DRACHE_RIGHT (GFX_START_ROCKSHEROES + 3*HEROES_PER_LINE +12) +#define GFX_MAULWURF_DOWN (GFX_START_ROCKSHEROES + 4*HEROES_PER_LINE + 8) +#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 + 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) #define GFX_CHAR_ASCII0 (GFX_CHAR_START-32) #define GFX_CHAR_AUSRUF (GFX_CHAR_ASCII0+33) #define GFX_CHAR_ZOLL (GFX_CHAR_ASCII0+34) @@ -708,19 +949,6 @@ extern char *progname; #define GFX_CHAR_COPY (GFX_CHAR_ASCII0+94) #define GFX_CHAR_END (GFX_CHAR_START+79) -/* score for elements */ -#define SC_EDELSTEIN 0 -#define SC_DIAMANT 1 -#define SC_KAEFER 2 -#define SC_FLIEGER 3 -#define SC_MAMPFER 4 -#define SC_ZOMBIE 5 -#define SC_PACMAN 6 -#define SC_KOKOSNUSS 7 -#define SC_DYNAMIT 8 -#define SC_SCHLUESSEL 9 -#define SC_ZEITBONUS 10 - /* the names of the sounds */ #define SND_ALCHEMY 0 #define SND_AMOEBE 1 @@ -777,23 +1005,23 @@ extern char *progname; #define NUM_SOUNDS 52 -#define IS_LOOP_SOUND(s) ((s)==SND_KLAPPER || (s)==SND_ROEHR || \ - (s)==SND_NJAM || (s)==SND_MIEP) -#define IS_MUSIC_SOUND(s) ((s)==SND_ALCHEMY || (s)==SND_CHASE || \ - (s)==SND_NETWORK || (s)==SND_CZARDASZ || \ - (s)==SND_TYGER || (s)==SND_VOYAGER || \ - (s)==SND_TWILIGHT) -extern char *sound_name[NUM_SOUNDS]; - -/* this structure contains the sound data for the sound server */ -extern struct SoundInfo Sound[NUM_SOUNDS]; +/* default input keys */ +#define KEY_UNDEFINDED XK_VoidSymbol +#define DEFAULT_KEY_LEFT XK_Left +#define DEFAULT_KEY_RIGHT XK_Right +#define DEFAULT_KEY_UP XK_Up +#define DEFAULT_KEY_DOWN XK_Down +#define DEFAULT_KEY_SNAP XK_Shift_L +#define DEFAULT_KEY_BOMB XK_Shift_R +#define DEFAULT_KEY_OKAY XK_Return +#define DEFAULT_KEY_CANCEL XK_Escape /* 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 @@ -807,124 +1035,37 @@ extern struct SoundInfo Sound[NUM_SOUNDS]; #define FC_SPECIAL2 5 /* values for game_status */ -#define MAINMENU 0 -#define PLAYING 1 -#define LEVELED 2 -#define HELPSCREEN 3 -#define CHOOSELEVEL 4 -#define TYPENAME 5 -#define HALLOFFAME 6 -#define SETUP 7 -#define EXITGAME 8 - -/* values for game_emulation */ -#define EMU_NONE 0 -#define EMU_BOULDERDASH 1 -#define EMU_SOKOBAN 2 - -/* values for the joystick */ -#define JOYSTICK_OFF 0 -#define JOYSTICK_AVAILABLE 1 -#ifdef __FreeBSD__ -#include -#define DEV_JOYSTICK_0 "/dev/joy0" -#define DEV_JOYSTICK_1 "/dev/joy1" -#else -#define DEV_JOYSTICK_0 "/dev/js0" -#define DEV_JOYSTICK_1 "/dev/js1" -#endif - -/* get these values from the program 'js' from the joystick package, */ -/* set JOYSTICK_PERCENT to a threshold appropriate for your joystick */ -#define JOYSTICK_XLEFT 30 -#define JOYSTICK_XRIGHT 1250 -#define JOYSTICK_XMIDDLE 530 -#define JOYSTICK_YUPPER 40 -#define JOYSTICK_YLOWER 1440 -#define JOYSTICK_YMIDDLE 680 -#define JOYSTICK_PERCENT 25 -#define JOY_LEFT MV_LEFT -#define JOY_RIGHT MV_RIGHT -#define JOY_UP MV_UP -#define JOY_DOWN MV_DOWN -#define JOY_BUTTON_1 16 -#define JOY_BUTTON_2 32 -#define JOY_BUTTON (JOY_BUTTON_1 | JOY_BUTTON_2) -#define JOY_BUTTON_NOT_PRESSED 0 -#define JOY_BUTTON_PRESSED 1 -#define JOY_BUTTON_NEW_PRESSED 2 -#define JOY_BUTTON_NEW_RELEASED 3 - -#ifdef NO_JOYSTICK -#define JOYSTICK_STATUS JOYSTICK_OFF -#else -#define JOYSTICK_STATUS JOYSTICK_AVAILABLE -#endif +#define EXITGAME 0 +#define MAINMENU 1 +#define PLAYING 2 +#define LEVELED 3 +#define HELPSCREEN 4 +#define CHOOSELEVEL 5 +#define TYPENAME 6 +#define HALLOFFAME 7 +#define SETUP 8 +#define SETUPINPUT 9 +#define CALIBRATION 10 #ifndef GAME_DIR #define GAME_DIR "." #endif -#ifndef GFX_PATH -#define GFX_PATH GAME_DIR "/graphics" -#endif -#ifndef SND_PATH -#define SND_PATH GAME_DIR "/sounds" -#endif -#ifndef LEVEL_PATH -#define LEVEL_PATH GAME_DIR "/levels" -#endif -#ifndef SCORE_PATH -#define SCORE_PATH LEVEL_PATH -#endif -#ifndef NAMES_PATH -#define NAMES_PATH LEVEL_PATH -#endif -#ifndef CONFIG_PATH -#define CONFIG_PATH GAME_DIR -#endif -#ifndef JOYDAT_PATH -#define JOYDAT_PATH GAME_DIR -#endif +#define BASE_PATH GAME_DIR + +#define GRAPHICS_DIRECTORY "graphics" +#define SOUNDS_DIRECTORY "sounds" +#define LEVELS_DIRECTORY "levels" +#define TAPES_DIRECTORY "tapes" +#define SCORES_DIRECTORY "scores" -#define SCORE_FILENAME "ROCKS.score" -#define NAMES_FILENAME "ROCKS.names" -#define LEVDIR_FILENAME "ROCKS.levelinfo" -#define JOYDAT_FILENAME "ROCKS.joystick" - -#define JOYDAT_FILE JOYDAT_PATH "/" JOYDAT_FILENAME - -#define LEVEL_PERMS (S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP | S_IROTH|S_IWOTH) -#define SCORE_PERMS LEVEL_PERMS -#define NAMES_PERMS LEVEL_PERMS -#define LEVDIR_PERMS LEVEL_PERMS -#define LEVREC_PERMS LEVEL_PERMS -#define JOYDAT_PERMS LEVEL_PERMS - -/* old cookies */ -#define NAMES_COOKIE_10 "ROCKSNDIAMONDS_NAMES_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 JOYSTICK_COOKIE "ROCKSNDIAMONDS_JOYSTICK_FILE_VERSION_1.0" -#define LEVEL_COOKIE_LEN (strlen(LEVEL_COOKIE)+1) -#define SCORE_COOKIE_LEN (strlen(SCORE_COOKIE)+1) -#define NAMES_COOKIE_LEN (strlen(NAMES_COOKIE)+1) -#define LEVELDIR_COOKIE_LEN (strlen(LEVELDIR_COOKIE)+1) -#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.0" #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 EMPTY_ALIAS "NO_NAME" +/* default name for empty highscore entry */ +#define EMPTY_PLAYER_NAME "no name" /* values for button_status */ #define MB_NOT_PRESSED FALSE @@ -932,18 +1073,15 @@ extern struct SoundInfo Sound[NUM_SOUNDS]; #define MB_PRESSED TRUE #define MB_MENU_CHOICE FALSE #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 - -/* values for key_status */ -#define KEY_NOT_PRESSED FALSE -#define KEY_RELEASED FALSE -#define KEY_PRESSED TRUE - -/* values for focus_status */ -#define FOCUS_OUT FALSE -#define FOCUS_IN TRUE +#endif /* values for redraw_mask */ #define REDRAW_ALL (1L<<0) @@ -954,53 +1092,32 @@ extern struct SoundInfo Sound[NUM_SOUNDS]; #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 - -/* positions in the game control window */ -#define XX_LEVEL 37 -#define YY_LEVEL 20 -#define XX_EMERALDS 29 -#define YY_EMERALDS 54 -#define XX_DYNAMITE 29 -#define YY_DYNAMITE 89 -#define XX_KEYS 18 -#define YY_KEYS 123 -#define XX_SCORE 15 -#define YY_SCORE 159 -#define XX_TIME 29 -#define YY_TIME 194 - -#define DX_LEVEL (DX+XX_LEVEL) -#define DY_LEVEL (DY+YY_LEVEL) -#define DX_EMERALDS (DX+XX_EMERALDS) -#define DY_EMERALDS (DY+YY_EMERALDS) -#define DX_DYNAMITE (DX+XX_DYNAMITE) -#define DY_DYNAMITE (DY+YY_DYNAMITE) -#define DX_KEYS (DX+XX_KEYS) -#define DY_KEYS (DY+YY_KEYS) -#define DX_SCORE (DX+XX_SCORE) -#define DY_SCORE (DY+YY_SCORE) -#define DX_TIME (DX+XX_TIME) -#define DY_TIME (DY+YY_TIME) - -/* Felder in PIX_DOOR */ -/* Bedeutung in PIX_DB_DOOR: (3 PAGEs) - PAGEX1: 1. Zwischenspeicher für DOOR_1 - PAGEX2: 2. Zwischenspeicher für DOOR_1 - PAGEX3: Pufferspeicher für Animationen +#define REDRAWTILES_THRESHOLD SCR_FIELDX*SCR_FIELDY/2 + +/* areas in pixmap PIX_DOOR */ +/* meaning in PIX_DB_DOOR: (3 PAGEs) + PAGEX1: 1. buffer for DOOR_1 + PAGEX2: 2. buffer for DOOR_1 + PAGEX3: buffer for animations */ #define DOOR_GFX_PAGESIZE DXSIZE -#define DOOR_GFX_PAGEX1 (0*DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX2 (1*DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX3 (2*DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX4 (3*DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX5 (4*DOOR_GFX_PAGESIZE) -#define DOOR_GFX_PAGEX6 (5*DOOR_GFX_PAGESIZE) +#define DOOR_GFX_PAGEX1 (0 * DOOR_GFX_PAGESIZE) +#define DOOR_GFX_PAGEX2 (1 * DOOR_GFX_PAGESIZE) +#define DOOR_GFX_PAGEX3 (2 * DOOR_GFX_PAGESIZE) +#define DOOR_GFX_PAGEX4 (3 * DOOR_GFX_PAGESIZE) +#define DOOR_GFX_PAGEX5 (4 * DOOR_GFX_PAGESIZE) +#define DOOR_GFX_PAGEX6 (5 * DOOR_GFX_PAGESIZE) #define DOOR_GFX_PAGEY1 0 #define DOOR_GFX_PAGEY2 DYSIZE -#endif +/* for DrawGraphicAnimation() [tools.c] and AnimateToon() [cartoons.c] */ +#define ANIM_NORMAL 0 +#define ANIM_OSCILLATE 1 +#define ANIM_REVERSE 2 + +#endif /* MAIN_H */