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