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