1 // ----------------------------------------------------------------------------
3 // ----------------------------------------------------------------------------
16 #define ScrollDelta ((long)1)
18 #define ZoomFactor (2)
19 #define BaseWidth (ZoomFactor * 16)
20 #define StretchWidth (ZoomFactor * 16)
21 #define TwoPixels (ZoomFactor * 2)
24 // ----------------------------------------------------------------------------
25 // elements (stored in file and playfield)
26 // ----------------------------------------------------------------------------
32 #define fiInfotron (4)
34 #define fiHardWare (6)
36 #define fiOrangeDisk (8)
37 #define fiPortRight (9)
38 #define fiPortDown (10)
39 #define fiPortLeft (11)
41 #define fiSpPortRight (13)
42 #define fiSpPortDown (14)
43 #define fiSpPortLeft (15)
44 #define fiSpPortUp (16)
45 #define fiSnikSnak (17)
46 #define fiYellowDisk (18)
47 #define fiTerminal (19)
48 #define fiRedDisk (20)
49 #define fiPortUpAndDown (21)
50 #define fiPortLeftAndRight (22)
51 #define fiPortAllDirections (23)
52 #define fiElectron (24)
54 #define fiRAMLeft (26)
55 #define fiRAMRight (27)
56 #define fiHWFirst (28)
57 #define fiHW0 (fiHWFirst + 0) // fiHWFirst
58 #define fiHW1 (fiHWFirst + 1)
59 #define fiHW2 (fiHWFirst + 2)
60 #define fiHW3 (fiHWFirst + 3)
61 #define fiHW4 (fiHWFirst + 4)
62 #define fiHW5 (fiHWFirst + 5)
63 #define fiHW6 (fiHWFirst + 6)
64 #define fiHW7 (fiHWFirst + 7)
65 #define fiHW8 (fiHWFirst + 8)
66 #define fiHW9 (fiHWFirst + 9) // fiHWLast
69 #define fiRAMBottom (39)
70 #define fiWallSpace (40)
71 #define fiHWTrash1 (41)
72 #define fiHWTrash2 (42)
73 #define fiHWMurphy (43)
75 #define fiExplosion (0x1F)
78 // ----------------------------------------------------------------------------
79 // graphics and animations (used at runtime to display the elements)
80 // ----------------------------------------------------------------------------
82 // graphics and animations directly related to file elements
84 #define aniSpace IMG_EMPTY_SPACE
85 #define aniZonk IMG_SP_ZONK
86 #define aniBase IMG_SP_BASE
87 #define aniMurphy IMG_SP_MURPHY
88 #define aniInfotron IMG_SP_INFOTRON
89 #define aniRAM IMG_SP_CHIP_SINGLE
90 #define aniHardWare IMG_SP_HARDWARE_GRAY
91 #define aniExit IMG_SP_EXIT_CLOSED
92 #define aniOrangeDisk IMG_SP_DISK_ORANGE
93 #define aniPortRight IMG_SP_PORT_RIGHT
94 #define aniPortDown IMG_SP_PORT_DOWN
95 #define aniPortLeft IMG_SP_PORT_LEFT
96 #define aniPortUp IMG_SP_PORT_UP
97 #define aniSpPortRight IMG_SP_GRAVITY_PORT_RIGHT
98 #define aniSpPortDown IMG_SP_GRAVITY_PORT_DOWN
99 #define aniSpPortLeft IMG_SP_GRAVITY_PORT_LEFT
100 #define aniSpPortUp IMG_SP_GRAVITY_PORT_UP
101 #define aniSnikSnak IMG_SP_SNIKSNAK
102 #define aniYellowDisk IMG_SP_DISK_YELLOW
103 #define aniTerminal IMG_SP_TERMINAL
104 #define aniRedDisk IMG_SP_DISK_RED
105 #define aniPortUpAndDown IMG_SP_PORT_VERTICAL
106 #define aniPortLeftAndRight IMG_SP_PORT_HORIZONTAL
107 #define aniPortAllDirections IMG_SP_PORT_ANY
108 #define aniElectron IMG_SP_ELECTRON
109 #define aniBug IMG_SP_BUGGY_BASE
110 #define aniRAMLeft IMG_SP_CHIP_LEFT
111 #define aniRAMRight IMG_SP_CHIP_RIGHT
112 #define aniHWFirst IMG_SP_HARDWARE_BASE_1
113 #define aniHW0 IMG_SP_HARDWARE_BASE_1
114 #define aniHW1 IMG_SP_HARDWARE_GREEN
115 #define aniHW2 IMG_SP_HARDWARE_BLUE
116 #define aniHW3 IMG_SP_HARDWARE_RED
117 #define aniHW4 IMG_SP_HARDWARE_YELLOW
118 #define aniHW5 IMG_SP_HARDWARE_BASE_2
119 #define aniHW6 IMG_SP_HARDWARE_BASE_3
120 #define aniHW7 IMG_SP_HARDWARE_BASE_4
121 #define aniHW8 IMG_SP_HARDWARE_BASE_5
122 #define aniHW9 IMG_SP_HARDWARE_BASE_6
123 #define aniHWLast IMG_SP_HARDWARE_BASE_6
124 #define aniRAMTop IMG_SP_CHIP_TOP
125 #define aniRAMBottom IMG_SP_CHIP_BOTTOM
126 #define aniWallSpace IMG_INVISIBLE_WALL
132 // graphics and animations related to in-game animations for element actions
134 #define aniMurphyDropping IMG_SP_MURPHY_DROPPING
136 #define aniMurphySleepLeft IMG_SP_MURPHY_SLEEPING_LEFT
137 #define aniMurphySleepRight IMG_SP_MURPHY_SLEEPING_RIGHT
138 #define aniMurphyTouchLeft IMG_SP_MURPHY_SNAPPING_LEFT
139 #define aniMurphyTouchRight IMG_SP_MURPHY_SNAPPING_RIGHT
140 #define aniMurphyTouchUp IMG_SP_MURPHY_SNAPPING_UP
141 #define aniMurphyTouchDown IMG_SP_MURPHY_SNAPPING_DOWN
142 #define aniMurphyYawn IMG_SP_MURPHY_BORING_1
143 #define aniPushLeft IMG_SP_MURPHY_PUSHING_LEFT
144 #define aniPushRight IMG_SP_MURPHY_PUSHING_RIGHT
145 #define aniPushUpDown IMG_SP_MURPHY_PUSHING_RIGHT
147 #define aniBugActivating IMG_SP_BUGGY_BASE_ACTIVATING
148 #define aniBugDeactivating IMG_SP_BUGGY_BASE_ACTIVATING
149 #define aniBugActive IMG_SP_BUGGY_BASE_ACTIVE
150 #define aniZonkRollLeft IMG_SP_ZONK_MOVING_LEFT
151 #define aniZonkRollRight IMG_SP_ZONK_MOVING_RIGHT
152 #define aniEatInfotronLeft IMG_SP_MURPHY_COLLECTING_LEFT
153 #define aniEatInfotronRight IMG_SP_MURPHY_COLLECTING_RIGHT
154 #define aniInfotronRollLeft IMG_SP_INFOTRON_MOVING_LEFT
155 #define aniInfotronRollRight IMG_SP_INFOTRON_MOVING_RIGHT
156 #define aniMurphyMoveLeft IMG_SP_MURPHY_MOVING_LEFT
157 #define aniMurphyMoveRight IMG_SP_MURPHY_MOVING_RIGHT
158 #define aniMurphyMoveUpLeft IMG_SP_MURPHY_MOVING_LEFT
159 #define aniMurphyMoveUpRight IMG_SP_MURPHY_MOVING_RIGHT
160 #define aniMurphyDigLeft IMG_SP_MURPHY_DIGGING_LEFT
161 #define aniMurphyDigRight IMG_SP_MURPHY_DIGGING_RIGHT
162 #define aniMurphyDigUpLeft IMG_SP_MURPHY_DIGGING_LEFT
163 #define aniMurphyDigUpRight IMG_SP_MURPHY_DIGGING_RIGHT
164 #define aniMurphyEatLeft IMG_SP_MURPHY_COLLECTING_LEFT
165 #define aniMurphyEatRight IMG_SP_MURPHY_COLLECTING_RIGHT
166 #define aniMurphyEatUpLeft IMG_SP_MURPHY_COLLECTING_LEFT
167 #define aniMurphyEatUpRight IMG_SP_MURPHY_COLLECTING_RIGHT
168 #define aniSplitUpDown IMG_SP_MURPHY
169 #define aniMurphyExit IMG_SP_MURPHY_SHRINKING
170 #define aniElectron IMG_SP_ELECTRON
171 #define aniExplosion IMG_SP_DEFAULT_EXPLODING
172 #define aniTouchBase IMG_SP_BASE_SNAPPING
173 #define aniTouchInfotron IMG_SP_INFOTRON_COLLECTING
174 #define aniTouchRedDisk IMG_SP_DISK_RED_COLLECTING
175 #define aniYellowDisk IMG_SP_DISK_YELLOW
176 #define aniOrangeDisk IMG_SP_DISK_ORANGE
177 #define aniRedDisk IMG_SP_DISK_RED
179 #define aniSnikSnakDown IMG_SP_SNIKSNAK_DOWN
180 #define aniSnikSnakLeft IMG_SP_SNIKSNAK_LEFT
181 #define aniSnikSnakRight IMG_SP_SNIKSNAK_RIGHT
182 #define aniSnikSnakUp IMG_SP_SNIKSNAK_UP
184 #define aniSnikSnakTurnLeftToUp IMG_SP_SNIKSNAK_TURNING_FROM_LEFT_UP
185 #define aniSnikSnakTurnLeftToDown IMG_SP_SNIKSNAK_TURNING_FROM_LEFT_DOWN
186 #define aniSnikSnakTurnRightToUp IMG_SP_SNIKSNAK_TURNING_FROM_RIGHT_UP
187 #define aniSnikSnakTurnRightToDown IMG_SP_SNIKSNAK_TURNING_FROM_RIGHT_DOWN
188 #define aniSnikSnakTurnUpToLeft IMG_SP_SNIKSNAK_TURNING_FROM_UP_LEFT
189 #define aniSnikSnakTurnUpToRight IMG_SP_SNIKSNAK_TURNING_FROM_UP_RIGHT
190 #define aniSnikSnakTurnDownToLeft IMG_SP_SNIKSNAK_TURNING_FROM_DOWN_LEFT
191 #define aniSnikSnakTurnDownToRight IMG_SP_SNIKSNAK_TURNING_FROM_DOWN_RIGHT
193 #define aniTerminalActive IMG_SP_TERMINAL_ACTIVE
195 #define aniDefaultExplosion IMG_SP_DEFAULT_EXPLODING
196 #define aniElectronExplosion IMG_SP_ELECTRON_EXPLODING
198 #define imgFrameCorner IMG_SP_FRAME_CORNER
199 #define imgFrameHorizontal IMG_SP_FRAME_HORIZONTAL
200 #define imgFrameVertical IMG_SP_FRAME_VERTICAL
203 extern int aniFramesBug[], aniFramesZonkRollRight[], aniFramesZonkRollLeft[];
204 extern int aniFramesEatInfotronLeft[], aniFramesEatInfotronRight[];
205 extern int aniFramesInfotronRollRight[], aniFramesInfotronRollLeft[];
206 extern int aniFramesMurphyEatLeft[], aniFramesMurphyEatRight[];
207 extern int aniFramesMurphyEatUpLeft[], aniFramesMurphyEatUpRight[], aniFramesSplitUpDown[];
208 extern int aniFramesMurphyExit[];
209 extern int aniFramesSnikSnak[], aniFramesElectron[], aniFramesExplosion[];
210 extern int aniFramesTouchBase[], aniFramesTouchInfotron[], aniFramesTouchRedDisk[];
211 extern int aniFramesYellowDisk[], aniFramesOrangeDisk[], aniFramesRedDisk[];
214 // ----------------------------------------------------------------------------
216 // ----------------------------------------------------------------------------
223 #define keySpaceUp (5)
224 #define keySpaceLeft (6)
225 #define keySpaceDown (7)
226 #define keySpaceRight (8)
230 // ----------------------------------------------------------------------------
232 // ----------------------------------------------------------------------------
234 #ifndef HAS_LevelDescriptor
242 #define HAS_LevelDescriptor
245 #ifndef HAS_SpecialPortType
248 short PortLocation; // = 2*(x+(y*60))
249 byte Gravity; // 1 = turn on, anything else (0) = turn off
250 byte FreezeZonks; // 2 = turn on, anything else (0) = turn off (1=off!)
251 byte FreezeEnemies; // 1 = turn on, anything else (0) = turn off
254 #define HAS_SpecialPortType
257 #ifndef HAS_LevelInfoType
261 byte InitialGravity; // 1=on, anything else (0) = off
262 byte Version; // SpeedFixVersion XOR &H20
264 byte InitialFreezeZonks; // 2=on, anything else (0) = off. (1=off too!)
265 byte InfotronsNeeded;
267 // Number of Infotrons needed. 0 means that Supaplex will count the total
268 // amount of Infotrons in the level, and use the low byte of that number.
269 // (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)
270 byte SpecialPortCount; // Maximum 10 allowed!
271 SpecialPortType SpecialPort[10];
272 byte SpeedByte; // = Speed XOR Highbyte(RandomSeed)
273 byte CheckSumByte; // = CheckSum XOR SpeedByte
274 short DemoRandomSeed;
276 #define HAS_LevelInfoType
280 extern int GetSI(int X, int Y);
281 extern int GetStretchX(int si);
282 extern int GetStretchY(int si);
283 extern int GetX(int si);
284 extern int GetY(int si);
285 extern void InitGlobals();
287 extern void ReadLevel();
289 extern int getSequenceLength(int sequence);
290 extern boolean isSnappingSequence(int sequence);
292 extern void Trace(char *Source, char *Message);
293 extern void ReportError(char *Source, char *Message);
295 extern int Min(int A, int B);
296 extern int Max(int A, int B);
298 extern int fiGraphic[];
299 extern int aniSnikSnakTurningLeft[];
300 extern int aniSnikSnakTurningRight[];
302 extern boolean LevelLoaded;
304 extern boolean DemoAvailable;
305 extern boolean menBorder;
307 extern int *PlayField16;
308 extern byte *PlayField8;
309 extern byte *DisPlayField;
311 extern int FieldHeight;
312 extern int FieldMax, LevelMax;
313 extern int FieldWidth;
314 extern int FreezeZonks;
315 extern int HeaderSize;
316 extern int LevelNumber;
318 extern short RandomSeed;
322 extern LevelInfoType LInfo;
323 extern float Stretch;
324 extern int ScrollMinX, ScrollMaxX, ScrollMinY, ScrollMaxY;
325 extern int ScrollX, ScrollY;
327 #endif /* GLOBALS_H */