00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef HEADER
00010 #define HEADER
00011 #include <stdio.h>
00012 #include <ctype.h>
00013 #include <stdlib.h>
00014 #include <string.h>
00015 #include <graphapp.h>
00016
00017 #endif
00018
00019 #define TILESIZE 32
00020 #define TILEDEPTH 8
00021 #define TWINWIDTH 250
00022 #define MAXMAPHEIGHT 150
00023 #define MAXMAPWIDTH 180
00024 #define MAINWINWIDTH 750
00025 #define MAINWINHEIGHT 550
00026 #define MAXHITPOINTS 50
00027 #define MAXDAMAGE 50
00028
00029 #define BACKGROUND_BEGIN 0
00030 #define BACKGROUND_END 176
00031 #define ENEMY_BEGIN 177
00032 #define ENEMY_END 192
00033 #define KEY_BEGIN 193
00034 #define KEY_END 193
00035 #define TELEPORTER_BEGIN 194
00036 #define TELEPORTER_END 194
00037 #define EXIT_BEGIN 195
00038 #define EXIT_END 195
00039 #define SCROLL_BEGIN 196
00040 #define SCROLL_END 196
00041 #define DOOR_BEGIN 197
00042 #define DOOR_END 200
00043 #define POWERUP_BEGIN 201
00044 #define POWERUP_END 207
00045 #define GOLD_BEGIN 208
00046 #define GOLD_END 215
00047 #define GENERATOR_BEGIN 216
00048 #define GENERATOR_END 216
00049 #define TRAPS_BEGIN 217
00050 #define TRAPS_END 220
00051 #define EMPTY_BEGIN 221
00052 #define EMPTY_END 255
00053
00054 #define BG_MIN_DAMAGE 0
00055 #define BG_MAX_DAMAGE 10000
00056 #define ENMY_MIN_HTPTS -1
00057 #define ENMY_MAX_HTPTS 1000
00058 #define ENMY_MIN_DAMAGE 0
00059 #define ENMY_MAX_DAMAGE 100
00060 #define EXIT_MAX 20
00061 #define POWERUP_MIN -255
00062 #define POWERUP_MAX 255
00063 #define GOLD_MIN 5
00064 #define GOLD_MAX 500
00065 #define GEN_MIDX_MIN 177
00066 #define GEN_MIDX_MAX 192
00067 #define GEN_MIN_HTPTS -1
00068 #define GEN_MAX_HTPTS 500
00069 #define TRAP_MIN_DAMAGE 0
00070 #define TRAP_MAX_DAMAGE 100
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 typedef struct {
00081 Image *img;
00082 Bitmap *bit;
00083 char * name;
00084 int index;
00085 int walkable;
00086 int hitpoints;
00087 int damage;
00088 } tile;
00089
00090 typedef struct{
00091 int index[MAXMAPWIDTH][MAXMAPHEIGHT][2];
00092 int walkable[MAXMAPWIDTH][MAXMAPHEIGHT][2];
00093 int hitpoints[MAXMAPWIDTH][MAXMAPHEIGHT][2];
00094 int damage[MAXMAPWIDTH][MAXMAPHEIGHT][2];
00095
00096 }map;
00097
00098 typedef struct{
00099 char first[13];
00100 char second[13];
00101 char third[13];
00102 }prop_strings;
00103
00104 typedef struct{
00105 Point first;
00106 Point second;
00107 }minmax;
00108
00109 typedef struct{
00110 int walkable;
00111 int hitpoints;
00112 int damage;
00113 }tprops;
00114
00115 struct MapEditorMainClass {
00116 Window *win;
00117 Control *topcontrol;
00118 Bitmap *bit;
00119 Bitmap *lev1;
00120 Bitmap *grid;
00121 Graphics *mapgraphics;
00122 Graphics *lev1graphics;
00123 Graphics *gridgraphics;
00124 Point ctile_topleft;
00125 Point ctile_edit;
00126 int ctile_prop_edit;
00127 char *filename;
00128 int double_click_flag;
00129 int choose_startpt_flag;
00130 Point drag_start_pt;
00131 Point mouse_pt;
00132 Point char_start_pt;
00133 int drag_flag;
00134 int save_flag;
00135 int mapdrawheight, mapdrawwidth, mapdrawtwidth, mapdrawtheight;
00136 int mapwidth, mapheight;
00137 Image *mapimage;
00138 Image *currentimg;
00139 Control *mapdrawing;
00140 Control *currentimgpic;
00141 Control *lcurrentprop;
00142 Control *lcurrentimg;
00143 Control *lcurrentimgindex;
00144 int currentimgindex;
00145 Control *showlev0btn;
00146 Control *showlev1btn;
00147 Control *showmergedbtn;
00148 int currentmaplevel;
00149 Control *startpointbtn;
00150 Control *startptxfield;
00151 Control *startptyfield;
00152 Control *lproperties;
00153 Control *walkablebox;
00154 Control *lhitpoints;
00155 Control *hitpointsfield;
00156 Control *ldamage;
00157 Control *damagefield;
00158 Control *lcoor;
00159 Control *ltcoor;
00160 Control *lmove;
00161 Control *lmapsize;
00162 Control *htilenum[40];
00163 Control *vtilenum[40];
00164 tile ctile;
00165 MenuBar *main_menubar;
00166 Menu *file_menu;
00167 MenuItem *new_item;
00168 MenuItem *open_item;
00169 MenuItem *save_item;
00170 MenuItem *line1_item;
00171 MenuItem *quit_item;
00172 Menu *options_menu;
00173 MenuItem *tilewin_item;
00174 MenuItem *mmap_item;
00175 MenuItem *loadtiles_item;
00176 MenuItem *showgrid_item;
00177 Menu *help_menu;
00178 MenuItem *help_item;
00179 };
00180
00181 struct TileWinClass {
00182 Window *win;
00183 int tile_size;
00184 int tile_columns;
00185 int tile_rows;
00186 int offset;
00187 tile ctile;
00188 Rect r;
00189 Control *first_btn;
00190 Control *second_btn;
00191 Control *third_btn;
00192 Control *fourth_btn;
00193 Control *tile_btn[64];
00194 Control *tile_label[15];
00195 };
00196
00197 struct NewMapWinClass {
00198 Window *win;
00199 char sheight[3];
00200 char swidth[3];
00201 int iheight, iwidth;
00202 Control *ok;
00203 Control *cancel;
00204 Control *heightfield;
00205 Control *widthfield;
00206 Control *lheight;
00207 Control *lwidth;
00208 Control *ltilesize;
00209 };
00210
00211 struct TilePropClass {
00212 Window *win;
00213 Control *ltileinfo;
00214 Control *walkablebox;
00215 Control *lhitpoints;
00216 Control *hitpointsfield;
00217 Control *ldamage;
00218 Control *damagefield;
00219 int index;
00220 Control *ok;
00221 Control *cancel;
00222 };
00223
00224 struct HelpWinClass {
00225 Window *win;
00226 Control *ltext;
00227 Control *exitbtn;
00228 };
00229
00230 struct MiniMapWinClass {
00231 Window *win;
00232 Control *mmap;
00233 Bitmap *mmap_bit;
00234 Graphics *mmap_graphics;
00235 Image *lev0_image;
00236 Image *lev1_image;
00237 Rect r;
00238 Rect frame;
00239 Control *size_label;
00240 Control *instr_label;
00241 };
00242
00243
00244 typedef struct MapEditorMainClass MainWin;
00245 typedef struct TileWinClass TileWin;
00246 typedef struct NewMapWinClass NewMapWin;
00247 typedef struct TilePropClass PropWin;
00248 typedef struct HelpWinClass HelpWin;
00249 typedef struct MiniMapWinClass MMapWin;
00250
00251
00252 int init_main_window(MainWin *);
00253 int init_tile_window();
00254 int init_size_window();
00255 int init_prop_window();
00256 int init_help_window();
00257 int init_minimap_window();
00258 void mapdrawing_coor(Control *, int, Point);
00259 void mapdrawing_click(Control *, int, Point);
00260 void mapdrawing_drag(Control *, int, Point);
00261 void mapdrawing_mouseup(Control *, int, Point);
00262 void mapdrawing_move(Window *, unsigned long);
00263 void mapdrawing_undo(Window *, unsigned long);
00264 void minimap_coor(Control *, int, Point);
00265 void minimap_click(Control *, int, Point);
00266 void choose_map_level(Control *);
00267 void choose_start_pt(Control *);
00268 void show_sizewin(MenuItem *);
00269 void show_tilewin(MenuItem *);
00270 void show_helpwin(MenuItem *);
00271 void show_mmapwin(MenuItem *);
00272 void show_propwin();
00273 void show_grid(MenuItem *);
00274 void open_mapfile(MenuItem *);
00275 void save_mapfile(MenuItem *);
00276 void exit_prog(MenuItem *);
00277 void exit_mainwin(Window *);
00278 void exit_tilewin(Window *);
00279 void exit_sizewin(Window *);
00280 void exit_propwin(Window *);
00281 void exit_helpwin(Window *);
00282 void exit_mmapwin(Window *);
00283 void load_tiles(MenuItem *);
00284 void timer_callback(Timer *);
00285 void view_tiles(Control *);
00286 void which_tile_props(int, tprops *);
00287 void choose_tile(Control *);
00288 void ok_sizewin(Control *);
00289 void cancel_sizewin(Control *);
00290 void ok_propwin(Control *);
00291 void cancel_propwin(Control *);
00292 void cancel_helpwin(Control *);
00293 void set_currentimg_props(int);
00294 void redraw_map(Control *, Graphics *);
00295 void redraw_minimap(Control *, Graphics *);
00296 void get_prop_strings(int, int, prop_strings *);
00297 void get_tile_prop_minmax(int, minmax *);
00298 void copy_rect_image(Image *dest, Point dp, Image *src, Rect sr);
00299