1 /*  SCAVENGER by David Ashley  dash@linuxmotors.com */
2 
3 #ifndef SCAV_H
4 #define SCAV_H
5 
6 #include <X11/keysym.h>
7 
8 #define DEMO 0
9 #define SAVESOUND 0
10 #define NUMGFX 4
11 
12 #define EMPTY 0
13 #define BRICK 1
14 #define CEMENT 2
15 #define LADDER 3
16 #define RAIL 4
17 #define FAKE 5
18 #define ESCAPE 6
19 #define GOLD 7
20 #define ENEMY 8
21 #define HERO 9
22 #define HIDDEN 10
23 #define FLASHING 11
24 #define HAT 12
25 #define EXITDOOR 13
26 #define DUGBRICK 14
27 #define BORDER 15
28 
29 #define FEMPTY 1
30 #define FBRICK 2
31 #define FCEMENT 4
32 #define FLADDER 8
33 #define FRAIL 16
34 #define FFAKE 32
35 #define FESCAPE 64
36 #define FGOLD 128
37 #define FENEMY 256
38 #define FHERO 512
39 #define FHIDDEN 1024
40 #define FFLASHING 2048
41 #define FHAT 4096
42 #define FEXITDOOR 8192
43 #define FDUGBRICK 16384
44 #define FBORDER 32768
45 
46 
47 #define FORM 0x464f524dL
48 #define ILBM 0x494c424dL
49 #define PBM  0x50424d20L
50 #define CMAP 0x434d4150L
51 #define BODY 0x424f4459L
52 #define BMHD 0x424d4844L
53 
54 #define ABS(x) ((x)<0 ? -(x) : (x))
55 #define SGN(x) ((x)<0 ? -1 : ((x)==0 ? 0 : 1))
56 
57 #define LEVELSIZE 476
58 
59 #define BGFIGS 0
60 #define HATFIGS 76
61 #define SHADOWFIGS 48
62 #define POINTERFIGS 60
63 #define DIGFIGS 62
64 #define FLASHFIGS 56
65 #define BUTTONFIGS 84
66 #define BORDERFIGS 72
67 
68 #define XOFF 32
69 #define YOFF 60
70 
71 
72 #define LX 24
73 #define LY 15
74 #define TX 24
75 #define TY 24
76 #define TILEMAX (TX*TY)
77 
78 #define COLORSEL 0
79 #define BOXSEL 1
80 #define FIXBLOW 2
81 #define RESTORE 3
82 #define SHOWCOLORS 4
83 #define INVERT1 5
84 #define RGBSEL 6
85 #define COORDS 7
86 #define PUTTILE 8
87 #define EBOX0 9
88 #define EBOX1 10
89 #define WRITESTRING 11
90 #define DRAWSQUARE 12
91 
92 #define COLORSX 396
93 #define COLORSY 256
94 #define BOXESX 64
95 #define BOXESY 32
96 #define ACOLOR 0
97 #define BCOLOR 255
98 #define CCOLOR 0
99 #define BLOWUPX 380
100 #define BLOWUPY 32
101 #define DRAWFUNCX 592
102 #define DRAWFUNCY 32
103 #define SHOWCOLORX 592
104 #define SHOWCOLORY 184
105 #define RGBX 300
106 #define RGBY 300
107 #define PICKCOLOR1 1
108 #define PICKCOLOR2 2
109 
110 /* enflags */
111 #define FALLING 1
112 #define DIGGING 2
113 #define HELDSTABLE 4
114 #define DEAD 8
115 #define HOLDING 16
116 #define TRAPPED 32
117 #define HIDDENTYPE 64
118 #define PLAYER 128
119 #define OLDFALLING 256
120 #define UNSTABLE 512			/* when player is on falling enemy */
121 
122 #define DEADTIME 20
123 #define DIGTIME 24
124 #define DIGLIFE 360
125 #define MAXDIG 20
126 
127 #define MOVIEMAX 4096
128 #define HASTRAPPED 1
129 #define HASKILLED 2
130 #define MAXRESOURCES 512
131 #define MARKMAX 128
132 
133 #define TCOLOR 255
134 
135 #define HELDLIMIT 6
136 
137 #define MAXFIGS 384
138 
139 #define FADERATE 8
140 
141 #define MAXSPRITES 16
142 /* sprite flags */
143 #define SPRITEACTIVE 0x80
144 #define SPRITESTORING 1
145 #define SPRITEOFF(x) (x)->spriteflags&=0xffff-SPRITEACTIVE
146 
147 
148 #define COMPXY(x,y) (levelbuff+xcomp[x]+ycomp2[y])
149 #define XCONV(i) (((i)%28)*TX+XOFF-TX*2)
150 #define YCONV(i) (((i)/28)*TY+YOFF-TY)
151 
152 #define TEXTX XOFF
153 #define TOPTEXTY (YOFF-36)
154 #define BOTTOMTEXTY (YOFF+15*24+24)
155 
156 #define ISENTERABLE(x) (bits[x] & (FEMPTY|FLADDER|FRAIL|FGOLD|FENEMY|FHERO|FFLASHING|FDUGBRICK|FHAT))
157 #define ISSTABLE(x) (bits[x] & (FBRICK|FCEMENT|FLADDER|FHIDDEN|FBORDER))
158 
159 #define MAXBYTES 128
160 
161 #define INUM 300
162 #define SPACE 16
163 #define RAD 4
164 
165 #define readbyte() myci()
166 #define IBUFFLEN 1024
167 
168 
169 
170 
171 
172 
173 
174 
175 
176 
177 
178 
179 
180 typedef unsigned char uchar;
181 
182 struct entity
183 {
184 	int	enx;
185 	int	eny;
186 	struct sprite *ensprite;
187 	uchar *enat;
188 	int	enflags;
189 	int	endir;
190 	int	entimer;
191 	uchar *enloc1;
192 	uchar	enwhat;
193 	uchar	enmask;
194 	uchar enholdcount;
195 	uchar	enacount;
196 };
197 
198 struct dig
199 {
200 	int	digx;
201 	int	digy;
202 	uchar *digat;
203 	struct sprite *digsprite;
204 	int	digtimer;
205 };
206 
207 struct sprite
208 {
209 	int	spriteflags;
210 	int	spritex;
211 	int	spritey;
212 	int	spritefig;
213 };
214 
215 typedef struct
216 {
217 	uchar gs_colormap[768];
218 	uchar gs_inout[256];
219 	uchar *gs_pic;
220 } gfxset;
221 
222 
223 
224 
225 
226 
227 
228 
229 
230 
231 
232 extern char demolevel0[];
233 extern char demomovie0[];
234 extern uchar rotbytes[];
235 extern int keylist[];
236 extern int xcolors[256];
237 
238 
239 
240 extern int marks[MARKMAX],*markpoint;
241 extern char libname[256];
242 extern char localname[256];
243 extern char localdirname[256];
244 extern char resourcename[256];
245 extern char rcname[256];
246 
247 extern uchar playername[20];
248 extern uchar bestname[20];
249 extern int fallsound;
250 extern int digsound;
251 extern uchar needwhole,needtoptext,needbottomtext;
252 
253 extern int xpos,ypos;
254 extern int hc;
255 
256 extern int upkey,downkey,leftkey,rightkey,digleftkey,digrightkey;
257 
258 extern int hiddens[3],hiddennum;
259 extern int ilevel;
260 extern int file;
261 extern int pty;
262 extern char gfxname0[256];
263 extern char gfxname1[256];
264 extern char gfxname2[256];
265 extern char gfxname3[256];
266 extern char *gfxnames[4];
267 
268 extern uchar movie[MOVIEMAX+2+20];
269 extern uchar *mpoint;
270 extern uchar *mend;
271 extern long score,bestscore;
272 extern int time1,time2;
273 extern int playflags;
274 
275 extern gfxset gfxsets[NUMGFX];
276 
277 extern void *configtab[];
278 
279 extern uchar toptext[72];
280 extern uchar bottomtext[72];
281 extern uchar topwant[73];
282 extern uchar bottomwant[73];
283 extern uchar mtflag;
284 
285 extern int oldmode;
286 extern int wnum;
287 extern int rowbytes;
288 extern int gran,gran64;
289 extern long pbase;
290 extern int cwin;
291 extern long cwinlow,cwinhigh;
292 extern int seed;
293 extern int figseg;
294 extern uchar colormap[768];
295 extern int mousex,mousey;
296 extern int numenemies;
297 extern int numgold;
298 extern int cframe;
299 extern int clevel;
300 extern int bright;
301 extern uchar temp[1024];
302 
303 extern void (*mode)();
304 
305 extern uchar playing;
306 extern uchar recording;
307 extern long testval;
308 extern uchar wonflag;
309 extern uchar lostflag;
310 extern uchar freezing;
311 extern uchar randcount,randcount2;
312 extern uchar smap[16];
313 extern int mbuttons,mbuttons2;
314 extern int curx,cury;
315 
316 extern int rotnum;
317 
318 /*void mode0(),mode1(),mode2(),mode3(),mode4();*/
319 
320 extern uchar levelbuff[LEVELSIZE];
321 extern uchar levelback[LEVELSIZE];
322 extern uchar movings[LEVELSIZE];
323 extern uchar randoms[LEVELSIZE];
324 extern int xcomp[640];
325 extern int ycomp[480];
326 extern int ycomp2[480];
327 extern int centerx[640];
328 extern int centery[480];
329 
330 extern int cantascend[LX];
331 extern int cantdescend[LX];
332 extern int enterableo[LX+2];
333 extern int *enterable;
334 extern int stable[LX];
335 extern int upgoal[LX];
336 extern int downgoal[LX];
337 extern int bits[];
338 extern uchar calced;
339 
340 extern int bestdir,bestdist,aboveenemy,belowenemy,mask,thisdir,aboveplayer,belowplayer;
341 
342 
343 extern struct sprite spritelist[MAXSPRITES];
344 
345 extern uchar *flashat;
346 extern int flashx,flashy;
347 extern int flashtimer;
348 extern struct sprite *flashsprite;
349 
350 extern struct entity entities[8];
351 
352 extern struct dig diggings[MAXDIG];
353 
354 
355 extern int skips[192];
356 
357 extern int mickeyx,mickeyy;
358 extern int mx,my;
359 
360 extern int offscreen;
361 extern int vp;
362 extern int tileseg;
363 
364 extern uchar *wantiff;
365 
366 extern uchar *picloc,*picput;
367 extern int bmw,bmh,byteswide,depth;
368 extern int ihand,ileft;
369 extern uchar *itake;
370 extern uchar ibuff[IBUFFLEN];
371 
372 
373 
374 
375 
376 
377 
378 
379 
380 
381 
382 
383 extern uchar *getgfx();
384 
385 
386 extern long readlong();
387 extern int rbs();
388 extern int myci();
389 
390 
391 extern uchar *doiff(uchar *name);
392 extern void debit(uchar *lines, int numb, int deep);
393 extern int fixbyte(char *take,int bit,int deep);
394 extern void unpack(int len, uchar *where);
395 extern int getresource(int num,char *put,int len);
396 extern int rlout(int handle,long value);
397 extern int putresource(int num,uchar *take,int len);
398 
399 
400 extern int loadlevel(int num);
401 extern int myrand();
402 extern void paintlevel();
403 extern void dectime();
404 extern void fixtext();
405 extern void writestring(uchar *str, int x, int y, int color);
406 extern void storesprites();
407 extern void restoresprites();
408 extern void drawsprites();
409 extern void chainlevel(int num);
410 extern struct sprite *newsprite();
411 extern void initplay();
412 extern void maketext();
413 extern void initdemo();
414 extern void startgame();
415 extern void spritesoff();
416 extern void lefttext(uchar *txt);
417 extern void centertext(uchar *txt);
418 extern void nextlevel(int type);
419 extern void samelevel();
420 extern void endplay();
421 extern int whichfig(struct entity *en);
422 extern void changesprites();
423 extern void fadein();
424 extern void fadeout();
425 extern int iterate();
426 extern uchar *getgfx(int num);
427 extern void setint(char *ip,int *op);
428 extern void setstring(char *ip,char *op);
429 
430 
431 extern void getconfig();
432 extern void remslash(char *str);
433 extern int dupfile(char *src, char *dest);
434 extern void finddata();
435 extern void makercname (char *str);
436 extern int makercfile(char *str);
437 extern void thandler(int val);
438 extern int main(int argc, char **argv);
439 extern void createhidden(int at);
440 extern void newdig(uchar *at);
441 
442 
443 extern int onenemy(struct entity *pl, int what);
444 
445 extern void fix(uchar *where);
446 extern void doplayer(struct entity *pl, int what);
447 extern void addmodify(int where, int what);
448 extern void addmodifyq(int where, int what);
449 extern void decgold();
450 extern void dodiggings();
451 extern void rethink();
452 extern void openbrick(uchar *where);
453 extern void closebrick(uchar *where);
454 
455 
456 extern void recalc();
457 extern int findbest(int expos, int eypos);
458 extern int downrate(unsigned int d0, unsigned int delta);
459 extern int uprate(unsigned int d0, unsigned int delta);
460 extern void doenemies();
461 extern void killenemy(struct entity *en);
462 extern void movement();
463 extern void mark(int x,int y);
464 extern void domarks();
465 extern void paintmode3();
466 extern void tomode3();
467 
468 
469 extern void query(uchar *txt, int maxlen, uchar *str);
470 extern void remapkey(char *str, int *key, int line);
471 extern void remapkeys();
472 extern void getplayername();
473 extern void findlevel();
474 extern void mode3() /* menu */;
475 extern void mode0() /* demo mode */;
476 extern void mode1() /* playing game */;
477 extern void csline(uchar *put, int line);
478 extern void capturescreen();
479 extern int makesound(int num);
480 extern void stopsound(int num);
481 extern void quiet();
482 extern void waitsound();
483 
484 /*
485 extern char *gfxnames[];
486 extern char libname[],localname[],localdirname[];
487 
488 extern long testval;
489 extern uchar soundstat[];
490 extern unsigned short sseg,sbbase,sbdma,sbirq;
491 extern uchar needwhole,needtoptext,needbottomtext;
492 
493 extern uchar first10[];
494 extern int pointer;
495 extern void (*mode)();
496 extern uchar colormap[];
497 extern int curx,cury;
498 extern int picseg;
499 extern int mbuttons,mbuttons2;
500 extern int cframe;
501 extern uchar temp[];
502 extern uchar gfxname[];
503 extern uchar levelbuff[];
504 extern uchar wonflag,lostflag;
505 extern int file,clevel;
506 extern uchar filename[];
507 
508 extern gfxset gfxsets[];
509 */
510 
511 
512 
513 #endif
514