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
31 // use a much higher value to be able to load ultra-long MPX demo files
32 // (like for level collection 78, level 88 ("WAITING FOR GODOT AGAIN"))
33 // #define SP_MAX_TAPE_LEN 500000
34 #define SP_MAX_TAPE_LEN 64010 // (see "spfix63.doc")
41 #define actExploding 2
44 #define actCollecting 5
50 // ----------------------------------------------------------------------------
51 // data structure definitions
52 // ----------------------------------------------------------------------------
54 #ifndef HAS_SpecialPortType
57 short PortLocation; // = 2*(x+(y*60)) // big endian format
58 byte Gravity; // 1 = turn on, anything else (0) = turn off
59 byte FreezeZonks; // 2 = turn on, anything else (0) = turn off (1=off!)
60 byte FreezeEnemies; // 1 = turn on, anything else (0) = turn off
63 #define HAS_SpecialPortType
66 #ifndef HAS_LevelInfoType
70 byte InitialGravity; // 1=on, anything else (0) = off
71 byte Version; // SpeedFixVersion XOR &H20
73 byte InitialFreezeZonks; // 2=on, anything else (0) = off. (1=off too!)
76 // Number of Infotrons needed. 0 means that Supaplex will count the total
77 // amount of Infotrons in the level, and use the low byte of that number.
78 // (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)
79 byte SpecialPortCount; // Maximum 10 allowed!
80 SpecialPortType SpecialPort[10];
81 byte SpeedByte; // = Speed XOR Highbyte(RandomSeed)
82 byte CheckSumByte; // = CheckSum XOR SpeedByte
83 short DemoRandomSeed; // little endian format
85 #define HAS_LevelInfoType
97 // needed for updating panel
99 int infotrons_still_needed;
103 // needed for engine snapshots
104 char **preceding_buffer;
105 int preceding_buffer_size;
107 int scroll_xoffset, scroll_yoffset;
112 boolean is_available; // structure contains valid demo
114 int level_nr; // number of corresponding level
116 int length; // number of demo entries
117 byte data[SP_MAX_TAPE_LEN]; // array of demo entries
122 LevelInfoType header;
123 byte header_raw_bytes[SP_HEADER_SIZE];
127 byte playfield[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
129 struct DemoInfo_SP demo;
131 // used for runtime values
132 struct GameInfo_SP *game_sp;
135 struct GraphicInfo_SP
139 int src_offset_x, src_offset_y;
140 int dst_offset_x, dst_offset_y;
143 Bitmap *crumbled_bitmap;
144 int crumbled_src_x, crumbled_src_y;
145 int crumbled_border_size;
147 boolean has_crumbled_graphics;
148 boolean preserve_background;
150 int unique_identifier; // used to identify needed screen updates
153 struct EngineSnapshotInfo_SP
155 struct GameInfo_SP game_sp;
157 int PlayField16[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
158 byte PlayField8[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
159 byte DisPlayField[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
161 int AnimationPosTable[SP_MAX_PLAYFIELD_SIZE];
162 byte AnimationSubTable[SP_MAX_PLAYFIELD_SIZE];
163 byte TerminalState[SP_MAX_PLAYFIELD_SIZE + SP_HEADER_SIZE];
167 // ----------------------------------------------------------------------------
168 // exported functions
169 // ----------------------------------------------------------------------------
171 extern struct GlobalInfo_SP global_sp_info;
172 extern struct GameInfo_SP game_sp;
173 extern struct LevelInfo_SP native_sp_level;
174 extern struct GraphicInfo_SP graphic_info_sp_object[TILE_MAX][8];
175 extern struct GraphicInfo_SP graphic_info_sp_player[MAX_PLAYERS][SPR_MAX][8];
176 extern struct EngineSnapshotInfo_SP engine_snapshot_sp;
178 void sp_open_all(void);
179 void sp_close_all(void);
181 void InitPrecedingPlayfieldMemory(void);
182 void InitGfxBuffers_SP(void);
184 void InitGameEngine_SP(void);
185 void GameActions_SP(byte *, boolean);
187 unsigned int InitEngineRandom_SP(int);
189 void setLevelInfoToDefaults_SP(void);
190 void copyInternalEngineVars_SP(void);
191 boolean LoadNativeLevel_SP(char *, int, boolean);
192 void SaveNativeLevel_SP(char *);
194 int getFieldbufferOffsetX_SP(void);
195 int getFieldbufferOffsetY_SP(void);
197 void BlitScreenToBitmap_SP(Bitmap *);
198 void RedrawPlayfield_SP(boolean);
200 void LoadEngineSnapshotValues_SP(void);
201 void SaveEngineSnapshotValues_SP(ListNode **);
203 int map_key_RND_to_SP(int);
204 int map_key_SP_to_RND(int);
206 int getRedDiskReleaseFlag_SP(void);
208 #endif // GAME_SP_EXPORT_H