X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fgame_bd%2Fbd_cave.h;h=038c61fda66ead21b746e72828aceae8ae003726;hb=402106d4fc637bdda3f3b75f190a6b9335fc99d0;hp=f0421849d8a84ad97c9bd3b795958c8380d87bf7;hpb=3210187ea3da26ff5d1a90bd2b731928efec4579;p=rocksndiamonds.git diff --git a/src/game_bd/bd_cave.h b/src/game_bd/bd_cave.h index f0421849..038c61fd 100644 --- a/src/game_bd/bd_cave.h +++ b/src/game_bd/bd_cave.h @@ -20,6 +20,7 @@ #include #include "bd_elements.h" +#include "bd_random.h" // colors @@ -151,6 +152,9 @@ void gd_struct_set_defaults_from_array(gpointer str, const GdStructDescriptor *p for example diamond + arrow = falling diamond */ #define GD_NUM_OF_CELLS (GD_NUM_OF_CELLS_X*GD_NUM_OF_CELLS_Y+80) +/* maximum replay size (maximum seconds x game cycles per second) */ +#define MAX_REPLAY_LEN (10000 * FRAMES_PER_SECOND / 8) + extern const GdColor gd_flash_color; extern const GdColor gd_select_color; @@ -312,6 +316,12 @@ typedef struct _highscore int score; } GdHighScore; +typedef struct _replay_movements +{ + unsigned char data[MAX_REPLAY_LEN]; + unsigned int len; +} GdReplayMovements; + /* maximum seed value for the cave random generator. should be smaller than a signed int. */ #define GD_CAVE_SEED_MAX (1 << 30) @@ -332,7 +342,7 @@ typedef struct _gd_cave_replay guint32 checksum; /* checksum of the rendered cave. */ boolean wrong_checksum; - GByteArray *movements; + GdReplayMovements *movements; int current_playing_pos; } GdReplay; @@ -380,8 +390,8 @@ typedef struct _gd_cave HashTable *tags; /* stores read-but-not-understood strings from bdcff, so we can save them later. */ GdElement **map; /* pointer to data for map, non-null if has a map */ - GList *objects; - GList *replays; + List *objects; + List *replays; boolean intermission; /* is this cave an intermission? */ boolean intermission_instantlife; /* one life extra, if the intermission is reached */ @@ -567,7 +577,7 @@ typedef struct _gd_cave boolean hatched; /* hatching has happened. (timers may run, ...) */ boolean gate_open; /* self-explaining */ guint32 render_seed; /* the seed value, which was used to render the cave, is saved here. will be used by record&playback */ - GRand *random; /* random number generator of rendered cave */ + GdRand *random; /* random number generator of rendered cave */ int rendered; /* if not zero, rendered at level x */ int timing_factor; /* number of "milliseconds" in each second :) 1000 for ntsc, 1200 for pal. */ gpointer **objects_order; /* two-dimensional map of cave; each cell is a pointer to the drawing object, which created this element. NULL if map or random. */ @@ -702,10 +712,9 @@ void gd_drawcave_game(const GdCave *cave, int **element_buffer, int **gfx_buffer boolean bonus_life_flash, int animcycle, boolean hate_invisible_outbox); /* function to copy a GdString */ -static inline int -gd_strcpy(GdString dest, const GdString src) +static inline char *gd_strcpy(GdString dest, const GdString src) { - return g_strlcpy(dest, src, sizeof(GdString)); + return strncpy(dest, src, sizeof(GdString)); } int gd_cave_time_show(const GdCave *cave, int internal_time);