10 #define MAX_STACK 4096
\r
11 #define MAX_LINES 100
\r
13 #define MAX_PIXELS 5000
\r
14 #define NUM_COLORS 256
\r
15 #define NUM_PLANES 2
\r
16 #define NUM_SCRIPTS 5
\r
17 #define MAX_SPRITES 5000
\r
18 #define MAX_PLAYERS 16
\r
19 #define MAX_OBJECTS 3000
\r
20 #define NUM_WEAPONS 36
\r
21 #define MAX_SAMPLES 31
\r
22 #define MAX_HITTESTS 100
\r
23 #define MAX_CHANNELS 12
\r
24 #define MAX_PATTERNS 128
\r
25 #define MAX_SOUNDS 64
\r
26 #define SB_SIZE 1024
\r
29 #define TIMER_RES 1000
\r
31 #define MAP_SHOOTABLE 1
\r
32 #define MAP_WALKABLE 2
\r
33 #define MAP_DESTROYABLE 4
\r
34 #define MAP_TEMPORARY 8
\r
36 typedef struct ColorType
\r
41 unsigned char Reserved;
\r
44 typedef struct PixelType
\r
51 unsigned char SetColor;
\r
52 unsigned char Explode;
\r
53 signed short Damage;
\r
54 unsigned char Owner;
\r
58 typedef struct CacheType
\r
62 unsigned char NumFrames;
\r
63 unsigned char **Frames;
\r
66 unsigned char AnimDelay;
\r
69 typedef struct SpriteType
\r
75 unsigned char AnimCount;
\r
76 unsigned char AnimTimer;
\r
77 unsigned char AnimDelay;
\r
78 unsigned char CurFrame;
\r
79 unsigned char Template;
\r
80 unsigned char Transparent;
\r
84 typedef struct WeaponType
\r
86 unsigned short Class;
\r
87 unsigned short ReloadDelay;
\r
88 unsigned short FireDelay;
\r
89 unsigned short Ammo;
\r
90 unsigned short MaxClips;
\r
92 unsigned short NameLength;
\r
95 typedef struct PWeaponType
\r
97 unsigned short Weapon;
\r
98 unsigned short ReloadTimer;
\r
99 unsigned short FireTimer;
\r
100 unsigned short AmmoLeft;
\r
101 unsigned short NumClips;
\r
102 signed short Vars[4];
\r
103 unsigned char Used;
\r
106 typedef struct PlayerType
\r
108 unsigned char Visual;
\r
109 unsigned short VPointX1;
\r
110 unsigned short VPointY1;
\r
111 unsigned short VPointX2;
\r
112 unsigned short VPointY2;
\r
113 unsigned short AMeterX1;
\r
114 unsigned short AMeterY1;
\r
115 unsigned short AMeterX2;
\r
116 unsigned short AMeterY2;
\r
117 unsigned short LMeterX1;
\r
118 unsigned short LMeterY1;
\r
119 unsigned short LMeterX2;
\r
120 unsigned short LMeterY2;
\r
121 unsigned short lx, ly;
\r
122 unsigned short kx, ky;
\r
123 unsigned short cx, cy;
\r
124 unsigned short Object;
\r
125 unsigned short VPObject;
\r
126 unsigned char Keys[NUM_KEYS];
\r
127 unsigned char HeldKeys[NUM_KEYS];
\r
128 unsigned short KeyCodes[NUM_KEYS];
\r
129 unsigned char Left;
\r
130 unsigned char Right;
\r
132 unsigned char Down;
\r
133 unsigned char Change;
\r
134 unsigned char Shoot;
\r
135 unsigned char JustShot;
\r
136 signed short CurWeapon;
\r
140 unsigned long CrossColor;
\r
141 signed short Kills;
\r
142 signed short Lives;
\r
143 signed short Health;
\r
144 signed short MaxHealth;
\r
145 signed short PVars[40];
\r
148 unsigned char *Buffer;
\r
149 unsigned char Method;
\r
150 unsigned char Effects[16];
\r
151 } Masks[NUM_MASKS];
\r
152 unsigned char Used;
\r
155 typedef struct ClassType
\r
157 unsigned char *Code;
\r
158 unsigned short Scripts[NUM_SCRIPTS];
\r
159 unsigned char TickDelay;
\r
160 unsigned char Sprite;
\r
161 unsigned char StartFrame;
\r
162 unsigned char RunHitTests;
\r
163 unsigned char TouchDelay;
\r
164 unsigned char TransSprite;
\r
165 signed short GravityMod;
\r
168 typedef struct ObjectType
\r
174 unsigned short Class;
\r
175 unsigned char TickTimer;
\r
176 signed short Variables[6];
\r
177 unsigned short SpriteLink;
\r
178 unsigned char TouchTimer;
\r
179 unsigned char Owner;
\r
180 unsigned char Used;
\r
183 typedef struct LineType
\r
185 signed short x1, y1;
\r
186 signed short x2, y2;
\r
187 unsigned long c1, c2;
\r
188 unsigned short Transparent;
\r
189 unsigned char Used;
\r
192 typedef struct PalType
\r
199 typedef struct SoundType
\r
201 unsigned short Sound;
\r
202 unsigned char Playing;
\r
203 unsigned char Repeat;
\r
205 unsigned long Offset;
\r
206 unsigned long Pitch;
\r
207 unsigned long PitchError;
\r
210 typedef struct ModSampleType
\r
212 unsigned long SampleLen;
\r
213 unsigned char FineTune;
\r
214 unsigned char Volume;
\r
215 unsigned long LoopStart;
\r
216 unsigned long LoopLen;
\r
217 unsigned char Allocated;
\r
218 signed char *Buffer;
\r
221 typedef struct ModChannelType
\r
223 unsigned short Period;
\r
224 unsigned short CurPeriod;
\r
225 unsigned short OldPeriod;
\r
226 unsigned char Volume;
\r
227 unsigned char CurVolume;
\r
228 unsigned char Sample;
\r
229 unsigned long Offset;
\r
230 unsigned char Looping;
\r
231 unsigned char Playing;
\r
232 unsigned long Reminder;
\r
233 unsigned char Effect;
\r
234 unsigned char Oscillation;
\r
235 unsigned char OscAmp;
\r
236 unsigned char OscFreq;
\r
239 struct TwinNibbleType
\r
241 unsigned char n1 : 4;
\r
242 unsigned char n2 : 4;
\r
248 typedef struct ModEventType
\r
250 unsigned short Period;
\r
251 unsigned char Sample;
\r
252 unsigned char Effect;
\r
253 unsigned char EffectData;
\r
256 void SetMapPixel(unsigned short x, unsigned short y, unsigned long c, unsigned short Handle);
\r
257 unsigned long GetMapPixel(unsigned short x, unsigned short y, unsigned short Handle);
\r
258 void ShowMap(unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, unsigned short MapX, unsigned short MapY);
\r
259 void SetMode(unsigned char Mode);
\r
260 unsigned char SeekData(unsigned char *ID);
\r
261 unsigned char LoadSprite(unsigned char *ID, unsigned short CacheNum);
\r
262 unsigned short SpawnSprite(unsigned char Template, signed short x, signed short y, signed char xv, signed char yv, unsigned short AnimCount, unsigned char StartFrame, unsigned char Transparent);
\r
263 unsigned char Init(unsigned short *Result);
\r
264 void Terminate(void);
\r
265 void SpawnPixel(unsigned short x, unsigned short y, float xv, float yv, unsigned char Owner, unsigned char SetColor, unsigned char Explode, signed short Damage, unsigned long c);
\r
266 void ControlSprites(void);
\r
267 void ControlPixels(void);
\r
268 unsigned char ArgExist(unsigned short argc, unsigned char **argv, char *Match);
\r
269 void CopyToMap(signed short x, signed short y, unsigned char *Buffer, unsigned short w, unsigned short h, unsigned long bgc, unsigned char ColorPattern, unsigned char DestroyAll, unsigned short Attributes);
\r
270 void SpawnExplosion(signed short x, signed short y, unsigned char StartFrame, unsigned char Smokes, unsigned char Sound);
\r
271 unsigned short SpawnObject(unsigned short Class, unsigned char Owner, unsigned short x, unsigned short y, float xv, float yv);
\r
272 void ControlObjects(void);
\r
273 unsigned short WallAngle(unsigned short x, unsigned short y);
\r
274 void GetInputs(void);
\r
275 void DBPrint(unsigned char *Buffer, signed short x, signed short y, unsigned char bgc);
\r
276 void FontPrint(unsigned char *Buffer, signed short sx, signed short y, unsigned short bgc);
\r
277 unsigned char CollisionTest(signed short *x1, signed short *y1, signed short *x2, signed short *y2, unsigned char Pattern, unsigned char RunHitTests, unsigned short *ObjNum, unsigned char TestCache, unsigned short TestFrame);
\r
278 void DrawLine(signed short x1, signed short y1, signed short x2, signed short y2, unsigned long c1, unsigned long c2, unsigned char Method, unsigned char UseSprite);
\r
279 unsigned short CalcAngle(signed short x1, signed short y1, signed short x2, signed short y2);
\r
280 void AddHitTest(unsigned short ObjNum);
\r
281 void RemoveHitTest(unsigned short ObjNum);
\r
282 void HurtRadius(signed short x, signed short y, signed short StartDamage, signed short StopDamage, unsigned short StartDecRadius, unsigned short StopRadius, unsigned char Owner);
\r
283 void CollVel(signed short x, signed short y, float *xv, float *yv, unsigned char Attributes);
\r
284 void MessageBox(unsigned char *Buffer);
\r
285 void FillBuffer(void);
\r
286 unsigned char PlaySound(unsigned short Sound, unsigned char Repeat, unsigned short StartSound, unsigned short EndSound, unsigned short Pitch, float Volume);
\r
287 unsigned long MakeColor(unsigned char R, unsigned char G, unsigned char B);
\r
288 unsigned char MonoColor(unsigned long c);
\r
289 void __inline GetNextLineCoord(signed short *x, signed short *y, signed short *d, unsigned short dx, unsigned short dy, signed short xi, signed short yi);
\r
290 void DrawLightning(signed short x1, signed short y1, signed short x2, signed short y2, unsigned short NumPoints, unsigned char Template);
\r
292 extern Pixel *Pixels[MAX_PIXELS];
\r
293 extern Cache **Caches;
\r
294 extern Sprite *Sprites[MAX_SPRITES];
\r
295 extern Object *Objects[MAX_OBJECTS];
\r
296 extern Player *Players[MAX_PLAYERS];
\r
297 extern PWeapon *PWeapons[MAX_PLAYERS][NUM_WEAPONS];
\r
298 extern Sound Sounds[MAX_SOUNDS];
\r
299 extern Class **Classes;
\r
300 extern Weapon **Weapons;
\r
301 extern unsigned char *Font;
\r
302 extern Line *Lines[MAX_LINES];
\r
303 extern unsigned long *SoundOffsets;
\r
304 extern unsigned short HitTests[MAX_HITTESTS];
\r
305 extern unsigned char *Strings;
\r
306 extern Pal Palette[NUM_COLORS];
\r
307 extern unsigned char ColorInfo[NUM_COLORS];
\r
308 extern KvidFile DataFile;
\r
309 extern float Gravity;
\r
310 extern unsigned char *VBuffer;
\r
311 extern unsigned char *DblBuffer;
\r
312 extern unsigned short VideoLDT;
\r
313 extern signed short clip_x1, clip_x2;
\r
314 extern signed short clip_y1, clip_y2;
\r
315 extern unsigned short PagesFree;
\r
316 extern unsigned short BGSprite, BGFrame;
\r
317 extern unsigned char LevelFinished;
\r
318 extern unsigned short LevelWidth, LevelHeight;
\r
319 extern unsigned short MaxLW, MaxLH;
\r
320 extern unsigned char *LevelBuffer[NUM_PLANES];
\r
321 extern unsigned short NumSprites;
\r
322 extern unsigned short NumClasses;
\r
323 extern unsigned short NumWeapons;
\r
324 extern unsigned short NumSounds;
\r
325 extern unsigned char *SoundData;
\r
326 extern unsigned char DebugMode;
\r
327 extern unsigned short FrameRate;
\r
328 extern unsigned short FontSprite;
\r
329 extern signed short Regs[32];
\r
330 extern signed short GameVars[32];
\r
331 extern unsigned short StackPos;
\r
332 extern unsigned short Stack[MAX_STACK];
\r
333 extern unsigned char raw_key;
\r
334 extern unsigned char SpecialKey;
\r
335 extern volatile unsigned char ReadyToGo;
\r
336 extern unsigned short AsciiTable[256];
\r
337 extern unsigned char AsciiTable2[256];
\r
338 extern float Sine[360], Cosine[360];
\r
339 extern double PreSine[360], PreCosine[360];
\r
340 extern volatile unsigned char KeyTable[256];
\r
341 extern unsigned char RepeatKey;
\r
342 extern double RepeatData;
\r
343 extern unsigned short LastShot;
\r
344 extern unsigned char *TextBuffer;
\r
345 extern unsigned char *KeyboardBuffer;
\r
346 extern unsigned short KeybWritePos;
\r
347 extern unsigned char *SoundBuffer;
\r
348 extern signed short *TestBuffer;
\r
349 extern unsigned char UseSound;
\r
350 extern unsigned char FreeSound;
\r
351 extern unsigned short DSPAddress;
\r
352 extern unsigned char DMAChannel;
\r
353 extern unsigned char IRQLine;
\r
354 extern unsigned char OldMask;
\r
355 extern unsigned char DMAPage, DMAAddress, DMACount;
\r
356 extern unsigned char PICAddress;
\r
357 extern unsigned char ReadyBuffer, BufferReady;
\r
358 extern unsigned char Bit16, Stereo;
\r
359 extern unsigned short SBSampleRate;
\r
360 extern unsigned char NumPlays;
\r
361 extern unsigned short *FontBuffer;
\r
362 extern unsigned char ModeInfo[256];
\r
363 extern unsigned char *MenuBuffer;
\r
364 extern unsigned char Test;
\r
365 extern unsigned char FogSprite, FogX, FogY;
\r
366 extern void (*TransOps[5])(unsigned long *Bg, unsigned long Amount);
\r
367 extern ModSample Samples[MAX_SAMPLES];
\r
368 extern ModChannel Channels[MAX_CHANNELS];
\r
369 extern ModEvent *Patterns;
\r
370 extern unsigned char PatternOrder[MAX_PATTERNS];
\r
371 extern unsigned char ModPlaying, ModLen, ModRepeat, ModChannels;
\r
372 extern unsigned char ModPattern, ModRow;
\r
373 extern unsigned short ModOffset;
\r
374 extern unsigned char ModBPM, ModTPD;
\r
375 extern volatile unsigned long Ticks, TickError;
\r
376 extern unsigned char GameType;
\r
377 extern unsigned char BPP;
\r