X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fmain.h;h=31264e0345dbc73b994973a000ee2883729a853e;hb=ff2510f5098b545a03965c6b95296eec6885a4fb;hp=efbb577463a668522c5fed921d37a33244e78c44;hpb=69eca5c908598155bf3f5d1fa74e73ff9e2bbbc9;p=rocksndiamonds.git diff --git a/src/main.h b/src/main.h index efbb5774..31264e03 100644 --- a/src/main.h +++ b/src/main.h @@ -38,24 +38,24 @@ #define SND_UNDEFINED (-1) -#define WIN_XSIZE 672 -#define WIN_YSIZE 560 - -#define SCR_FIELDX 17 -#define SCR_FIELDY 17 -#define MAX_BUF_XSIZE (SCR_FIELDX + 2) -#define MAX_BUF_YSIZE (SCR_FIELDY + 2) -#define MIN_LEV_FIELDX 3 -#define MIN_LEV_FIELDY 3 -#define STD_LEV_FIELDX 64 -#define STD_LEV_FIELDY 32 -#define MAX_LEV_FIELDX 128 -#define MAX_LEV_FIELDY 128 - -#define SCREENX(a) ((a) - scroll_x) -#define SCREENY(a) ((a) - scroll_y) -#define LEVELX(a) ((a) + scroll_x) -#define LEVELY(a) ((a) + scroll_y) +#define WIN_XSIZE 672 +#define WIN_YSIZE 560 + +#define SCR_FIELDX 17 +#define SCR_FIELDY 17 +#define MAX_BUF_XSIZE (SCR_FIELDX + 2) +#define MAX_BUF_YSIZE (SCR_FIELDY + 2) +#define MIN_LEV_FIELDX 3 +#define MIN_LEV_FIELDY 3 +#define STD_LEV_FIELDX 64 +#define STD_LEV_FIELDY 32 +#define MAX_LEV_FIELDX 128 +#define MAX_LEV_FIELDY 128 + +#define SCREENX(a) ((a) - scroll_x) +#define SCREENY(a) ((a) - scroll_y) +#define LEVELX(a) ((a) + scroll_x) +#define LEVELY(a) ((a) + scroll_y) #define IN_VIS_FIELD(x,y) ((x)>=0 && (x)=0 &&(y)=BX1 && (x)<=BX2 && (y)>=BY1 &&(y)<=BY2) #define IN_LEV_FIELD(x,y) ((x)>=0 && (x)=0 &&(y) 1) +#define IS_NEW_DELAY(f, g) ((f) % ANIM_DELAY(g) == 0) +#define IS_NEW_FRAME(f, g) (IS_ANIMATED(g) && IS_NEW_DELAY(f, g)) + +#define IS_LOOP_SOUND(s) (sound_info[s].loop) + #if 0 @@ -744,19 +754,23 @@ #define EL_AMOEBA_DRY_PART2 (EL_FIRST_DUMMY + 22) #define EL_AMOEBA_DRY_PART3 (EL_FIRST_DUMMY + 23) #define EL_AMOEBA_DRY_PART4 (EL_FIRST_DUMMY + 24) -#define EL_AMOEBA_DEAD_PART1 (EL_FIRST_DUMMY + 25) -#define EL_AMOEBA_DEAD_PART2 (EL_FIRST_DUMMY + 26) -#define EL_AMOEBA_DEAD_PART3 (EL_FIRST_DUMMY + 27) -#define EL_AMOEBA_DEAD_PART4 (EL_FIRST_DUMMY + 28) -#define EL_DYNABOMB_ACTIVE (EL_FIRST_DUMMY + 29) -#define EL_SHIELD_NORMAL_ACTIVE (EL_FIRST_DUMMY + 30) -#define EL_SHIELD_DEADLY_ACTIVE (EL_FIRST_DUMMY + 31) -#define EL_ARROW_RED_LEFT (EL_FIRST_DUMMY + 32) -#define EL_ARROW_RED_RIGHT (EL_FIRST_DUMMY + 33) -#define EL_ARROW_RED_UP (EL_FIRST_DUMMY + 34) -#define EL_ARROW_RED_DOWN (EL_FIRST_DUMMY + 35) - -#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 36) +#define EL_AMOEBA_FULL_PART1 (EL_FIRST_DUMMY + 25) +#define EL_AMOEBA_FULL_PART2 (EL_FIRST_DUMMY + 26) +#define EL_AMOEBA_FULL_PART3 (EL_FIRST_DUMMY + 27) +#define EL_AMOEBA_FULL_PART4 (EL_FIRST_DUMMY + 28) +#define EL_AMOEBA_DEAD_PART1 (EL_FIRST_DUMMY + 29) +#define EL_AMOEBA_DEAD_PART2 (EL_FIRST_DUMMY + 30) +#define EL_AMOEBA_DEAD_PART3 (EL_FIRST_DUMMY + 31) +#define EL_AMOEBA_DEAD_PART4 (EL_FIRST_DUMMY + 32) +#define EL_DYNABOMB_ACTIVE (EL_FIRST_DUMMY + 33) +#define EL_SHIELD_NORMAL_ACTIVE (EL_FIRST_DUMMY + 34) +#define EL_SHIELD_DEADLY_ACTIVE (EL_FIRST_DUMMY + 35) +#define EL_ARROW_RED_LEFT (EL_FIRST_DUMMY + 36) +#define EL_ARROW_RED_RIGHT (EL_FIRST_DUMMY + 37) +#define EL_ARROW_RED_UP (EL_FIRST_DUMMY + 38) +#define EL_ARROW_RED_DOWN (EL_FIRST_DUMMY + 39) + +#define MAX_NUM_ELEMENTS (EL_FIRST_DUMMY + 40) /* values for graphics/sounds action types */ @@ -784,6 +798,11 @@ #define NUM_ACTIONS 21 +/* values for special image configuration suffixes */ +#define GFX_SPECIAL_ARG_EDITOR 0 + +#define NUM_SPECIAL_GFX_ARGS 1 + /* values for image configuration suffixes */ #define GFX_ARG_XPOS 0 @@ -805,12 +824,11 @@ #define NUM_GFX_ARGS 16 -#define GFX_ARG_UNDEFINED "-1000000" -#define GFX_ARG_UNDEFINED_VALUE (atoi(GFX_ARG_UNDEFINED)) - /* values for sound configuration suffixes */ -/* (currently none) */ +#define SND_ARG_MODE_LOOP 0 + +#define NUM_SND_ARGS 1 /* values for game_status */ @@ -1028,14 +1046,17 @@ struct GlobalInfo struct ElementInfo { - char *token_name; /* element token used in config files */ + char *token_name; /* element token prefix used in config files */ char *sound_class_name; /* classification for custom sound effects */ char *editor_description; /* short description for level editor */ + char *custom_description; /* custom description for level editor */ int graphic[NUM_ACTIONS]; /* default graphics for several actions */ /* special graphics for left/right/up/down */ int direction_graphic[NUM_ACTIONS][NUM_DIRECTIONS]; + int editor_graphic; /* graphic displayed in level editor */ + int sound[NUM_ACTIONS]; /* default sounds for several actions */ }; @@ -1061,73 +1082,91 @@ struct SoundInfo boolean loop; }; -struct SoundActionProperties +struct ElementActionInfo +{ + char *suffix; + int value; + boolean is_loop_sound; +}; + +struct ElementDirectionInfo +{ + char *suffix; + int value; +}; + +struct SpecialSuffixInfo { - char *text; + char *suffix; int value; - boolean is_loop; }; #if 0 -extern GC tile_clip_gc; -extern Bitmap *pix[]; +extern GC tile_clip_gc; +extern Bitmap *pix[]; #endif -extern Bitmap *bitmap_db_field, *bitmap_db_door; -extern Pixmap tile_clipmask[]; -extern DrawBuffer *fieldbuffer; -extern DrawBuffer *drawto_field; - -extern int game_status; -extern boolean level_editor_test_game; -extern boolean network_playing; - -extern int key_joystick_mapping; - -extern boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; -extern int redraw_x1, redraw_y1; - -extern short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA]; -extern short ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; - -extern unsigned long Properties1[MAX_NUM_ELEMENTS]; -extern unsigned long Properties2[MAX_NUM_ELEMENTS]; - -extern int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; -extern short GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; - -extern int lev_fieldx,lev_fieldy, scroll_x,scroll_y; - -extern int FX,FY, ScrollStepSize; -extern int ScreenMovDir, ScreenMovPos, ScreenGfxPos; -extern int BorderElement; -extern int GameFrameDelay; -extern int FfwdFrameDelay; -extern int BX1,BY1, BX2,BY2; -extern int SBX_Left, SBX_Right; -extern int SBY_Upper, SBY_Lower; -extern int ZX,ZY, ExitX,ExitY; -extern int AllPlayersGone; - -extern int TimeFrames, TimePlayed, TimeLeft; -extern boolean SiebAktiv; -extern int SiebCount; - -extern boolean network_player_action_received; - -extern int graphics_action_mapping[]; +extern Bitmap *bitmap_db_field, *bitmap_db_door; +extern Pixmap tile_clipmask[]; +extern DrawBuffer *fieldbuffer; +extern DrawBuffer *drawto_field; + +extern int game_status; +extern boolean level_editor_test_game; +extern boolean network_playing; + +extern int key_joystick_mapping; + +extern boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE]; +extern int redraw_x1, redraw_y1; + +extern short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short MovPos[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short MovDir[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short MovDelay[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short AmoebaCnt[MAX_NUM_AMOEBA]; +extern short AmoebaCnt2[MAX_NUM_AMOEBA]; +extern short ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; + +extern unsigned long Properties1[MAX_NUM_ELEMENTS]; +extern unsigned long Properties2[MAX_NUM_ELEMENTS]; + +extern int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern int GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; +extern int GfxRandom[MAX_LEV_FIELDX][MAX_LEV_FIELDY]; + +extern int lev_fieldx, lev_fieldy; +extern int scroll_x, scroll_y; + +extern int FX, FY; +extern int ScrollStepSize; +extern int ScreenMovDir, ScreenMovPos, ScreenGfxPos; +extern int BorderElement; +extern int GameFrameDelay; +extern int FfwdFrameDelay; +extern int BX1, BY1; +extern int BX2, BY2; +extern int SBX_Left, SBX_Right; +extern int SBY_Upper, SBY_Lower; +extern int ZX, ZY; +extern int ExitX, ExitY; +extern int AllPlayersGone; + +extern int TimeFrames, TimePlayed, TimeLeft; +extern boolean SiebAktiv; +extern int SiebCount; + +extern boolean network_player_action_received; + +extern int graphics_action_mapping[]; extern struct LevelInfo level; extern struct PlayerInfo stored_player[], *local_player; @@ -1136,11 +1175,12 @@ extern struct TapeInfo tape; extern struct GameInfo game; extern struct GlobalInfo global; extern struct ElementInfo element_info[]; -extern struct GraphicInfo graphic_info[]; -extern struct SoundInfo sound_info[]; -extern struct SoundActionProperties sound_action_properties[]; +extern struct ElementActionInfo element_action_info[]; +extern struct ElementDirectionInfo element_direction_info[]; +extern struct SpecialSuffixInfo special_suffix_info[]; +extern struct GraphicInfo *graphic_info; +extern struct SoundInfo *sound_info; extern struct ConfigInfo image_config[], sound_config[]; extern struct ConfigInfo image_config_suffix[], sound_config_suffix[]; -extern struct FileInfo *image_files, *sound_files; #endif /* MAIN_H */