replaced glib function calls to g_file_get_contents()
[rocksndiamonds.git] / src / game_bd / bd_cave.h
index f0421849d8a84ad97c9bd3b795958c8380d87bf7..038c61fda66ead21b746e72828aceae8ae003726 100644 (file)
@@ -20,6 +20,7 @@
 #include <glib.h>
 
 #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);