* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#include <glib.h>
-#include <glib/gi18n.h>
-
#include "main_bd.h"
/* bdcff text description of object. caller should free string. */
char *gd_object_get_bdcff(const GdObject *object)
{
- GString *str;
+ char *str = NULL;
int j;
const char *type;
switch (object->type)
{
case GD_POINT:
- return g_strdup_printf("Point=%d %d %s",
- object->x1, object->y1,
- gd_elements[object->element].filename);
+ return getStringPrint("Point=%d %d %s", object->x1, object->y1, gd_elements[object->element].filename);
case GD_LINE:
- return g_strdup_printf("Line=%d %d %d %d %s",
- object->x1, object->y1, object->x2, object->y2,
- gd_elements[object->element].filename);
+ 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 g_strdup_printf("Rectangle=%d %d %d %d %s",
- object->x1, object->y1, object->x2, object->y2,
- gd_elements[object->element].filename);
+ 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 g_strdup_printf("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);
-
+ 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 g_strdup_printf("FillRect=%d %d %d %d %s",
- object->x1, object->y1, object->x2, object->y2,
- gd_elements[object->element].filename);
+ 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 g_strdup_printf("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);
+ 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 g_strdup_printf("Add=%d %d %s %s",
- object->dx, object->dy,
- gd_elements[object->element].filename,
- gd_elements[object->fill_element].filename);
+ 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 g_strdup_printf("BoundaryFill=%d %d %s %s",
- object->x1, object->y1,
- gd_elements[object->fill_element].filename,
- gd_elements[object->element].filename);
+ 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 g_strdup_printf("FloodFill=%d %d %s %s",
- object->x1, object->y1,
- gd_elements[object->fill_element].filename,
- gd_elements[object->element].filename);
+ 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)
+ switch(object->type)
{
- case GD_MAZE: type = "perfect"; break;
- case GD_MAZE_UNICURSAL: type = "unicursal"; break;
- case GD_MAZE_BRAID: type = "braid"; break;
- default: break;
+ 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 g_strdup_printf("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);
+ 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:
- str = g_string_new(NULL);
- /* seed and initial fill */
- g_string_append_printf(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);
+ 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)
- g_string_append_printf(str, " %s %d",
- gd_elements[object->random_fill[j]].filename,
- object->random_fill_probability[j]);
- }
+ appendStringPrint(&str, " %s %d", gd_elements[object->random_fill[j]].filename, object->random_fill_probability[j]);
- if (object->element!=O_NONE)
- g_string_append_printf(str, " %s",
- gd_elements[object->element].filename);
+ if (object->element != O_NONE)
+ appendStringPrint(&str, " %s", gd_elements[object->element].filename);
- /* free string but do not free char *; return char *. */
- return g_string_free(str, FALSE);
+ return str;
case GD_COPY_PASTE:
- return g_strdup_printf("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");
+ 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;
}
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;
{
object.element = gd_get_element_from_string(elem0);
- return g_memdup(&object, sizeof (GdObject));
+ return get_memcpy(&object, sizeof (GdObject));
}
return NULL;
{
object.element = gd_get_element_from_string(elem0);
- return g_memdup(&object, sizeof (GdObject));
+ return get_memcpy(&object, sizeof (GdObject));
}
return NULL;
object.type = GD_RECTANGLE;
object.element = gd_get_element_from_string (elem0);
- return g_memdup(&object, sizeof (GdObject));
+ return get_memcpy(&object, sizeof (GdObject));
}
return NULL;
object.element = gd_get_element_from_string (elem0);
object.fill_element = gd_get_element_from_string (elem1);
- return g_memdup(&object, sizeof (GdObject));
+ return get_memcpy(&object, sizeof (GdObject));
}
if (paramcount == 5)
{
object.element = object.fill_element = gd_get_element_from_string (elem0);
- return g_memdup(&object, sizeof (GdObject));
+ return get_memcpy(&object, sizeof (GdObject));
}
return NULL;
object.type = GD_RASTER;
object.element = gd_get_element_from_string (elem0);
- return g_memdup(&object, sizeof (GdObject));
+ return get_memcpy(&object, sizeof (GdObject));
}
return NULL;
object.element = gd_get_element_from_string (elem0);
object.fill_element = gd_get_element_from_string (elem1);
- return g_memdup(&object, sizeof (GdObject));
+ return get_memcpy(&object, sizeof (GdObject));
}
return NULL;
object.fill_element = gd_get_element_from_string (elem0);
object.element = gd_get_element_from_string (elem1);
- return g_memdup(&object, sizeof (GdObject));
+ return get_memcpy(&object, sizeof (GdObject));
}
return NULL;
object.fill_element = gd_get_element_from_string (elem0);
object.element = gd_get_element_from_string (elem1);
- return g_memdup(&object, sizeof (GdObject));
+ return get_memcpy(&object, sizeof (GdObject));
}
return NULL;
object.element = gd_get_element_from_string (elem0);
object.fill_element = gd_get_element_from_string (elem1);
- return g_memdup(&object, sizeof (GdObject));
+ return get_memcpy(&object, sizeof (GdObject));
}
return NULL;
if (l > 10 && l % 2 == 1)
object.element = gd_get_element_from_string(words[l - 1]);
- return g_memdup(&object, sizeof (GdObject));
+ return get_memcpy(&object, sizeof (GdObject));
}
/* COPY PASTE OBJECT */
else
Warn("invalid setting for copypaste flip property: %s", flip);
- return g_memdup(&object, sizeof(GdObject));
+ return get_memcpy(&object, sizeof(GdObject));
}
return NULL;
/* create a maze in a boolean **maze. */
/* recursive algorithm. */
-static void mazegen(GRand *rand, boolean **maze, int width, int height, int x, int y, int horiz)
+static void mazegen(GdRand *rand, boolean **maze, int width, int height, int x, int y, int horiz)
{
int dirmask = 15;
int dir;
/* horiz or vert */
- dir = g_rand_int_range(rand, 0, 100) <horiz ? 2 : 0;
+ dir = gd_rand_int_range(rand, 0, 100) < horiz ? 2 : 0;
/* if no horizontal movement possible, choose vertical */
if (dir == 2 && (dirmask & 12) == 0)
dir = 0;
- else if (dir == 0 && (dirmask&3) == 0) /* and vice versa */
+ else if (dir == 0 && (dirmask & 3) == 0) /* and vice versa */
dir = 2;
- dir += g_rand_int_range(rand, 0, 2); /* dir */
+ dir += gd_rand_int_range(rand, 0, 2); /* dir */
if (dirmask & (1 << dir))
{
dirmask &= ~(1 << dir);
}
}
-static void braidmaze(GRand *rand, boolean **maze, int w, int h)
+static void braidmaze(GdRand *rand, boolean **maze, int w, int h)
{
int x, y;
if (closed == 3 && dirs != 0)
{
/* make up a random direction, and open in that direction, so dead end is removed */
- int dir = closed_dirs[g_rand_int_range(rand, 0, dirs)];
+ int dir = closed_dirs[gd_rand_int_range(rand, 0, dirs)];
switch (dir)
{
int y2 = object->y2;
int w, h, path, wall;
int xk, yk;
- GRand *rand;
+ GdRand *rand;
int i,j;
/* change coordinates if not in correct order */
/* start generation, if map is big enough.
otherwise the application would crash, as the editor places maze objects
during mouse click & drag that have no sense */
- rand = g_rand_new_with_seed(object->seed[level] == -1 ?
- g_rand_int(cave->random) : object->seed[level]);
+ rand = gd_rand_new_with_seed(object->seed[level] == -1 ?
+ gd_rand_int(cave->random) : object->seed[level]);
if (w >= 1 && h >= 1)
mazegen(rand, map, w, h, 0, 0, object->horiz);
if (object->type == GD_MAZE_BRAID)
braidmaze(rand, map, w, h);
- g_rand_free(rand);
+ gd_rand_free(rand);
if (w >= 1 && h >= 1 && object->type == GD_MAZE_UNICURSAL)
{
int y1 = object->y1;
int x2 = object->x2;
int y2 = object->y2;
- GRand *rand;
+ 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)
- seed = g_rand_int(cave->random);
+ seed = gd_rand_int(cave->random);
else
seed = object->seed[level];
- rand = g_rand_new_with_seed(seed);
+ rand = gd_rand_new_with_seed(seed);
/* for c64 random, use the 2*8 lsb. */
gd_c64_random_set_seed(&c64_rand, seed / 256 % 256, seed % 256);
randm = gd_c64_random(&c64_rand);
else
/* use the much better glib random generator */
- randm = g_rand_int_range(rand, 0, 256);
+ randm = gd_rand_int_range(rand, 0, 256);
element = object->fill_element;
if (randm < object->random_fill_probability[0])
}
}
- g_rand_free(rand);
+ gd_rand_free(rand);
}
}
/* 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;
int x, y;
- GList *iter;
+ List *iter;
/* make a copy */
cave = gd_cave_new_from_cave(data);
cave->rendered = level + 1;
cave->render_seed = seed;
- cave->random = g_rand_new_with_seed(cave->render_seed);
+ 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];
/* IF CAVE HAS NO MAP, USE THE RANDOM NUMBER GENERATOR */
/* init c64 randomgenerator */
if (data->level_rand[level] < 0)
- gd_cave_c64_random_set_seed(cave, g_rand_int_range(cave->random, 0, 256),
- g_rand_int_range(cave->random, 0, 256));
+ gd_cave_c64_random_set_seed(cave, gd_rand_int_range(cave->random, 0, 256),
+ gd_rand_int_range(cave->random, 0, 256));
else
gd_cave_c64_random_set_seed(cave, 0, data->level_rand[level]);
if (data->level_rand[level] < 0)
/* use the much better glib random generator */
- randm = g_rand_int_range(cave->random, 0, 256);
+ randm = gd_rand_int_range(cave->random, 0, 256);
else
/* use c64 */
randm = gd_cave_c64_random(cave);
}
/* render cave objects above random data or map */
- for (iter = data->objects; iter; iter = g_list_next(iter))
+ for (iter = data->objects; iter; iter = list_next(iter))
{
GdObject *object = (GdObject *)iter->data;
gd_cave_free(rendered);
/* forget objects */
- g_list_foreach(cave->objects, (GFunc) free, NULL);
+ list_foreach(cave->objects, (list_fn) free, NULL);
cave->objects = NULL;
}