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_PLAYFIELD_WIDTH 60
18 #define SP_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_PLAYFIELD_SIZE (SP_PLAYFIELD_WIDTH * \
25 #define SP_LEVEL_SIZE (SP_HEADER_SIZE + SP_PLAYFIELD_SIZE)
27 #define SP_FRAMES_PER_SECOND 35
28 #define SP_MAX_TAPE_LEN 64010 /* (see "spfix63.doc") */
31 /* ------------------------------------------------------------------------- */
32 /* data structure definitions */
33 /* ------------------------------------------------------------------------- */
35 #ifndef HAS_SpecialPortType
39 short PortLocation; // = 2*(x+(y*60)) /* big endian format */
41 int PortLocation; // = 2*(x+(y*60))
43 byte Gravity; // 1 = turn on, anything else (0) = turn off
44 byte FreezeZonks; // 2 = turn on, anything else (0) = turn off (1=off!)
45 byte FreezeEnemies; // 1 = turn on, anything else (0) = turn off
48 #define HAS_SpecialPortType
51 #ifndef HAS_LevelInfoType
55 byte InitialGravity; // 1=on, anything else (0) = off
56 byte Version; // SpeedFixVersion XOR &H20
58 byte InitialFreezeZonks; // 2=on, anything else (0) = off. (1=off too!)
61 // Number of Infotrons needed. 0 means that Supaplex will count the total
62 // amount of Infotrons in the level, and use the low byte of that number.
63 // (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)
64 byte SpecialPortCount; // Maximum 10 allowed!
65 SpecialPortType SpecialPort[10];
66 byte SpeedByte; // = Speed XOR Highbyte(RandomSeed)
67 byte CheckSumByte; // = CheckSum XOR SpeedByte
69 short DemoRandomSeed; /* little endian format */
74 #define HAS_LevelInfoType
91 byte playfield[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
95 boolean demo_available;
97 byte demo[SP_MAX_TAPE_LEN];
101 struct GraphicInfo_SP
105 int src_offset_x, src_offset_y;
106 int dst_offset_x, dst_offset_y;
109 Bitmap *crumbled_bitmap;
110 int crumbled_src_x, crumbled_src_y;
111 int crumbled_border_size;
113 boolean has_crumbled_graphics;
114 boolean preserve_background;
116 int unique_identifier; /* used to identify needed screen updates */
119 struct EngineSnapshotInfo_SP
121 struct GameInfo_SP game_sp;
125 /* ------------------------------------------------------------------------- */
126 /* exported functions */
127 /* ------------------------------------------------------------------------- */
129 extern struct GlobalInfo_SP global_sp_info;
130 extern struct GameInfo_SP game_sp_info;
131 extern struct LevelInfo_SP native_sp_level;
132 extern struct GraphicInfo_SP graphic_info_sp_object[TILE_MAX][8];
133 extern struct GraphicInfo_SP graphic_info_sp_player[MAX_PLAYERS][SPR_MAX][8];
134 extern struct EngineSnapshotInfo_SP engine_snapshot_sp;
136 extern void sp_open_all();
137 extern void sp_close_all();
139 extern void InitGameEngine_SP();
140 extern void GameActions_SP(byte *, boolean);
142 extern unsigned int InitEngineRandom_SP(long);
144 extern void setLevelInfoToDefaults_SP();
145 extern void copyInternalEngineVars_SP();
146 extern boolean LoadNativeLevel_SP(char *, int);
148 extern void BackToFront_SP(void);
149 extern void BlitScreenToBitmap_SP(Bitmap *);
150 extern void RedrawPlayfield_SP(boolean);
151 extern void DrawGameDoorValues_SP();
153 extern void LoadEngineSnapshotValues_SP();
154 extern void SaveEngineSnapshotValues_SP();
156 #endif /* GAME_SP_EXPORT_H */