X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_bd%2Fbd_cave.h;h=c48e89a2fece30ecd5f2a4948e8c3c97882becb7;hb=676a1f66491c208d47c2b5bc6e9ce18e0a28005c;hp=1255e5414685c8893908fdacbdc72211a2497946;hpb=e6639d077a1337c4b186ed1238483fcdca5bf529;p=rocksndiamonds.git diff --git a/src/game_bd/bd_cave.h b/src/game_bd/bd_cave.h index 1255e541..c48e89a2 100644 --- a/src/game_bd/bd_cave.h +++ b/src/game_bd/bd_cave.h @@ -167,6 +167,7 @@ enum _element_property E_P_BLOWS_UP_FLIES, /* flies blow up, if they touch this */ E_P_EXPLODES_BY_HIT, /* explodes if hit by a stone */ + E_P_EXPLOSION, /* set for every stage of every explosion. */ E_P_EXPLOSION_FIRST_STAGE, /* set for first stage of every explosion. helps slower/faster explosions changing */ @@ -179,6 +180,8 @@ enum _element_property E_P_PLAYER, /* easier to find out if it is a player element */ E_P_MOVED_BY_CONVEYOR_TOP, /* can be moved by conveyor belt */ E_P_MOVED_BY_CONVEYOR_BOTTOM, /* can be moved UNDER the conveyor belt */ + + E_P_COLLECTIBLE, /* can be collected */ }; /* properties */ @@ -200,6 +203,7 @@ enum _element_property #define P_BLOWS_UP_FLIES (1 << E_P_BLOWS_UP_FLIES) #define P_EXPLODES_BY_HIT (1 << E_P_EXPLODES_BY_HIT) +#define P_EXPLOSION (1 << E_P_EXPLOSION) #define P_EXPLOSION_FIRST_STAGE (1 << E_P_EXPLOSION_FIRST_STAGE) #define P_NON_EXPLODABLE (1 << E_P_NON_EXPLODABLE) @@ -210,6 +214,8 @@ enum _element_property #define P_MOVED_BY_CONVEYOR_TOP (1 << E_P_MOVED_BY_CONVEYOR_TOP) #define P_MOVED_BY_CONVEYOR_BOTTOM (1 << E_P_MOVED_BY_CONVEYOR_BOTTOM) +#define P_COLLECTIBLE (1 << E_P_COLLECTIBLE) + /* These are states of the magic wall. */ typedef enum _magic_wall_state { @@ -253,7 +259,7 @@ typedef enum _direction GD_MV_LEFT = 7, GD_MV_UP_LEFT = 8, - /* to be able to type GD_MV_TWICE+GD_MV_DOWN, for example */ + /* to be able to type GD_MV_TWICE + GD_MV_DOWN, for example */ GD_MV_TWICE = 8, /* directions * 2 */ @@ -318,7 +324,7 @@ typedef struct _gd_cave_replay GdString player_name; /* who played this */ GdString date; /* when played */ - GString *comment; /* some comments from the player */ + char *comment; /* some comments from the player */ int score; /* score collected */ int duration; /* number of seconds played */ @@ -362,8 +368,8 @@ typedef struct _gd_cave GdString difficulty; /* difficulty of the game, for info purposes */ GdString www; /* link to author's webpage */ GdString date; /* date of creation */ - GString *story; /* story for the cave - will be shown when the cave is played. */ - GString *remark; /* some note */ + char *story; /* story for the cave - will be shown when the cave is played. */ + char *remark; /* some note */ GdString charset; /* these are not used by gdash */ GdString fontset; @@ -550,7 +556,13 @@ typedef struct _gd_cave boolean pneumatic_hammer_sound; /* internal variables, used during the game. private data :) */ - GdElement* (*getp) (const struct _gd_cave*, int x, int y); /* returns a pointer to the element at x, y. this points to a perfect border or a line shifting get function. */ + + /* returns range corrected x/y position (points to perfect or line shifting get function) */ + int (*getx) (const struct _gd_cave*, int x, int y); + int (*gety) (const struct _gd_cave*, int x, int y); + + /* returns pointer to element at x, y (points to perfect border or a line shifting get function) */ + GdElement* (*getp) (const struct _gd_cave*, int x, int y); boolean hatched; /* hatching has happened. (timers may run, ...) */ boolean gate_open; /* self-explaining */ @@ -631,6 +643,10 @@ GdElement gd_get_element_from_string(const char *string); /* init cave engine */ void gd_cave_init(void); +/* for cave tags hash table */ +int str_case_equal(void *s1, void *s2); +unsigned int str_case_hash(void *v); + /* for cave tags hash table */ boolean gd_str_case_equal(gconstpointer s1, gconstpointer s2); guint gd_str_case_hash(gconstpointer v); @@ -702,10 +718,6 @@ GdReplay *gd_replay_new(void); GdReplay *gd_replay_new_from_replay(GdReplay *orig); void gd_replay_free(GdReplay *replay); void gd_replay_store_movement(GdReplay *replay, GdDirection player_move, boolean player_fire, boolean suicide); -boolean gd_replay_get_next_movement(GdReplay *replay, GdDirection *player_move, boolean *player_fire, boolean *suicide); -void gd_replay_rewind(GdReplay *replay); - -char *gd_replay_movements_to_bdcff(GdReplay *replay); guint32 gd_cave_adler_checksum(GdCave *cave); void gd_cave_adler_checksum_more(GdCave *cave, guint32 *a, guint32 *b);