1 // ----------------------------------------------------------------------------
3 // ----------------------------------------------------------------------------
16 #define ScrollDelta ((long)1)
18 #define ZoomFactor (2)
19 #define BaseWidth (ZoomFactor * 16)
20 #define StretchWidth (ZoomFactor * 16)
21 #define TileSize (ZoomFactor * 16)
22 #define TwoPixels (ZoomFactor * 2)
25 // ----------------------------------------------------------------------------
26 // elements (stored in file and playfield)
27 // ----------------------------------------------------------------------------
33 #define fiInfotron (4)
35 #define fiHardWare (6)
37 #define fiOrangeDisk (8)
38 #define fiPortRight (9)
39 #define fiPortDown (10)
40 #define fiPortLeft (11)
42 #define fiSpPortRight (13)
43 #define fiSpPortDown (14)
44 #define fiSpPortLeft (15)
45 #define fiSpPortUp (16)
46 #define fiSnikSnak (17)
47 #define fiYellowDisk (18)
48 #define fiTerminal (19)
49 #define fiRedDisk (20)
50 #define fiPortUpAndDown (21)
51 #define fiPortLeftAndRight (22)
52 #define fiPortAllDirections (23)
53 #define fiElectron (24)
55 #define fiRAMLeft (26)
56 #define fiRAMRight (27)
57 #define fiHWFirst (28)
58 #define fiHW0 (fiHWFirst + 0) // fiHWFirst
59 #define fiHW1 (fiHWFirst + 1)
60 #define fiHW2 (fiHWFirst + 2)
61 #define fiHW3 (fiHWFirst + 3)
62 #define fiHW4 (fiHWFirst + 4)
63 #define fiHW5 (fiHWFirst + 5)
64 #define fiHW6 (fiHWFirst + 6)
65 #define fiHW7 (fiHWFirst + 7)
66 #define fiHW8 (fiHWFirst + 8)
67 #define fiHW9 (fiHWFirst + 9) // fiHWLast
70 #define fiRAMBottom (39)
71 #define fiWallSpace (40)
73 #define fiExplosion (0x1F)
79 // ----------------------------------------------------------------------------
80 // graphics and animations (used at runtime to display the elements)
81 // ----------------------------------------------------------------------------
83 // graphics and animations directly related to file elements
85 #define aniSpace IMG_EMPTY_SPACE
86 #define aniZonk IMG_SP_ZONK
87 #define aniBase IMG_SP_BASE
88 #define aniMurphy IMG_SP_MURPHY
89 #define aniInfotron IMG_SP_INFOTRON
90 #define aniRAM IMG_SP_CHIP_SINGLE
91 #define aniHardWare IMG_SP_HARDWARE_GRAY
92 #define aniExit IMG_SP_EXIT_CLOSED
93 #define aniOrangeDisk IMG_SP_DISK_ORANGE
94 #define aniPortRight IMG_SP_PORT_RIGHT
95 #define aniPortDown IMG_SP_PORT_DOWN
96 #define aniPortLeft IMG_SP_PORT_LEFT
97 #define aniPortUp IMG_SP_PORT_UP
98 #define aniSpPortRight IMG_SP_GRAVITY_PORT_RIGHT
99 #define aniSpPortDown IMG_SP_GRAVITY_PORT_DOWN
100 #define aniSpPortLeft IMG_SP_GRAVITY_PORT_LEFT
101 #define aniSpPortUp IMG_SP_GRAVITY_PORT_UP
102 #define aniSnikSnak IMG_SP_SNIKSNAK
103 #define aniYellowDisk IMG_SP_DISK_YELLOW
104 #define aniTerminal IMG_SP_TERMINAL
105 #define aniRedDisk IMG_SP_DISK_RED
106 #define aniPortUpAndDown IMG_SP_PORT_VERTICAL
107 #define aniPortLeftAndRight IMG_SP_PORT_HORIZONTAL
108 #define aniPortAllDirections IMG_SP_PORT_ANY
109 #define aniElectron IMG_SP_ELECTRON
110 #define aniBug IMG_SP_BUGGY_BASE
111 #define aniRAMLeft IMG_SP_CHIP_LEFT
112 #define aniRAMRight IMG_SP_CHIP_RIGHT
113 #define aniHWFirst IMG_SP_HARDWARE_BASE_1
114 #define aniHW0 IMG_SP_HARDWARE_BASE_1
115 #define aniHW1 IMG_SP_HARDWARE_GREEN
116 #define aniHW2 IMG_SP_HARDWARE_BLUE
117 #define aniHW3 IMG_SP_HARDWARE_RED
118 #define aniHW4 IMG_SP_HARDWARE_YELLOW
119 #define aniHW5 IMG_SP_HARDWARE_BASE_2
120 #define aniHW6 IMG_SP_HARDWARE_BASE_3
121 #define aniHW7 IMG_SP_HARDWARE_BASE_4
122 #define aniHW8 IMG_SP_HARDWARE_BASE_5
123 #define aniHW9 IMG_SP_HARDWARE_BASE_6
124 #define aniHWLast IMG_SP_HARDWARE_BASE_6
125 #define aniRAMTop IMG_SP_CHIP_TOP
126 #define aniRAMBottom IMG_SP_CHIP_BOTTOM
127 #define aniWallSpace IMG_INVISIBLE_WALL
133 // graphics and animations related to in-game animations for element actions
135 #define aniMurphyDropping IMG_SP_MURPHY_DROPPING
137 #define aniMurphySleepLeft IMG_SP_MURPHY_SLEEPING_LEFT
138 #define aniMurphySleepRight IMG_SP_MURPHY_SLEEPING_RIGHT
139 #define aniMurphyTouchLeft IMG_SP_MURPHY_SNAPPING_LEFT
140 #define aniMurphyTouchRight IMG_SP_MURPHY_SNAPPING_RIGHT
141 #define aniMurphyTouchUp IMG_SP_MURPHY_SNAPPING_UP
142 #define aniMurphyTouchDown IMG_SP_MURPHY_SNAPPING_DOWN
143 #define aniMurphyYawn IMG_SP_MURPHY_BORING_1
144 #define aniPushLeft IMG_SP_MURPHY_PUSHING_LEFT
145 #define aniPushRight 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 // ----------------------------------------------------------------------------
205 // ----------------------------------------------------------------------------
212 #define keySpaceUp (5)
213 #define keySpaceLeft (6)
214 #define keySpaceDown (7)
215 #define keySpaceRight (8)
219 // ----------------------------------------------------------------------------
221 // ----------------------------------------------------------------------------
223 #ifndef HAS_LevelDescriptor
231 #define HAS_LevelDescriptor
234 #ifndef HAS_SpecialPortType
237 short PortLocation; // = 2*(x+(y*60))
238 byte Gravity; // 1 = turn on, anything else (0) = turn off
239 byte FreezeZonks; // 2 = turn on, anything else (0) = turn off (1=off!)
240 byte FreezeEnemies; // 1 = turn on, anything else (0) = turn off
243 #define HAS_SpecialPortType
246 #ifndef HAS_LevelInfoType
250 byte InitialGravity; // 1=on, anything else (0) = off
251 byte Version; // SpeedFixVersion XOR &H20
253 byte InitialFreezeZonks; // 2=on, anything else (0) = off. (1=off too!)
254 byte InfotronsNeeded;
256 // Number of Infotrons needed. 0 means that Supaplex will count the total
257 // amount of Infotrons in the level, and use the low byte of that number.
258 // (A multiple of 256 Infotrons will then result in 0-to-eat, etc.!)
259 byte SpecialPortCount; // Maximum 10 allowed!
260 SpecialPortType SpecialPort[10];
261 byte SpeedByte; // = Speed XOR Highbyte(RandomSeed)
262 byte CheckSumByte; // = CheckSum XOR SpeedByte
263 short DemoRandomSeed;
265 #define HAS_LevelInfoType
269 extern int GetSI(int X, int Y);
270 extern int GetStretchX(int si);
271 extern int GetStretchY(int si);
272 extern int GetX(int si);
273 extern int GetY(int si);
274 extern void InitGlobals();
276 extern void PrepareLevel();
278 extern int getSequenceLength(int sequence);
279 extern boolean isSnappingSequence(int sequence);
281 extern void Trace(char *Source, char *Message);
282 extern void ReportError(char *Source, char *Message);
284 extern int Min(int A, int B);
285 extern int Max(int A, int B);
287 extern int fiGraphic[];
288 extern int aniSnikSnakTurningLeft[];
289 extern int aniSnikSnakTurningRight[];
291 extern boolean LevelLoaded;
293 extern boolean DemoAvailable;
294 extern boolean menBorder;
296 extern int *PlayField16;
297 extern byte *PlayField8;
298 extern byte *DisPlayField;
300 extern int FieldHeight;
301 extern int FieldMax, LevelMax;
302 extern int FieldWidth;
303 extern int FreezeZonks;
304 extern int HeaderSize;
306 extern short RandomSeed;
310 extern LevelInfoType LInfo;
311 extern int ScrollMinX, ScrollMaxX, ScrollMinY, ScrollMaxY;
312 extern int ScrollX, ScrollY;
314 #endif /* GLOBALS_H */