Fixed audio playing
[kvidha.git] / kvidha.h
1 #include <stdio.h>\r
2 #include <malloc.h>\r
3 #include <stdlib.h>\r
4 #include <string.h>\r
5 #include <math.h>\r
6 \r
7 #include "fileio.h"\r
8 \r
9 #define NUM_KEYS 9\r
10 #define MAX_STACK 4096\r
11 #define MAX_LINES 100\r
12 #define NUM_MASKS 1\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
27 #define PLAY_TIME 0\r
28 #define SHOW_MAP 1\r
29 #define TIMER_RES 1000\r
30 \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
35 \r
36 typedef struct ColorType\r
37 {\r
38     unsigned char B;\r
39     unsigned char G;\r
40     unsigned char R;\r
41     unsigned char Reserved;\r
42 } Color;\r
43 \r
44 typedef struct PixelType\r
45 {\r
46     float x;\r
47     float y;\r
48     float xv;\r
49     float yv;\r
50     unsigned long c;\r
51     unsigned char SetColor;\r
52     unsigned char Explode;\r
53     signed short Damage;\r
54     unsigned char Owner;\r
55     unsigned char Used;\r
56 } Pixel;\r
57 \r
58 typedef struct CacheType\r
59 {\r
60     unsigned short w;\r
61     unsigned short h;\r
62     unsigned char NumFrames;\r
63     unsigned char **Frames;\r
64     signed short *cx;\r
65     signed short *cy;\r
66     unsigned char AnimDelay;\r
67 } Cache;\r
68 \r
69 typedef struct SpriteType\r
70 {\r
71     signed short x;\r
72     signed short y;\r
73     signed char xv;\r
74     signed char yv;\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
81     unsigned char Used;\r
82 } Sprite;\r
83 \r
84 typedef struct WeaponType\r
85 {\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
91     unsigned long Name;\r
92     unsigned short NameLength;\r
93 } Weapon;\r
94 \r
95 typedef struct PWeaponType\r
96 {\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
104 } PWeapon;\r
105 \r
106 typedef struct PlayerType\r
107 {\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
131     unsigned char Up;\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
137     float Angle;\r
138     float AngleVel;\r
139     unsigned char Dir;\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
146     struct MaskType\r
147     {\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
153 } Player;\r
154 \r
155 typedef struct ClassType\r
156 {\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
166 } Class;\r
167 \r
168 typedef struct ObjectType\r
169 {\r
170     float x;\r
171     float y;\r
172     float xv;\r
173     float yv;\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
181 } Object;\r
182 \r
183 typedef struct LineType\r
184 {\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
190 } Line;\r
191 \r
192 typedef struct PalType\r
193 {\r
194     unsigned char r;\r
195     unsigned char g;\r
196     unsigned char b;\r
197 } Pal;\r
198 \r
199 typedef struct SoundType\r
200 {\r
201     unsigned short Sound;\r
202     unsigned char Playing;\r
203     unsigned char Repeat;\r
204     float Volume;\r
205     unsigned long Offset;\r
206     unsigned long Pitch;\r
207     unsigned long PitchError;\r
208 } Sound;\r
209 \r
210 typedef struct ModSampleType\r
211 {\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
219 } ModSample;\r
220 \r
221 typedef struct ModChannelType\r
222 {\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
237     union\r
238     {\r
239         struct TwinNibbleType\r
240         {\r
241             unsigned char n1 : 4;\r
242             unsigned char n2 : 4;\r
243         } Nibbles;\r
244         unsigned char b;\r
245     } EffectData;\r
246 } ModChannel;\r
247 \r
248 typedef struct ModEventType\r
249 {\r
250     unsigned short Period;\r
251     unsigned char Sample;\r
252     unsigned char Effect;\r
253     unsigned char EffectData;\r
254 } ModEvent;\r
255 \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
291 \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