1 /** 2 * Header for code common to FreeDink and FreeDinkedit 3 4 * Copyright (C) 2005, 2007, 2008, 2009, 2010, 2012 Sylvain Beucler 5 6 * This file is part of GNU FreeDink 7 8 * GNU FreeDink is free software; you can redistribute it and/or 9 * modify it under the terms of the GNU General Public License as 10 * published by the Free Software Foundation; either version 3 of the 11 * License, or (at your option) any later version. 12 13 * GNU FreeDink is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * General Public License for more details. 17 18 * You should have received a copy of the GNU General Public License 19 * along with this program. If not, see 20 * <http://www.gnu.org/licenses/>. 21 */ 22 23 #ifndef _DINKVAR_H 24 #define _DINKVAR_H 25 26 /* for RECT ?? */ 27 /* #include <windows.h> */ 28 29 /* #include <ddraw.h> */ 30 /* #include <dinput.h> */ 31 /* #include <mmsystem.h> */ 32 33 #include <limits.h> 34 35 #include "SDL.h" 36 #include "SDL_framerate.h" 37 #include "game_engine.h" 38 #include "rect.h" 39 #include "dinkc.h" 40 41 struct attackinfo_struct 42 { 43 int time; 44 /*bool*/int active; 45 int script; 46 /*bool*/int hitme; 47 int last_power; 48 int wait; 49 int pull_wait; 50 }; 51 52 struct sprite_placement 53 { 54 int x, y; 55 int seq, frame, type; /* DinkC: editor_seq, editor_frame, editor_type */ 56 int size; 57 BOOL_1BYTE active; 58 int rotation, special, brain; 59 60 char script[13+1]; /* attached DinkC script */ 61 int speed, base_walk, base_idle, base_attack, base_hit, timer, que; 62 int hard; 63 rect alt; /* trim left/top/right/bottom */ 64 int is_warp; 65 int warp_map; 66 int warp_x; 67 int warp_y; 68 int parm_seq; 69 70 int base_die, gold, hitpoints, strength, defense, exp, sound, vision, nohit, touch_damage; 71 int buff[5]; 72 }; 73 74 /* one screen from map.dat */ 75 struct small_map 76 { 77 struct tile t[12*8+1]; // 97 background tiles 78 struct sprite_placement sprite[100+1]; 79 char script[20+1]; /* script to run when entering the script */ 80 }; 81 82 83 84 #define TALK_TITLE_BUFSIZ 3000 85 #define TALK_LINE_BUFSIZ 101 86 struct talk_struct 87 { 88 char line[21][TALK_LINE_BUFSIZ]; /* dialog choices */ 89 int line_return[21]; /* return this number if chosen */ 90 char buffer[TALK_TITLE_BUFSIZ]; /* title */ 91 int cur; 92 int last; 93 /*bool*/int active; 94 int cur_view; 95 int cur_view_end; 96 int page; 97 int script; 98 int offset; 99 int newy; 100 int color; 101 int curf; 102 int timer; 103 }; 104 105 //sub struct for tile hardness 106 107 struct block_y 108 { 109 unsigned char y[51]; 110 }; 111 112 struct ts_block 113 { 114 struct block_y x[51]; 115 BOOL_1BYTE used; 116 }; 117 118 //struct for hardness info, INDEX controls which hardness each block has. 800 max 119 //types available. 120 #define HARDNESS_NB_TILES 800 121 struct hardness 122 { 123 struct ts_block htile[HARDNESS_NB_TILES]; 124 /* default hardness for each background tile square, 12*8=96 tiles 125 per screen but indexed % 128 in the code (so 128*(41-1)+12*8=5216 126 used indexes instead of 12*8*41=3936). */ 127 short btile_default[GFX_TILES_NB_SQUARES]; 128 }; 129 130 extern int GetKeyboard(int key); 131 extern int add_sprite(int x1, int y, int brain,int pseq, int pframe ); 132 extern void check_seq_status(int h); 133 /* extern void dderror(HRESULT hErr); */ 134 //extern void draw_sprite_game(LPDIRECTDRAWSURFACE lpdest,int h); 135 extern void draw_sprite_game(SDL_Surface *GFX_lpdest, int h); 136 extern void draw_status_all(void); 137 extern void drawallhard( void); 138 extern void duck_brain(int h); 139 extern /*BOOL*/int init_mouse(); 140 extern int load_map_to(char* path, const int num, struct small_map* screen); 141 extern int load_map(const int num); 142 extern int load_script(char filename[15], int sprite, /*bool*/int set_sprite); 143 extern /*bool*/int locate(int script, char proc[20]); 144 extern void process_callbacks(void); 145 extern void run_script (int script); 146 extern void update_status_all(void); 147 148 extern /*bool*/int abort_this_flip; 149 extern int base_timing; 150 extern struct attackinfo_struct bow; 151 extern int dinkspeed; 152 extern int flife; 153 extern int flub_mode; 154 extern int fps_final; 155 extern int show_inventory; 156 extern int stop_entire_game; 157 extern int getpic(int h); 158 159 /* show_bmp() currently ran */ 160 struct show_bmp 161 { 162 /*bool*/int active; 163 /*bool*/int showdot; 164 int reserved; 165 int script; 166 int stime; 167 int picframe; 168 }; 169 extern struct show_bmp showb; 170 171 172 extern int keep_mouse; 173 extern int last_sprite_created; 174 extern int mbase_count; 175 extern int mode; 176 extern unsigned long mold; 177 178 extern int *pupdate_status; 179 extern struct small_map pam; 180 extern int playl; 181 extern int playx; 182 extern int playy; 183 extern int *pmap; 184 extern int screenlock; 185 extern int show_dot; 186 extern struct talk_struct talk; 187 extern Uint32 thisTickCount; 188 extern Uint32 lastTickCount; 189 extern FPSmanager framerate_manager; 190 extern /*bool*/int total_trigger; 191 extern /*bool*/int trig_man; 192 193 /* extern HRESULT ddrval; */ 194 /* extern LPDIRECTDRAWPALETTE lpDDPal; /\* The primary surface palette *\/ */ 195 /* extern PALETTEENTRY pe[256]; */ 196 197 198 /* Game state */ 199 extern /*bool*/int add_time_to_saved_game(int num); 200 extern void attach(void); 201 extern /*bool*/int windowed; 202 extern int fcur_weapon, fcur_magic; 203 extern int push_active; 204 extern int move_screen; 205 extern int move_counter; 206 extern int weapon_script; 207 extern int magic_script; 208 209 /* Player */ 210 extern /*bool*/int inside_box(int x1, int y1, rect box); 211 extern int walk_off_screen; 212 213 /* Sprites - state */ 214 extern void add_exp_force(int num, int source_sprite); 215 extern void add_exp(int num, int killed_sprite); 216 extern void changedir( int dir1, int k,int base); 217 extern int get_pan(int h); 218 extern int get_vol(int h); 219 220 /* Sprites - action */ 221 extern void kill_text_owned_by(int sprite); 222 223 /* Sprites - global */ 224 extern void kill_sprite_all (int sprite); 225 extern int find_sprite(int editor_sprite); 226 227 /* Scripts */ 228 extern int say_text_xy(char text[200], int mx, int my, int script); 229 extern void kill_all_scripts_for_real(void); 230 extern void kill_returning_stuff(int script); 231 extern int say_text(char text[200], int h, int script); 232 233 /* Map */ 234 extern unsigned char get_hard(int x1, int y1); 235 extern unsigned char get_hard_play(int h, int x1, int y1); 236 extern void load_hard(void); 237 extern int load_info_to(char* path, struct map_info *mymap); 238 extern void load_info(void); 239 240 /* Dunno */ 241 extern /*bool*/int mouse1; 242 243 /* Screen */ 244 extern void update_screen_time(void); 245 246 /* OS */ 247 extern int bActive; // is application active? 248 extern char *command_line; // command line params, used by doInit 249 250 //if true, will close app as soon as the message pump is empty 251 extern int g_b_kill_app; 252 253 254 /* Startup */ 255 extern void pre_figure_out(char* line); 256 extern void figure_out(char* line); 257 258 /* Metadata */ 259 extern int burn_revision; 260 261 /* 262 * Game & editor 263 */ 264 /*bool*/int get_box (int h, rect * box_crap, rect * box_real); 265 extern /*bool*/int dinkedit; 266 extern int draw_map_tiny; 267 extern int cur_map; 268 extern struct hardness hmap; 269 270 271 /* 272 * Editor 273 */ 274 275 extern void check_sprite_status(int h); 276 extern void add_hardness(int sprite, int num); 277 extern void fill_whole_hard(void); 278 extern int add_sprite_dumb(int x1, int y, int brain,int pseq, int pframe,int size); 279 extern /*bool*/int kill_last_sprite(void); 280 extern void check_frame_status(int h, int frame); 281 extern void flip_it_second(void); 282 extern void save_map(const int num); 283 extern void save_info(void); 284 extern int realhard(int tile); 285 extern void save_hard(void); 286 287 extern /*bool*/int no_running_main; 288 289 extern void fill_screen(int num); 290 291 292 /* Used by dinkc_bindings.c only */ 293 enum item_type { ITEM_REGULAR, ITEM_MAGIC }; 294 extern void clear_talk(void); 295 extern void add_item(char name[10], int mseq, int mframe, enum item_type type); 296 extern void kill_item_script(char* name); 297 extern void kill_mitem_script(char* name); 298 extern void show_bmp(char name[80], int showdot, int script); 299 extern void copy_bmp( char name[80]); 300 extern void kill_cur_item( void ); 301 extern void kill_cur_magic( void ); 302 extern /*bool*/int text_owned_by(int sprite); 303 extern void kill_all_vars(void); 304 extern void update_play_changes( void ); 305 extern void fill_hardxy(rect box); 306 extern void save_game(int num); 307 extern /*bool*/int load_game(int num); 308 extern int does_sprite_have_text(int sprite); 309 extern int change_sprite(int h, int val, int * change); 310 extern int change_sprite_noreturn(int h, int val, int * change); 311 extern int change_edit_char(int h, int val, unsigned char * change); 312 extern int change_edit(int h, int val, unsigned short * change); 313 extern int hurt_thing(int h, int damage, int special); 314 extern void random_blood(int mx, int my, int h); 315 extern void check_sprite_status_full(int sprite_no); 316 317 #endif 318