X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fgame_em%2Fmain_em.h;h=6c9653154b8631e38e716fed372d56d99c286ff8;hp=17cb9f73df67ebc4380f9b546301b18936068e1e;hb=520916c89d7d96944bf3d66e3caa5afd840df74c;hpb=ea6e4698905d7440a265e323d03cf13fc323c44b diff --git a/src/game_em/main_em.h b/src/game_em/main_em.h index 17cb9f73..6c965315 100644 --- a/src/game_em/main_em.h +++ b/src/game_em/main_em.h @@ -1,674 +1,134 @@ #ifndef MAIN_EM_H #define MAIN_EM_H +/* ========================================================================= */ +/* external functions and definitions imported from main program to game_em */ +/* ========================================================================= */ + #include "../engines.h" -/* 2000-07-30T11:06:03Z ---------------------------------------------------- */ - -#define EM_MAX_CAVE_WIDTH 102 -#define EM_MAX_CAVE_HEIGHT 102 - -/* define these for backwards compatibility */ -#define EM_ENGINE_BAD_ROLL -#define EM_ENGINE_BAD_SPRING - - -/* - ----------------------------------------------------------------------------- - definition of elements used in the Emerald Mine Club engine; - the element names have the following properties: - - elements that start with an 'X' can be stored in a level file; - - elements that start with an 'Y' indicate moving elements; - - elements that end with a 'B' are the "backside" of a moving element. - ----------------------------------------------------------------------------- -*/ - -enum -{ - Xblank = 0, /* still */ - Yacid_splash_eB, /* hmm */ - Yacid_splash_wB, /* hmm */ - -#ifdef EM_ENGINE_BAD_ROLL - Xstone_force_e, /* only use these in eater */ - Xstone_force_w, - Xnut_force_e, - Xnut_force_w, - Xspring_force_e, - Xspring_force_w, - Xemerald_force_e, - Xemerald_force_w, - Xdiamond_force_e, - Xdiamond_force_w, - Xbomb_force_e, - Xbomb_force_w, -#endif - - Xstone, - Xstone_pause, - Xstone_fall, - Ystone_s, - Ystone_sB, - Ystone_e, - Ystone_eB, - Ystone_w, - Ystone_wB, - Xnut, - Xnut_pause, - Xnut_fall, - Ynut_s, - Ynut_sB, - Ynut_e, - Ynut_eB, - Ynut_w, - Ynut_wB, - Xbug_n, - Xbug_e, - Xbug_s, - Xbug_w, - Xbug_gon, - Xbug_goe, - Xbug_gos, - Xbug_gow, - Ybug_n, - Ybug_nB, - Ybug_e, - Ybug_eB, - Ybug_s, - Ybug_sB, - Ybug_w, - Ybug_wB, - Ybug_w_n, - Ybug_n_e, - Ybug_e_s, - Ybug_s_w, - Ybug_e_n, - Ybug_s_e, - Ybug_w_s, - Ybug_n_w, - Ybug_stone, - Ybug_spring, - Xtank_n, - Xtank_e, - Xtank_s, - Xtank_w, - Xtank_gon, - Xtank_goe, - Xtank_gos, - Xtank_gow, - Ytank_n, - Ytank_nB, - Ytank_e, - Ytank_eB, - Ytank_s, - Ytank_sB, - Ytank_w, - Ytank_wB, - Ytank_w_n, - Ytank_n_e, - Ytank_e_s, - Ytank_s_w, - Ytank_e_n, - Ytank_s_e, - Ytank_w_s, - Ytank_n_w, - Ytank_stone, - Ytank_spring, - Xandroid, - Xandroid_1_n, - Xandroid_2_n, - Xandroid_1_e, - Xandroid_2_e, - Xandroid_1_w, - Xandroid_2_w, - Xandroid_1_s, - Xandroid_2_s, - Yandroid_n, - Yandroid_nB, - Yandroid_ne, - Yandroid_neB, - Yandroid_e, - Yandroid_eB, - Yandroid_se, - Yandroid_seB, - Yandroid_s, - Yandroid_sB, - Yandroid_sw, - Yandroid_swB, - Yandroid_w, - Yandroid_wB, - Yandroid_nw, - Yandroid_nwB, - Xspring, - Xspring_pause, - Xspring_e, - Xspring_w, - Xspring_fall, - Yspring_s, - Yspring_sB, - Yspring_e, - Yspring_eB, - Yspring_w, - Yspring_wB, - Yspring_kill_e, - Yspring_kill_eB, - Yspring_kill_w, - Yspring_kill_wB, - Xeater_n, - Xeater_e, - Xeater_w, - Xeater_s, - Yeater_n, - Yeater_nB, - Yeater_e, - Yeater_eB, - Yeater_s, - Yeater_sB, - Yeater_w, - Yeater_wB, - Yeater_stone, - Yeater_spring, - Xalien, - Xalien_pause, - Yalien_n, - Yalien_nB, - Yalien_e, - Yalien_eB, - Yalien_s, - Yalien_sB, - Yalien_w, - Yalien_wB, - Yalien_stone, - Yalien_spring, - Xemerald, - Xemerald_pause, - Xemerald_fall, - Xemerald_shine, - Yemerald_s, - Yemerald_sB, - Yemerald_e, - Yemerald_eB, - Yemerald_w, - Yemerald_wB, - Yemerald_eat, - Yemerald_stone, - Xdiamond, - Xdiamond_pause, - Xdiamond_fall, - Xdiamond_shine, - Ydiamond_s, - Ydiamond_sB, - Ydiamond_e, - Ydiamond_eB, - Ydiamond_w, - Ydiamond_wB, - Ydiamond_eat, - Ydiamond_stone, - Xdrip_fall, - Xdrip_stretch, - Xdrip_stretchB, - Xdrip_eat, - Ydrip_s1, - Ydrip_s1B, - Ydrip_s2, - Ydrip_s2B, - Xbomb, - Xbomb_pause, - Xbomb_fall, - Ybomb_s, - Ybomb_sB, - Ybomb_e, - Ybomb_eB, - Ybomb_w, - Ybomb_wB, - Ybomb_eat, - Xballoon, - Yballoon_n, - Yballoon_nB, - Yballoon_e, - Yballoon_eB, - Yballoon_s, - Yballoon_sB, - Yballoon_w, - Yballoon_wB, - Xgrass, - Ygrass_nB, - Ygrass_eB, - Ygrass_sB, - Ygrass_wB, - Xdirt, - Ydirt_nB, - Ydirt_eB, - Ydirt_sB, - Ydirt_wB, - Xacid_ne, - Xacid_se, - Xacid_s, - Xacid_sw, - Xacid_nw, - Xacid_1, - Xacid_2, - Xacid_3, - Xacid_4, - Xacid_5, - Xacid_6, - Xacid_7, - Xacid_8, - Xball_1, - Xball_1B, - Xball_2, - Xball_2B, - Yball_eat, - -#if 1 - Ykey_1_eat, - Ykey_2_eat, - Ykey_3_eat, - Ykey_4_eat, - Ykey_5_eat, - Ykey_6_eat, - Ykey_7_eat, - Ykey_8_eat, - Ylenses_eat, - Ymagnify_eat, - Ygrass_eat, - Ydirt_eat, -#endif - - Xgrow_ns, - Ygrow_ns_eat, - Xgrow_ew, - Ygrow_ew_eat, - Xwonderwall, - XwonderwallB, - Xamoeba_1, - Xamoeba_2, - Xamoeba_3, - Xamoeba_4, - Xamoeba_5, - Xamoeba_6, - Xamoeba_7, - Xamoeba_8, - Xdoor_1, - Xdoor_2, - Xdoor_3, - Xdoor_4, - Xdoor_5, - Xdoor_6, - Xdoor_7, - Xdoor_8, - Xkey_1, - Xkey_2, - Xkey_3, - Xkey_4, - Xkey_5, - Xkey_6, - Xkey_7, - Xkey_8, - Xwind_n, - Xwind_e, - Xwind_s, - Xwind_w, - Xwind_nesw, - Xwind_stop, - Xexit, - Xexit_1, - Xexit_2, - Xexit_3, - Xdynamite, - Ydynamite_eat, - Xdynamite_1, - Xdynamite_2, - Xdynamite_3, - Xdynamite_4, - Xbumper, - XbumperB, - Xwheel, - XwheelB, - Xswitch, - XswitchB, - Xsand, - Xsand_stone, - Xsand_stonein_1, - Xsand_stonein_2, - Xsand_stonein_3, - Xsand_stonein_4, - Xsand_stonesand_1, - Xsand_stonesand_2, - Xsand_stonesand_3, - Xsand_stonesand_4, - Xsand_stoneout_1, - Xsand_stoneout_2, - Xsand_sandstone_1, - Xsand_sandstone_2, - Xsand_sandstone_3, - Xsand_sandstone_4, - Xplant, - Yplant, - Xlenses, - Xmagnify, - Xdripper, - XdripperB, - Xfake_blank, - Xfake_blankB, - Xfake_grass, - Xfake_grassB, - Xfake_door_1, - Xfake_door_2, - Xfake_door_3, - Xfake_door_4, - Xfake_door_5, - Xfake_door_6, - Xfake_door_7, - Xfake_door_8, - -#if 1 - Xfake_acid_1, - Xfake_acid_2, - Xfake_acid_3, - Xfake_acid_4, - Xfake_acid_5, - Xfake_acid_6, - Xfake_acid_7, - Xfake_acid_8, -#endif - - Xsteel_1, - Xsteel_2, - Xsteel_3, - Xsteel_4, - Xwall_1, - Xwall_2, - Xwall_3, - Xwall_4, - Xround_wall_1, - Xround_wall_2, - Xround_wall_3, - Xround_wall_4, - Xdecor_1, - Xdecor_2, - Xdecor_3, - Xdecor_4, - Xdecor_5, - Xdecor_6, - Xdecor_7, - Xdecor_8, - Xdecor_9, - Xdecor_10, - Xdecor_11, - Xdecor_12, - Xalpha_0, - Xalpha_1, - Xalpha_2, - Xalpha_3, - Xalpha_4, - Xalpha_5, - Xalpha_6, - Xalpha_7, - Xalpha_8, - Xalpha_9, - Xalpha_excla, - Xalpha_quote, - Xalpha_comma, - Xalpha_minus, - Xalpha_perio, - Xalpha_colon, - Xalpha_quest, - Xalpha_a, - Xalpha_b, - Xalpha_c, - Xalpha_d, - Xalpha_e, - Xalpha_f, - Xalpha_g, - Xalpha_h, - Xalpha_i, - Xalpha_j, - Xalpha_k, - Xalpha_l, - Xalpha_m, - Xalpha_n, - Xalpha_o, - Xalpha_p, - Xalpha_q, - Xalpha_r, - Xalpha_s, - Xalpha_t, - Xalpha_u, - Xalpha_v, - Xalpha_w, - Xalpha_x, - Xalpha_y, - Xalpha_z, - Xalpha_arrow_e, - Xalpha_arrow_w, - Xalpha_copyr, - - Xboom_bug, /* passed from explode to synchro (linked explosion); - transition to explode_normal */ - Xboom_bomb, /* passed from explode to synchro (linked explosion); - transition to explode_normal */ - Xboom_android, /* passed from explode to synchro; - transition to boom_2 */ - Xboom_1, /* passed from explode to synchro; - transition to boom_2 */ - Xboom_2, /* transition to boom[] */ - - Znormal, /* passed from synchro to explode, only in next[]; - no picture */ - Zdynamite, /* passed from synchro to explode, only in next[]; - no picture */ - Zplayer, /* special code to indicate player; - no picture */ - ZBORDER, /* special code to indicate border; - no picture */ - - TILE_MAX -}; - -enum -{ - SPR_still = 0, - SPR_walk = 1, - SPR_push = 5, - SPR_spray = 9, - - SPR_MAX = 13 -}; - -enum -{ - SAMPLE_blank = 0, /* player walks on blank */ - SAMPLE_roll, /* player pushes stone/bomb/nut/spring */ - SAMPLE_stone, /* stone hits ground */ - SAMPLE_nut, /* nut hits ground */ - SAMPLE_crack, /* stone hits nut */ - SAMPLE_bug, /* bug moves */ - SAMPLE_tank, /* tank moves */ - SAMPLE_android_clone, /* android places something */ - SAMPLE_android_move, /* android moves */ - SAMPLE_spring, /* spring hits ground/wall/bumper, stone hits spring */ - SAMPLE_slurp, /* spring kills alien */ - SAMPLE_eater, /* eater sits */ - SAMPLE_eater_eat, /* eater eats diamond */ - SAMPLE_alien, /* alien moves */ - SAMPLE_collect, /* player collects object */ - SAMPLE_diamond, /* diamond/emerald hits ground */ - SAMPLE_squash, /* stone squashes diamond */ - SAMPLE_wonderfall, /* object falls thru wonderwall */ - SAMPLE_drip, /* drip hits ground */ - SAMPLE_push, /* player pushes balloon/android */ - SAMPLE_dirt, /* player walks on dirt */ - SAMPLE_acid, /* acid splashes */ - SAMPLE_ball, /* ball places something */ - SAMPLE_grow, /* growing wall grows */ - SAMPLE_wonder, /* wonderwall is active */ - SAMPLE_door, /* player goes thru door (gate) */ - SAMPLE_exit_open, /* exit opens */ - SAMPLE_exit_leave, /* player goes into exit */ - SAMPLE_dynamite, /* player places dynamite */ - SAMPLE_tick, /* dynamite ticks */ - SAMPLE_press, /* player presses wheel/wind/switch */ - SAMPLE_wheel, /* wheel moves */ - SAMPLE_boom, /* explosion */ - SAMPLE_time, /* time runs out */ - SAMPLE_die, /* player dies */ - - SAMPLE_MAX -}; - -struct LEVEL -{ - unsigned int home_initial; /* number of players (initial) */ - unsigned int home; /* number of players not yet at home */ - /* 0 == all players at home */ - - unsigned int width; /* playfield width */ - unsigned int height; /* playfield height */ - - unsigned int time_seconds; /* available time (seconds) */ - unsigned int time_initial; /* available time (initial) */ - unsigned int time; /* time remaining (runtime) */ - - boolean killed_out_of_time; /* kill player due to time out */ - - unsigned int required_initial; /* emeralds needed (initial) */ - unsigned int required; /* emeralds needed (runtime) */ - - unsigned int score; /* score */ - - /* all below entries must be filled every time a level is read */ - - unsigned int alien_score; /* score for killing alien */ - unsigned int amoeba_time; /* amoeba speed */ - unsigned int android_move_cnt_initial;/* android move counter (initial) */ - unsigned int android_move_cnt; /* android move counter */ - unsigned int android_move_time; /* android move reset time */ - unsigned int android_clone_cnt_initial;/* android clone counter (initial) */ - unsigned int android_clone_cnt; /* android clone counter */ - unsigned int android_clone_time; /* android clone reset time */ - unsigned int ball_cnt; /* ball counter */ - unsigned int ball_pos; /* ball array pos counter */ - unsigned int ball_random; /* ball is random flag */ - unsigned int ball_state_initial; /* ball active flag (initial) */ - unsigned int ball_state; /* ball active flag */ - unsigned int ball_time; /* ball reset time */ - unsigned int bug_score; /* score for killing bug */ - unsigned int diamond_score; /* score for collecting diamond */ - unsigned int dynamite_score; /* score for collecting dynamite */ - unsigned int eater_pos; /* eater array pos */ - unsigned int eater_score; /* score for killing eater */ - unsigned int emerald_score; /* score for collecting emerald */ - unsigned int exit_score; /* score for entering exit */ - unsigned int key_score; /* score for colleting key */ - unsigned int lenses_cnt_initial; /* lenses counter (initial) */ - unsigned int lenses_cnt; /* lenses counter */ - unsigned int lenses_score; /* score for collecting lenses */ - unsigned int lenses_time; /* lenses reset time */ - unsigned int magnify_cnt_initial; /* magnify counter (initial) */ - unsigned int magnify_cnt; /* magnify counter */ - unsigned int magnify_score; /* score for collecting magnifier */ - unsigned int magnify_time; /* magnify reset time */ - unsigned int nut_score; /* score for cracking nut */ - unsigned int shine_cnt; /* shine counter for emerald/diamond */ - unsigned int slurp_score; /* score for slurping alien */ - unsigned int tank_score; /* score for killing tank */ - unsigned int wheel_cnt_initial; /* wheel counter (initial) */ - unsigned int wheel_cnt; /* wheel counter */ - unsigned int wheel_x_initial; /* wheel x pos (initial) */ - unsigned int wheel_x; /* wheel x pos */ - unsigned int wheel_y_initial; /* wheel y pos (initial) */ - unsigned int wheel_y; /* wheel y pos */ - unsigned int wheel_time; /* wheel reset time */ - unsigned int wind_cnt_initial; /* wind counter (initial) */ - unsigned int wind_cnt; /* wind time counter */ - unsigned int wind_direction_initial; /* wind direction (initial) */ - unsigned int wind_direction; /* wind direction */ - unsigned int wind_time; /* wind reset time */ - unsigned int wonderwall_state_initial;/* wonderwall active flag (initial) */ - unsigned int wonderwall_state; /* wonderwall active flag */ - unsigned int wonderwall_time_initial; /* wonderwall time (initial) */ - unsigned int wonderwall_time; /* wonderwall time */ - unsigned short eater_array[8][9]; /* eater data */ - unsigned short ball_array[8][8]; /* ball data */ - unsigned short android_array[TILE_MAX];/* android clone table */ -}; - -struct PLAYER -{ - unsigned int num; - unsigned int alive_initial; - unsigned int alive; - - unsigned int dynamite; - unsigned int dynamite_cnt; - unsigned int keys; - unsigned int anim; - - unsigned int x_initial; - unsigned int y_initial; - unsigned int x; - unsigned int y; - unsigned int oldx; - unsigned int oldy; - - unsigned int last_move_dir; - - unsigned joy_n:1; - unsigned joy_e:1; - unsigned joy_s:1; - unsigned joy_w:1; - unsigned joy_snap:1; - unsigned joy_drop:1; - unsigned joy_stick:1; - unsigned joy_spin:1; -}; +/* ========================================================================= */ +/* functions and definitions that are exported from game_em to main program */ +/* ========================================================================= */ + +#include "export.h" + + +/* ========================================================================= */ +/* internal functions and definitions that are not exported to main program */ +/* ========================================================================= */ + +#include "global.h" +#include "sample.h" /* ------------------------------------------------------------------------- */ -/* definitions and structures for use by the main game functions */ +/* constant definitions */ /* ------------------------------------------------------------------------- */ /* values for native Emerald Mine game version */ +#define FILE_VERSION_EM_UNKNOWN 0 +#define FILE_VERSION_EM_V1 1 +#define FILE_VERSION_EM_V2 2 #define FILE_VERSION_EM_V3 3 -#define FILE_VERSION_EM_V4 4 +#define FILE_VERSION_EM_V4 4 /* (there really was no version 4) */ #define FILE_VERSION_EM_V5 5 #define FILE_VERSION_EM_V6 6 #define FILE_VERSION_EM_ACTUAL FILE_VERSION_EM_V6 -struct GlobalInfo_EM -{ - Bitmap *screenbuffer; -}; +/* level sizes and positions for EM engine */ + +#define WIDTH EM_MAX_CAVE_WIDTH +#define HEIGHT EM_MAX_CAVE_HEIGHT + +/* screen sizes and positions for EM engine */ + +#define TILESIZE 32 + +extern int TILESIZE_VAR; + +#define TILEX TILESIZE_VAR +#define TILEY TILESIZE_VAR -struct LevelInfo_EM -{ - int file_version; +extern int SCR_FIELDX, SCR_FIELDY; + +#define MAX_BUF_XSIZE (SCR_FIELDX + 2) +#define MAX_BUF_YSIZE (SCR_FIELDY + 2) + +/* often used screen positions */ + +extern int SX, SY; + +#define SXSIZE (SCR_FIELDX * TILEX) +#define SYSIZE (SCR_FIELDY * TILEY) + +/* other settings */ +#define PLAY_ELEMENT_SOUND FALSE + + +/* ------------------------------------------------------------------------- */ +/* macro function definitions */ +/* ------------------------------------------------------------------------- */ - unsigned short cave[EM_MAX_CAVE_WIDTH][EM_MAX_CAVE_HEIGHT]; +#define ROUNDED_DIVIDE(x, y) (((x) + (y) - 1) / (y)) - struct LEVEL *lev; - struct PLAYER *ply1, *ply2; -}; +#define SECONDS_TO_FRAMES(x) ((x) * FRAMES_PER_SECOND) +#define FRAMES_TO_SECONDS(x) ((x) / FRAMES_PER_SECOND) -struct GraphicInfo_EM -{ - Bitmap *bitmap; - int src_x, src_y; - int src_offset_x, src_offset_y; - int dst_offset_x, dst_offset_y; - int width, height; +#define SECONDS_TO_CYCLES(x) ROUNDED_DIVIDE((x) * FRAMES_PER_SECOND, 8) +#define CYCLES_TO_SECONDS(x) ROUNDED_DIVIDE((x) * 8, FRAMES_PER_SECOND) - Bitmap *crumbled_bitmap; - int crumbled_src_x, crumbled_src_y; - int crumbled_border_size; +#define DISPLAY_TIME(x) ROUNDED_DIVIDE(x, FRAMES_PER_SECOND) - boolean has_crumbled_graphics; - boolean preserve_background; - int unique_identifier; /* used to identify needed screen updates */ -}; +/* ------------------------------------------------------------------------- */ +/* data structure definitions */ +/* ------------------------------------------------------------------------- */ + +/* ------------------------------------------------------------------------- */ +/* exported variables */ +/* ------------------------------------------------------------------------- */ + +extern unsigned int RandomEM; + +extern struct LEVEL lev; +extern struct PLAYER ply[MAX_PLAYERS]; + +extern struct LevelInfo_EM native_em_level; +extern struct GraphicInfo_EM graphic_info_em_object[TILE_MAX][8]; +extern struct GraphicInfo_EM graphic_info_em_player[MAX_PLAYERS][SPR_MAX][8]; + +extern short **Boom; +extern short **Cave; +extern short **Next; +extern short **Draw; + +extern struct GameInfo_EM game_em; + +extern unsigned char tab_blank[TILE_MAX]; +extern unsigned char tab_acid[TILE_MAX]; +extern unsigned char tab_amoeba[TILE_MAX]; +extern unsigned char tab_android_move[TILE_MAX]; +extern unsigned short tab_explode_normal[TILE_MAX]; +extern unsigned short tab_explode_dynamite[TILE_MAX]; + +extern unsigned short map_obj[8][TILE_MAX]; +extern unsigned short map_spr[2][8][SPR_MAX]; +extern unsigned short map_ttl[128]; + +extern Bitmap *screenBitmap; +extern Bitmap *scoreBitmap; + +extern Bitmap *objBitmap; +extern Bitmap *sprBitmap; +extern Bitmap *ttlBitmap; +extern Bitmap *botBitmap; + + +/* ------------------------------------------------------------------------- */ +/* exported functions */ +/* ------------------------------------------------------------------------- */ #endif /* MAIN_EM_H */