rnd-20100220-1-src
[rocksndiamonds.git] / src / game_sp / export.h
1 #ifndef GAME_SP_EXPORT_H
2 #define GAME_SP_EXPORT_H
3
4 /* ========================================================================= */
5 /* functions and definitions exported from game_sp to main program           */
6 /* ========================================================================= */
7
8 /* ------------------------------------------------------------------------- */
9 /* constant definitions                                                      */
10 /* ------------------------------------------------------------------------- */
11
12 #define SP_MAX_PLAYFIELD_WIDTH          MAX_PLAYFIELD_WIDTH
13 #define SP_MAX_PLAYFIELD_HEIGHT         MAX_PLAYFIELD_HEIGHT
14
15 #define SP_NUM_LEVELS_PER_PACKAGE       111
16
17 #define SP_STD_PLAYFIELD_WIDTH          60
18 #define SP_STD_PLAYFIELD_HEIGHT         24
19 #define SP_LEVEL_NAME_LEN               23
20 #define SP_MAX_SPECIAL_PORTS            10
21
22 #define SP_HEADER_SIZE                  96
23 #define SP_STD_PLAYFIELD_SIZE           (SP_STD_PLAYFIELD_WIDTH *       \
24                                          SP_STD_PLAYFIELD_HEIGHT)
25 #define SP_MAX_PLAYFIELD_SIZE           (SP_MAX_PLAYFIELD_WIDTH *       \
26                                          SP_MAX_PLAYFIELD_HEIGHT)
27 #define SP_STD_LEVEL_SIZE               (SP_HEADER_SIZE + SP_STD_PLAYFIELD_SIZE)
28
29 #if 0
30 #define SP_SCREEN_BUFFER_XSIZE          (SCR_FIELDX + 2)
31 #define SP_SCREEN_BUFFER_YSIZE          (SCR_FIELDY + 2)
32 #endif
33
34 #define SP_FRAMES_PER_SECOND            35
35 #define SP_MAX_TAPE_LEN                 64010   /* (see "spfix63.doc") */
36
37
38 /* ------------------------------------------------------------------------- */
39 /* data structure definitions                                                */
40 /* ------------------------------------------------------------------------- */
41
42 #ifndef HAS_SpecialPortType
43 typedef struct
44 {
45 #if 1
46   short PortLocation; // = 2*(x+(y*60))         /* big endian format */
47 #else
48   int PortLocation; // = 2*(x+(y*60))
49 #endif
50   byte Gravity; // 1 = turn on, anything else (0) = turn off
51   byte FreezeZonks; // 2 = turn on, anything else (0) = turn off  (1=off!)
52   byte FreezeEnemies; // 1 = turn on, anything else (0) = turn off
53   byte UnUsed;
54 } SpecialPortType;
55 #define HAS_SpecialPortType
56 #endif
57
58 #ifndef HAS_LevelInfoType
59 typedef struct
60 {
61   byte UnUsed[4];
62   byte InitialGravity; // 1=on, anything else (0) = off
63   byte Version; // SpeedFixVersion XOR &H20
64   char LevelTitle[23];
65   byte InitialFreezeZonks; // 2=on, anything else (0) = off.  (1=off too!)
66   byte InfotronsNeeded;
67
68   // Number of Infotrons needed. 0 means that Supaplex will count the total
69   // amount of Infotrons in the level, and use the low byte of that number.
70   // (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)
71   byte SpecialPortCount; // Maximum 10 allowed!
72   SpecialPortType SpecialPort[10];
73   byte SpeedByte; // = Speed XOR Highbyte(RandomSeed)
74   byte CheckSumByte; // = CheckSum XOR SpeedByte
75 #if 1
76   short DemoRandomSeed;                         /* little endian format */
77 #else
78   int DemoRandomSeed;
79 #endif
80 } LevelInfoType;
81 #define HAS_LevelInfoType
82 #endif
83
84 struct GlobalInfo_SP
85 {
86 };
87
88 struct GameInfo_SP
89 {
90   boolean LevelSolved;
91   boolean GameOver;
92
93   /* needed for engine snapshots */
94   int preceding_buffer_size;
95 };
96
97 struct DemoInfo_SP
98 {
99   boolean is_available;         /* structure contains valid demo */
100
101   int level_nr;                 /* number of corresponding level */
102
103   int length;                   /* number of demo entries */
104   byte data[SP_MAX_TAPE_LEN];   /* array of demo entries */
105 };
106
107 struct LevelInfo_SP
108 {
109   LevelInfoType header;
110   byte header_raw_bytes[SP_HEADER_SIZE];
111
112   int width, height;
113
114   byte playfield[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
115
116   struct DemoInfo_SP demo;
117 };
118
119 struct GraphicInfo_SP
120 {
121   Bitmap *bitmap;
122   int src_x, src_y;
123   int src_offset_x, src_offset_y;
124   int dst_offset_x, dst_offset_y;
125   int width, height;
126
127   Bitmap *crumbled_bitmap;
128   int crumbled_src_x, crumbled_src_y;
129   int crumbled_border_size;
130
131   boolean has_crumbled_graphics;
132   boolean preserve_background;
133
134   int unique_identifier;        /* used to identify needed screen updates */
135 };
136
137 struct EngineSnapshotInfo_SP
138 {
139   struct GameInfo_SP game_sp;
140
141   int PlayField16[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
142   byte PlayField8[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
143   byte DisPlayField[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
144
145   int AnimationPosTable[SP_MAX_PLAYFIELD_SIZE];
146   byte AnimationSubTable[SP_MAX_PLAYFIELD_SIZE];
147   byte TerminalState[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
148 };
149
150
151 /* ------------------------------------------------------------------------- */
152 /* exported functions                                                        */
153 /* ------------------------------------------------------------------------- */
154
155 extern struct GlobalInfo_SP global_sp_info;
156 extern struct GameInfo_SP game_sp;
157 extern struct LevelInfo_SP native_sp_level;
158 extern struct GraphicInfo_SP graphic_info_sp_object[TILE_MAX][8];
159 extern struct GraphicInfo_SP graphic_info_sp_player[MAX_PLAYERS][SPR_MAX][8];
160 extern struct EngineSnapshotInfo_SP engine_snapshot_sp;
161
162 extern void sp_open_all();
163 extern void sp_close_all();
164
165 extern void InitGameEngine_SP();
166 extern void GameActions_SP(byte *, boolean);
167
168 extern unsigned int InitEngineRandom_SP(long);
169
170 extern void setLevelInfoToDefaults_SP();
171 extern void copyInternalEngineVars_SP();
172 extern boolean LoadNativeLevel_SP(char *, int);
173
174 extern void BackToFront_SP(void);
175 extern void BlitScreenToBitmap_SP(Bitmap *);
176 extern void RedrawPlayfield_SP(boolean);
177 extern void DrawGameDoorValues_SP();
178
179 extern void LoadEngineSnapshotValues_SP();
180 extern void SaveEngineSnapshotValues_SP();
181
182 extern int map_key_RND_to_SP(int);
183 extern int map_key_SP_to_RND(int);
184
185 #endif  /* GAME_SP_EXPORT_H */