improved smooth movement animation for BD engine (complete rewrite)
[rocksndiamonds.git] / src / game_bd / export_bd.h
1 // ============================================================================
2 // Rocks'n'Diamonds - McDuffin Strikes Back!
3 // ----------------------------------------------------------------------------
4 // (c) 1995-2024 by Artsoft Entertainment
5 //                  Holger Schemel
6 //                  info@artsoft.org
7 //                  https://www.artsoft.org/
8 // ----------------------------------------------------------------------------
9 // export_bd.h
10 // ============================================================================
11
12 #ifndef EXPORT_BD_H
13 #define EXPORT_BD_H
14
15 // ============================================================================
16 // functions and definitions exported from game_bd to main program
17 // ============================================================================
18
19 #include "bd_cave.h"
20 #include "bd_elements.h"
21 #include "bd_gameplay.h"
22
23
24 // ----------------------------------------------------------------------------
25 // constant definitions
26 // ----------------------------------------------------------------------------
27
28 #define BD_MAX_CAVE_WIDTH               MAX_PLAYFIELD_WIDTH
29 #define BD_MAX_CAVE_HEIGHT              MAX_PLAYFIELD_HEIGHT
30
31
32 // ----------------------------------------------------------------------------
33 // data structure definitions
34 // ----------------------------------------------------------------------------
35
36 struct GameInfo_BD
37 {
38   GdGame *game;
39
40   unsigned int random_seed;
41
42   boolean level_solved;
43   boolean game_over;
44   boolean cover_screen;
45
46   boolean player_moving;
47   boolean player_snapping;
48
49   // needed for updating panel
50   int time_left;
51   int gems_still_needed;
52   int score;
53
54   // needed for saving score time
55   int frames_played;
56 };
57
58 struct LevelInfo_BD
59 {
60   GdCave *cave;
61   GdReplay *replay;
62
63   int cave_nr;
64   int level_nr;
65
66   boolean loaded_from_caveset;
67 };
68
69 struct GraphicInfo_BD
70 {
71   Bitmap *bitmap;
72   int src_x, src_y;
73   int width, height;
74
75   int graphic;
76   int frame;
77 };
78
79 struct EngineSnapshotInfo_BD
80 {
81   GdGame game;
82
83   // data from pointers in game structure
84   int element_buffer[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
85   int last_element_buffer[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
86   int dir_buffer_from[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
87   int dir_buffer_to[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
88   int gfx_buffer[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
89
90   GdCave cave;
91
92   // data from pointers in cave structure
93   short map[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
94   short hammered_reappear[MAX_PLAYFIELD_WIDTH][MAX_PLAYFIELD_HEIGHT];
95 };
96
97
98 // ----------------------------------------------------------------------------
99 // exported functions
100 // ----------------------------------------------------------------------------
101
102 extern struct GameInfo_BD game_bd;
103 extern struct LevelInfo_BD native_bd_level;
104 extern struct GraphicInfo_BD graphic_info_bd_object[O_MAX_ALL][8];
105 extern struct GraphicInfo_BD graphic_info_bd_color_template;
106 extern struct EngineSnapshotInfo_BD engine_snapshot_bd;
107
108 void bd_open_all(void);
109 void bd_close_all(void);
110
111 int map_action_RND_to_BD(int);
112 int map_action_BD_to_RND(int);
113
114 boolean checkGameRunning_BD(void);
115 boolean checkGamePlaying_BD(void);
116 boolean checkBonusTime_BD(void);
117 int getFramesPerSecond_BD(void);
118 int getTimeLeft_BD(void);
119 void SetTimeFrames_BD(int);
120
121 void InitGfxBuffers_BD(void);
122
123 void setLevelInfoToDefaults_BD_Ext(int, int);
124 void setLevelInfoToDefaults_BD(void);
125 boolean LoadNativeLevel_BD(char *, int, boolean);
126 boolean SaveNativeLevel_BD(char *);
127 void DumpLevelset_BD(void);
128
129 void PreparePreviewTileBitmap_BD(Bitmap *, int);
130 void SetPreviewTileBitmapReference_BD(Bitmap *);
131 Bitmap *GetPreviewTileBitmap_BD(Bitmap *);
132
133 unsigned int InitEngineRandom_BD(int);
134 void InitGameEngine_BD(void);
135 void GameActions_BD(byte[MAX_PLAYERS]);
136
137 boolean use_native_bd_graphics_engine(void);
138 boolean use_bd_smooth_movements(void);
139 boolean use_bd_pushing_graphics(void);
140 boolean use_bd_up_down_graphics(void);
141 boolean use_bd_falling_sounds(void);
142
143 boolean hasColorTemplate_BD(void);
144
145 Bitmap **GetTitleScreenBitmaps_BD(void);
146 void CoverScreen_BD(void);
147
148 void BlitScreenToBitmap_BD(Bitmap *);
149 void RedrawPlayfield_BD(boolean);
150
151 void SaveEngineSnapshotValues_BD(void);
152 void LoadEngineSnapshotValues_BD(void);
153
154 #endif  // EXPORT_BD_H