#define CH_SIDE_TOP_BOTTOM MV_VERTICAL
#define CH_SIDE_ANY MV_ANY_DIRECTION
+#define CH_SIDE_FROM_BUTTON(b) ((b) == MB_LEFTBUTTON ? CH_SIDE_LEFT : \
+ (b) == MB_RIGHTBUTTON ? CH_SIDE_RIGHT : \
+ (b) == MB_MIDDLEBUTTON ? CH_SIDE_TOP_BOTTOM : \
+ CH_SIDE_NONE)
+
// values for change player for custom elements
#define CH_PLAYER_NONE PLAYER_BITS_NONE
#define CH_PLAYER_1 PLAYER_BITS_1
GFX_SPECIAL_ARG_TITLE_4,
GFX_SPECIAL_ARG_TITLE_5,
GFX_SPECIAL_ARG_MAIN,
+ GFX_SPECIAL_ARG_NAMES,
GFX_SPECIAL_ARG_LEVELS,
GFX_SPECIAL_ARG_LEVELNR,
GFX_SPECIAL_ARG_SCORES,
GFX_SPECIAL_ARG_PREVIEW,
GFX_SPECIAL_ARG_CRUMBLED,
GFX_SPECIAL_ARG_MAINONLY,
+ GFX_SPECIAL_ARG_NAMESONLY,
GFX_SPECIAL_ARG_TYPENAME,
+ GFX_SPECIAL_ARG_TYPENAMES,
GFX_SPECIAL_ARG_SUBMENU,
GFX_SPECIAL_ARG_MENU,
GFX_SPECIAL_ARG_TOONS,
#define GAME_MODE_TITLE_4 GFX_SPECIAL_ARG_TITLE_4
#define GAME_MODE_TITLE_5 GFX_SPECIAL_ARG_TITLE_5
#define GAME_MODE_MAIN GFX_SPECIAL_ARG_MAIN
+#define GAME_MODE_NAMES GFX_SPECIAL_ARG_NAMES
#define GAME_MODE_LEVELS GFX_SPECIAL_ARG_LEVELS
#define GAME_MODE_LEVELNR GFX_SPECIAL_ARG_LEVELNR
#define GAME_MODE_SCORES GFX_SPECIAL_ARG_SCORES
#define GAME_MODE_PSEUDO_PREVIEW GFX_SPECIAL_ARG_PREVIEW
#define GAME_MODE_PSEUDO_CRUMBLED GFX_SPECIAL_ARG_CRUMBLED
#define GAME_MODE_PSEUDO_MAINONLY GFX_SPECIAL_ARG_MAINONLY
+#define GAME_MODE_PSEUDO_NAMESONLY GFX_SPECIAL_ARG_NAMESONLY
#define GAME_MODE_PSEUDO_TYPENAME GFX_SPECIAL_ARG_TYPENAME
+#define GAME_MODE_PSEUDO_TYPENAMES GFX_SPECIAL_ARG_TYPENAMES
#define GAME_MODE_PSEUDO_SUBMENU GFX_SPECIAL_ARG_SUBMENU
#define GAME_MODE_PSEUDO_MENU GFX_SPECIAL_ARG_MENU
#define GAME_MODE_PSEUDO_TOONS GFX_SPECIAL_ARG_TOONS
// program information and versioning definitions
#define PROGRAM_VERSION_SUPER 4
#define PROGRAM_VERSION_MAJOR 2
-#define PROGRAM_VERSION_MINOR 0
-#define PROGRAM_VERSION_PATCH 6
+#define PROGRAM_VERSION_MINOR 3
+#define PROGRAM_VERSION_PATCH 2
#define PROGRAM_VERSION_EXTRA ""
#define PROGRAM_TITLE_STRING "Rocks'n'Diamonds"
#define PROGRAM_AUTHOR_STRING "Holger Schemel"
#define PROGRAM_EMAIL_STRING "info@artsoft.org"
#define PROGRAM_WEBSITE_STRING "https://www.artsoft.org/"
-#define PROGRAM_COPYRIGHT_STRING "Copyright \xa9""1995-2020 by Holger Schemel"
+#define PROGRAM_COPYRIGHT_STRING "Copyright \xa9""1995-2021 by Holger Schemel"
#define PROGRAM_COMPANY_STRING "A Game by Artsoft Entertainment"
#define PROGRAM_ICON_FILENAME "RocksIcon32x32.png"
int anim_mode;
int align;
int valign;
+ int sort_priority;
boolean autowrap;
boolean centered;
boolean wrap_single_words;
+
+ // run-time values
+ Bitmap *bitmap;
+ int sx, sy;
+ int xsize, ysize;
};
struct PreviewInfo
struct RectWithBorder door_2[NUM_SPECIAL_GFX_ARGS];
};
-struct HiScore
+struct ScoreEntry
+{
+ char tape_basename[MAX_FILENAME_LEN + 1];
+ char name[MAX_PLAYER_NAME_LEN + 1];
+ int score;
+ int time; // time (in frames) or steps played
+};
+
+struct ScoreInfo
{
- char Name[MAX_PLAYER_NAME_LEN + 1];
- int Score;
+ int file_version; // file format version the score is stored with
+ int game_version; // game release version the score was created with
+
+ char level_identifier[MAX_FILENAME_LEN + 1];
+ int level_nr;
+
+ int num_entries;
+
+ struct ScoreEntry entry[MAX_SCORE_ENTRIES];
};
struct Content
int time; // available time (seconds)
int gems_needed;
boolean auto_count_gems;
+ boolean rate_time_over_score;
char name[MAX_LEVEL_NAME_LEN + 1];
char author[MAX_LEVEL_AUTHOR_LEN + 1];
boolean sb_objects_needed; // all Sokoban objects must be solved
boolean auto_exit_sokoban; // automatically finish solved Sokoban levels
boolean solved_by_one_player; // level is solved if one player enters exit
+ boolean finish_dig_collect; // only finished dig/collect triggers ce action
boolean continuous_snapping; // repeated snapping without releasing key
boolean block_snap_field; // snapping blocks field to show animation
// ('int' instead of 'boolean' because used as selectbox value in editor)
int use_step_counter; // count steps instead of seconds for level
+ int time_score_base; // use time score for 1 or 10 seconds/steps
+
short field[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
boolean use_custom_template; // use custom properties from template file
int anim_status_next;
boolean use_envelope_request;
+
+ char **user_names;
};
struct ElementChangeInfo
int drop_delay_random; // additional random delay after dropping
int move_delay_fixed; // constant delay after moving
int move_delay_random; // additional random delay after moving
+ int step_delay_fixed; // constant delay while moving
+ int step_delay_random; // additional random delay while moving
int move_pattern; // direction movable element moves to
int move_direction_initial; // initial direction element moves to
extern DrawBuffer *drawto_field;
extern int game_status;
-extern boolean game_status_last_screen;
+extern int game_status_last_screen;
extern boolean level_editor_test_game;
extern boolean network_playing;
extern int graphics_action_mapping[];
extern struct LevelInfo level, level_template;
-extern struct HiScore highscore[];
+extern struct ScoreInfo scores;
extern struct TapeInfo tape;
extern struct GlobalInfo global;
extern struct BorderInfo border;