X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.c;h=4e4f38ac98d24a8a3094e0b529847780bcf5dff0;hb=be2766c926ff78b2985565fd9c12390eb5655112;hp=7cb246320a9febf64a608a66fe714d4d98065ac8;hpb=ee0895b12e544444db37febb1242bcc8a72d6ad8;p=rocksndiamonds.git diff --git a/src/main.c b/src/main.c index 7cb24632..4e4f38ac 100644 --- a/src/main.c +++ b/src/main.c @@ -19,63 +19,68 @@ #include "events.h" #if 0 -GC tile_clip_gc; -Bitmap *pix[NUM_BITMAPS]; +GC tile_clip_gc; +Bitmap *pix[NUM_BITMAPS]; #endif -Bitmap *bitmap_db_field, *bitmap_db_door; +Bitmap *bitmap_db_field, *bitmap_db_door; #if 0 -Pixmap tile_clipmask[NUM_TILES]; +Pixmap tile_clipmask[NUM_TILES]; #endif -DrawBuffer *fieldbuffer; -DrawBuffer *drawto_field; +DrawBuffer *fieldbuffer; +DrawBuffer *drawto_field; -int game_status = MAINMENU; -boolean level_editor_test_game = FALSE; -boolean network_playing = FALSE; +int game_status = MAINMENU; +boolean level_editor_test_game = FALSE; +boolean network_playing = FALSE; -int key_joystick_mapping = 0; +int key_joystick_mapping = 0; -boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; -int redraw_x1 = 0, redraw_y1 = 0; +boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; +int redraw_x1 = 0, redraw_y1 = 0; -short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA]; -short ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short AmoebaCnt[MAX_NUM_AMOEBA]; +short AmoebaCnt2[MAX_NUM_AMOEBA]; +short ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -unsigned long Properties1[MAX_NUM_ELEMENTS]; -unsigned long Properties2[MAX_NUM_ELEMENTS]; +unsigned long Properties1[MAX_NUM_ELEMENTS]; +unsigned long Properties2[MAX_NUM_ELEMENTS]; -int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -short GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +short GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -int lev_fieldx,lev_fieldy, scroll_x,scroll_y; +int lev_fieldx, lev_fieldy; +int scroll_x, scroll_y; -int FX = SX, FY = SY, ScrollStepSize; -int ScreenMovDir = MV_NO_MOVING, ScreenMovPos = 0; -int ScreenGfxPos = 0; -int BorderElement = EL_STEELWALL; -int GameFrameDelay = GAME_FRAME_DELAY; -int FfwdFrameDelay = FFWD_FRAME_DELAY; -int BX1 = 0, BY1 = 0, BX2 = SCR_FIELDX-1, BY2 = SCR_FIELDY-1; -int SBX_Left, SBX_Right; -int SBY_Upper, SBY_Lower; -int ZX,ZY, ExitX,ExitY; -int AllPlayersGone; +int FX = SX, FY = SY; +int ScrollStepSize; +int ScreenMovDir = MV_NO_MOVING, ScreenMovPos = 0; +int ScreenGfxPos = 0; +int BorderElement = EL_STEELWALL; +int GameFrameDelay = GAME_FRAME_DELAY; +int FfwdFrameDelay = FFWD_FRAME_DELAY; +int BX1 = 0, BY1 = 0; +int BX2 = SCR_FIELDX - 1, BY2 = SCR_FIELDY - 1; +int SBX_Left, SBX_Right; +int SBY_Upper, SBY_Lower; +int ZX, ZY; +int ExitX, ExitY; +int AllPlayersGone; -int TimeFrames, TimePlayed, TimeLeft; +int TimeFrames, TimePlayed, TimeLeft; -boolean network_player_action_received = FALSE; +boolean network_player_action_received = FALSE; struct LevelInfo level; struct PlayerInfo stored_player[MAX_PLAYERS], *local_player = NULL; @@ -86,6 +91,13 @@ struct GameInfo game; struct GlobalInfo global; struct FileInfo *image_files; struct FileInfo *sound_files; +struct GraphicInfo graphic_info[NUM_IMAGE_FILES]; +struct SoundInfo sound_info[NUM_SOUND_FILES]; + + +/* ------------------------------------------------------------------------- */ +/* element definitions */ +/* ------------------------------------------------------------------------- */ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = { @@ -405,7 +417,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "unused_63", - NULL, + "unused", "(not used)" }, { @@ -624,7 +636,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "black_orb", - NULL, + "black_orb", "black orb bomb" }, { @@ -649,22 +661,22 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "arrow_blue_left", - NULL, + "arrow", "arrow left" }, { "arrow_blue_right", - NULL, + "arrow", "arrow right" }, { "arrow_blue_up", - NULL, + "arrow", "arrow up" }, { "arrow_blue_down", - NULL, + "arrow", "arrow down" }, { @@ -684,402 +696,402 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "char_space", - NULL, + "char", "letter ' '" }, { "char_exclam", - NULL, + "char", "letter '!'" }, { "char_quotedbl", - NULL, + "char", "letter '\"'" }, { "char_numbersign", - NULL, + "char", "letter '#'" }, { "char_dollar", - NULL, + "char", "letter '$'" }, { "char_procent", - NULL, + "char", "letter '%'" }, { "char_ampersand", - NULL, + "char", "letter '&'" }, { "char_apostrophe", - NULL, + "char", "letter '''" }, { "char_parenleft", - NULL, + "char", "letter '('" }, { "char_parenright", - NULL, + "char", "letter ')'" }, { "char_asterisk", - NULL, + "char", "letter '*'" }, { "char_plus", - NULL, + "char", "letter '+'" }, { "char_comma", - NULL, + "char", "letter ','" }, { "char_minus", - NULL, + "char", "letter '-'" }, { "char_period", - NULL, + "char", "letter '.'" }, { "char_slash", - NULL, + "char", "letter '/'" }, { "char_0", - NULL, + "char", "letter '0'" }, { "char_1", - NULL, + "char", "letter '1'" }, { "char_2", - NULL, + "char", "letter '2'" }, { "char_3", - NULL, + "char", "letter '3'" }, { "char_4", - NULL, + "char", "letter '4'" }, { "char_5", - NULL, + "char", "letter '5'" }, { "char_6", - NULL, + "char", "letter '6'" }, { "char_7", - NULL, + "char", "letter '7'" }, { "char_8", - NULL, + "char", "letter '8'" }, { "char_9", - NULL, + "char", "letter '9'" }, { "char_colon", - NULL, + "char", "letter ':'" }, { "char_semicolon", - NULL, + "char", "letter ';'" }, { "char_less", - NULL, + "char", "letter '<'" }, { "char_equal", - NULL, + "char", "letter '='" }, { "char_greater", - NULL, + "char", "letter '>'" }, { "char_question", - NULL, + "char", "letter '?'" }, { "char_at", - NULL, + "char", "letter '@'" }, { "char_a", - NULL, + "char", "letter 'A'" }, { "char_b", - NULL, + "char", "letter 'B'" }, { "char_c", - NULL, + "char", "letter 'C'" }, { "char_d", - NULL, + "char", "letter 'D'" }, { "char_e", - NULL, + "char", "letter 'E'" }, { "char_f", - NULL, + "char", "letter 'F'" }, { "char_g", - NULL, + "char", "letter 'G'" }, { "char_h", - NULL, + "char", "letter 'H'" }, { "char_i", - NULL, + "char", "letter 'I'" }, { "char_j", - NULL, + "char", "letter 'J'" }, { "char_k", - NULL, + "char", "letter 'K'" }, { "char_l", - NULL, + "char", "letter 'L'" }, { "char_m", - NULL, + "char", "letter 'M'" }, { "char_n", - NULL, + "char", "letter 'N'" }, { "char_o", - NULL, + "char", "letter 'O'" }, { "char_p", - NULL, + "char", "letter 'P'" }, { "char_q", - NULL, + "char", "letter 'Q'" }, { "char_r", - NULL, + "char", "letter 'R'" }, { "char_s", - NULL, + "char", "letter 'S'" }, { "char_t", - NULL, + "char", "letter 'T'" }, { "char_u", - NULL, + "char", "letter 'U'" }, { "char_v", - NULL, + "char", "letter 'V'" }, { "char_w", - NULL, + "char", "letter 'W'" }, { "char_x", - NULL, + "char", "letter 'X'" }, { "char_y", - NULL, + "char", "letter 'Y'" }, { "char_z", - NULL, + "char", "letter 'Z'" }, { "char_ae", - NULL, + "char", "letter 'Ä'" }, { "char_oe", - NULL, + "char", "letter 'Ö'" }, { "char_ue", - NULL, + "char", "letter 'Ü'" }, { "char_copyright", - NULL, + "char", "letter '^'" }, { "char_underscore", - NULL, + "char", "letter ''" }, { "char_empty", - NULL, + "char", "letter ''" }, { "char_degree", - NULL, + "char", "letter ''" }, { "char_tm", - NULL, + "char", "letter ''" }, { "char_cursor", - NULL, + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { - NULL, - NULL, + "char_unused", + "char", "letter ''" }, { @@ -1354,12 +1366,12 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "unused_254", - NULL, + "unused", "(not used)" }, { "unused_255", - NULL, + "unused", "(not used)" }, { @@ -1429,12 +1441,12 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "unused_269", - NULL, + "unused", "-" }, { "unused_270", - NULL, + "unused", "-" }, { @@ -1669,22 +1681,22 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "dx_unknown_15", - NULL, + "unknown", "dx unknown element 15" }, { "dx_unknown_42", - NULL, + "unknown", "dx unknown element 42" }, { "unused_319", - NULL, + "unused", "(not used)" }, { "unused_320", - NULL, + "unused", "(not used)" }, { @@ -1874,12 +1886,12 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { "unused_358", - NULL, + "unused", "-" }, { "unused_359", - NULL, + "unused", "-" }, { @@ -2752,7 +2764,7 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = }, { - "", + NULL, NULL, "-" } @@ -2760,34 +2772,45 @@ struct ElementInfo element_info[MAX_NUM_ELEMENTS] = /* ------------------------------------------------------------------------- */ -/* sound definitions */ +/* element action and direction definitions */ /* ------------------------------------------------------------------------- */ -struct SoundActionProperties sound_action_properties[] = +struct ElementActionInfo element_action_info[] = { - /* insert _all_ loop sound actions here */ - { ".waiting", ACTION_WAITING, TRUE }, - { ".moving", ACTION_MOVING, TRUE }, /* continuos moving */ - { ".active", ACTION_ACTIVE, TRUE }, - { ".growing", ACTION_GROWING, TRUE }, - { ".attacking", ACTION_ATTACKING, TRUE }, + { ".[DEFAULT]", ACTION_DEFAULT, TRUE }, + { ".waiting", ACTION_WAITING, TRUE }, + { ".falling", ACTION_FALLING, TRUE }, + { ".moving", ACTION_MOVING, TRUE }, + { ".digging", ACTION_DIGGING, FALSE }, + { ".snapping", ACTION_SNAPPING, FALSE }, + { ".collecting", ACTION_COLLECTING, FALSE }, + { ".pushing", ACTION_PUSHING, FALSE }, + { ".passing", ACTION_PASSING, FALSE }, + { ".impact", ACTION_IMPACT, FALSE }, + { ".cracking", ACTION_CRACKING, FALSE }, + { ".breaking", ACTION_BREAKING, FALSE }, + { ".activating", ACTION_ACTIVATING, FALSE }, + { ".opening", ACTION_OPENING, FALSE }, + { ".closing", ACTION_CLOSING, FALSE }, + { ".eating", ACTION_EATING, FALSE }, + { ".attacking", ACTION_ATTACKING, TRUE }, + { ".growing", ACTION_GROWING, TRUE }, + { ".shrinking", ACTION_SHRINKING, FALSE }, + { ".active", ACTION_ACTIVE, TRUE }, + { ".other", ACTION_OTHER, FALSE }, - /* other (non-loop) sound actions are optional */ -#if 0 - { ".stepping", ACTION_MOVING, FALSE }, /* discrete moving */ -#endif - { ".digging", ACTION_DIGGING, FALSE }, - { ".collecting", ACTION_COLLECTING, FALSE }, - { ".passing", ACTION_PASSING, FALSE }, - { ".impact", ACTION_IMPACT, FALSE }, - { ".pushing", ACTION_PUSHING, FALSE }, - { ".activating", ACTION_ACTIVATING, FALSE }, - { NULL, 0, 0 }, + { NULL, 0, 0 }, }; +struct ElementDirectionInfo element_direction_info[] = +{ + { ".left", MV_BIT_LEFT }, + { ".right", MV_BIT_RIGHT }, + { ".up", MV_BIT_UP }, + { ".down", MV_BIT_DOWN }, -struct GraphicInfo graphic_info[NUM_IMAGE_FILES]; -struct SoundInfo sound_info[NUM_SOUND_FILES]; + { NULL, 0 }, +}; /* ========================================================================= */