#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#define EP_BIT_BELT (1 << 0)
#define EP_BIT_BELT_SWITCH (1 << 1)
#define EP_BIT_TUBE (1 << 2)
-#define EP_BIT_SLIPPERY_GEMS (1 << 3)
+#define EP_BIT_EM_SLIPPERY_WALL (1 << 3)
#define IS_AMOEBALIVE(e) (Elementeigenschaften1[e] & EP_BIT_AMOEBALIVE)
#define IS_AMOEBOID(e) (Elementeigenschaften1[e] & EP_BIT_AMOEBOID)
#define IS_BELT(e) (Elementeigenschaften2[e] & EP_BIT_BELT)
#define IS_BELT_SWITCH(e) (Elementeigenschaften2[e] & EP_BIT_BELT_SWITCH)
#define IS_TUBE(e) (Elementeigenschaften2[e] & EP_BIT_TUBE)
-#define IS_SLIPPERY_GEMS(e) (Elementeigenschaften2[e] & EP_BIT_SLIPPERY_GEMS)
+#define IS_EM_SLIPPERY_WALL(e) (Elementeigenschaften2[e] & EP_BIT_EM_SLIPPERY_WALL)
#define IS_PLAYER(x,y) (ELEM_IS_PLAYER(StorePlayer[x][y]))
struct SetupInputInfo input[MAX_PLAYERS];
};
-struct SetupFileList
-{
- char *token;
- char *value;
- struct SetupFileList *next;
-};
-
struct PlayerInfo
{
boolean present; /* player present in level playfield */
struct LevelInfo
{
- int file_version; /* version of file the level was stored with */
- int game_version; /* version of game engine to play this level */
- boolean encoding_16bit_field; /* level contains 16-bit elements */
+ int file_version; /* file format version the level is stored with */
+ int game_version; /* game engine version the level was created with */
+ boolean encoding_16bit_field; /* level contains 16-bit elements */
boolean encoding_16bit_yamyam; /* yamyam contains 16-bit elements */
boolean encoding_16bit_amoeba; /* amoeba contains 16-bit elements */
int time_timegate;
boolean double_speed;
boolean gravity;
+ boolean em_slippery_gems; /* EM style "gems slip from wall" behaviour */
};
struct TapeInfo
{
- int file_version; /* version of file this level tape was stored with */
- int game_version; /* version of game engine to play this tapeĀ“s level */
+ int file_version; /* file format version the tape is stored with */
+ int game_version; /* game engine version the tape was created with */
int version;
int level_nr;
unsigned long random_seed;
boolean fast_forward;
boolean changed;
boolean player_participates[MAX_PLAYERS];
+ int num_participating_players;
struct
{
byte action[MAX_PLAYERS];
#define SETUPINPUT 9
#define CALIBRATION 10
-#define PROGRAM_VERSION_STRING "2.0.1"
+#define PROGRAM_VERSION_MAJOR 2
+#define PROGRAM_VERSION_MINOR 0
+#define PROGRAM_VERSION_PATCH 2
+#define PROGRAM_VERSION_STRING "2.0.2"
+
#define PROGRAM_TITLE_STRING "Rocks'n'Diamonds"
#define PROGRAM_AUTHOR_STRING "Holger Schemel"
-#define PROGRAM_RIGHTS_STRING "Copyright ^1995-2001 by"
+#define PROGRAM_RIGHTS_STRING "Copyright ^1995-2002 by"
#define PROGRAM_DOS_PORT_STRING "DOS port done by Guido Schulz"
#define PROGRAM_IDENT_STRING PROGRAM_VERSION_STRING " " TARGET_STRING
#define WINDOW_TITLE_STRING PROGRAM_TITLE_STRING " " PROGRAM_IDENT_STRING
** 1.4 (still in use)
** 2.0 (actual)
*/
-#define FILE_VERSION_1_0 10
-#define FILE_VERSION_1_2 12
-#define FILE_VERSION_1_4 14
-#define FILE_VERSION_2_0 20
+#define FILE_VERSION_1_0 VERSION_IDENT(1,0,0)
+#define FILE_VERSION_1_2 VERSION_IDENT(1,2,0)
+#define FILE_VERSION_1_4 VERSION_IDENT(1,4,0)
+#define FILE_VERSION_2_0 VERSION_IDENT(2,0,0)
+
+/* file version does not change for every program version, but is changed
+ when new features are introduced that are incompatible with older file
+ versions, so that they can be treated accordingly */
#define FILE_VERSION_ACTUAL FILE_VERSION_2_0
+
#define GAME_VERSION_1_0 FILE_VERSION_1_0
#define GAME_VERSION_1_2 FILE_VERSION_1_2
#define GAME_VERSION_1_4 FILE_VERSION_1_4
#define GAME_VERSION_2_0 FILE_VERSION_2_0
-#define GAME_VERSION_ACTUAL GAME_VERSION_2_0
+
+#define GAME_VERSION_ACTUAL VERSION_IDENT(PROGRAM_VERSION_MAJOR, \
+ PROGRAM_VERSION_MINOR, \
+ PROGRAM_VERSION_PATCH)
/* for DrawGraphicAnimation() [tools.c] and AnimateToon() [cartoons.c] */
#define ANIM_NORMAL 0