/***********************************************************
* 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 *
***********************************************************/
#ifndef MAIN_H
#define MAIN_H
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
#ifndef MSDOS
#define XK_MISCELLANY
#define XK_LATIN1
#include <X11/keysymdef.h>
#ifdef XPM_INCLUDE_FILE
+#define USE_XPM_LIBRARY
#include XPM_INCLUDE_FILE
#endif
-#else
+#else /* MSDOS */
#include "msdos.h"
-#endif /* #ifndef MSDOS */
+#endif /* MSDOS */
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
+#ifdef DEBUG
+#define DEBUG_TIMING 0
+#endif
-typedef int BOOL;
+typedef unsigned char boolean;
+typedef unsigned char byte;
#ifndef FALSE
#define FALSE 0
#ifndef MSDOS
#define WIN_XPOS 0
#define WIN_YPOS 0
-#else
+#else /* MSDOS */
#define WIN_XPOS ((XRES - WIN_XSIZE) / 2)
#define WIN_YPOS ((YRES - WIN_YSIZE) / 2)
-#endif
+#endif /* MSDOS */
#define SCR_FIELDX 17
#define SCR_FIELDY 17
#define MAX_BUF_XSIZE (SCR_FIELDX + 2)
#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 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)<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_PUSHABLE(e) (Elementeigenschaften[e] & EP_BIT_PUSHABLE)
#define ELEM_IS_PLAYER(e) (Elementeigenschaften[e] & EP_BIT_PLAYER)
-/*
-#define IS_PLAYER(x,y) (JX == (x) && JY == (y))
-*/
-
#define IS_PLAYER(x,y) (ELEM_IS_PLAYER(StorePlayer[x][y]))
-#define IS_LOCAL_PLAYER(x,y) (StorePlayer[x][y] == EL_SPIELER1)
#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 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
/* 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_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
-#define MAX_LEVDIR_FILENAME (64+1)
-#define MAX_LEVDIR_NAME (16+1)
-#define MAX_LEVDIR_ENTRIES 15
-#define MAX_SCORE_ENTRIES 15
+#define LEVEL_SCORE_ELEMENTS 16 /* level elements with score */
-#define MAX_FILENAME 256
-#define MAX_NUM_AMOEBA 100
-#define MAX_ELEMENTS 512
+/* 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
{
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
{
- int nr, active, local;
+ boolean present; /* player present in level playfield */
+ boolean connected; /* player connected (locally or via network) */
+ boolean active; /* player (present && connected) */
- char login_name[MAX_NAMELEN];
- char alias_name[MAX_NAMELEN];
- int handicap;
- unsigned int setup;
- int leveldir_nr;
- int level_nr;
+ int index_nr, client_nr, element_nr;
- int JX,JY, lastJX,lastJY, ZX,ZY, ExitX,ExitY;
- int MovDir, MovPos, Pushing;
- int Frame, GfxPos;
+ 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 PlayerGone, LevelSolved, GameOver;
+ int joystick_fd; /* file descriptor of player's joystick */
- int frame_reset_delay;
+ int jx,jy, last_jx,last_jy;
+ int MovDir, MovPos, GfxPos;
+ int Frame;
+
+ boolean Pushing;
+ boolean gone, LevelSolved, GameOver;
+ boolean snapped;
long move_delay;
int last_move_dir;
long push_delay;
int push_delay_value;
+ int frame_reset_delay;
+
+ long actual_frame_counter;
+
int score;
int gems_still_needed;
int sokobanfields_still_needed;
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;
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
{
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 recording, playing, pausing;
- BOOL fast_forward;
- BOOL changed;
+ boolean pause_before_death;
+ boolean recording, playing, pausing;
+ boolean fast_forward;
+ boolean changed;
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 Pixmap pix[];
extern Pixmap clipmask[], tile_clipmask[];
-#ifdef XPM_INCLUDE_FILE
+#ifdef USE_XPM_LIBRARY
extern XpmAttributes xpm_att[];
#endif
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 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 soft_scrolling_on;
-extern int fading_on;
-extern int autorecord_on;
-extern int joystick_nr;
-extern int quick_doors;
-
-extern BOOL redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
+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 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];
-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 FX,FY, ScreenMovPos, ScrollStepSize;
-extern int GameFrameDelay, MoveSpeed;
+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 JX,JY, lastJX,lastJY, ZX,ZY, ExitX,ExitY;
-extern int PlayerGone,LevelSolved,GameOver;
-extern int FrameCounter,TimeFrames,TimeLeft;
+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 int TestPlayer;
+
extern struct LevelDirInfo leveldir[];
extern struct LevelInfo level;
-extern struct PlayerInfo stored_player[];
-extern struct PlayerInfo *local_player, *player;
+extern struct PlayerInfo stored_player[], *local_player;
extern struct HiScore highscore[];
extern struct RecordingInfo 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
#define EL_CHAR_COPY (EL_CHAR_ASCII0+94)
#define EL_CHAR_END (EL_CHAR_START+79)
-#define EL_UNUSED_200 200
+#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
#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
#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
/* 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_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_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)
#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_ROBOT 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
#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)
-
+/* 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
#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
-
+#define SETUPINPUT 8
+#define EXITGAME 9
#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
-#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 GRAPHICS_DIRECTORY "graphics"
+#define SOUNDS_DIRECTORY "sounds"
+#define LEVELS_DIRECTORY "levels"
+#define TAPES_DIRECTORY "tapes"
+#define SCORES_DIRECTORY "scores"
-#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.2"
+#define VERSION_STRING "1.2 preview 1"
#define GAMETITLE_STRING "Rocks'n'Diamonds"
#define WINDOWTITLE_STRING GAMETITLE_STRING " " VERSION_STRING
#define COPYRIGHT_STRING "Copyright ^1995-98 by Holger Schemel"
-/* Leerer Login- und Alias-Name */
-#define EMPTY_LOGIN "NO_LOGIN"
+/* default name for empty highscore entry */
#define EMPTY_ALIAS "NO_NAME"
/* values for button_status */
#define MB_RIGHT 3
#endif
-/* values for key_status */
-#define KEY_NOT_PRESSED FALSE
-#define KEY_RELEASED FALSE
-#define KEY_PRESSED TRUE
-
/* values for redraw_mask */
#define REDRAW_ALL (1L<<0)
#define REDRAW_FIELD (1L<<1)
#define REDRAW_MAIN (REDRAW_FIELD | REDRAW_TILES | REDRAW_MICROLEV)
#define REDRAWTILES_THRESHOLD 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
+/* 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
-/* für DrawGraphicAnimation (tools.c) und AnimateToon (cartoons.c) */
+/* for DrawGraphicAnimation() [tools.c] and AnimateToon() [cartoons.c] */
#define ANIM_NORMAL 0
#define ANIM_OSCILLATE 1
#define ANIM_REVERSE 2
-#endif
+#endif /* MAIN_H */