2 * Copyright (c) 2007, 2008, 2009, Czirkos Zoltan <cirix@fw.hu>
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 #ifndef BD_CAVEOBJECT_H
18 #define BD_CAVEOBJECT_H
23 typedef enum _gd_object_type
25 NONE, // this one to be zero.
26 GD_POINT, // single point of object1
27 GD_LINE, // line from (1) to (2) of object1
28 GD_RECTANGLE, // rectangle with corners (1) and (2) of object1
29 GD_FILLED_RECTANGLE, // rectangle with corners (1) and (2) of object1, filled with object2
30 GD_RASTER, // aligned plots
31 GD_JOIN, // every object1 has an object2 next to it, relative (dx,dy)
32 GD_FLOODFILL_REPLACE, // fill by replacing
33 GD_FLOODFILL_BORDER, // fill to another element, a border
35 GD_MAZE_UNICURSAL, // unicursal maze
36 GD_MAZE_BRAID, // braid maze
37 GD_RANDOM_FILL, // random fill
38 GD_COPY_PASTE, // copy & paste with optional mirror and flip
41 typedef enum _gd_object_levels
43 GD_OBJECT_LEVEL1 = 1<<0,
44 GD_OBJECT_LEVEL2 = 1<<1,
45 GD_OBJECT_LEVEL3 = 1<<2,
46 GD_OBJECT_LEVEL4 = 1<<3,
47 GD_OBJECT_LEVEL5 = 1<<4,
49 GD_OBJECT_LEVEL_ALL = (GD_OBJECT_LEVEL1 |
56 extern GdObjectLevels gd_levels_mask[];
58 typedef struct _gd_object
60 GdObjectType type; // type
61 GdObjectLevels levels; // levels to show this object on
63 int x1, y1; // (first) coordinate
64 int x2, y2; // second coordinate
65 int dx, dy; // distance of elements for raster or join
66 GdElement element, fill_element; // element type
68 int seed[5]; // for maze and random fill
69 int horiz; // for maze
71 boolean mirror, flip; // for copy
73 boolean c64_random; // random fill objects: use c64 random generator
75 GdElement random_fill[4];
76 int random_fill_probability[4];
79 GdObject *gd_object_new_point(GdObjectLevels levels, int x, int y, GdElement elem);
80 GdObject *gd_object_new_line(GdObjectLevels levels, int x1, int y1, int x2, int y2, GdElement elem);
81 GdObject *gd_object_new_rectangle(GdObjectLevels levels, int x1, int y1, int x2, int y2, GdElement elem);
82 GdObject *gd_object_new_filled_rectangle(GdObjectLevels levels, int x1, int y1, int x2, int y2, GdElement elem, GdElement fill_elem);
83 GdObject *gd_object_new_raster(GdObjectLevels levels, int x1, int y1, int x2, int y2, int dx, int dy, GdElement elem);
84 GdObject *gd_object_new_join(GdObjectLevels levels, int dx, int dy, GdElement search, GdElement replace);
85 GdObject *gd_object_new_floodfill_border(GdObjectLevels levels, int x1, int y1, GdElement fill, GdElement border);
86 GdObject *gd_object_new_floodfill_replace(GdObjectLevels levels, int x1, int y1, GdElement fill, GdElement to_replace);
87 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 int seed[5]);
88 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 int seed[5]);
89 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 int seed[5]);
90 GdObject *gd_object_new_random_fill(GdObjectLevels levels, int x1, int y1, int x2, int y2, const int seed[5], GdElement initial, const GdElement random[4], const int prob[4], GdElement replace_only, boolean c64);
91 GdObject *gd_object_new_copy_paste(GdObjectLevels levels, int x1, int y1, int x2, int y2, int dx, int dy, boolean mirror, boolean flip);
93 void gd_cave_draw_object(GdCave *cave, const GdObject *object, int level);
94 char *gd_object_get_bdcff(const GdObject *object);
95 GdObject *gd_object_new_from_string(char *str);
97 GdCave *gd_cave_new_rendered(const GdCave *data, const int level, unsigned int seed);
98 void gd_flatten_cave(GdCave *cave, const int level);
100 #endif // BD_CAVEOBJECT_H