1 #ifndef GAME_SP_EXPORT_H
2 #define GAME_SP_EXPORT_H
4 /* ========================================================================= */
5 /* functions and definitions exported from game_sp to main program */
6 /* ========================================================================= */
8 /* ------------------------------------------------------------------------- */
9 /* constant definitions */
10 /* ------------------------------------------------------------------------- */
12 #define SP_MAX_PLAYFIELD_WIDTH MAX_PLAYFIELD_WIDTH
13 #define SP_MAX_PLAYFIELD_HEIGHT MAX_PLAYFIELD_HEIGHT
15 #define SP_NUM_LEVELS_PER_PACKAGE 111
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
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)
29 #define SP_FRAMES_PER_SECOND 35
30 #define SP_MAX_TAPE_LEN 64010 /* (see "spfix63.doc") */
37 #define actExploding 2
40 #define actCollecting 5
46 /* ------------------------------------------------------------------------- */
47 /* data structure definitions */
48 /* ------------------------------------------------------------------------- */
50 #ifndef HAS_SpecialPortType
53 short PortLocation; // = 2*(x+(y*60)) /* big endian format */
54 byte Gravity; // 1 = turn on, anything else (0) = turn off
55 byte FreezeZonks; // 2 = turn on, anything else (0) = turn off (1=off!)
56 byte FreezeEnemies; // 1 = turn on, anything else (0) = turn off
59 #define HAS_SpecialPortType
62 #ifndef HAS_LevelInfoType
66 byte InitialGravity; // 1=on, anything else (0) = off
67 byte Version; // SpeedFixVersion XOR &H20
69 byte InitialFreezeZonks; // 2=on, anything else (0) = off. (1=off too!)
72 // Number of Infotrons needed. 0 means that Supaplex will count the total
73 // amount of Infotrons in the level, and use the low byte of that number.
74 // (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)
75 byte SpecialPortCount; // Maximum 10 allowed!
76 SpecialPortType SpecialPort[10];
77 byte SpeedByte; // = Speed XOR Highbyte(RandomSeed)
78 byte CheckSumByte; // = CheckSum XOR SpeedByte
79 short DemoRandomSeed; /* little endian format */
81 #define HAS_LevelInfoType
93 /* needed for updating panel */
95 int infotrons_still_needed;
99 /* needed for engine snapshots */
100 char **preceding_buffer;
101 int preceding_buffer_size;
103 int scroll_xoffset, scroll_yoffset;
108 boolean is_available; /* structure contains valid demo */
110 int level_nr; /* number of corresponding level */
112 int length; /* number of demo entries */
113 byte data[SP_MAX_TAPE_LEN]; /* array of demo entries */
118 LevelInfoType header;
119 byte header_raw_bytes[SP_HEADER_SIZE];
123 byte playfield[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
125 struct DemoInfo_SP demo;
127 /* used for runtime values */
128 struct GameInfo_SP *game_sp;
131 struct GraphicInfo_SP
135 int src_offset_x, src_offset_y;
136 int dst_offset_x, dst_offset_y;
139 Bitmap *crumbled_bitmap;
140 int crumbled_src_x, crumbled_src_y;
141 int crumbled_border_size;
143 boolean has_crumbled_graphics;
144 boolean preserve_background;
146 int unique_identifier; /* used to identify needed screen updates */
149 struct EngineSnapshotInfo_SP
151 struct GameInfo_SP game_sp;
153 int PlayField16[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
154 byte PlayField8[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
155 byte DisPlayField[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
157 int AnimationPosTable[SP_MAX_PLAYFIELD_SIZE];
158 byte AnimationSubTable[SP_MAX_PLAYFIELD_SIZE];
159 byte TerminalState[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
163 /* ------------------------------------------------------------------------- */
164 /* exported functions */
165 /* ------------------------------------------------------------------------- */
167 extern struct GlobalInfo_SP global_sp_info;
168 extern struct GameInfo_SP game_sp;
169 extern struct LevelInfo_SP native_sp_level;
170 extern struct GraphicInfo_SP graphic_info_sp_object[TILE_MAX][8];
171 extern struct GraphicInfo_SP graphic_info_sp_player[MAX_PLAYERS][SPR_MAX][8];
172 extern struct EngineSnapshotInfo_SP engine_snapshot_sp;
174 extern void sp_open_all();
175 extern void sp_close_all();
177 extern void InitPrecedingPlayfieldMemory();
178 extern void InitGfxBuffers_SP();
180 extern void InitGameEngine_SP();
181 extern void GameActions_SP(byte *, boolean);
183 extern unsigned int InitEngineRandom_SP(int);
185 extern void setLevelInfoToDefaults_SP();
186 extern void copyInternalEngineVars_SP();
187 extern boolean LoadNativeLevel_SP(char *, int, boolean);
188 extern void SaveNativeLevel_SP(char *);
190 extern int getFieldbufferOffsetX_SP();
191 extern int getFieldbufferOffsetY_SP();
193 extern void BlitScreenToBitmap_SP(Bitmap *);
194 extern void RedrawPlayfield_SP(boolean);
196 extern void LoadEngineSnapshotValues_SP();
197 extern void SaveEngineSnapshotValues_SP(ListNode **);
199 extern int map_key_RND_to_SP(int);
200 extern int map_key_SP_to_RND(int);
202 extern int getRedDiskReleaseFlag_SP();
204 #endif /* GAME_SP_EXPORT_H */