removed unused functions and definitions
[rocksndiamonds.git] / src / game_bd / bd_caveobject.h
1 /*
2  * Copyright (c) 2007, 2008, 2009, Czirkos Zoltan <cirix@fw.hu>
3  *
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.
7  *
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.
15  */
16
17 #ifndef BD_CAVEOBJECT_H
18 #define BD_CAVEOBJECT_H
19
20 #include <glib.h>
21
22 #include "bd_cave.h"
23
24
25 typedef enum _gd_object_type
26 {
27   NONE,                     /* this one to be zero. */
28   GD_POINT,                 /* single point of object1 */
29   GD_LINE,                  /* line from (1) to (2) of object1 */
30   GD_RECTANGLE,             /* rectangle with corners (1) and (2) of object1 */
31   GD_FILLED_RECTANGLE,      /* rectangle with corners (1) and (2) of object1, filled with object2 */
32   GD_RASTER,                /* aligned plots */
33   GD_JOIN,                  /* every object1 has an object2 next to it, relative (dx,dy) */
34   GD_FLOODFILL_REPLACE,     /* fill by replacing */
35   GD_FLOODFILL_BORDER,      /* fill to another element, a border */
36   GD_MAZE,                  /* maze */
37   GD_MAZE_UNICURSAL,        /* unicursal maze */
38   GD_MAZE_BRAID,            /* braid maze */
39   GD_RANDOM_FILL,           /* random fill */
40   GD_COPY_PASTE,            /* copy & paste with optional mirror and flip */
41 } GdObjectType;
42
43 typedef enum _gd_object_levels
44 {
45   GD_OBJECT_LEVEL1 = 1<<0,
46   GD_OBJECT_LEVEL2 = 1<<1,
47   GD_OBJECT_LEVEL3 = 1<<2,
48   GD_OBJECT_LEVEL4 = 1<<3,
49   GD_OBJECT_LEVEL5 = 1<<4,
50
51   GD_OBJECT_LEVEL_ALL = (GD_OBJECT_LEVEL1 |
52                          GD_OBJECT_LEVEL2 |
53                          GD_OBJECT_LEVEL3 |
54                          GD_OBJECT_LEVEL4 |
55                          GD_OBJECT_LEVEL5),
56 } GdObjectLevels;
57
58 extern GdObjectLevels gd_levels_mask[];
59
60 typedef struct _gd_object
61 {
62   GdObjectType type;        /* type */
63   GdObjectLevels levels;    /* levels to show this object on */
64
65   int x1, y1;               /* (first) coordinate */
66   int x2, y2;               /* second coordinate */
67   int dx, dy;               /* distance of elements for raster or join */
68   GdElement element, fill_element;   /* element type */
69
70   gint32 seed[5];           /* for maze and random fill */
71   int horiz;                /* for maze */
72
73   boolean mirror, flip;     /* for copy */
74
75   boolean c64_random;       /* random fill objects: use c64 random generator */
76
77   GdElement random_fill[4];
78   int random_fill_probability[4];
79 } GdObject;
80
81 GdObject *gd_object_new_point(GdObjectLevels levels, int x, int y, GdElement elem);
82 GdObject *gd_object_new_line(GdObjectLevels levels, int x1, int y1, int x2, int y2, GdElement elem);
83 GdObject *gd_object_new_rectangle(GdObjectLevels levels, int x1, int y1, int x2, int y2, GdElement elem);
84 GdObject *gd_object_new_filled_rectangle(GdObjectLevels levels, int x1, int y1, int x2, int y2, GdElement elem, GdElement fill_elem);
85 GdObject *gd_object_new_raster(GdObjectLevels levels, int x1, int y1, int x2, int y2, int dx, int dy, GdElement elem);
86 GdObject *gd_object_new_join(GdObjectLevels levels, int dx, int dy, GdElement search, GdElement replace);
87 GdObject *gd_object_new_floodfill_border(GdObjectLevels levels, int x1, int y1, GdElement fill, GdElement border);
88 GdObject *gd_object_new_floodfill_replace(GdObjectLevels levels, int x1, int y1, GdElement fill, GdElement to_replace);
89 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]);
90 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]);
91 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]);
92 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], GdElement replace_only, boolean c64);
93 GdObject *gd_object_new_copy_paste(GdObjectLevels levels, int x1, int y1, int x2, int y2, int dx, int dy, boolean mirror, boolean flip);
94
95 void gd_cave_draw_object(GdCave *cave, const GdObject *object, int level);
96 GdObject *gd_object_new_from_string(char *str);
97
98 GdCave *gd_cave_new_rendered(const GdCave *data, const int level, guint32 seed);
99 void gd_flatten_cave(GdCave *cave, const int level);
100
101 #endif  // BD_CAVEOBJECT_H