* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#include <glib.h>
-#include <glib/gi18n.h>
-
#include "main_bd.h"
GD_OBJECT_LEVEL5
};
+/* bdcff text description of object. caller should free string. */
+char *gd_object_get_bdcff(const GdObject *object)
+{
+ char *str = NULL;
+ int j;
+ const char *type;
+
+ switch (object->type)
+ {
+ case GD_POINT:
+ return getStringPrint("Point=%d %d %s", object->x1, object->y1, gd_elements[object->element].filename);
+
+ case GD_LINE:
+ return getStringPrint("Line=%d %d %d %d %s", object->x1, object->y1, object->x2, object->y2, gd_elements[object->element].filename);
+
+ case GD_RECTANGLE:
+ return getStringPrint("Rectangle=%d %d %d %d %s", object->x1, object->y1, object->x2, object->y2, gd_elements[object->element].filename);
+
+ case GD_FILLED_RECTANGLE:
+ /* if elements are not the same */
+ if (object->fill_element!=object->element)
+ return getStringPrint("FillRect=%d %d %d %d %s %s", object->x1, object->y1, object->x2, object->y2, gd_elements[object->element].filename, gd_elements[object->fill_element].filename);
+ /* they are the same */
+ return getStringPrint("FillRect=%d %d %d %d %s", object->x1, object->y1, object->x2, object->y2, gd_elements[object->element].filename);
+
+ case GD_RASTER:
+ return getStringPrint("Raster=%d %d %d %d %d %d %s", object->x1, object->y1, (object->x2-object->x1)/object->dx+1, (object->y2-object->y1)/object->dy+1, object->dx, object->dy, gd_elements[object->element].filename);
+
+ case GD_JOIN:
+ return getStringPrint("Add=%d %d %s %s", object->dx, object->dy, gd_elements[object->element].filename, gd_elements[object->fill_element].filename);
+
+ case GD_FLOODFILL_BORDER:
+ return getStringPrint("BoundaryFill=%d %d %s %s", object->x1, object->y1, gd_elements[object->fill_element].filename, gd_elements[object->element].filename);
+
+ case GD_FLOODFILL_REPLACE:
+ return getStringPrint("FloodFill=%d %d %s %s", object->x1, object->y1, gd_elements[object->fill_element].filename, gd_elements[object->element].filename);
+
+ case GD_MAZE:
+ case GD_MAZE_UNICURSAL:
+ case GD_MAZE_BRAID:
+ switch(object->type)
+ {
+ case GD_MAZE:
+ type = "perfect";
+ break;
+
+ case GD_MAZE_UNICURSAL:
+ type = "unicursal";
+ break;
+
+ case GD_MAZE_BRAID:
+ type = "braid";
+ break;
+
+ default:
+ /* never reached */
+ break;
+ }
+
+ return getStringPrint("Maze=%d %d %d %d %d %d %d %d %d %d %d %d %s %s %s", object->x1, object->y1, object->x2, object->y2, object->dx, object->dy, object->horiz, object->seed[0], object->seed[1], object->seed[2], object->seed[3], object->seed[4], gd_elements[object->element].filename, gd_elements[object->fill_element].filename, type);
+
+ case GD_RANDOM_FILL:
+ appendStringPrint(&str, "%s=%d %d %d %d %d %d %d %d %d %s", object->c64_random?"RandomFillC64":"RandomFill", object->x1, object->y1, object->x2, object->y2, object->seed[0], object->seed[1], object->seed[2], object->seed[3], object->seed[4], gd_elements[object->fill_element].filename);
+
+ /* seed and initial fill */
+ for (j = 0; j < 4; j++)
+ if (object->random_fill_probability[j] != 0)
+ appendStringPrint(&str, " %s %d", gd_elements[object->random_fill[j]].filename, object->random_fill_probability[j]);
+
+ if (object->element != O_NONE)
+ appendStringPrint(&str, " %s", gd_elements[object->element].filename);
+
+ return str;
+
+ case GD_COPY_PASTE:
+ return getStringPrint("CopyPaste=%d %d %d %d %d %d %s %s", object->x1, object->y1, object->x2, object->y2, object->dx, object->dy, object->mirror?"mirror":"nomirror", object->flip?"flip":"noflip");
+
+ case NONE:
+ /* never reached */
+ break;
+ }
+
+ return NULL;
+}
+
/* create an INDIVIDUAL POINT CAVE OBJECT */
GdObject *gd_object_new_point(GdObjectLevels levels, int x, int y, GdElement elem)
{
GdObject *gd_object_new_maze(GdObjectLevels levels, int x1, int y1, int x2, int y2,
int wall_w, int path_w, GdElement wall_e, GdElement path_e,
- int horiz_percent, const gint32 seed[5])
+ int horiz_percent, const int seed[5])
{
int i;
GdObject *newobj = checked_calloc(sizeof(GdObject));
GdObject *gd_object_new_maze_unicursal(GdObjectLevels levels, int x1, int y1, int x2, int y2,
int wall_w, int path_w, GdElement wall_e, GdElement path_e,
- int horiz_percent, const gint32 seed[5])
+ int horiz_percent, const int seed[5])
{
int i;
GdObject *newobj = checked_calloc(sizeof(GdObject));
GdObject *gd_object_new_maze_braid(GdObjectLevels levels, int x1, int y1, int x2, int y2,
int wall_w, int path_w, GdElement wall_e, GdElement path_e,
- int horiz_percent, const gint32 seed[5])
+ int horiz_percent, const int seed[5])
{
int i;
GdObject *newobj = checked_calloc(sizeof(GdObject));
}
GdObject *gd_object_new_random_fill(GdObjectLevels levels, int x1, int y1, int x2, int y2,
- const gint32 seed[5], GdElement initial,
- const GdElement random[4], const gint32 prob[4],
+ const int seed[5], GdElement initial,
+ const GdElement random[4], const int prob[4],
GdElement replace_only, boolean c64)
{
int i;
int y2 = object->y2;
GdRand *rand;
GdC64RandomGenerator c64_rand;
- guint32 seed;
+ unsigned int seed;
/* -1 means that it should be different every time played. */
if (object->seed[level] == -1)
}
/* load cave to play... also can be called rendering the cave elements */
-GdCave *gd_cave_new_rendered(const GdCave *data, const int level, const guint32 seed)
+GdCave *gd_cave_new_rendered(const GdCave *data, const int level, const unsigned int seed)
{
GdCave *cave;
GdElement element;
cave->random = gd_rand_new_with_seed(cave->render_seed);
/* maps needed during drawing and gameplay */
- cave->objects_order = gd_cave_map_new(cave, gpointer);
+ cave->objects_order = gd_cave_map_new(cave, void *);
cave->time = data->level_time[level];
cave->timevalue = data->level_timevalue[level];