xscavenger-1.4.4/0040700000175000001440000000000006645044707012531 5ustar dashusersxscavenger-1.4.4/src/0040755000175000001440000000000007572573712013335 5ustar dashusersxscavenger-1.4.4/src/sound.h0100644000175000001440000000010207035027153014607 0ustar dashusersvoid soundinit(void); void playsound(int n); void endsound(void); xscavenger-1.4.4/src/edit.h0100644000175000001440000000115206644315236014421 0ustar dashusers/* SCAVENGER by David Ashley dash@netcom.com dash5@geocities.com */ #ifndef EDIT_H #define EDIT_H #include "scav.h" #define ETYPEX 128 #define ETYPEY 450 #define ETYPESPACE 32 #define ETYPES 1 #define ELEVEL 2 extern void filllevel(uchar *p, int val); extern void editinit(); extern uchar *checks(); extern void ebox0(int which); extern void ebox1(int which); extern void paintedit(); extern void toedit(); extern void mode4(); /* level editor */ extern void mode5(); extern int efindcurs(); extern void centermsg(uchar *from); extern uchar *einfo(); extern void puteinfo(); extern void editprocess(); #endif xscavenger-1.4.4/src/anim.h0100644000175000001440000000401306644315236014417 0ustar dashusers/* SCAVENGER by David Ashley dash@epyx.com */ /* anim.h created by Marcus Brinkmann */ #ifndef ANIM_H #define ANIM_H #include "scav.h" #include "x.h" #define COLORS 1 #define BOXES 2 #define BLOWUP 3 #define DRAWFUNC 4 #define RGB 5 #define SHOWCOLOR 6 #define FILLSPACE 64 extern void mode2(); /* animator */ extern void getsquare0(char *dest,int num); extern void getsquare(char *dest,int num); extern void putsquare(int num,char *source); extern void showcolors(); extern void invert1(int which); extern void colorsel(int num, int col); extern void boxsel(int num, int col); extern char fixblow(uchar *where); extern void makebrush(uchar *sqr,int x1, int y1, int x2, int y2); extern void flipx(); extern void flipy(); extern void copysquare(char *dest,char *source); extern void rot90(); extern void paintbrush(uchar *sqr,int x, int y, int type); extern void animrect(uchar *sqr,int x1, int y1, int x2, int y2, int type); extern void animline(uchar *sqr,int x1, int y1, int x2, int y2, int type); extern void animfill(uchar *sqr,int x, int y, int color); extern void boxflipx(); extern void boxflipy(); extern void boxrot90(); extern void crosshair(uchar *sqr, int x, int y); extern void outline(uchar *sqr,int x1, int y1, int x2, int y2); extern int whichfunc(int x, int y); extern int findcurs(); extern void changecolor(int nc); extern void newanimmode(int m); extern void coords(int x,int y); extern void animprocess(); extern void rgbsel(int r, int g, int b, int col); extern void paintboxes(); extern void paintanim(); extern void animinit(); extern void toanim(); extern void push(); extern void pop(); extern void lout(long val); extern void wout(int val); extern void bout(uchar val); extern void picline(char *put,int line); extern void savegfx(); extern int writeiff(uchar *name,int width, int height, void (*fetch)(),uchar *colors); extern void gather(uchar *to,uchar *from,int len,int bit); extern void pack(uchar *take, int rb); extern void dpout(uchar *pnt2,int d1, int d2, int d5); #endif xscavenger-1.4.4/src/scavenger.60100644000175000001440000000347107036265451015374 0ustar dashusers.TH SCAVENGER 6 .\" NAME should be all caps, SECTION should be 1-8, maybe w/ subsection .\" other parms are allowed: see man(7), man(1) .SH NAME scavenger \- a plattform game for X .SH SYNOPSIS .B scavenger .SH "DESCRIPTION" .B Scavenger is like Lode Runner. You've got to run around gathering objects while avoiding enemies. You can dig down through some of the blocks to get at buried objects. After you've collected everything, ladders may appear. To finish the level you've got to exit through the top of the screen. If an enemy falls into a dug brick, he is stunned for a while. If the brick fills in with him in it, he is killed, and he will reappear at the top of the screen. .PP This version has a level editor for designing your own levels, and a graphics editor for drawing your own artwork. .SH OPTIONS This command has no options. .SH "GAME CONTROLS" The default control is with the number pad keys 4-9: Dig left Move up Dig right 7 8 9 4 5 6 Move left Move down Move right As of version 1.3 you can remap the controls. In demo mode hit space to get to the menu, then hit F10 to remap the keys. For each key if you hit escape the key is unchanged. F8 Skip to next level k Kill player (useful if he's trapped) ESC Exit back to demo mode Pause Pause game See the file DOC for more details about scavenger. .SH "COPYRIGHT" Copyright by Dave Ashley dash@xdr.com .PP This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 dated June, 1991. .SH "AUTHOR" .B scavenger was written by David Ashley . .PP This manual page was written by Marcus Brinkmann , for the Debian GNU/Linux system. xscavenger-1.4.4/src/x.h0100644000175000001440000000440706644315236013751 0ustar dashusers/* SCAVENGER by David Ashley dash@netcom.com dash5@geocities.com */ #ifndef SCAVENGER_X_H #define SCAVENGER_X_H /* #include #include #include #include */ #include #include "scav.h" #define KEYMAX 128 extern Display *dp; extern GC copygc,andgc,orgc,xorgc; extern int usedcolors; extern uchar mymap[768]; extern int screen; extern Window wi; extern int fontbase,fontysize; extern XImage *myimage; extern char *imageloc; extern XEvent event; extern XKeyEvent *keyevent; extern XButtonEvent *buttonevent; extern XMotionEvent *motionevent; extern XExposeEvent *exposeevent; extern Pixmap artwork,artmask,bgframe,storeage; extern long map2[256]; extern Colormap cmap,mycolormap; extern uchar fmap[128]; extern int buttonstate,buttondown; extern int mxpos,mypos; extern int pressedcodes[KEYMAX],downcodes[KEYMAX],numpressed,numdown; extern void dumpgfx(); extern void createinout(int num); extern void getcolors(); extern void gfxfetch(int num,int source, int dest); extern void puttile(int destx,int desty,int source); extern void store(int x,int y,int which); extern void restore(int x,int y,int which); extern void copyup(); extern void copyupxy(int x,int y); extern void copyupxysize(int x,int y,int xsize,int ysize); extern void getfigures(); extern unsigned long getcolor(char *name); /* unsigned long */ extern void openx(int argc, char **argv); extern void closex(); extern int checkpressed(int code); extern int checkdown(int code); extern int checkbutton(int button); extern int checkbuttondown(int button); extern int anydown(); extern int firstdown(); extern void scaninput(); extern void fontinit(); extern void writechar(int x,int y,uchar ch); extern void clear(); extern void xflush(); extern void xsync(); extern void drawbox(int x,int y,int size,int color); extern void drawbox2(int x,int y,int sizex,int sizey,int color); extern void drawfillrect(int x,int y,int size,int color); extern void bigpixel(int x,int y,int color); extern void invert(int x,int y); extern int getmousex(); extern int getmousey(); extern void drawsquare(int x,int y,uchar *source); extern void colormapon(); extern void colormapoff(); extern void palette(uchar *pal); extern void drawstring(char *str,int x,int y,int color); #endif xscavenger-1.4.4/src/Imakefile0100644000175000001440000000132407036265362015135 0ustar dashusers# set this to the path where data files should be stored. LIBDIR # is automatically defined by imake, usually to /usr/X11R6/lib/X11, so # this should be a good default. LIBNAME = $(LIBDIR)/scavenger SRCS = anim.c edit.c scav.c x.c sound.c OBJS = $(SRCS:.c=.o) LIB_DATA = \ ../data/badguy.lbm ../data/brownblue.lbm ../data/death.raw \ ../data/dig.raw ../data/fall.raw ../data/levels.scl \ ../data/microman.lbm ../data/pop.raw ../data/redbrick.lbm \ ../data/reddevil.lbm ../data/regularguy.lbm ../data/spiralthing.lbm \ ../data/victory.raw LOCAL_LIBRARIES = $(XLIB) EXTRA_DEFINES = -DLIBNAME=\"$(LIBNAME)\" ComplexProgramTarget(scavenger) InstallMultipleFlags($(LIB_DATA),$(LIBNAME),-m 644) xscavenger-1.4.4/src/scav.h0100644000175000001440000002330007227104556014426 0ustar dashusers/* SCAVENGER by David Ashley dash@xdr.com */ #ifndef SCAV_H #define SCAV_H #include #define DEMO 0 #define SAVESOUND 0 #define NUMGFX 4 #define EMPTY 0 #define BRICK 1 #define CEMENT 2 #define LADDER 3 #define RAIL 4 #define FAKE 5 #define ESCAPE 6 #define GOLD 7 #define ENEMY 8 #define HERO 9 #define HIDDEN 10 #define FLASHING 11 #define HAT 12 #define EXITDOOR 13 #define DUGBRICK 14 #define BORDER 15 #define FEMPTY 1 #define FBRICK 2 #define FCEMENT 4 #define FLADDER 8 #define FRAIL 16 #define FFAKE 32 #define FESCAPE 64 #define FGOLD 128 #define FENEMY 256 #define FHERO 512 #define FHIDDEN 1024 #define FFLASHING 2048 #define FHAT 4096 #define FEXITDOOR 8192 #define FDUGBRICK 16384 #define FBORDER 32768 #define FORM 0x464f524dL #define ILBM 0x494c424dL #define PBM 0x50424d20L #define CMAP 0x434d4150L #define BODY 0x424f4459L #define BMHD 0x424d4844L #define ABS(x) ((x)<0 ? -(x) : (x)) #define SGN(x) ((x)<0 ? -1 : ((x)==0 ? 0 : 1)) #define LEVELSIZE 476 #define BGFIGS 0 #define HATFIGS 76 #define SHADOWFIGS 48 #define POINTERFIGS 60 #define DIGFIGS 62 #define FLASHFIGS 56 #define BUTTONFIGS 84 #define BORDERFIGS 72 #define XOFF 32 #define YOFF 60 #define LX 24 #define LY 15 #define TX 24 #define TY 24 #define TILEMAX (TX*TY) #define COLORSEL 0 #define BOXSEL 1 #define FIXBLOW 2 #define RESTORE 3 #define SHOWCOLORS 4 #define INVERT1 5 #define RGBSEL 6 #define COORDS 7 #define PUTTILE 8 #define EBOX0 9 #define EBOX1 10 #define WRITESTRING 11 #define DRAWSQUARE 12 #define COLORSX 396 #define COLORSY 256 #define BOXESX 64 #define BOXESY 32 #define ACOLOR 0 #define BCOLOR 255 #define CCOLOR 0 #define BLOWUPX 380 #define BLOWUPY 32 #define DRAWFUNCX 592 #define DRAWFUNCY 32 #define SHOWCOLORX 592 #define SHOWCOLORY 184 #define RGBX 300 #define RGBY 300 #define PICKCOLOR1 1 #define PICKCOLOR2 2 /* enflags */ #define FALLING 1 #define DIGGING 2 #define HELDSTABLE 4 #define DEAD 8 #define HOLDING 16 #define TRAPPED 32 #define HIDDENTYPE 64 #define PLAYER 128 #define OLDFALLING 256 #define UNSTABLE 512 /* when player is on falling enemy */ #define DEADTIME 20 #define DIGTIME 24 #define DIGLIFE 360 #define MAXDIG 20 #define MOVIEMAX 4096 #define HASTRAPPED 1 #define HASKILLED 2 #define MAXRESOURCES 512 #define MARKMAX 128 #define TCOLOR 255 #define HELDLIMIT 6 #define MAXFIGS 384 #define FADERATE 8 #define MAXSPRITES 16 /* sprite flags */ #define SPRITEACTIVE 0x80 #define SPRITESTORING 1 #define SPRITEOFF(x) (x)->spriteflags&=0xffff-SPRITEACTIVE #define COMPXY(x,y) (levelbuff+xcomp[x]+ycomp2[y]) #define XCONV(i) (((i)%28)*TX+XOFF-TX*2) #define YCONV(i) (((i)/28)*TY+YOFF-TY) #define TEXTX XOFF #define TOPTEXTY (YOFF-36) #define BOTTOMTEXTY (YOFF+15*24+24) #define ISENTERABLE(x) (bits[x] & (FEMPTY|FLADDER|FRAIL|FGOLD|FENEMY|FHERO|FFLASHING|FDUGBRICK|FHAT)) #define ISSTABLE(x) (bits[x] & (FBRICK|FCEMENT|FLADDER|FHIDDEN|FBORDER)) #define MAXBYTES 128 #define INUM 300 #define SPACE 16 #define RAD 4 #define readbyte() myci() #define IBUFFLEN 1024 typedef unsigned char uchar; struct entity { int enx; int eny; struct sprite *ensprite; uchar *enat; int enflags; int endir; int entimer; uchar *enloc1; uchar enwhat; uchar enmask; uchar enholdcount; uchar enacount; }; struct dig { int digx; int digy; uchar *digat; struct sprite *digsprite; int digtimer; }; struct sprite { int spriteflags; int spritex; int spritey; int spritefig; }; typedef struct { uchar gs_colormap[768]; uchar gs_inout[256]; uchar *gs_pic; } gfxset; extern char demolevel0[]; extern char demomovie0[]; extern uchar rotbytes[]; extern int keylist[]; extern int xcolors[256]; extern int marks[MARKMAX],*markpoint; extern char libname[256]; extern char localname[256]; extern char localdirname[256]; extern char resourcename[256]; extern char rcname[256]; extern uchar playername[20]; extern uchar bestname[20]; extern int fallsound; extern int digsound; extern uchar needwhole,needtoptext,needbottomtext; extern int xpos,ypos; extern int hc; extern int upkey,downkey,leftkey,rightkey,digleftkey,digrightkey; extern int hiddens[3],hiddennum; extern int ilevel; extern int file; extern int pty; extern char gfxname0[256]; extern char gfxname1[256]; extern char gfxname2[256]; extern char gfxname3[256]; extern char *gfxnames[4]; extern uchar movie[MOVIEMAX+2+20]; extern uchar *mpoint; extern uchar *mend; extern long score,bestscore; extern int time1,time2; extern int playflags; extern gfxset gfxsets[NUMGFX]; extern void *configtab[]; extern uchar toptext[72]; extern uchar bottomtext[72]; extern uchar topwant[73]; extern uchar bottomwant[73]; extern uchar mtflag; extern int oldmode; extern int wnum; extern int rowbytes; extern int gran,gran64; extern long pbase; extern int cwin; extern long cwinlow,cwinhigh; extern int seed; extern int figseg; extern uchar colormap[768]; extern int mousex,mousey; extern int numenemies; extern int numgold; extern int cframe; extern int clevel; extern int bright; extern uchar temp[1024]; extern void (*mode)(); extern uchar playing; extern uchar recording; extern long testval; extern uchar wonflag; extern uchar lostflag; extern uchar freezing; extern uchar randcount,randcount2; extern uchar smap[16]; extern int mbuttons,mbuttons2; extern int curx,cury; extern int rotnum; /*void mode0(),mode1(),mode2(),mode3(),mode4();*/ extern uchar levelbuff[LEVELSIZE]; extern uchar levelback[LEVELSIZE]; extern uchar movings[LEVELSIZE]; extern uchar randoms[LEVELSIZE]; extern int xcomp[640]; extern int ycomp[480]; extern int ycomp2[480]; extern int centerx[640]; extern int centery[480]; extern int cantascend[LX]; extern int cantdescend[LX]; extern int enterableo[LX+2]; extern int *enterable; extern int stable[LX]; extern int upgoal[LX]; extern int downgoal[LX]; extern int bits[]; extern uchar calced; extern int bestdir,bestdist,aboveenemy,belowenemy,mask,thisdir,aboveplayer,belowplayer; extern struct sprite spritelist[MAXSPRITES]; extern uchar *flashat; extern int flashx,flashy; extern int flashtimer; extern struct sprite *flashsprite; extern struct entity entities[8]; extern struct dig diggings[MAXDIG]; extern int skips[192]; extern int mickeyx,mickeyy; extern int mx,my; extern int offscreen; extern int vp; extern int tileseg; extern uchar *wantiff; extern uchar *picloc,*picput; extern int bmw,bmh,byteswide,depth; extern int ihand,ileft; extern uchar *itake; extern uchar ibuff[IBUFFLEN]; extern uchar *getgfx(); extern long readlong(); extern int rbs(); extern int myci(); extern uchar *doiff(uchar *name); extern void debit(uchar *lines, int numb, int deep); extern int fixbyte(char *take,int bit,int deep); extern void unpack(int len, uchar *where); extern int getresource(int num,char *put,int len); extern int rlout(int handle,long value); extern int putresource(int num,uchar *take,int len); extern int loadlevel(int num); extern int rand(); extern void paintlevel(); extern void dectime(); extern void fixtext(); extern void writestring(uchar *str, int x, int y, int color); extern void storesprites(); extern void restoresprites(); extern void drawsprites(); extern void chainlevel(int num); extern struct sprite *newsprite(); extern void initplay(); extern void maketext(); extern void initdemo(); extern void startgame(); extern void spritesoff(); extern void lefttext(uchar *txt); extern void centertext(uchar *txt); extern void nextlevel(int type); extern void samelevel(); extern void endplay(); extern int whichfig(struct entity *en); extern void changesprites(); extern void fadein(); extern void fadeout(); extern int iterate(); extern uchar *getgfx(int num); extern void setint(char *ip,int *op); extern void setstring(char *ip,char *op); extern void getconfig(); extern void remslash(char *str); extern int dupfile(char *src, char *dest); extern void finddata(); extern void makercname (char *str); extern int makercfile(char *str); extern void thandler(int val); extern int main(int argc, char **argv); extern void createhidden(int at); extern void newdig(uchar *at); extern int onenemy(struct entity *pl, int what); extern void fix(uchar *where); extern void doplayer(struct entity *pl, int what); extern void addmodify(int where, int what); extern void addmodifyq(int where, int what); extern void decgold(); extern void dodiggings(); extern void rethink(); extern void openbrick(uchar *where); extern void closebrick(uchar *where); extern void recalc(); extern int findbest(int expos, int eypos); extern int downrate(unsigned int d0, unsigned int delta); extern int uprate(unsigned int d0, unsigned int delta); extern void doenemies(); extern void killenemy(struct entity *en); extern void movement(); extern void mark(int x,int y); extern void domarks(); extern void paintmode3(); extern void tomode3(); extern void query(uchar *txt, int maxlen, uchar *str); extern void remapkey(char *str, int *key, int line); extern void remapkeys(); extern void getplayername(); extern void findlevel(); extern void mode3() /* menu */; extern void mode0() /* demo mode */; extern void mode1() /* playing game */; extern void csline(uchar *put, int line); extern void capturescreen(); extern int makesound(int num); extern void stopsound(int num); extern void quiet(); extern void waitsound(); /* extern char *gfxnames[]; extern char libname[],localname[],localdirname[]; extern long testval; extern uchar soundstat[]; extern unsigned short sseg,sbbase,sbdma,sbirq; extern uchar needwhole,needtoptext,needbottomtext; extern uchar first10[]; extern int pointer; extern void (*mode)(); extern uchar colormap[]; extern int curx,cury; extern int picseg; extern int mbuttons,mbuttons2; extern int cframe; extern uchar temp[]; extern uchar gfxname[]; extern uchar levelbuff[]; extern uchar wonflag,lostflag; extern int file,clevel; extern uchar filename[]; extern gfxset gfxsets[]; */ #endif xscavenger-1.4.4/src/x.c0100644000175000001440000002572607572573712013761 0ustar dashusers/* SCAVENGER by David Ashley dash@xdr.com */ #include #include #include #include #include #include #include "names.h" #include "x.h" /* Icon bitmaps */ #include "icon.xbm" Display *dp; GC copygc,andgc,orgc,xorgc; int usedcolors; uchar mymap[768]; int screen; Window wi; int fontbase,fontysize; XImage *myimage; char *imageloc; XEvent event; XKeyEvent *keyevent; XButtonEvent *buttonevent; XMotionEvent *motionevent; XExposeEvent *exposeevent; Pixmap artwork,artmask,bgframe,storeage; long map2[256]; Colormap cmap,mycolormap; uchar fmap[128]; int buttonstate=0,buttondown=0; int mxpos,mypos; int pressedcodes[KEYMAX],downcodes[KEYMAX],numpressed,numdown; void dumpgfx() { usedcolors = 0; } void createinout(int num) { gfxset *gs; uchar *p; int i,j,counts[256]; uchar red,green,blue; int cnt; gs=gfxsets+num; p=gs->gs_pic; for(i=0;i<256;i++) counts[i]=0; i=64000; while(i--) counts[*p++]++; cnt=0; gs->gs_inout[0]=0; for(i=1;i<256;i++) { if(counts[i]) { cnt++; p=gs->gs_colormap+i+i+i; red=*p++; green=*p++; blue=*p++; p=mymap; for(j=0;jgs_inout[i]=j; break; } } if(j==usedcolors) { *p++=red; *p++=green; *p++=blue; gs->gs_inout[i]=usedcolors; usedcolors++; /* check for 256 overflow */ } } } } void getcolors() { int i; XColor ac; uchar *p; int res; p=mymap; for(i=0;igs_inout; p=gs->gs_pic+24*(source%12)+320*24*(source/12); for(dy=0;dy<24;dy++) { for(dx=0;dx<24;dx++) { pixel=*p++; if(pixel) pixel=map2[map1[pixel]]; XPutPixel(myimage,dx,dy,pixel); } p+=320-24; } p-=320*24; XPutImage(dp,artwork,copygc,myimage,0,0,24*(dest%12),24*(dest/12),24,24); for(dy=0;dy<24;dy++) { for(dx=0;dx<24;dx++) { ch=*p++; XPutPixel(myimage,dx,dy,ch ? 0L : 0xffffffffL); } p+=320-24; } XPutImage(dp,artmask,copygc,myimage,0,0,24*(dest%12),24*(dest/12),24,24); } void puttile(int destx,int desty,int source) { int sx,sy; sx=24*(source%12); sy=24*(source/12); XCopyArea(dp,artmask,bgframe,andgc,sx,sy,24,24,destx,desty); XCopyArea(dp,artwork,bgframe,orgc,sx,sy,24,24,destx,desty); } void store(int x,int y,int which) { XCopyArea(dp,bgframe,storeage,copygc,x,y,24,24,0,which*24); } void restore(int x,int y,int which) { XCopyArea(dp,storeage,bgframe,copygc,0,which*24,24,24,x,y); } void copyup() { XCopyArea(dp,bgframe,wi,copygc,0,0,640,480,0,0); needwhole=needtoptext=needbottomtext=0; } void copyupxy(int x,int y) { XCopyArea(dp,bgframe,wi,copygc,x,y,24,24,x,y); } void copyupxysize(int x,int y,int xsize,int ysize) { XCopyArea(dp,bgframe,wi,copygc,x,y,xsize,ysize,x,y); } void getfigures() { int i; for(i=0;i<12*32;i++) gfxfetch(i/96,i%96,i); } unsigned long getcolor(char *name) { XColor color1,color2; if(!XAllocNamedColor(dp,cmap,name,&color1,&color2)) { printf("Couldn't allocate color %s\n",name); exit(4); } return color1.pixel; } /* FIXME: to be more sophisticated, create an icon window, since we * already have a color icon for Scavenger. The B/W icon should still be * here for those icon-window-deprived WM's. */ Pixmap create_icon() { Pixmap icon; icon=XCreateBitmapFromData(dp, DefaultRootWindow(dp), icon_bits, icon_width, icon_height); if (!icon) { fprintf(stderr, "Can't open icon file %s\n", ICONPATH); exit(5); } return icon; } void openx(int argc, char **argv) { /* Font font; char str[64]; */ XFontStruct *afont; XGCValues values; XSizeHints *sizehints; XWMHints *wmhints; XClassHint *classhints; XTextProperty windowName; XTextProperty iconName; char *title = "X Scavenger by David Ashley 1997"; char *title1 = "X Scavenger"; int depth; dp=XOpenDisplay(0); if(!dp) { printf("Cannot open display\n"); exit(1); } screen=XDefaultScreen(dp); cmap=DefaultColormap(dp,screen); depth = DefaultDepth(dp, screen); wi=XCreateSimpleWindow(dp,RootWindow(dp,screen),20,20,640,480,0,0,0); wmhints = XAllocWMHints (); /* Various window manager settings */ wmhints->initial_state = NormalState; wmhints->input = True; wmhints->flags |= StateHint | InputHint; wmhints->icon_pixmap = create_icon (); wmhints->flags = IconPixmapHint; /* Set the class for this program */ classhints = XAllocClassHint (); classhints->res_name = title1; classhints->res_class = title1; /* Setup the max and minimum size that the window will be */ sizehints = XAllocSizeHints (); sizehints->flags = PSize | PMinSize | PMaxSize; sizehints->min_width = 640; sizehints->min_height = 480; sizehints->max_width = 640; sizehints->max_height = 480; /* Create the window/icon name properties */ if (XStringListToTextProperty (&title, 1, &windowName) == 0) { fprintf (stderr, "X: Cannot create window name resource!\n"); exit (3); } if (XStringListToTextProperty (&title1, 1, &iconName) == 0) { fprintf (stderr, "X: Cannot create window name resource!\n"); exit (3); } /* Now set the window manager properties */ XSetWMProperties (dp, wi, &windowName, &iconName, argv, argc, sizehints, wmhints, classhints); XFree ((void *) wmhints); XFree ((void *) classhints); XFree ((void *) sizehints); XMapWindow(dp,wi); XSelectInput(dp,wi,KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | ExposureMask | FocusChangeMask); copygc=XCreateGC(dp,wi,0,NULL); values.function=GXor; orgc=XCreateGC(dp,wi,GCFunction,&values); values.function=GXand; andgc=XCreateGC(dp,wi,GCFunction,&values); values.function=GXxor; xorgc=XCreateGC(dp,wi,GCFunction,&values); afont=XQueryFont(dp,XGContextFromGC(copygc)); fontbase=afont->ascent; fontysize=afont->ascent+afont->descent; imageloc=malloc(24*24*4); myimage=XCreateImage(dp,DefaultVisual(dp,screen),depth,ZPixmap,0,imageloc,24,24,8,0); artwork=XCreatePixmap(dp,wi,24*12,24*32,depth); artmask=XCreatePixmap(dp,wi,24*12,24*32,depth); bgframe=XCreatePixmap(dp,wi,640,480,depth); storeage=XCreatePixmap(dp,wi,24,24*20,depth); keyevent=(XKeyEvent *)&event; buttonevent=(XButtonEvent *)&event; motionevent=(XMotionEvent *)&event; exposeevent=(XExposeEvent *)&event; clear(); numpressed=numdown=0; } void closex() { XFreeGC(dp,copygc); XFreeGC(dp,andgc); XFreeGC(dp,orgc); XFreeGC(dp,xorgc); XDestroyWindow(dp,wi); XCloseDisplay(dp); } int checkpressed(int code) { int *p,i; i=numpressed; p=pressedcodes; while(i--) if(*p++==code) return 1; return 0; } int checkdown(int code) { int *p,i; i=numdown; p=downcodes; while(i--) if(*p++==code) return 1; return 0; } int checkbutton(int button) { return buttonstate & (1<xkey.keycode) && (peekevent.xkey.time == event->xkey.time) ) { val = 1; XNextEvent(dp, &peekevent); } } return val; } void scaninput() { int i,*ip,code; numdown=0; buttondown=0; while(XCheckMaskEvent(dp,~0,&event)) switch(event.type) { case KeyPress: code=XLookupKeysym(keyevent,0); if(numdownbutton; buttonstate|=i; buttondown|=i; break; case ButtonRelease: buttonstate&=~(1<button); break; case MotionNotify: mxpos=motionevent->x; mypos=motionevent->y; break; case Expose: copyup(); needwhole=0; break; case FocusOut: numpressed=0; break; } } void fontinit() { uchar *p="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.:!?#/\\*-,>< ="; int i; for(i=0;i<128;i++) fmap[i]=53; i=0; while(*p) { fmap[tolower(*p)]=fmap[*p++]=i++; } } void writechar(int x,int y,uchar ch) { int sx,sy,ch2; ch2=fmap[ch]; sx=216+((ch2%9)<<3); sy=120+12*(ch2/9); XCopyArea(dp,artwork,bgframe,copygc,sx,sy,8,12,x,y); } void clear() { XSetForeground(dp,copygc,0); XFillRectangle(dp,bgframe,copygc,0,0,640,480); } void xflush() {XFlush(dp);} void xsync() {XSync(dp,0);} void drawbox(int x,int y,int size,int color) { XSetForeground(dp,copygc,xcolors[color]); XDrawRectangle(dp,bgframe,copygc,x,y,size,size); } void drawbox2(int x,int y,int sizex,int sizey,int color) { XSetForeground(dp,copygc,xcolors[color]); XDrawRectangle(dp,bgframe,copygc,x,y,sizex,sizey); } void drawfillrect(int x,int y,int size,int color) { XSetForeground(dp,copygc,xcolors[color]); XFillRectangle(dp,bgframe,copygc,x,y,size,size); } void bigpixel(int x,int y,int color) { XSetForeground(dp,copygc,xcolors[color]); XFillRectangle(dp,bgframe,copygc,x,y,8,8); } void invert(int x,int y) { XSetForeground(dp,xorgc,0xffffffff); XFillRectangle(dp,bgframe,xorgc,x,y,11,11); } int getmousex() { return mxpos;} int getmousey() { return mypos;} void drawsquare(int x,int y,uchar *source) { int i,j; for(j=0;j<24;j++) for(i=0;i<24;i++) XPutPixel(myimage,i,j,xcolors[*source++]); XPutImage(dp,bgframe,copygc,myimage,0,0,x,y,24,24); } void colormapon() { int alloc; Visual *visual; visual = DefaultVisual(dp, screen); switch (visual->class) { case StaticGray: case StaticColor: case TrueColor: alloc=AllocNone; break; default: alloc=AllocAll; break; } mycolormap=XCreateColormap(dp,wi,DefaultVisual(dp,screen),alloc); XSetWindowColormap(dp,wi,mycolormap); } void colormapoff() { XSetWindowColormap(dp,wi,cmap); XFreeColormap(dp,mycolormap); } int xcolors[256]; void palette(uchar *pal) { int i; XColor acolor; Visual *visual; int res; visual = DefaultVisual(dp, screen); if ((visual->class == StaticGray) || (visual->class == StaticColor) || (visual->class == TrueColor)) for(i=0;i<256;i++) { acolor.red=*pal++<<8; acolor.green=*pal++<<8; acolor.blue=*pal++<<8; res=XAllocColor(dp,mycolormap,&acolor); xcolors[i]=acolor.pixel; } else for(i=0;i<256;i++) { acolor.red=*pal++<<8; acolor.green=*pal++<<8; acolor.blue=*pal++<<8; acolor.pixel=i; acolor.flags=DoRed | DoGreen | DoBlue; xcolors[i]=i; XStoreColor(dp,mycolormap,&acolor); } } void drawstring(char *str,int x,int y,int color) { XSetForeground(dp,copygc,xcolors[color]); XDrawString(dp,bgframe,copygc,x,y+12,str,strlen(str)); } xscavenger-1.4.4/src/sound.c0100644000175000001440000001006707572573712014632 0ustar dashusers/* SCAVENGER by David Ashley dash@xdr.com */ #include #include #include #include #include #include #include #include #include #include #include "scav.h" #include "sound.h" #define SOUNDDEV "/dev/dsp" char dirlist[512]; #define NUMSOUNDS (sizeof(soundnames)/sizeof(char*)) #define MIXMAX 16 #define SOUND_EXIT -2 #define SOUND_QUIET -1 char *soundnames[] = { "fall.raw", "dig.raw", "pop.raw", "victory.raw", "death.raw" }; typedef struct sample { char *data; int len; } sample; sample samples[NUMSOUNDS]; int soundworking=0; int fragment; int dsp; int soundwrite,soundread; int *soundbuffer; int soundbufferlen; void soundinit(void) { int fd[2]; char devname[256]; int value; sprintf(dirlist,"%s/%s,%s",localname,localdirname,libname); soundworking=0; pipe(fd); soundread=fd[0]; soundwrite=fd[1]; if(fork()) { close(soundread); return; } close(soundwrite); memset(samples,0,sizeof(samples)); strcpy(devname,SOUNDDEV); dsp=open(devname,O_WRONLY); if(dsp<0) goto failed; fragment=0x20009; ioctl(dsp,SNDCTL_DSP_SETFRAGMENT,&fragment); value=10000; ioctl(dsp,SNDCTL_DSP_SPEED,&value); value=0; ioctl(dsp,SNDCTL_DSP_STEREO,&value); ioctl(dsp,SNDCTL_DSP_GETBLKSIZE,&fragment); if(!fragment) {close(dsp);goto failed;} soundbufferlen=fragment*sizeof(int); soundbuffer=malloc(soundbufferlen); if(!soundbuffer) goto failed; value=fcntl(soundread,F_SETFL,O_NONBLOCK); soundworking=1; failed: doall(); exit(0); } int readsound(int num) { char name[256],*p1,*p2,ch; int i,file,size,len; p1=dirlist; for(;;) { p2=name; while(*p1 && (ch=*p1++)!=',') *p2++=ch; if(p2>name && p2[-1]!='/') *p2++='/'; strcpy(p2,soundnames[num]); file=open(name,O_RDONLY); if(file>=0) break; if(!*p1) { samples[num].len=-1; return 0; } } size=lseek(file,0,SEEK_END); lseek(file,0,SEEK_SET); len=samples[num].len=(size+fragment-1)/fragment; len*=fragment; p1=samples[num].data=malloc(len); if(p1) { i=read(file,p1,size); if(len-size) memset(p1+size,0,len-size); while(size--) *p1++ ^= 0x80; } else samples[num].data=0; close(file); } doall() { unsigned char clip[8192]; int i,j; signed char commands[64],commandlen,com; signed char *p; int *ip; int playing[MIXMAX],position[MIXMAX]; int which; while(!soundworking) { commandlen=read(soundread,commands,1); if(commandlen!=1) { /* If we get EOF or EPIPE on the input, it means the * main game process has died; so we quit as well */ if (commandlen==0 || (commandlen<0 && errno==EPIPE)) exit(0); continue; } com=*commands; if(com==SOUND_EXIT) exit(0); } for(i=0;i<8192;i++) { j=i-4096; clip[i]=j > 127 ? 255 : (j<-128 ? 0 : j+128); } for(i=0;i=64 && com<64+NUMSOUNDS) { com-=64; for(i=0;i #include #include #include #include #include #include #include #include #include #include "scav.h" #include "x.h" #include "names.h" #include "sound.h" #include "anim.h" #include "edit.h" /*void mode0(),mode1(),mode2(),mode3(),mode4(),mode5(),mode6(); */ unsigned long slowdown; int slowdownval; int slowdowns[]={0xffffffff,0xfefefefe,0xeeeeeeee,0xaaaaaaaa,0x44444444}; char demolevel0[]={ 0x04,0x44,0x44,0x07,0x00,0x06,0x60,0x00,0x70,0x44,0x44,0x40, 0x30,0x00,0x00,0x1a,0x00,0x06,0x60,0x00,0x11,0x00,0x00,0x03, 0x30,0x44,0x40,0x00,0x09,0x06,0x60,0x80,0x80,0x84,0x44,0x03, 0x31,0x00,0x01,0x11,0x11,0x12,0x21,0x11,0x11,0x10,0x00,0x13, 0x30,0x00,0x00,0x01,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x03, 0x31,0x00,0x00,0x0b,0x11,0x11,0x11,0x11,0x70,0x00,0x00,0x13, 0x30,0x00,0x70,0x00,0xb1,0x11,0x11,0x1b,0x00,0x07,0x00,0x03, 0x31,0x11,0xa0,0x00,0x00,0x11,0x11,0x00,0x00,0x0a,0x11,0x13, 0x30,0x00,0x00,0x00,0x00,0x01,0x10,0x00,0x00,0x00,0x00,0x03, 0x30,0x70,0x00,0x04,0x44,0x00,0x00,0x44,0x40,0x00,0x70,0x03, 0x31,0x11,0x11,0x10,0x00,0x31,0x13,0x00,0x01,0x11,0x11,0x13, 0x31,0x11,0x11,0x10,0x03,0x11,0x11,0x30,0x01,0x11,0x11,0x13, 0x30,0x00,0x00,0x00,0x31,0x11,0x11,0x13,0x00,0x00,0x00,0x03, 0x30,0x00,0x00,0x03,0x11,0x11,0x11,0x11,0x30,0x00,0x00,0x03, 0x30,0x00,0x70,0x31,0x11,0x11,0x11,0x11,0x13,0x07,0x00,0x03 }; char demomovie0[]={ 0xba,0xa9,0x00,0x00,0x6c,0x6f,0x72,0x64,0x20,0x64,0x61,0x76, 0x65,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x66,0x03,0x10, 0x02,0x01,0x00,0x05,0x03,0x2c,0x02,0x52,0x00,0x2e,0x01,0x69, 0x04,0x08,0x05,0x19,0x04,0x07,0x05,0x19,0x04,0x05,0x05,0x05, 0x00,0x2e,0x03,0x04,0x00,0x06,0x05,0x03,0x00,0x18,0x04,0x07, 0x05,0x06,0x00,0x18,0x03,0x06,0x00,0x09,0x05,0x08,0x00,0x20, 0x03,0x0e,0x00,0xcd,0x04,0x1d,0x01,0x0d,0x03,0x06,0x01,0x33, 0x03,0x0d,0x04,0x08,0x05,0x2e,0x04,0x45,0x01,0x55,0x03,0x03, 0x00,0x06,0x04,0x1f,0x00,0x21,0x03,0x10,0x06,0x18,0x03,0x07, 0x06,0x03,0x03,0x05,0x00,0x15,0x04,0x0f,0x06,0x25,0x04,0x25, 0x00,0x31,0x02,0x38,0x04,0x13,0x03,0x07,0x01,0x07,0x03,0x07, 0x01,0x0d,0x03,0x06,0x01,0x10,0x03,0x06,0x01,0x0d,0x03,0x08, 0x01,0x0b,0x03,0x09,0x01,0x0d,0x03,0x0c,0x01,0x78,0x04,0x0c, 0x01,0x05,0x00,0x04,0x01,0x28,0x00,0x42,0x01,0xbe,0x03,0x08, 0x06,0x1a,0x03,0x06,0x06,0x01,0x03,0x04,0x00,0x27,0x04,0x08, 0x05,0x07,0x00,0x29,0x03,0x2e,0x00,0x28,0x03,0x01,0x00,0x26, 0x04,0x1b,0x02,0x11,0x03,0x05,0x02,0x50,0x03,0x66,0x01,0x16, 0x00,0x05,0x02,0x01,0x00,0x26,0x04,0x07,0x06,0x05,0x00,0x19, 0x03,0x07,0x06,0x27,0x03,0x31,0x01,0x23,0x04,0x10,0x00,0x07, 0x02,0x2d,0x00,0x22,0x03,0x44,0x01,0x91,0x04,0x17,0x00,0x8b, 0x03,0x8e,0x00,0x2a,0x02,0x22,0x00,0x29,0x01,0xb1,0x04,0x06, 0x05,0x05,0x04,0x08,0x00,0x0d,0x04,0x07,0x05,0x1a,0x04,0x07, 0x05,0x06,0x00,0x2e,0x03,0x05,0x00,0x06,0x05,0x03,0x00,0x18, 0x04,0x07,0x05,0x06,0x00,0x27,0x03,0x08,0x06,0x02,0x03,0x03, 0x00,0xa8,0x04,0x52,0x01,0x83,0x03,0x19,0x01 }; uchar rotbytes[]={ 0x00,0x01,0x03,0x03,0x07,0x0f,0x00,0x00, 0x01,0x02,0x06,0x0d,0x19,0x33,0x00,0x00, 0x01,0x03,0x05,0x0e,0x1e,0x3c,0x00,0x00 }; int keylist[]= { XK_a,'a',XK_b,'b',XK_c,'c',XK_d,'d',XK_e,'e',XK_f,'f',XK_g,'g',XK_h,'h', XK_i,'i',XK_j,'j',XK_k,'k',XK_l,'l',XK_m,'m',XK_n,'n',XK_o,'o',XK_p,'p', XK_q,'q',XK_r,'r',XK_s,'s',XK_t,'t',XK_u,'u',XK_v,'v',XK_w,'w',XK_x,'x', XK_y,'y',XK_z,'z',XK_space,' ',XK_Return,10,XK_BackSpace,8,XK_Escape,27, XK_0,'0',XK_1,'1',XK_2,'2',XK_3,'3',XK_4,'4', XK_5,'5',XK_6,'6',XK_7,'7',XK_8,'8',XK_9,'9', 0xff }; int marks[MARKMAX],*markpoint; char libname[256]; char localname[256]; char localdirname[256]; char resourcename[256]; char rcname[256]; uchar playername[20]; uchar bestname[20]; int fallsound; int digsound; uchar needwhole=0,needtoptext=1,needbottomtext=1; int xpos,ypos; int hc=0; int upkey,downkey,leftkey,rightkey,digleftkey,digrightkey; int hiddens[3],hiddennum; int ilevel; int file; int pty; char gfxname0[256]; char gfxname1[256]; char gfxname2[256]; char gfxname3[256]; char *gfxnames[4]={gfxname0,gfxname1,gfxname2,gfxname3}; uchar movie[MOVIEMAX+2+20]; uchar *mpoint; uchar *mend=movie+MOVIEMAX+20; long score,bestscore; int time1,time2; int playflags; gfxset gfxsets[NUMGFX]; uchar toptext[72]; uchar bottomtext[72]; uchar topwant[73]; uchar bottomwant[73]; uchar mtflag; int oldmode; int wnum; int rowbytes; int gran,gran64; long pbase; int cwin; long cwinlow,cwinhigh; int seed=1; int figseg; uchar colormap[768]; int mousex,mousey; int numenemies; int numgold; int cframe; int clevel; int bright; uchar temp[1024]; void (*mode)(); uchar playing; uchar recording; long testval=-1; uchar wonflag=0; uchar lostflag=0; uchar freezing=0; uchar randcount,randcount2; uchar smap[16]; int mbuttons,mbuttons2; int curx,cury; int rotnum; /*void mode0(),mode1(),mode2(),mode3(),mode4(); */ uchar levelbuff[LEVELSIZE]; uchar levelback[LEVELSIZE]; uchar movings[LEVELSIZE]; uchar randoms[LEVELSIZE]; int xcomp[640]; int ycomp[480]; int ycomp2[480]; int centerx[640]; int centery[480]; int cantascend[LX]; int cantdescend[LX]; int enterableo[LX+2]; int *enterable=enterableo+1; int stable[LX]; int upgoal[LX]; int downgoal[LX]; int bits[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768}; uchar calced; struct sprite spritelist[MAXSPRITES]; uchar *flashat; int flashx,flashy; int flashtimer; struct sprite *flashsprite; struct entity entities[8]; struct dig diggings[MAXDIG]; int skips[192]; int mickeyx,mickeyy; int mx,my; int offscreen; int vp=0; int tileseg; uchar *wantiff="Picture file must be in IFF format.\n"; uchar *picloc=0,*picput; int bmw,bmh,byteswide,depth; int ihand,ileft; uchar *itake; uchar ibuff[IBUFFLEN]; int bestdir,bestdist,aboveenemy,belowenemy,mask,thisdir,aboveplayer,belowplayer; void *configtab[]= { "upkey",&upkey,setint, "downkey",&downkey,setint, "leftkey",&leftkey,setint, "rightkey",&rightkey,setint, "digleftkey",&digleftkey,setint, "digrightkey",&digrightkey,setint, "background",gfxname0,setstring, "hero",gfxname1,setstring, "enemy",gfxname2,setstring, "hidden",gfxname3,setstring, "slowdown",&slowdownval,setint, 0,0,0 }; long readlong() { long val1=0; val1=myci()<<24L; val1|=myci()<<16L; val1|=myci()<<8; val1|=myci(); return val1; } int rbs() { int ch; ch=myci(); if(ch>127) ch-=256; return ch; } int myci() { if(!ileft) { ileft=read(ihand,ibuff,IBUFFLEN); if(!ileft) return -1; itake=ibuff; } ileft--; return *itake++; } uchar *doiff(uchar *name) { long type,size; uchar comp; int i,j; /* int k,d,d1; uchar *p1; */ uchar lines[8][MAXBYTES]; uchar temparea[256]; if(!picloc) { picloc=malloc(64000); if(!picloc) return "Could not allocate memory for picture.\n"; } picput=picloc; sprintf(temparea,"%s/%s/%s",localname,localdirname,name); ihand=open(temparea,O_RDONLY); if(ihand==-1) { sprintf(temparea,"%s/%s",libname,name); ihand=open(temparea,O_RDONLY); if(ihand==-1) return "Cannot open picture file.\n"; } ileft=0; type=readlong(); if(type!=FORM) {close(ihand);ihand=0;return wantiff;} readlong(); type=readlong(); if(type!=ILBM) {close(ihand);ihand=0;return wantiff;} bmw=bmh=byteswide=0; while( (type=readlong()) ) { if(type==0xffffffffL) break; size=readlong(); if(size&1) size++; if(type==BMHD) { for(i=0;i>3; bmh=temparea[2]*256+temparea[3]; depth=temparea[8]; comp=temparea[10]; /*printf("(%d,%d) %d bpp\n",bmw,bmh,depth);*/ } else if(type==BODY) { for(i=0;i=0;j--) *picput++ = fixbyte(lines+i,1<0) { ch=rbs(); if(ch>=0) { ch++; len-=ch; while(ch--) *where++=readbyte(); } else { ch=1-ch; len-=ch; ch2=readbyte(); while(ch--) *where++=ch2; } } } int getresource(int num,char *put,int len) { int input; int got; uchar buff[8]; long offset,length; long max; input=open(resourcename,O_RDONLY); if(input<0) return -1; got=read(input,buff,8); if(got!=8) return -2; if (strncmp(buff,"SCAV",4)) return -3; max=(buff[4]<<24) | (buff[5]<<16) | (buff[6]<<8) | buff[7]; if(num>=max) return 0; lseek(input,(num+1)<<3,SEEK_SET); got=read(input,buff,8); offset=(buff[0]<<24) | (buff[1]<<16) | (buff[2]<<8) | buff[3]; length=(buff[4]<<24) | (buff[5]<<16) | (buff[6]<<8) | buff[7]; if(len>length) len=length; if(!offset || !len) return 0; lseek(input,offset,SEEK_SET); got=read(input,put,len); close(input); return got; } int rlout(int handle, long value) { char buff[4]; buff[0]=value>>24; buff[1]=value>>16; buff[2]=value>>8; buff[3]=value; return write(handle,buff,4) == 4; } int putresource(int num,uchar *take,int len) { int input,output; uchar buff[8]; long offset,length; char bakname[128]; int err,got; long headers[MAXRESOURCES*2]; long max,oldnum,count; /* int j,k; long cutoff; */ int i, delta; char copybuff[1024]; if(num>=MAXRESOURCES) return -5; sprintf(bakname,"%s.bak",resourcename); input=open(resourcename,O_RDONLY); if(input==-1) return -4; got=read(input,buff,8); if(got!=8) return -2; if(strncmp(buff,"SCAV",4)) return -3; output=creat(bakname,00600); if(output==-1) {close(input);return -6;} oldnum=(buff[4]<<24) | (buff[5]<<16) | (buff[6]<<8) | buff[7]; for(i=0;i>1; offset=headers[num+num]; length=headers[num+num+1]; delta=(max-oldnum)<<3; if(offset) for(i=0;ioffset) headers[i+i]-=length; if(delta) for(i=0;i1024 ? 1024 : count; if (read(input,copybuff,got) != got) return -200; if (write(output,copybuff,got) != got) return -200; count-=got; } lseek(input,length,SEEK_CUR); } offset += (max+1) << 3; for(;;) { got=read(input, copybuff, 1024); if (!got) break; if (write (output, copybuff, got) != got) return -200; offset += got; } if(len) { if (write (output, take, len) != len) return -200; lseek (output, (num+1) << 3, SEEK_SET); if (!rlout (output, offset)) return -200; } close (input); if (fsync(output)) return -200; if (close(output)) return -200; err=rename(bakname,resourcename); if(err) return -1; return (0); } int loadlevel(int num) { int err; uchar tlevel[180]; uchar *p1,*p2; int i,j; memset(levelbuff,BORDER,LEVELSIZE); if(num) { err = getresource ((num-1) << 1, tlevel, 180); if (err != 180) return (0); } else bcopy(demolevel0,tlevel,180); p2=levelbuff+30; p1=tlevel; for(j=0;j<15;j++) { for(i=0;i<12;i++) { *p2++ = *p1>>4; *p2++ = *p1++ & 0x0f; } p2+=4; } return (1); } int rand() { int ttt; ttt=seed; seed>>=1; if(ttt&1) seed^=0xb400; return seed; } void paintlevel() { int i,j; uchar *p; int w; uchar v; /* uchar *map; */ uchar ttt[64]; p=levelbuff+30; for(j=0;jspriteflags & SPRITEACTIVE) { store(p->spritex,p->spritey,i); p->spriteflags |= SPRITESTORING; } p++; } } void restoresprites() { int i; struct sprite *p; p=spritelist; for(i=0;ispriteflags & SPRITESTORING) { restore(p->spritex,p->spritey,i); mark(p->spritex,p->spritey); p->spriteflags ^= SPRITESTORING; } p++; } } void drawsprites() { int i; struct sprite *p; p=spritelist+MAXSPRITES; for(i=0;ispriteflags & SPRITEACTIVE) { mark(p->spritex,p->spritey); puttile(p->spritex,p->spritey,p->spritefig); } } } void chainlevel(int num) { clevel=num; fadeout(); loadlevel(clevel); restoresprites(); paintlevel(); storesprites(); drawsprites(); copyup(); fadein(); } struct sprite *newsprite() { int i; struct sprite *sp; sp=spritelist; for(i=0;ispriteflags & (SPRITEACTIVE | SPRITESTORING))) break; else sp++; sp->spriteflags=SPRITEACTIVE; sp->spritex=0; sp->spritey=0; sp->spritefig=0; return sp; } void initplay() { int i,lr; uchar *p1,*p2,ch; int flashes[3]; int flashnum; struct entity *plent,*enent; int err; slowdown=slowdowns[slowdownval%5]; if(recording) randcount=randcount2%24; score=0; time1=100; time2=0; mtflag=1; mpoint=movie+20; bestname[0]=0; bestscore=0; if(clevel) err = getresource (1 + ((clevel-1) << 1), movie, MOVIEMAX+20); else bcopy(demomovie0,movie,err=sizeof(demomovie0)); if(err>0) { bestscore=movie[0] | (movie[1]<<8) | (movie[2]<<16) | (movie[3]<<24); } if(recording) { *mpoint++=randcount; *mpoint=0; } else { if(err>0) { bcopy(movie+4,bestname,16); mpoint=movie+20; randcount=*mpoint++; } } for(i=0;i<72;i++) toptext[i]=bottomtext[i]=topwant[i]=bottomwant[i]=0; lostflag=wonflag=0; playflags=0; freezing=1; for(i=0;ienx=XCONV(i); plent->eny=YCONV(i); plent->enat=p1; plent->enflags=PLAYER; plent->endir=-1; plent->enwhat=lr; plent->enacount=0; movings[i]|=plent->enmask=0x80; } else if(ch==ENEMY) { ch=EMPTY; numenemies++; enent++; enent->enx=XCONV(i); enent->eny=YCONV(i); enent->ensprite=newsprite(); enent->enat=p1; enent->enflags=0; enent->enwhat=lr; enent->enacount=0; movings[i]|=enent->enmask=0x80>>numenemies; } *p1++=ch; if(ch==GOLD) numgold++; } entities[0].ensprite=newsprite(); rotnum=numenemies-1; rethink(); if(flashnum) { i=flashes[randcount%flashnum]; flashat=levelbuff+i; flashsprite=newsprite(); flashx=XCONV(i); flashy=YCONV(i); flashtimer=0; } else flashat=0; } void maketext() { sprintf(topwant,"LEVEL %04d BEST %05ld %-18sBONUS %03d00 SCORE %05ld",clevel,bestscore,bestname,time1,score); mtflag=0; } void initdemo() { int err; fadeout(); mode=mode0; playing=1; recording=0; if(!loadlevel(clevel)) clevel=0; if(clevel) { err = getresource (1 + ((clevel-1) << 1), movie, 20); if(err<=0) clevel=0; } loadlevel(clevel); restoresprites(); initplay(); paintlevel(); maketext(); fixtext(); changesprites(); storesprites(); drawsprites(); fadein(); copyup(); } void startgame() { /* int i; */ fadeout(); playing=1; recording=1; restoresprites(); initplay(); paintlevel(); maketext(); fixtext(); changesprites(); storesprites(); drawsprites(); copyup(); fadein(); } void spritesoff() { struct entity *en; struct sprite *sp; struct dig *adig; int i; restoresprites(); en=entities; for(i=0;iensprite); adig=diggings; for(i=0;idigtimer && (sp=adig->digsprite)) SPRITEOFF(sp); adig++; } if(flashat) {SPRITEOFF(flashsprite);flashat=0;} } void lefttext(uchar *txt) { int ptx; uchar ch; ptx=100; while ((ch=*txt++)) { writechar(ptx,pty,ch /*,TCOLOR*/); ptx+=8; } pty+=16; } void centertext (uchar *txt) { int ptx; uchar ch; ptx=320-8*(strlen(txt)/2); while((ch=*txt++)) { writechar(ptx,pty,ch /*,TCOLOR*/); ptx+=8; } pty+=16; } void nextlevel (int type) { uchar ttt[64]; fadeout(); spritesoff(); if(type) { clear(); pty=150; centertext("YOU PASSED THE LEVEL!"); sprintf(ttt,"SCAVENGED %05ld\n",score); centertext(ttt); sprintf(ttt,"TIME BONUS %03d00\n",time1); centertext(ttt); score+=time1*100; if(!(playflags&HASTRAPPED)) { centertext("NO TRAPPING 20000\n"); score+=20000; } else if(!(playflags&HASKILLED)) { centertext("NO KILLING 10000\n"); score+=10000; } centertext("-----------"); sprintf(ttt, "\nFINAL SCORE %05ld\n",score); centertext(ttt); if(score>bestscore) { centertext(""); sprintf(ttt,"YOU JUST GOT THE HIGH SCORE FOR LEVEL %04d!!!",clevel); centertext(ttt); movie[0]=score; movie[1]=score>>8; movie[2]=score>>16; movie[3]=score>>24; bcopy(playername,movie+4,16); /* { int tf; tf=creat("tmovie",00600); if(tf!=-1) { write(tf,movie,mpoint-movie+2); close(tf); } } */ putresource(((clevel-1)<<1)+1,movie,mpoint-movie+2); } fadein(); copyup(); for(;;) { pause(); scaninput(); if(checkdown(XK_space) || checkdown(XK_Escape)) /* space or ESC */ break; } fadeout(); clear(); } clevel++; if(!loadlevel(clevel)) { clevel=1; loadlevel(clevel); } initplay(); paintlevel(); maketext(); fixtext(); changesprites(); storesprites(); drawsprites(); copyup(); fadein(); } void samelevel() { int i; fadeout(); spritesoff(); for(i=0;ienx,en->eny); a=en->enacount>>1; what=en->enwhat; switch(what) { case 0: if(ch==LADDER) a+=72; else a+=12; break; case 1: a+=72; /* climbing up */ break; case 2: if (en->enflags&FALLING || en->enflags&UNSTABLE) a+=60; /* falling */ else a+=72; /* climbing down */ break; case 3: if(ch==RAIL) a+=36; /* climbing left on rail */ else a+=12; /* running left */ break; case 4: if(ch==RAIL) a+=48; /* climbing right on rail */ else a+=24; /* running right */ break; case 5: a+=84; /* dig left */ break; case 6: a+=90; /* dig right */ break; } return a; } void changesprites() { struct sprite *sp; struct entity *en; struct dig *adig; int time; int i; if(playing) { en=entities; sp=en->ensprite; sp->spritex=en->enx; sp->spritey=en->eny; i=sp->spritefig=whichfig(en)+96; /* if(i==12+96+3 || i==24+96+3 || i==12+96+9 || i==24+96+9) makesound(4);*/ for(i=0;iensprite; sp->spritex=en->enx; sp->spritey=en->eny; sp->spritefig=whichfig(en)+192; if(en->enflags & HIDDENTYPE) sp->spritefig+=96; } adig=diggings; for(i=0;idigtimer; sp=adig->digsprite; if(time>=1 && time<=DIGTIME) { sp->spritex=adig->digx; sp->spritey=adig->digy; sp->spritefig=DIGFIGS+1+((time-1)>>2); } else if(time>=DIGLIFE-DIGTIME) { sp->spritex=adig->digx; sp->spritey=adig->digy; sp->spritefig=DIGFIGS+((DIGLIFE-time-1)>>2); } adig++; } if(flashat) { flashsprite->spritex=flashx; flashsprite->spritey=flashy; if(flashtimer<8) flashsprite->spritefig=FLASHFIGS+(flashtimer>>1); else if(flashtimer<16) flashsprite->spritefig=FLASHFIGS+7-(flashtimer>>1); else flashsprite->spritefig=DIGFIGS; /* empty fig */ flashtimer++; flashtimer&=63; } } } void fadein() { } void fadeout() { } int iterate() { uchar pausing; pause(); randcount2++; pausing=0; do { if(pausing) pause(); scaninput(); if((checkpressed(XK_Alt_L) || checkpressed(XK_Meta_L)) && checkdown(XK_x)) return 1; /* alt-x */ if(checkdown(XK_Pause) && playing) pausing^=1; } while(pausing); mbuttons=(checkbutton(1) ? 1 : 0) | (checkbutton(3) ? 2 : 0); mbuttons2=(checkbuttondown(1) ? 1 : 0) | (checkbuttondown(3) ? 2 : 0); xpos=getmousex(); ypos=getmousey(); if(xpos<0) xpos=0; if(xpos>639) xpos=639; if(ypos<0) ypos=0; if(ypos>479) ypos=479; curx=xpos; cury=ypos; restoresprites(); animprocess(); editprocess(); slowdown=(slowdown>>1) | ((slowdown&1)<<31); if(slowdown&1) { movement(); dodiggings(); dectime(); } if(playing && mtflag) maketext(); fixtext(); if(slowdown&1) changesprites(); storesprites(); drawsprites(); if(needwhole) { markpoint=marks; needwhole=0; copyup(); } else { domarks(); if(needtoptext) { needtoptext=0; copyupxysize(TEXTX,TOPTEXTY,12*72,12); } if(needbottomtext) { needbottomtext=0; copyupxysize(TEXTX,BOTTOMTEXTY,12*72,12); } } /* xflush();*/ xsync(); mode(); if(checkdown(XK_Sys_Req)) capturescreen(); return 0; } uchar *getgfx(int num) { uchar *p; gfxset *gs; p=doiff(gfxnames[num]); if(p) { sprintf(temp,"%s:%s",gfxnames[num],p); return temp; } gs=gfxsets+num; if(!gs->gs_pic) gs->gs_pic=malloc(64000); if(!gs->gs_pic) return "Could not allocate memory for gfx set.\n"; bcopy(picloc,gs->gs_pic,64000); bcopy(colormap,gs->gs_colormap,768); return 0; } void setint(char *ip,int *op) { sscanf(ip,"%x",op); } void setstring(char *ip,char *op) { strcpy(op,ip); } void getconfig() { int i,j,md; uchar *p,ch; uchar name[16]; void **pnt; /* uchar ahex; */ char name2[256]; void (*func)(); char *op; sprintf(name2,"%s/%s/%s",localname,localdirname,rcname); file=open(name2,O_RDONLY); if(file==-1) return; i=read(file,temp,1023); temp[i]=0; p=temp; md=0; for(;;) { ch=tolower(*p++); if(!ch) break; if(ch==13) continue; switch(md) { case 0: if(ch==10) break; if(ch=='#' || ch<'a' || ch>'z') { md=1; break; } i=0; md=2; case 2: if(ch<'a' || ch>'z') { if(ch=='=') { name[i]=0; i=0; pnt=configtab; j=0; while(*pnt) { if(!strcmp(*pnt++,name)) break; j++; pnt+=2; } op=name2; func=pnt[1]; md=3; } else md=0; break; } if(i<15) { name[i++]=ch; } else md=0; break; case 1: if(ch==10) md=0; break; case 3: if(ch && ch!=10) *op++=ch; else { *op=0; if(func) func(name2,*pnt); md=0; } break; } } } void remslash(char *str) { int i; i=0; while(*str) {i++;str++;} while(i-- && *--str=='/') *str=0; } int dupfile(char *src, char *dest) { int input,output,len,res; char buff[1024]; input=open(src,O_RDONLY); if(input==-1) return -1; output=creat(dest,00600); if(output==-1) { close(input); return -2; } do { len=read(input,buff,1024); res=write(output,buff,len); if(len!=res) { close(input); close(output); return -3; } } while(len); return 0; } void finddata() { char *p; int file,err; /* char temp2[256]; */ strcpy(libname,LIBNAME); strcpy(localdirname,LOCALDIRNAME); strcpy(rcname,RCNAME); p=getenv(ENVHOME); if(!p) { printf("Cannot find %s environment variable!\n",ENVHOME); exit(1); } strcpy(localname,p); remslash(localname); sprintf(temp,"%s/%s",localname,localdirname); file=open(temp,O_RDONLY); if(file==-1) { printf("No %s/!!! Setting one up...\n",temp); err=mkdir(temp,00700); if(err==-1) { printf("Failed to create directory %s, exiting\n",temp); exit(1); } } sprintf(resourcename,"%s/%s/%s",localname,localdirname,LEVELSNAME); file=open(resourcename,O_RDONLY); if(file==-1) { printf("No %s, setting one up...\n",resourcename); sprintf(temp,"%s/%s",libname,LEVELSNAME); printf("Trying to copy %s...",temp); err=dupfile(temp,resourcename); if(err) { printf("failed to copy\n"); exit(1); } printf("...copied.\n"); } else close(file); makercname(temp); file=open(temp,O_RDONLY); if(file==-1) { printf("No %s, setting one up...\n",temp); strcpy(gfxname0,"redbrick.lbm"); strcpy(gfxname1,"regularguy.lbm"); strcpy(gfxname2,"badguy.lbm"); strcpy(gfxname3,"spiralthing.lbm"); upkey=XK_KP_Up; downkey=XK_KP_Begin; leftkey=XK_KP_Left; rightkey=XK_KP_Right; digleftkey=XK_KP_Home; digrightkey=XK_KP_Page_Up; if(!makercfile(temp)) { printf("Couldn't create %s\n",temp); exit(1); } } } void makercname(char *str) { sprintf(str,"%s/%s/%s",localname,localdirname,rcname); } int makercfile(char *str) { FILE *file; file=fopen(str,"w"); if(!file) return 0; fprintf(file,"background=%s\n",gfxname0); fprintf(file,"hero=%s\n",gfxname1); fprintf(file,"enemy=%s\n",gfxname2); fprintf(file,"hidden=%s\n",gfxname3); fprintf(file,"upkey=%x\n",upkey); fprintf(file,"downkey=%x\n",downkey); fprintf(file,"leftkey=%x\n",leftkey); fprintf(file,"rightkey=%x\n",rightkey); fprintf(file,"digleftkey=%x\n",digleftkey); fprintf(file,"digrightkey=%x\n",digrightkey); fprintf(file,"slowdown=%d\n",slowdownval); fclose(file); return 1; } void thandler(int val) { signal(SIGALRM,thandler); hc++; } int main (int argc, char** argv) { struct itimerval itval; int i,j; /* long time1;*/ uchar *err; finddata(); if(fork()) return 0; openx(argc,argv); soundinit(); for(i=0;i1) { ilevel=atoi(argv[1]); } else ilevel=1; animinit(); editinit(); fontinit(); err=getenv(ENVUSER); if(err) strncpy(playername,err,16); else strcpy(playername,"anonymous"); sprintf(temp,"%s/%s/%s",localname,localdirname,PLAYERNAME); file=open(temp,O_RDONLY); if(file!=-1) { read(file,playername,16); close(file); } for(i=0;i<16;i++) smap[i]=0; smap[BRICK]=1; smap[CEMENT]=1; smap[HIDDEN]=1; smap[FAKE]=1; smap[DUGBRICK]=1; for(i=0;i=0) printf("Testval=%lx\n",testval); return 0; } void createhidden(int at) { struct entity *enent; rotnum++; numenemies++; enent=entities+numenemies; enent->enx=XCONV(at); enent->eny=YCONV(at); enent->ensprite=newsprite(); enent->enat=levelbuff+at; enent->enflags=HIDDENTYPE | HOLDING | TRAPPED; enent->enwhat=3; enent->enacount=0; enent->entimer=0; enent->enat=enent->enloc1=at+levelbuff; movings[at]|=enent->enmask=0x80>>numenemies; } void newdig(uchar *at) { int i,j; struct dig *adig; int x,y; i=at-levelbuff; digsound=makesound(1); for(j=0;jdigtimer==0) break; else adig++; if(i==MAXDIG) return; adig->digx=x; adig->digy=y; adig->digat=at; adig->digtimer=-1; adig->digsprite=0; } int onenemy(struct entity *pl, int what) { struct entity *en; int i; int px,py; int dx,dy; en=entities+1; px=pl->enx; py=pl->eny; i=numenemies; while(i--) { dx=en->enx-px; dy=en->eny-py; if(dx<0) dx=-dx; if(dy<=28 && dy>=16 && dx<18) { if(!centery[pl->eny] && (what==3 || what==4)) { pl->entimer=0; pl->enflags|=HELDSTABLE; if (en->enflags&FALLING) pl->enflags|=UNSTABLE; return 1; } if(dy<=24) { if (en->enflags&FALLING) pl->enflags|=UNSTABLE; return 1; } } en++; } i=movings[28+COMPXY(px,py)-levelbuff]&0x7f; if(i) { en=entities+1; while(!(i&en->enmask)) en++; if(py+24==en->eny) return 1; } return 0; } void fix(uchar *where) { uchar v; uchar ch; ch=*where; if(ch==BORDER) return; addmodify(where-levelbuff,12*randoms[where-levelbuff]); v=smap[*(where-28)]; v|=smap[*(where-29)]<<1; v|=smap[*(where-1)]<<2; if(v) addmodifyq(where-levelbuff,SHADOWFIGS+v); if(*where!=EMPTY) addmodifyq(where-levelbuff, ch!=HAT ? ch+12*randoms[where-levelbuff] : HATFIGS); } void doplayer(struct entity *pl, int what) { uchar *at; uchar ch; uchar *oldat; uchar stillheld=0; int cy; int flags; if(pl->enflags & FALLING) pl->enflags |= OLDFALLING; else pl->enflags &= 0xffff-OLDFALLING; if(recording && mpointenx,pl->eny); cy=centery[pl->eny]; if(pl->enflags & DIGGING) /* suspend player while digging */ { pl->enx+=centerx[pl->enx]; pl->eny+=cy; pl->entimer++; if(pl->entimer==DIGTIME) { pl->enflags&=0xffff-DIGGING; } else { what=0; goto dpdone; } } if((pl->enflags & HELDSTABLE) && pl->entimer++ endir) stillheld++; pl->enflags &= 0xffff-UNSTABLE; /* player is stable unless we find him * standing on enemy */ if(!ISSTABLE(*COMPXY(pl->enx,pl->eny+TY/2)) && *COMPXY(pl->enx,pl->eny)!=3 && !(*oldat==RAIL && cy==0 && what!=2) && !(pl->enflags&DIGGING) && !onenemy(pl,what) && !stillheld) { what=0; pl->enflags|=FALLING; pl->enwhat=2; } else pl->enflags&=0xffff-FALLING; switch(what) { case 0: if(pl->enflags & FALLING) { pl->eny+=2; pl->enx+=centerx[pl->enx]; } break; case 1: if(!numgold && pl->eny==YOFF && *COMPXY(pl->enx,pl->eny)==3) { wonflag++; return; } if(ISENTERABLE(*COMPXY(pl->enx,pl->eny-TY/2-2)) && (*COMPXY(pl->enx,pl->eny)==3 || *COMPXY(pl->enx,pl->eny+TY/2-2)==3) ) { pl->eny-=2; pl->enx+=centerx[pl->enx]; } else what=0; break; case 2: ch=*COMPXY(pl->enx,pl->eny+TY/2); if(ISENTERABLE(ch) || ch==5) { pl->eny+=2; pl->enx+=centerx[pl->enx]; } else what=0; break; case 3: if(pl->enflags & HELDSTABLE && pl->entimer==0) pl->endir=3; if(ISENTERABLE(*COMPXY(pl->enx-TX/2-2,pl->eny))) { pl->enx-=2; pl->eny+=cy; } else what=0; break; case 4: if(pl->enflags & HELDSTABLE && pl->entimer==0) pl->endir=4; if(ISENTERABLE(*COMPXY(pl->enx+TX/2,pl->eny))) { pl->enx+=2; pl->eny+=cy; } else what=0; break; case 5: case 6: at=COMPXY(pl->enx,pl->eny); at+= what==5 ? -1 : 1; if(*(at+28)==1 && (*at==0 || *at==DUGBRICK) && !(pl->enflags & FALLING) && !(at[(movings-levelbuff)]&0x7f)) { newdig(at+28); pl->enflags|=DIGGING; pl->entimer=0; pl->enwhat=what; /* start digging animation */ pl->enacount=0; break; } else what=0; what=0; break; } dpdone: at=COMPXY(pl->enx,pl->eny); if(*at==BRICK) lostflag++; if((*at==GOLD || *at==HAT) && centerx[pl->enx]==0 && centery[pl->eny]==0) { makesound(2); if(*at==GOLD) { *at=EMPTY; if(flashat!=at) score+=250; else score+=8000; mtflag++; fix(at); decgold(); if(flashat) { flashat=0; SPRITEOFF(flashsprite); } } else { *at=EMPTY; score+=10000; mtflag++; fix(at); } } if(at!=oldat) { calced=0; movings[oldat-levelbuff]&=0xff-pl->enmask; movings[at-levelbuff]|=pl->enmask; } if(movings[at-levelbuff]&0x7f) lostflag++; if((pl->enflags & DIGGING) && pl->enwhat>=5) { if (++pl->enacount >= 12) { /* digging animation */ pl->enwhat-=2; /* digging animation done */ pl->enacount=0; goto dpdone2; } } else if (what || (pl->enflags&FALLING) || (pl->enflags&UNSTABLE && !(pl->enflags&DIGGING))) pl->enacount++; else pl->enacount=0; if(pl->enacount>=24) pl->enacount=0; if(what) pl->enwhat=what; dpdone2: flags=pl->enflags; if((flags&FALLING) && !(flags&OLDFALLING)) fallsound=makesound(0); if(!(flags&FALLING) && (flags&OLDFALLING)) stopsound(fallsound); } void addmodify (int where, int what) { int x,y; x=XCONV(where); y=YCONV(where); mark(x,y); puttile(x,y,what); } void addmodifyq (int where, int what) { puttile(XCONV(where),YCONV(where),what); } void decgold() { int i; numgold--; if(numgold) return; for(i=0;idigtimer) { time= ++adig->digtimer; if(!time) time=++adig->digtimer; if(timedigat-28)==BRICK || movings[adig->digat-levelbuff-28]) { stopsound(digsound); *adig->digat=BRICK; if(adig->digsprite) SPRITEOFF(adig->digsprite); adig->digsprite=0; entities[0].enflags &=0xffff-DIGGING; adig->digtimer=0; continue; } } if(time==1 || time==DIGLIFE-DIGTIME) { if(time==1) *adig->digat=CEMENT; adig->digsprite=newsprite(); if(time!=1) addmodify(adig->digat-levelbuff,BRICK + 12*randoms[adig->digat-levelbuff]); } else if(time==DIGTIME+1 || time==DIGLIFE) { SPRITEOFF(adig->digsprite); adig->digsprite=0; if(time==DIGLIFE) { adig->digtimer=0; *adig->digat=BRICK; closebrick(adig->digat); if((ch=(movings[adig->digat-levelbuff] & 0x7f))) { en=entities+1; while(!(ch & en->enmask)) en++; killenemy(en); } } else { if(movings[adig->digat-levelbuff] & 0x7f) { *adig->digat=CEMENT; } else { *adig->digat=DUGBRICK; openbrick(adig->digat); } addmodify(adig->digat-levelbuff,DIGFIGS+6); } } } } } void rethink() { int i,j,b1,b2,sb; uchar ch1,ch2; uchar *p,*p2; p=levelbuff+30; for(i=0;ipx) j--; t=stable[i] & stable[j] & enterable[j]; upgoal[i]=(t & aboveplayer) | cantascend[i]; downgoal[i]=(t & belowplayer) | cantdescend[i]; } } int findbest(int expos, int eypos) { int px,py; int ex,ey; int i; int b1; px=xcomp[entities[0].enx]-2; py=ycomp[entities[0].eny]; ex=xcomp[expos]-2; ey=ycomp[eypos]; b1=bits[ey]; if(py==ey) { if(px==ex) return 0; i=ex; if(i>1)+1; if(delta>=1; ax&=mask; if(!ax) return 1; if(ax & aboveplayer) { if((mask=-(ax+ax) & aboveplayer)) return bestdir=thisdir; mask=(aboveplayer>>1)+1; if(delta>=1),(en++),i++) { #define TRAPTIME 130 #define LIFTTIME1 12 #define LIFTTIME2 7 if(rotbyte&1) { moved=0; what=0; oldat=COMPXY(en->enx,en->eny); want=findbest(en->enx,en->eny); en->enflags &=0xffff-FALLING; if(en->enflags & TRAPPED) { k=en->enflags; if(((k&HIDDENTYPE) && (k&HOLDING)) || !(k&HIDDENTYPE)) en->entimer++; j=en->entimer; if(jenflags &= 0xffff-TRAPPED; if(*en->enloc1==CEMENT) { *en->enloc1=DUGBRICK; openbrick(en->enloc1); } } else if(jenloc1-levelbuff)-28; if(levelbuff[j]==1 || (movings[j]&(0x7f-en->enmask)) || (!findbest(XCONV(j),YCONV(j)) && !(movings[j]&0x80))) { en->entimer--; what=0; } else what=1; goto doit; } else { what=want; goto doit; } } if(en->enflags & DEAD) { what=0; if(!en->entimer) { if(en->enflags & HIDDENTYPE) { rotnum--; numenemies--; movings[oldat-levelbuff]&=0xffff-en->enmask; if(*(oldat-28)==HAT) { *(oldat-28)=EMPTY; fix(oldat-28); } SPRITEOFF(en->ensprite); continue; } if(en->enflags & HOLDING) { en->enflags &=0xffff-HOLDING; decgold(); } k=randcount; at=levelbuff+30+k; for(;;) { if(!*at) break; k++;at++; if(k==LX) {k=0;at-=LX;} } en->enx=XCONV(at-levelbuff); en->eny=YCONV(at-levelbuff); } j=en->entimer++; if(j==DEADTIME) en->enflags &=0xffff-DEAD; else goto doit; } if(!ISSTABLE(*COMPXY(en->enx,en->eny+TY/2)) && *oldat!=3 && !(*COMPXY(en->enx,en->eny+TY/2-1)==4 && centery[en->eny]==0)) { what=0; en->enflags |=FALLING; en->enwhat=2; /* switch to falling anim */ } else what=want; doit: switch(what) { case 1: if(ISENTERABLE(*COMPXY(en->enx,en->eny-TY/2-2))) { en->enx+=centerx[en->enx]; en->eny-=2; moved++; } else what=0; break; case 0: if(!(en->enflags & FALLING)) break; case 2: en->enx+=centerx[en->enx]; en->eny+=2; moved++; if(*oldat==DUGBRICK && centerx[en->enx]==0 && centery[en->eny]==0) { en->enflags|=TRAPPED; if(!(en->enflags & HIDDENTYPE)) playflags|=HASTRAPPED; en->entimer=0; *oldat=CEMENT; en->enloc1=oldat; closebrick(oldat); if(en->enflags & HOLDING) { en->enflags &=0xffff-HOLDING; if(*(oldat-28)==EMPTY) { *(oldat-28)=(en->enflags & HIDDENTYPE) ? HAT : GOLD; fix(oldat-28); } else decgold(); } } break; case 3: ch2=movings[oldat-levelbuff]; ch=(ch2&(en->enmask-1)) | (movings[COMPXY(en->enx-TX/2,en->eny)-levelbuff] & (0xff-ch2)); if(!(ch & (0x7f-en->enmask))) { en->enx-=2; moved++; if(!(en->enflags & TRAPPED)) en->eny+=centery[en->eny]; } else what=0; break; case 4: ch2=movings[oldat-levelbuff]; ch=(ch2&(en->enmask-1)) | (movings[COMPXY(en->enx+TX/2,en->eny)-levelbuff] & (0xff-ch2)); if(!(ch & (0x7f-en->enmask))) { en->enx+=2; moved++; if(!(en->enflags & TRAPPED)) en->eny+=centery[en->eny]; } else what=0; break; } testdead: if(what) en->enwhat=what; at=COMPXY(en->enx,en->eny); /* if(*at==1) { killenemy(en); } */ if(oldat!=at) { movings[oldat-levelbuff]&=0xff-en->enmask; movings[at-levelbuff]|=en->enmask; if(*oldat==DUGBRICK && at==oldat+28 && (en->enflags & HOLDING)) { en->enflags &=0xffff-HOLDING; if(!(en->enflags&HIDDENTYPE)) decgold(); } } if(moved && !centerx[en->enx] && !centery[en->eny]) { if((en->enflags & (HOLDING|HIDDENTYPE))==HOLDING) { if(en->enholdcount) en->enholdcount--; if(*at==EMPTY && !en->enholdcount) { ch=*(at+28); if(ch==BRICK || ch==DUGBRICK || ch==LADDER || ch==CEMENT || ch==BORDER) { en->enflags&=0xffff-HOLDING; *at=GOLD; fix(at); } } } else { if(*at==GOLD && at!=flashat && !(en->enflags&HIDDENTYPE)) { *at=EMPTY; en->enflags|=HOLDING; fix(at); en->enholdcount=randcount; } } } if(what || (en->enflags&FALLING)) en->enacount++; else en->enacount=0; if(en->enacount>=24) en->enacount=0; } } } void killenemy(struct entity *en) { if(en->enflags & DEAD) return; en->enflags &=0xffff-TRAPPED; en->enflags |=DEAD; if(!(en->enflags&HIDDENTYPE)) playflags|=HASKILLED; en->entimer=0; } void movement() { int what; if(!playing) return; if(!recording) { what=*(mpoint+1); --*mpoint; if(!*mpoint) mpoint+=2; } else { what=0; if(checkpressed(digleftkey)) what=5; else if(checkpressed(digrightkey)) what=6; else if(checkpressed(upkey)) what=1; else if(checkpressed(downkey)) what=2; else if(checkpressed(leftkey)) what=3; else if(checkpressed(rightkey)) what=4; } if(freezing & !what) return; freezing=0; randcount++; if(randcount>=24) randcount=0; doplayer(entities,what); doenemies(); } void mark(int x,int y) { if(markpoint==marks+MARKMAX) needwhole=1; else { *markpoint++=x; *markpoint++=y; } } void domarks() { int *ip,x,y; ip=marks; while(ip 0 && checkdown(XK_F7)) /* f7 */ { quiet(); makesound(3); waitsound(); fadeout(); endplay(); clevel--; initdemo(); } else if(wonflag || checkdown(XK_F8)) /* f8 */ { quiet(); makesound(3); waitsound(); fadeout(); endplay(); clevel++; initdemo(); } } void mode1() /* playing game */ { if(checkdown(XK_q) || checkdown(XK_Escape)) /* q or escape */ { fadeout(); endplay(); initdemo(); } if (clevel > 0 && checkdown(XK_F7)) /* f7 */ { quiet(); makesound(3); waitsound(); clevel -= 2; nextlevel(wonflag); } else if(wonflag || checkdown(XK_F8)) /* f8 */ { quiet(); makesound(3); waitsound(); nextlevel(wonflag); } else if(lostflag || checkdown(XK_k)) /* k */ { quiet(); makesound(4); waitsound(); samelevel(); } } void csline(uchar *put, int line) { } void capturescreen() { uchar name[16]; int i; i=0; for(;;) { sprintf(name,"CAP%03d.lbm",i++); file=open(name,O_RDONLY); if(file!=-1) close(file); else break; } writeiff(name,640,480,csline,colormap); } int makesound(int num) { playsound(num); return num; } void stopsound(int num) { playsound(num+64); } void quiet() { /*play_sound(-1); needs waitsound() */ } void waitsound() {} xscavenger-1.4.4/src/edit.c0100644000175000001440000001433407035030775014417 0ustar dashusers/* SCAVENGER by David Ashley dash@xdr.com */ #include #include #include "scav.h" #include "edit.h" #include "x.h" uchar editlevel[LEVELSIZE]; int edittype; int typemap[]={XK_quoteleft,XK_1,XK_2,XK_3,XK_4,XK_5,XK_6,XK_7,XK_8,XK_9,XK_0,XK_minus,XK_equal}; uchar ewant[80]; uchar emark; uchar erepaint; uchar emodified; int etime; int edownx,edowny,edownwhere,edownb; void filllevel(uchar *p, int val) { int i,j; for(j=0;j<17;j++) for(i=0;i<28;i++) { if(j>0 && j<16 && i>1 && i<26) *p++=val; else *p++=BORDER; } } void editinit() { filllevel(editlevel,EMPTY); edittype=BRICK; etime=emark=0; emodified=0; } uchar *checks() { int i,j; int hist[16]; uchar ch; for(i=0;i<16;i++) hist[i]=0; for(i=0;i5) return "level cannot have more than 5 enemies"; if(hist[FLASHING]!=0 && hist[FLASHING]!=3) return "level must have exactly 0 or 3 flashing objects"; if(hist[HIDDEN]!=0 && hist[HIDDEN]!=3) return "level must have exactly 0 or 3 hidden enemies"; if(hist[ESCAPE] && !hist[GOLD] && !hist[FLASHING]) return "if you have escape ladders, you must have at least 1 object"; j=0; for(i=0;i<24;i++) { ch=levelbuff[i+30]; if(ch==EMPTY || ch==HERO || ch==ENEMY) j++; } if(!j) return "there must be at least 1 empty space on the top row"; return 0; } void ebox0(int which) { int x,y; x=ETYPEX+which*ETYPESPACE; y=ETYPEY; drawbox(x,y,25,ACOLOR); needwhole=1; } void ebox1(int which) { int x,y; x=ETYPEX+which*ETYPESPACE; y=ETYPEY; drawbox(x,y,25,BCOLOR); needwhole=1; } void paintedit() { int i; clear(); paintlevel(); puteinfo(); for(i=0;i<12;i++) { puttile(i*ETYPESPACE+ETYPEX+1,ETYPEY+1,i); } ebox1(edittype); copyup(); } void toedit() { int i; fadeout(); restoresprites(); for(i=0;i1) { clevel--; etime=1; } } else if(checkdown(XK_KP_Subtract) && !emodified) /* #pad - */ { if(clevel>1) { clevel--; etime=1; } if(loadlevel(clevel)) { emodified=0; erepaint=2; } } else if(checkdown(XK_Right)) /* right arrow */ { clevel++; etime=1; } else if(checkdown(XK_KP_Add) && !emodified) /* #pad + */ { clevel++; etime=1; if(loadlevel(clevel)) { emodified=0; erepaint=2; } } else if(checkdown(XK_l)) /* l */ { if(emodified && !checkpressed(XK_Alt_L) && !checkpressed(XK_Meta_L)) centermsg("use alt-l to load over current level"); else if(loadlevel(clevel)) { emodified=0; erepaint=2; } } if(checkdown(XK_w)) /* w */ { if((p=checks())) { centermsg(p); } else { i=1; if(clevel==0) { i=0; centermsg("cannot write level 0"); } if(i && !checkpressed(XK_Alt_L) && !checkpressed(XK_Meta_L)) { got=getresource((clevel-1)<<1,buff,16); if(got>0) { close(file); centermsg("use alt-w to overwrite existing level"); i=0; } } if(i) { p1=levelbuff+30; p2=tlevel; for(j=0;j<15;j++) { for(i=0;i<12;i++) { *p2++ = (*p1<<4) | p1[1]; p1+=2; } p1+=4; } /* { int tf; tf=creat("tlevel",00600); if(tf!=-1) { write(tf,tlevel,180); close(tf); } } */ if(putresource((clevel-1)<<1,tlevel,180)) centermsg("could not write level"); else if(putresource(((clevel-1)<<1)+1,levelbuff,0)) centermsg("could not delete movie"); else centermsg("level saved"); } } } } void mode5() { if(checkdown(XK_Escape) || wonflag) /* esc */ { fadeout(); endplay(); toedit(); } if(lostflag || checkdown(XK_k)) /* k */ { fadeout(); endplay(); startgame(); } } int efindcurs() { int i,j; if(curx>=XOFF && curx=YOFF && cury=ETYPEY && cury=ETYPEX) { i=(curx-ETYPEX)/ETYPESPACE; j=(curx-ETYPEX)%ETYPESPACE; if(i>=0 && i<12 && j<24) return ETYPES; } return 0; } void centermsg(uchar *from) { int i,j,k; uchar *to=ewant; i=strlen(from); j=(72-i)/2; k=72-i-j; while(j--) *to++=' '; while((*to++=*from++)); to--; while(k--) *to++=' '; *to=0; emark=1; } uchar *einfo() { int i; sprintf(temp,"level %04d l=load w=write spc=try esc=exit ->=inc lev <-=dec lev",clevel); i=strlen(temp); while(i<72) temp[i++]=' '; temp[i]=0; return temp; } void puteinfo() { writestring(einfo(),TEXTX,TOPTEXTY,ACOLOR); needtoptext=1; } void editprocess() { int where; int x,y; int i,j; uchar *at; if(mode!=mode4) return; if(emark) { writestring(ewant,TEXTX,TOPTEXTY,ACOLOR); needtoptext=1; emark=0; etime=120; } if(etime) { etime--; if(etime==0) { strcpy(ewant,einfo()); writestring(ewant,TEXTX,TOPTEXTY,ACOLOR); needtoptext=1; } } if((checkpressed(XK_Alt_L) || checkpressed(XK_Meta_L)) && checkdown(XK_f)) /* alt-f */ { filllevel(levelbuff,edittype); erepaint=2; } if(erepaint) { erepaint--; paintlevel(); copyup(); } where=efindcurs(); if(mbuttons2) { edownx=curx; edowny=cury; edownb=mbuttons2; edownwhere=efindcurs(); if(edownwhere==ETYPES) { i=(curx-ETYPEX)/ETYPESPACE; if(edittype!=i) { ebox0(edittype); edittype=i; ebox1(edittype); } } } if(mbuttons) { if(edownwhere==ELEVEL && where==ELEVEL) { j=(edownb&1) ? edittype : EMPTY; x=(curx-XOFF)/TX; y=(cury-YOFF)/TY; at=levelbuff+30+y*28+x; if(*at!=j) { *at=j; fix(at); fix(at+1); fix(at+28); fix(at+29); emodified=1; } } } for(i=0;i<12;i++) { if(checkpressed(typemap[i])) { if(edittype!=i) { ebox0(edittype); edittype=i; ebox1(edittype); } } } } xscavenger-1.4.4/src/names.h0100644000175000001440000000075507572573712014615 0ustar dashusers/* SCAVENGER by David Ashley dash@netcom.com dash5@geocities.com */ #ifndef NAMES_H #define NAMES_H /* next should already be defined with makefile */ #ifndef LIBNAME #define LIBNAME "/usr/X11R6/lib/scavenger" #endif #ifndef ICONPATH #define ICONPATH "/usr/X11R6/include/X11/pixmaps/xscavenger-icon.xpm" #endif #define LOCALDIRNAME ".scavenger" #define RCNAME "scavrc" #define LEVELSNAME "levels.scl" #define PLAYERNAME "player.nam" #define ENVHOME "HOME" #define ENVUSER "USER" #endif xscavenger-1.4.4/src/anim.c0100644000175000001440000004777207035030756014431 0ustar dashusers/* SCAVENGER by David Ashley dash@xdr.com */ /* Edited to use the header file anim.h by Marcus Brinkmann, Nov 97 */ #include #include #include #include #include #include #include "scav.h" #include "anim.h" int animcolor,animbox; int animbcolor,cbrush; int animboxx,animboxy; int animdown,animdownx,animdowny; int animmode,lastanimmode; uchar asquare[TILEMAX],bsquare[TILEMAX],tsquare[TILEMAX]; uchar savesquare[TILEMAX],tsquare2[TILEMAX]; int workingon=0; int brushes[]= { 1,0,0, 4,0,0,1,0,0,1,1,1, 9,-1,-1,0,-1,1,-1,-1,0,0,0,1,0,-1,1,0,1,1,1, 16,-1,-1,0,-1,1,-1,2,-1,-1,0,0,0,1,0,2,0,-1,1,0,1,1,1,2,1,-1,2,0,2,1,2,2,2, 21,-1,-1,0,-1,1,-1,-1,0,0,0,1,0,-1,1,0,1,1,1, -1,-2,0,-2,1,-2,-2,-1,-2,0,-2,1,2,-1,2,0,2,1,-1,2,0,2,1,2, 37,-1,-1,0,-1,1,-1,-1,0,0,0,1,0,-1,1,0,1,1,1, -1,-2,0,-2,1,-2,-2,-1,-2,0,-2,1,2,-1,2,0,2,1,-1,2,0,2,1,2, -2,-2,2,-2,-2,2,2,2, -1,-3,0,-3,1,-3,-3,-1,-3,0,-3,1,3,-1,3,0,3,1,-1,3,0,3,1,3 }; int bsx,bsy; int bhx,bhy; uchar userbrush[TILEMAX]; uchar btransp; uchar tainted=0; int coordx=-1,coordy=-1; int wfile; long stack[8]; int sp=0; long ppos; int oldbuttons; int lastwhere; int trapdown; int dbx,dby; char *descriptions[4]={ "background", "hero", "main enemy", "hidden enemy" }; void mode2() /* animator */ { int i; /* uchar *cm; */ if(checkdown(XK_Escape)) /* esc */ { fadeout(); restoresprites(); clear(); copyup(); colormapoff(); dumpgfx(); for(i=0;igs_pic+24*(num%12)+320*24*(num/12); for(j=0;j<24;j++) { for(i=0;i<24;i++) *dest++=*source++; source+=320-24; } } void getsquare(char *dest,int num) { uchar *source; gfxset *gs; int i,j; gs=gfxsets+workingon; source=gs->gs_pic+24*(num%12)+320*24*(num/12); for(j=0;j<24;j++) { for(i=0;i<24;i++) *dest++=*source++; source+=320-24; } } void putsquare(int num,char *source) { uchar *dest; gfxset *gs; int i,j; gs=gfxsets+workingon; dest=gs->gs_pic+24*(num%12)+320*24*(num/12); for(j=0;j<24;j++) { for(i=0;i<24;i++) *dest++=*source++; dest+=320-24; } } void showcolors() { int ch; int i,j; for(j=0;j<5;j++) for(i=0;i<5;i++) { ch=animbcolor; if(i>0 && i<4 && j>0 && j<4) ch=animcolor; bigpixel(SHOWCOLORX+(i<<3)+1,SHOWCOLORY+(j<<3)+1,ch); } } void invert1(int which) { invert(DRAWFUNCX+(which&1)*12,DRAWFUNCY+(which>>1)*12); } void colorsel(int num, int col) { int x,y; x=COLORSX+12*(num&15); y=COLORSY+12*(num>>4); drawbox(x,y,12,col); } void boxsel(int num, int col) { int x,y; x=BOXESX+25*(num%12); y=BOXESY+25*(num/12); drawbox(x,y,25,col); } char fixblow(uchar *where) { int i,j,x,y; uchar *p,ch; char changed=0; p=bsquare; for(j=0;j>1; bhy=bsy>>1; } void flipx() { int j; uchar *p1,*p2,*p3,ch; p1=userbrush; for(j=0;j=0;j--) *p1++=temp[j*bsx+i]; i=bsx; bsx=bsy; bsy=i; j=bhx; bhx=bhy; bhy=j; } void paintbrush(uchar *sqr, int x, int y, int type) { int *p; int t; int tx,ty; int i,j; uchar ch,ch2; uchar *p2; int color; color=(type&2) ? animbcolor : animcolor; if(cbrush) { p=brushes; t=cbrush; while(--t) p+=*p * 2 + 1; t=*p++; while(t--) { tx=x + *p++; ty=y + *p++; if(tx>=0 && tx<24 && ty>=0 && ty<24) sqr[ty*24+tx]=color; } } else { x-=bhx; y-=bhy; p2=userbrush; for(j=0;j=0 && tx<24 && ty>=0 && ty<24 && ch2!=btransp) sqr[ty*24+tx]=ch; } } } } void animrect(uchar *sqr, int x1, int y1, int x2, int y2, int type) { int i,j,color; color=(type&2) ? animbcolor : animcolor; if(x2dya) { dya+=dya; err=dya-dxa; dxa+=dxa; while(x1!=x2) { paintbrush(sqr,x1,y1,type); x1+=dx; if(err<0) err+=dya; else { err+=dya-dxa; y1+=dy; } } } else if(dxa=COLORSX && curx=COLORSY && cury=BOXESX && curx=BOXESY && cury=DRAWFUNCX && curx=DRAWFUNCY && curyBLOWUPX && curx<=BLOWUPX+192 && cury>BLOWUPY && cury<=BLOWUPY+192) return BLOWUP; if(curx>=RGBX && curx=RGBY && curySHOWCOLORX && curx<=SHOWCOLORX+40 && cury>SHOWCOLORY && cury<=SHOWCOLORY+40) return SHOWCOLOR; return 0; } void changecolor(int nc) { int a; uchar *cm; cm=(gfxsets+workingon)->gs_colormap; if(animcolor==nc) return; colorsel(animcolor,ACOLOR); a=animcolor*3; rgbsel(cm[a],cm[a+1],cm[a+2],ACOLOR); animcolor=nc; colorsel(animcolor,BCOLOR); a=animcolor*3; rgbsel(cm[a],cm[a+1],cm[a+2],BCOLOR); showcolors(); needwhole=1; } void newanimmode(int m) { if(m!=animmode) { if(animmode) invert1(animmode); animmode=m; invert1(animmode); needwhole=1; } } void coords(int x,int y) { writechar(BLOWUPX+80,BLOWUPY-16,x<99 ? x/10+'0' : ' '); writechar(BLOWUPX+88,BLOWUPY-16,x<99 ? x%10+'0' : ' '); writechar(BLOWUPX+104,BLOWUPY-16,y<99 ? y/10+'0' : ' '); writechar(BLOWUPX+112,BLOWUPY-16,y<99 ? y%10+'0' : ' '); } void animprocess() { int a,b,c,i; int where; int bx,by; uchar *cm; int cxwant,cywant; if(mode!=mode2) return; where=findcurs(); if(where==BLOWUP) { bx=(curx-BLOWUPX-1)>>3; by=(cury-BLOWUPY-1)>>3; if(mbuttons && animdown==BLOWUP) { cxwant=ABS(dbx-bx)+1; cywant=ABS(dby-by)+1; } else { cxwant=bx; cywant=by; } } else cxwant=cywant=99; if(cxwant!=coordx || cywant!=coordy) { needwhole=1; coords(cxwant,cywant); coordx=cxwant; coordy=cywant; } if((mbuttons2&3) && trapdown) { switch(trapdown) { case PICKCOLOR1: if(where==BLOWUP) changecolor(bsquare[bx+by*24]); needwhole=1; break; case PICKCOLOR2: if(where==BLOWUP) animbcolor=bsquare[bx+by*24]; showcolors(); needwhole=1; break; } trapdown=0; animdown=0; } else if((mbuttons2&3) && !trapdown) { animdown=where; animdownx=curx; animdowny=cury; dbx=bx; dby=by; if(where==BLOWUP) copysquare(savesquare,asquare); switch(where) { case DRAWFUNC: a=whichfunc(DRAWFUNCX,DRAWFUNCY); if(a>=8 && a<=13 && a-7!=cbrush) { if(cbrush) invert1(cbrush+7); cbrush=a-7; invert1(cbrush+7); needwhole=1; if(animmode!=6 && animmode!=1) newanimmode(6); } else if(a==0) /* undo function */ { copysquare(tsquare2,asquare); copysquare(asquare,savesquare); copysquare(savesquare,tsquare2); tainted=1; } else if(a==7) { copysquare(savesquare,asquare); for(i=0;i=1 && a<=6) { if(a==2 && animmode!=2) lastanimmode=animmode; newanimmode(a); } break; case SHOWCOLOR: trapdown=(mbuttons2&1) ? PICKCOLOR1 : PICKCOLOR2; tainted=1; break; case BLOWUP: if(animmode==4) { animfill(asquare,bx,by,(mbuttons2&1) ? animcolor : animbcolor); tainted=1; } break; } } if(animmode==2 && animdown==BLOWUP && !mbuttons && oldbuttons && where==BLOWUP && bx>=0 && bx<24 && by>=0 && by<24) { if(cbrush) {invert1(cbrush+7);needwhole=1;} cbrush=0; makebrush(asquare,dbx,dby,bx,by); if(oldbuttons&2) { animrect(asquare,dbx,dby,bx,by,oldbuttons); tainted=1; } if(lastanimmode==1 || lastanimmode==6) newanimmode(lastanimmode); else newanimmode(6); } if(where==COLORS && animdown==COLORS && mbuttons) { if(mbuttons&1) { changecolor((curx-COLORSX)/12 + (((cury-COLORSY)/12)<<4)); } else { animbcolor=(curx-COLORSX)/12 + (((cury-COLORSY)/12)<<4); showcolors(); needwhole=1; } } if(where==BOXES && animdown==BOXES && ((mbuttons&1) || (mbuttons2&2))) { a=(curx-BOXESX)/25; b=(cury-BOXESY)/25; c=a+12*b; if(animbox!=c) { needwhole=1; boxsel(animbox,BCOLOR); animbox=c; animboxx=BOXESX+a*25+1; animboxy=BOXESY+b*25+1; boxsel(animbox,ACOLOR); getsquare(asquare,animbox); fixblow(asquare); copysquare(savesquare,asquare); } } if(where==BOXES && animdown==BOXES && (oldbuttons&2) && !(mbuttons&2)) { a=(curx-BOXESX)/25; b=(cury-BOXESY)/25; c=a+12*b; if(animbox!=c) { needwhole=1; boxsel(animbox,BCOLOR); animbox=c; animboxx=BOXESX+a*25+1; animboxy=BOXESY+b*25+1; boxsel(animbox,ACOLOR); getsquare(savesquare,animbox); putsquare(animbox,asquare); drawsquare(animboxx,animboxy,asquare); } } if(animdown==RGB && mbuttons) { a=animcolor*3; c=a+(animdownx-RGBX)/16; b=(RGBY+127-cury)*2; if(b<0) b=0; if(b>255) b=255; cm=(gfxsets+workingon)->gs_colormap; if(cm[c]!=b) { needwhole=1; cm[c]=b; paintanim(); /* rgbsel(cm[a],cm[a+1],cm[a+2],ACOLOR); cm[c]=b; rgbsel(cm[a],cm[a+1],cm[a+2],BCOLOR); palette(cm); */ } } if(animdown==BLOWUP && where==BLOWUP && mbuttons) { switch(animmode) { case 1: /* line */ copysquare(asquare,savesquare); animline(asquare,dbx,dby,bx,by,mbuttons); tainted=1; break; case 3: /* rect */ copysquare(asquare,savesquare); animrect(asquare,dbx,dby,bx,by,mbuttons); tainted=1; break; case 6: /* draw */ paintbrush(asquare,bx,by,mbuttons); tainted=1; break; case 2: /* brush */ copysquare(tsquare,asquare); outline(tsquare,dbx,dby,bx,by); if(fixblow(tsquare)) needwhole=1; drawsquare(animboxx,animboxy,tsquare); break; } } /******/ if((where==BLOWUP || lastwhere==BLOWUP) && (animmode==2 || animmode==3) && !mbuttons && !trapdown) { copysquare(tsquare,asquare); if(bx>=0 && bx=0 && by=0 && bx=0 && bygs_colormap); paintboxes(); getsquare(asquare,animbox); copysquare(tsquare,asquare); fixblow(asquare); needwhole=1; } if(checkdown(XK_minus) && cbrush && cbrush>1) /* - */ { invert1(cbrush+7); cbrush--; invert1(cbrush+7); needwhole=1; } if(checkdown(XK_equal) && cbrush && cbrush<6) /* = */ { invert1(cbrush+7); cbrush++; invert1(cbrush+7); needwhole=1; } if(checkdown(XK_period) && cbrush!=1) /* . */ { if(cbrush) invert1(cbrush+7); needwhole=1; cbrush=1; invert1(cbrush+7); if(animmode!=1 && animmode!=6) newanimmode(6); } if(checkdown(XK_d)) /* d */ newanimmode(6); if(checkdown(XK_comma)) /* , */ { trapdown=PICKCOLOR1; tainted=1; } if(tainted) { putsquare(animbox,asquare); if(fixblow(asquare)) needwhole=1; drawsquare(animboxx,animboxy,asquare); tainted=0; } oldbuttons=mbuttons; lastwhere=where; } void rgbsel(int r, int g, int b, int col) { r=RGBY+126-(r>>1); g=RGBY+126-(g>>1); b=RGBY+126-(b>>1); drawbox2(RGBX+4,r,7,1,col); drawbox2(RGBX+20,g,7,1,col); drawbox2(RGBX+36,b,7,1,col); } void paintboxes() { int i,j; for(j=0;j<8;j++) { for(i=0;i<12;i++) { getsquare(tsquare,j*12+i); drawsquare(i*25+BOXESX+1,j*25+BOXESY+1,tsquare); } } fixblow(asquare); } void paintanim() { int i,j,x,y,c; uchar *cm; uchar ttt[128]; clear(); memset(bsquare,0,TILEMAX); cm=(gfxsets+workingon)->gs_colormap; palette(cm); i=animcolor*3; rgbsel(cm[i],cm[i+1],cm[i+2],BCOLOR); sprintf(ttt,"%s artwork: %s",descriptions[workingon], gfxnames[workingon]); drawstring(ttt,4,4,255); c=0; for(j=0;j<16;j++) { y=COLORSY+j*12+1; for(i=0;i<16;i++) { x=COLORSX+i*12+1; drawfillrect(x,y,11,c++); } } drawbox(SHOWCOLORX,SHOWCOLORY,41,BCOLOR); for(j=0;j<8;j++) for(i=0;i<12;i++) drawbox(BOXESX+25*i,BOXESY+25*j,25,BCOLOR); drawbox(BLOWUPX,BLOWUPY,193,BCOLOR); colorsel(animcolor,BCOLOR); boxsel(animbox,ACOLOR); paintboxes(); for(i=0;i<4;i++) { getsquare0(tsquare,BUTTONFIGS+i); drawsquare(DRAWFUNCX,DRAWFUNCY+TY*i,tsquare); } if(cbrush) invert1(cbrush+7); drawbox2(RGBX,RGBY-2,16,130,BCOLOR); drawbox2(RGBX+16,RGBY-2,16,130,BCOLOR); drawbox2(RGBX+32,RGBY-2,16,130,BCOLOR); if(animmode) invert1(animmode); showcolors(); } void animinit() { animcolor=1; animbcolor=0; cbrush=1; animmode=6; animbox=0; animboxx=BOXESX+1; animboxy=BOXESY+1; bsx=bsy=0; } void toanim() { /* int i; */ fadeout(); restoresprites(); lastwhere=0; animdown=0; trapdown=0; getsquare(asquare,animbox); /* for(i=0;i>24L; buff4[1]=val>>16L; buff4[2]=val>>8; buff4[3]=val; write(wfile,buff4,4); ppos+=4; } void wout(int val) { uchar buff2[2]; buff2[0]=val>>8; buff2[1]=val;; write(wfile,buff2,2); ppos+=2; } void bout(uchar val) { write(wfile,&val,1); ppos++; } void picline(char *put,int line) { memcpy(put,(gfxsets+workingon)->gs_pic+320*line,320); } void savegfx() { uchar ttt[256]; sprintf(ttt,"%s/%s/%s",localname,localdirname,gfxnames[workingon]); writeiff(ttt,320,200,picline,(gfxsets+workingon)->gs_colormap); } int writeiff(uchar *name, int width, int height, void (*fetch)(), uchar *colors) { int depth=8; int i,j; uchar trow[640]; uchar plane[128]; int rb; sp=0; rb=(width+7)>>3; ppos=0; wfile=creat(name,00600); if(!wfile) return 1; lout(FORM); push(); lout(ILBM); lout(BMHD); push(); wout(width); wout(height); lout(0L); /* offsets */ bout(depth); /* depth */ bout(0); /* masking */ bout(1); /* compression */ bout(0); /* pad */ wout(0); /* transparent */ wout(0); /* aspect */ wout(width); /* pagex */ wout(height); /* pagey */ pop(); lout(CMAP); push(); j=3<>=1; } *to++=k; } } void pack(uchar *take, int rb) { int d0,d1,d2,d4,d5; uchar *pnt=take; uchar *pnt2; d4=rb; /*pack1:*/ d5=*pnt++; d4--; p1: d1=0; pnt2=pnt-1; p2: d2=1; p3: d4--; if(d4<0) goto pout2; d0=*pnt++; if(d0!=d5) goto notsame; d2++; goto p3; notsame: if(!d1) goto noliteral; if(d2>=3) goto n2; n1: d5=d0; d1+=d2; goto p2; noliteral: if(d2<2) goto n1; n2: dpout(pnt2,d1,d2,d5); d5=d0; goto p1; pout2: if(d2<3) {d1+=d2;d2=1;} dpout(pnt2,d1,d2,d5); } void dpout(uchar *pnt2, int d1, int d2, int d5) { if(d1) { bout(d1-1); while(d1--) bout(*pnt2++); } if(d2!=1) { bout(1-d2); bout(d5); } } xscavenger-1.4.4/src/icon.xbm0100644000175000001440000000102507572573712014770 0ustar dashusers#define icon_width 24 #define icon_height 24 static unsigned char icon_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x40, 0x02, 0x00, 0x40, 0x02, 0x00, 0x40, 0x02, 0x00, 0xf0, 0x11, 0x00, 0x8c, 0x2d, 0x00, 0x82, 0x23, 0x00, 0xf9, 0x18, 0x00, 0xf5, 0x06, 0x00, 0xf5, 0x01, 0x00, 0xfb, 0x00, 0x00, 0xf8, 0x03, 0x00, 0xf8, 0x07, 0x00, 0xbc, 0x1f, 0x00, 0x1e, 0x1e, 0x00, 0x0e, 0x0f, 0x80, 0x03, 0x03, 0x80, 0x81, 0x01, 0xc0, 0x81, 0x01, 0x70, 0x80, 0x01, 0x30, 0x00, 0x01, 0x30, 0x00, 0x00, 0x10, 0x00, 0x00}; xscavenger-1.4.4/data/0040755000175000001440000000000007227105125013441 5ustar dashusersxscavenger-1.4.4/data/jungle.lbm0100644000175000001440000011662407227105114015426 0ustar dashusersFORMILBMBMHD@@CMAP((H(̠t@HhLTpX`|`dhlpt|| Xd (\,d0h4p8tDxP\8t8t D|LV? 8yL3 8}L 3 >L8>^ 8`@ `@3 `LL{Hr3 rDHov' |y~Lp |}L L0p|  |@  8@ 8LL{H (nt'>yw 8`xp ?x 8`\D?x088`?8p@?p@?xpL{H8 8nt?2x 0pxpp > p}X d>>Ap>p@>p@>>pXYH  nt? 0 0p 0 82>0 x x 8xXU_  \ n6' 0 8}p 8 88 | | 8|XEH @ | ntr' `r  |8y p  |8}  p |8 `||  | p|XEHp @pߐ|nt?@ |z" p  | @ |  8p|p  ǀ @\Ehp p|nt? |x Jp  ||K | x|x  \Gh?`>|nt?@|@ p  |@ ` $|@ 8|<@8 < ` <|Gh0Nv?@p?@?$@?8>@8?>?>Eh Ǧv??y@?}@?$@ ?8|@8?|?| Eh Ǧv?? z@ ?@?$@ ?8x@8?x?x E`= ǀ Ǧn? ǀx$ǀ| sǀ 8ǀ8   E` Ϧl?y!}!">88 E@ ͦL?No&>pp @3ǀ .L'ǀPǀ0$< ǀ ǀ `;  ll' z   0$< `@@ ll?@|@x.@@|/@00 99 a <a%%l(?5y5 ?5}5?`` ??? l*@y?y}?y???y @l(?<???ԯvgLH~$<ԅv{gfH?0y>{} {@{ԅp  8>LgfJ? 8y>L ? 8}L ? >@L>8>~?8`@?`@? `LDp>38ˠ0DTgFJ'? |y~>Xx ? |}\ ?'@\0~|~?|@?8@?8\D`;|((hgFZ' 08`y>px  88`}x8x0~8`~8p@p@8px808pgF?: p`x 0pp<0p'?|p|p@p@>0pp0 gF?p 0x 00 Ñ 0$<x0xx0x gF?? 8sx  08{ 0$<|8||0|  |gF? @ 0|8sfx @ |8{ 8'$<|8|||8|؄ p| F? x|s |{ |/$?<|||؀`@||FP??? |s |{ ??||؈`080|NP0??0| ?s|@ ?s<|?|<@?<@?s<؉`0N? ? @?>?>@?>@?>` x?xsf xx{wAxx8|@|@xx| K`|@T?sh |A{@|A8">x@x@|Ax Ka ǀ T? xǀs ǀ{8">ǀǀK` T? s{8"> Ib||@@\?t f  w  0"> I33pǀp ' ǀpA 0ǀxA0 0302>ǀ ǀ   M;PP ' p߀s!߀|{!D | 030 | | |M_P_P ??8N?od?0? M  ?> 7 N7 ??0 o0 ??????_M8?ffl@|N@p? ?`~o`? ?? ? ? ?_l. p     աFt  HNt?y} HÀ8>ONt ?? 8y?8}@ ?ƀ>8>`?8`@`?`@?ǀ`H30GDNt'` |y~_? @|}@ ?_0|`?|@`?8@?8H;0࿏[p([pt'0Cp 8`x 0 I8`I 0``0À8`08p@0p@0pppKȀ0? xK08K0?0 pxP 0 Ip}I 0  Hxp0p@ 0p00p0K Iƌ?0a B 0  0 I0 0 f  Hx00x 0x0g0x0 ? I?0|| I8} 0 I8 000H@x80| 00|000|0  |?0 ـ|8y 0 و|8} 0 &ppL ||80||0|0| 8| ?( ` |z" 8 | 0 n``D~|~ | 8|88 @8@|??(8<|x J8<||K 0< l``G|8<|8<8<  "|b?/3|s?3|s?$|@|<@<?<."b?#c `#c` $ 00@>@>`> N.ڼbb o?>gcyc p?c}c?$  @?|@?|?|N&J308D0D0 op?f8zf8p<0f8f8<8$0``@<0x@<0x<8x NWB;( (ǀ ( ox?? 0ǀx$ 0p0 8ǀ| 888393980~D~|@ǀ@80ǀ0??8?? L%B (  ox?80y!0p8}!8`8#1#1hD|@@`88??8?? LB(( 8( 8 oFx?80(N0(p080o80qqD|@@88??8?? \`3PǀP oFX'`ǀP`ppǀpcc0` ǀ` ǀ \`;44 oFX'?8z8p?<<?088???U?8xx fF?`x.`x?x|/x???? U a@a@ fF?AyAxq}q00wwwwլdNXy}'?`` լdNX ????$<??V|e.B x~$<V|g3 fe.By>x} @$?<00Vt@8>OgJ??@?8y>Wx  @8}X >@_8>8`@`@`_V3(Dhg'? |y~>Hx ? |} ?@0|?|@ ?8?870Y@7(Hg' @8`y>@@x ???8`} D??08`?8p@ ?p??p6  ` 8IG&#?# @pD@x wxp dxpp@ pxp?#PP&? p 000 Ñ 8xGߏ08x 8x8xx  f?   @8s 0x8{ 0 xL|80| 0|0 x|0|0 8?   |8sf0|8{0'H>x?|8?0||0|0| d?0`h|h X?  |s0`|{0`/N>~|0|00` d <$X|XτY_/?,|@`/ 4|s4<|`?|{? <|`???>|<||<|??<|`??d  |  | x ? $|B$ `?|?`??<||<@?<?`?<?d? ?Mz?>l l?? ???>?8?>@??>???>? Fd><yHyH mz?sf@ p>0{w><8><|@><|><|fdA A Mz|? <0shpp <{ <8r~?? x@ x <x Gd   `ǀ ` lz?  ǀs P<ǀ{ <8ǀ  ǀ  _ < 'f8  Lxr?  s <{ ` <8`     < Gf?| 1 1 x? ~t f~w` ~`   ~ U.ـ3 ǀ p&@ǀpA@0?ǀxA ?0ǀ ǀ ? ? *>;>@@ t&?ps!p?{!? ? 0   ? *@LL t???o>?|s>>  ?  ?>>?|s>>*?<ft||N|~o|| * &t||$<>>?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@ @@ @@     @@? @@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @@@@@@@@ @@@@ xxxxxxxx xxxxxxxx00008<0 0 0000000 0 000000?00000000 00000000 >00000000?000000000 0 00xxxx ?xxxxxxxx?x x xx |~?? |~     ?  ?   X| pB&M8p `8` pp> ?-ۀ_| 6Ӏ"B 9? ?@18ۀx8?ۀ`<M -tR0l .7 J:0l 7  0l 8800l 0l 0l 0l ?>0l   J(]_P0lx  4 n0lx7 w0lx ~x 0lx0lx0lx0lx ~ 80lxP  XU ^@0l8x` fnp0l8xH0w 0l8xp 8p|0l8x~0l8x0l8xH |0l8xphw|0l8x(6GXEٟ0l8x8H>f6~0l8x8>0wv 0l8x8p8p 0l8x8   0l8x80l8x8 0l8x8x w 0l8x8HPd/N0l800f`l0l8000w#t 0l800I8p0l800 `0l80000l800@ 0l800w/0l8000 AEWTCIN0ll0p e@vLh0ll0pg@'wp 0ll0p8p0ll0p0?0ll0p0ll0p 0ll0pwO0ll0p@Ӏf,`M\08l0` &e^8 l08l0` g`? p08l0`@ x?08l0`Ⴡ08l0`<08l0`? 08l0`08l0`YX a@d0808z@X6080 @@0808@ þ08008080}0808 080x080#.7gttp2080#48_?>,jf080#<9@@ǃ~080;ÀF@ p?080? 080080 080??<080^dd#PV@D|ho#` B3p 7w? ̀ 0(t&#t+.pV}` *ր|||# gK3a|||wq|||!|||8` p~}||||||p|||3|||?} +\5Pax1hGphIxy Hx="!|p@0x@< x x?x??xyx#Mx%@Pba`x #%՘G hd x #p] 0x 9"" px @ x x @?x ??xfx #Xb#?h+ PM;M` @;`0q@p @ ?>?x +$6t (~>{0m/s0{ ~>/7 ~> 0A?0 x~> ?q@ ~>~>??>~>0o?8 x~>O( 4)ToJ@>8~6lgF0>8~ 7;0>8~@ x { >8~ 9@>8~<>8~@>?>>8~?0>8~ { tSD0`bZO0 @!0s0 @8@c0 =` 000 00M p$p$`p   pp8 @p = pp@p< <pX @/`(8M`  `0 `  ```8 `vf`nl R&~0xfP ZE~x~ ~` 0~|~>~0 ~ f؈`aڀ&~||4fNP, ^E~||?` x~||`~||p~||8~||~||?~|| d؉` y' $N0 F@ pppp  8| 8| 8| 8| x8| 8| 8| 8| x8 x8 8 8 !8 x8 x8 8 !08 ` ?08 ` x08 ` 08 ` @08 ` ?08 ` ?08 ` 08 ` /^z08pT /a08pT /!08pT /x08pT /B08pT /08pT /08pT /08pT ͯ>Zj<808 ͯ>m<808 ͯ>)808 ͯ>x808 ͯ>B808 ͯ><808 ͯ>808 ͯ><<808 o^>RJ888 o^>m888 o^>!<<888 o^>x888 o^>B888 o^>888 o^>888 o^><888 o~Ǯ^z<<08 o~Ǯa<08 o~Ǯ!<<08 o~Ǯx<08 o~ǮB<08 o~Ǯ<08 o~Ǯ<08 o~Ǯ<<08 ì~!B@08pT ì~?<<@08pT ì~~x08pT ì~08pT ì~@08pT ì~?~08pT ì~?08pT ì~~08pT ljp!B@|>jpp?<<@|>jp~x| >j|>jp@|>jp?~|>jp?|>jpp~|V|kf^z<V|kfaV|kf!< V|kfxV|kfB V|kfV|kfV|kf<jtZjp|jmp|j)<<p|j xp|jBp|j p|jp|j<p|V*RJ<088|V*Dm<088|V*!088|V*@x088|V*B088|V*@<088|V*088|V*<<088|T^zpap!p xpBp ppp/!` /?` /x` /` /@` /?` /?` /` pxpxp p! xpxpxxscavenger-1.4.4/data/flashspiral.lbm0100644000175000001440000010111407227105112016434 0ustar dashusersFORMDILBMBMHD@@CMAP((H(̠t@HhLTpX`|`dhlpt|| Xd (\,d0h4p8tDxP\8t8t D|<À`8> >6݀|p 0݀>π8&!0 0& V!>π& >π ,UTpQ@>π4\@   >π >π}pӀ_qpÀG   qpÀG  }pÀO    TP@R$pÀGq `πO}@@@B @FdpÀGq    LpǀGuUU@րlπ> π<`8π>    π>p 0݀6݀π>>)8 06 V!0π> >( π>]@UTpQ@ ,π> 4  π>  π>pӀ_}pÀGq   pÀGq  pÀO}    P@R%UpÀGq `πO|@@B A@FdpÀGq   L pǀGuU@րmUπ> π<`8π>   π> 0݀6݀pπ>)8> 0 V!06π>(  >π>Hpi@" ([@I> 4  >>psqpsqpsqpsq"%@@PP@b"wppw"v``w $@@@b"d@@f"wppw"@"wppw#i``II@@#>>"<<ÀÀ"`"88#>> #>>#66݀||p 0 0݀#>>π"88&!"00 "00& V V!#>>π& #>>π# ,UTpQ@Q@#>>π"44\@\@    #>>π #>>π"}ppӀӀ_"qppÀÀG   "qppÀÀG  "}ppÀÀO""  ""  ""TTPP@R$"ppÀÀGq" ` `ππO}@@@@@B "@@Fd"ppÀÀGq"     L"ppǀǀGu#UU@@րl#π>>"  ππ<<"`"88#π>>"      #π>>#p 0 0݀66݀#π>>">)88" 00"6 V V!00#π>> >( #π>>#]@]@UTpQ@Q@ ,#π>>"  44   #π>>  #π>>"ppӀۀ_@}"ppÀÀG@q @ @ "ppÀˀGq @ "ppÀˀO@}"@@"   @@" "  @" @#PP@R%UUppÀÀG q ` `ππO |@@@B AA#@@Fd#ppÀÀGq"    L #ppǀǀGu#U@@րmUπ>   ππ<  `#8#π>"    #π># 0 0݀6>݀p#π>"#)8 >! 0 " V V!0<6#π>> (  >#π>>#Hpi@i@" ([@[@I#>6#  44 @  #>> @#>>#ppsq#ppsq@@#ppsq@#ppsq"b@PP@@%"wppw"w``v"b@@@$"f@@d"wppw@"wppw#@@II``i#>>"<<ÀÀ"`"88#>>  #>>#66݀ 0 0p||݀#>>π"88!&00 "00! V V&#>>π &#>>π# Q@Q@TpU,#>>π"44   \@\@  #>>π #>>π"_ӀӀpp}"GÀÀppq   "GÀÀppq  "OÀÀpp}""  ""  "#TT$R@PP#qGÀÀpp#}Oππ ` `#@@ B@@@#dF@@#qGÀÀpp"L     #uGǀǀpp#lր@@UU#>>π#<<ππ  #`#88#>>π"      #>>π#݀66݀ 0 0p#>>π#88)>!00 "00! V V6#>>π  (>#>>π#]@]@, Q@Q@TpU#>>π#44      #>>π  #>>π#}@_Ӏۀpp#q@GÀÀpp @ @  #qGÀˀpp @ #}@OÀˀpp"@@" @   @" " @  "@ #PPUU%R@ppq GÀÀ ` `| Oππ@@AA  B@#@@dF#ppqGÀÀ#   L  #ppuGǀǀ#Umր@@U> π  < ππ` #8#>π"     #>π# 0 0p݀6>݀#>"π#>8 )# 0 # V V60<!#>>π>  (#>>π#I[@[@( "i@i@Hp#>6#   44@  #>>@#>>#ppqs#ppqs@@#ppqs@#ppqs      ppppp"%@?PP@b"w?ppw"v?``w $?@@@b"d@@f"wppw"@?"w?ppw#i`II@@#>> "<<À"`"88#>> #>>#66݀||p 0 0݀#>>`π"88&!"00 "00&V V!#>> π& #>>π# ,UTpQ@Q@#>>`π"44\@\@    #>> π #>>π"}ppӀӀ_"qppÀÀG   "qppÀÀG  "}ppÀÀO""  ""  ""TTPP@R$"ppÀÀGq" ` `ππO}@@@@@B "@@Fd"ppÀÀGq"     L"ppǀǀGu#UU@@րl#π>>"  ππ<<"`"88#π>>"      #π>>#p 0 0݀66݀#π>>">)88" 00"6 V V!00#π>> >( #π>>#]@]@UTpQ@Q@ ,#π>>"  44   #π>>  #π>>"ppӀӀ_}"ppÀÀGq   "ppÀÀGq  "ppÀÀO}""  ""  "#PP@R%UU#ppÀÀGq# ` `ππO|@@@B AA#@@Fd#ppÀÀGq"    L #ppǀǀGu#U@@րmU#π>>#  ππ<<#`#88#π>>"     #π>># 0 0݀66݀p#π>>#)88>! 00" V V!006#π>> (  >#π>>#Hpi@i@" ([@[@I#>>#  44  #>> #>>#ppsq#ppsq#ppsq#ppsq        pppppp?????"b@pP@@%"w#ppw"wp`v"b@p@$"f@d"wpwp@"wppw#K@@II``i#>>g"<<ÀÀ"`"88#>>   #>>#66݀> 0 0p||݀#>>πG"88!&00 "00! V V&#>>π  &#>>π# Q@Q@TpU,#>>π"44   \@\@  #>>π #>>π"_ӀӀpp}"GÀÀppq   "GÀÀppq  "OÀÀpp}""  ""  "#TT$R@PP#qGÀÀpp#}Oππ ` `#@@ B@@@#dF@@#qGÀÀpp"L     #uGǀǀpp#lր@@UU#>>π#<<ππ  #`#88#>>π"      #>>π#݀66݀ 0 0p#>>π#88)>!00 "00! V V6#>>π  (>#>>π#]@]@, Q@Q@TpU#>>π#44      #>>π  #>>π#}_ӀӀpp#qGÀÀpp    #qGÀÀpp  #}OÀÀpp""   ""   "#PPUU%R@#ppqGÀÀ# ` `|Oππ#@@AA B@#@@dF#ppqGÀÀ#   L  #ppuGǀǀ#Umր@@U#>>π#  <<ππ#`#88#>>π"     #>>π# 0 0p݀66݀#>>π#>88)# 00# V V600!#>>π>  (#>>π#I[@[@( "i@i@Hp#>>#   44  #>> #>>#ppqs#ppqs#ppqs#ppqs"%@@PP@b"wppw"v``w $@@@b"d@@f"wppw"@"wppw#i``II@@#>>"<<ÀÀ"`"88#>> #>>#66݀||p 0 0݀#>>π"88&!"00 "00& V V!#>>π& #>>π# ,UTpQ@Q@#>>π"44\@\@    #>>π #>>π"}ppӀӀ_"qppÀÀG   "qppÀÀG  "}ppÀÀO""  ""  ""TTPP@R$"ppÀÀGq" ` `ππO}@@@@@B "@@Fd"ppÀÀGq"     L"ppǀǀGu#UU@@րl#π>>"  ππ<<"`"88#π>>"      #π>>#p 0 0݀66݀#π>>">)88" 00"6 V V!00#π>> >( #π>>#]@]@UTpQ@Q@ ,#π>>"  44   #π>>  #π>>"ppӀӀ_}"ppÀÀGq   "ppÀÀGq  "ppÀÀO}""  ""  "#PP@R%UU#ppÀÀGq# ` `ππO|@@@B AA#@@Fd#ppÀÀGq"    L #ppǀǀGu#U@@րmU#π>>#  ππ<<#`#88#π>>"     #π>># 0 0݀66݀p#π>>#)88>! 00" V V!006#π>> (  >#π>>#Hpi@i@" ([@[@I#>>#  44  #>> #>>#ppsq#ppsq#ppsq#ppsq"%@@PP@b"wppw"v``w $@@@b"d@@f"wppw"@"wppw#i``II@@#>>"<<ÀÀ"`"88#>> #>>#66݀||p 0 0݀#>>π"88&!"00 "00& V V!#>>π& #>>π# ,UTpQ@Q@#>>π"44\@\@    #>>π #>>π"}ppӀӀW"qpPÀÀG    "qppÀÀO  "}ppÀÀO" "  "  "  "  "TTPP@pR "ppÀÀGa" ` `ππO}@@@@@B<"@@pF|"ppÀG}"    p @"ppǀG}U?U@ր#?π>>"? π<<"?"88#π>>"   ?   #?π>>#p0 0݀66#ǀπ>>">)88" 00"6V V!p00#π>> >( p#π>>#]@]@UTpQ@Q` $#π>>"  44   # π>>   #π>>"ppӀӠ_u"ppÀÀGq    "ppÀàGy  "ppÀàO}""  ""  "#PP@R%UU#ppÀÀGq# ` `ππO|@@@B AA#@@Fd#ppÀÀGq"    L #ppǀǀGu#U@@րmU#π>>#  ππ<<#`#88#π>>"     #π>># 0 0݀66݀p#π>>#)88>! 00" V V!006#π>> (  >#π>>#Hpi@i@" ([@[@I#>>#  44  #>> #>>#ppsq#ppsq#ppsq#ppsqxscavenger-1.4.4/data/gems.lbm0100644000175000001440000011525407227105076015102 0ustar dashusersFORMILBMBMHD@@CMAP((H(̠t@HhLTpX`|`dhlpt|| Xd (\,d0h4p8tDxP\8t8t D|\ 8y 8}> "8>b 0 8`\0 0 `@0 ` Z?>D~/ *|y~*/ |}A|A ?>|~??8@?>8> Z?w(wp U8`x  68`68` ?8p??p@?p?Z0 8p  px  cp}#@p@@ 0 p0 0 pH0 p Z@0 p  A@0@?  0>xx 0 0 x0 @0 x0 x Z@0 p 8}  8oxx8 `0 |0 @0 >|0 | Z@0 p|p P|8yP  `|8}`߀xx |8 `0 ||0 @0 |0 | @0 ߸|  (|z" (  0|0xx`| `0 `x|x0 @0 0  @0 | @|x J  @||K  |  @0 <|<0 @0 0 ??;|;/( |( / | $@|@@ ?<|<<??<??<??  0    $   @ ?<>@<??>?> 0   (y ( 0}0$ @ 0 x|@x0 0 |0 | 0 pp PzP ``$x x@ 0 x0 0 x0 x Z0 ǀ ǀx$ ǀ|x xǀ 0 ǀ0 0 >>0  Z0 p A@y!A@ }!>>x x  0 0 0 0 Z0 p N cocxx@@ 0 0 0 0  Z@0 wǀwp  UǀPU? 6ǀ6 ǀ 0 ǀ0 @0 0  Z@?>>p/*z* / AA `?>>?@??>> Z@? x.  |/ "" `??@?? @0  y  }  `0 0 @0 0  @0  y }xx@0 0 @0 0 0   xx0 0 0 0 0   ~xx0 0 0 0 0  y> }@xx0 0 0 0 0 8>@ 8y> 8}>@ >8>~0 8`@0 0 `@0 `_?<D|/ <|y~></ <|}<@|?|@? ?>8~?>8>_?8@(@p 8`y>  8`}8`?8p@?8 ?p?p_0 `8`p p pp0 p@0  0 p0 p _@0 00p  0?  0 Ñxx0@ 0 `x0 @0 x0 x _@0 00p >8s   >8{xx8@ `0 |0 @0 |0 ?| _@0 |0|0 ||8sf   ||8{'xx|8@ `0 ||0 @0 |0 | @0 0|0  |s    |{ /xx?|?@`0 |0 @0 0  @0 0|0  |s   |{??|?@@0 |0 @0 0 ?`|`/|/|?|??|<@??<?<?``  0    > ???>@??>?> 0  <sf< {w8 ??0 |@0 0 |0 | 0  xshx {8?x x0 x@0 0 x0 x 0  ǀ   ǀs   ǀ{ 8x xǀ0 ǀ0 0 0  0  s {8x x0 0 0 0 0 00 t f 0w0xx0 0 0 0  @0 p@ǀp@  ǀpA? @ǀxA@ ǀ@0 ǀ0 @0 0  @?/>s!> /{!> > @`??@?>>?<< @? 8N  o >>@`??@?? @0  N  o@`0 0 @0 0  @0  |N ~oxx@@0 0 @0 0 0   xx0 0 0 0 0     xx0 0 0 0 0  y }xx0 0 0 0 0 @8>@ 8y 8}> ?8>?@0 8`@ 0 @0 `@0 @`?D@/|y~/|}  | @?|@? ?8?8?@(p 8`x  8`  8` @?8p@?@?p?p0 8@p px p} p @0 p@0 0 p0 p @0   p  0? 0xx 0 @0 x0 @0 x0 x @0  P Pp `8}`  8xx 8!@`0 |0 @0 |0 | @0  P|Pp `|8y`  |8}xx |8?@ `0 ||0 @0 |0 | @0  P| Pp  `|z"`  _|`xx |!@ `0 |0 @0 0  @0  P| Pp @`|x J` ?||K@ | @ @0 |0 @0 0 ? P| Pp/`|`/|$ | @ ?|<??<?< ? P Pp  0``  $   @?>@??>?> 0  P Pp `y` }$   @0 |@0 0 |0 | 0  P Pp `z` $x x  @0 x@0 0 x0 x 0  Pǀ Pp `ǀx$` ǀ|x x ǀ 0 ǀ0 0 0  0   p y! }!x x  0 0 0 0  0 p N oxx  0 0 0 0  @0 ǀp   ǀP? ǀ  ǀ @0 ǀ0 @0 0  @?p/z /   @`??@?? @? x.  |/ ??@`??@?? @0  y  }@`0 0 @0 0  @0  y }xx@@0 0 @0 0 0   xx0 0 0 0 0   ~xx0 0 0 0 0  y> }@xx0 0 0 0 0 8>@ 8y> 8}>@ 8>0 8`@0 0 `@0 ` ?D/ @|y~>@/ |}@|?|@? ?8?8 _??( `8`y>` 8`} 8`  ?@8p@? ?p?pg0 8   pG p0p 0 `p`0 0 p0 p @yϾ0  L8  0?aߧ 0 Ñ0@xx0@ 0 `x0 @0 x0 x @gn0 . h  8s q 8{Axx8@ `0 0|0 @0 |0 | @y;0 |   |8sf `l' |8{@'xx|8@ `0 0||0 @0 |0 | @fn0 | h  |s p |{1/xx|@ `0 |0 @0 0  @y0  |   |sp/ |{p@?|@@0 |0 @0 0 vn?|@`/|x/|q|?|<@??<?<y?  0 p/  p@ > ?>@??>?> vn0  ` sfx {wq8 0 |@0 0 |0 | y0   shx? {p@8x x0 x@0 0 x0 x _|>0 ǀ  ǀs~ ǀ{q8x xǀ0 ǀ0 0 0  _|>0  p ?s?}߿ { @8x x0 0 0 0 _~~0 p ?t f?~ w xx0 0 0 0  _@0 `ǀ`p  ǀpA? ǀxA$ ǀ@0 ǀ0 @0 0  _@?@@p/s! /{!B  @`??@?? _@Z? 8N  o @`?Z?@?? @0  N  o@`0 0 @0 0  @0  |N ~oxx@@0 0 @0 0 0   xx0 0 0 0 ?@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@ @@ @@     @@? @@ @@ @@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@ @@@@@@@@ @@@@ xxxxxxxx xxxxxxxx00000 0 0000000 0 000000?00000000 00000000 00000000?000000000 0 00xxxx ?xxxxxxxx?x x xx > ? ?          P P QP    x     P P W0-P    <  <0l  à<0l  P P S< P0l  @: `z 0l  O0l  @0l 70l ?0l  0lx `0lxX 0lx  ~ 6l~ 0lx0lx0lx0lx0lxÀ<0l8xÀà<0l8x P P0l8x @?<0l8x`O0l8x@0l8x߀0l8x 0l8x`<0l8x8 `<0l8x8 ? P P0l8x8 ?  ?<0l8x80l8x8?0l8x8 0l8x8 ?0l8x8y0<0l800 <0l800  P 0l800  ?<0l8000l800 0l800 p0l8000l800p0ll0p Cp`0ll0p  P P0ll0p8  ff0ll0p0ll0p80ll0p 0ll0p80ll0p 808l0` 08l0`  P P008l0`8  !08l0` 08l0`8 08l0` 808l0`808l0`> ||080p ?080?  P P080?| ` 080@@080|080> |080?|0808|080 080D P P080|  "0800808 c0809D080|080 ? } P P} 0 ? ?8;|||?@||| P P||| 8 |||? ||||||||||||?>[ x?\~x>??| P_ Px>?| 0 x@@x@x???~x??~xx  <x ||8 P Px `8 (0 0x ?x x |><x `><x   |s.> P P|p>  ?2| << ~> ~>8 P P~>8 $ ~>2 ~> ~> <~><~>>8~>8~ P P>8~  >8~2>8~>8~ >8~>8~00 P P0xx " `0 s@0@0  00! !p" " p  P7 Pp= = x p p0p? ?Op? ?p! !`"` "``  P P`ݐ ݐ !@ `ݗ ݗ` ` ` `! !|0~"@ "@~  P~ݰ ݰ  ~ݷ ݷ~~ ~ ~ ~|| ~|| P P~|| @ ~|| 0~|| ~|| ~|| ~||  P Pp X     / 8| 8| 8| 8| x8| 8| 8| 8| x8 x8 8 8 !8 x8 x8 8 !08 ` ?08 ` x08 ` 08 ` @08 ` ?08 ` ?08 ` 08 ` /^z08pT /a08pT /!08pT /x08pT /B08pT /08pT /08pT /08pT ͯ>Zj<808 ͯ>m<808 ͯ>)808 ͯ>x808 ͯ>B808 ͯ><808 ͯ>808 ͯ><<808 o^>RJ888 o^>m888 o^>!<<888 o^>x888 o^>B888 o^>888 o^>888 o^><888 o~Ǯ^z<<08 o~Ǯa<08 o~Ǯ!<<08 o~Ǯx<08 o~ǮB<08 o~Ǯ<08 o~Ǯ<08 o~Ǯ<<08 ì~!B@08pT ì~?<<@08pT ì~~x08pT ì~08pT ì~@08pT ì~?~08pT ì~?08pT ì~~08pT ljp!B@|>jpp?<<@|>jp~x| >j|>jp@|>jp?~|>jp?|>jpp~|V|kf^z<V|kfaV|kf!< V|kfxV|kfB V|kfV|kfV|kf<jtZjp|jmp|j)<<p|j xp|jBp|j p|jp|j<p|V*RJ<088|V*Dm<088|V*!088|V*@x088|V*B088|V*@<088|V*088|V*<<088|T^zpap!p xpBp ppp/!` /?` /x` /` /@` /?` /?` /` pxpxp p! xpxpxxscavenger-1.4.4/data/victory.raw0100644000175000001440000002533006644315236015663 0ustar dashuserszrk`Xnyuz}wjc|}rllv~xqe{yplko}zvq_kwppt}|rkj_Wxtw{qiii[m~}roklgd}yy}ptywshvz{{ytov|qo{qkuuxxxpnytir{|rdskoqtpgo|xrstph|c`djkcmzqj_sicbfla`r^fqaabgaZ~~dYxdbfik\jr^h_efjd_ybonX[adfas~ogzWJS[aerzp|\FHT_cl}xuúdEK^v{ġoT>8E[x|zϬqS=5?Y}suٷtN94>\rytܷyN95Dcqr~uݲzQ<5Gfsl~{۰yS=7Eawm֮xV@8A]~ylͱxVE>@Zzjy÷|YLB?ZwdixÀVI:4UsUTmąTH<:[tOIfYLA>]{QAa]OFCa|S>\aRIB_|[C[}|ž\QMDc}cK^~_SUMg~jT_~z`X_ZthS\q|}pf^ab~fQWbvŰ|eabdkbNU]sį{\]egu`JGJcűggjapgQMHhy\ewfsuYH;R~_uzs~tnW;[ɨrJU~z~iDV|uG\vpV;Le¸\ZzyZl}enn59ȭwkZYGYvzmRch{|]nu`jV;V|TDLhqnpL>RRkç{qFCu`?@eTlm~{do}yeSwuniZnuz_rkpskoHLmrsohdtpgWt{xqpuoj{oeipmgqd[Ln~{n\VT|o[SSx{WJ?kq{VBFyv\DMtb?@psh_0?m}V,D}j{^/=l`m\$9~kmY8solȵ`-9`plǬ^*5pym`'5gvḭb09Xlf}Яc(2lt`xɦi+/kqVhi)3}`eXlսg.4ysw^gԸf:7jhq_fǢpALlirŢ|j?BOoqqɸsCDLfifʷo<:Egqmɴ}sB=Fj{q}E8?]tpŨz9*5_zΪA,8]àL(1RzʢK'6TʛU+9T_-8IW#3F_%7B~|ãh-37b *.e-/u'-)n$$s&*Ù~y'%'{p#yʭu')/uĮz,%,iq#eƆz4!3j|y9-bɃv1%`֌}>2hqE1bͅww= %bՒ{zK0hˇnS,fōt|Ld̔vZ%iŌgfco[]Śvc$fdo-`i~c&V›x|i4efwD\hm;OspGTe~] MjmMEtqV(Kh|y_0G~mnT+?{qu[:@|j}{bF?vp|y[E5np|^P;lptbX:dxt\W3\wwb]9]{u`e=XzÙzV\(A~n˛ygp6Dy{|mÚx\l;E~xǕkbj;>u}hǚzm{K@qsvj{clK@lw~y˚teiI8czlϟxs|\>^uwg˞zhjX<[vuϥ|dj\;Rtḽx{pAGkzcʪqefCKrmͬhghCHqhrɲ}xyK>i}`iŴznpK;hj~ɸzirL/]~hu\6Z|jk~]5Xppvb.Qojm2R{eZl*O~lbo'H}n`~1IwdQ~+BxnX~v$ArrhѰB >nk|_ѷU>jdwe̱P9{kh~pȬZ'>y`\pf̲j7Ar\VmnȨc6@o]ZrsħmCEmVNfhǭwQHjVIcnħoNKjVIfrƧw]SfO=Xhʪi[fO8UlǢwj_gQ8Tqɤ|uihN,Egέ}|smS*@g̨rzupU&@u}hDAu~ׇl|@6p{ܐl|G=u|׍h}L=uxޙnxH2ksozJ7pwٞi|L6oyݨnzH*guݮp~M1nyѪlN.o{ֶt}G$fxոuK+m}ͶoO&i{zJ`vzR"e|}v~V]w~̅QRq|ʇ]"\y{xc!Uvzˎ{bMoxȏwl&PuyƏrr&Ipvϝuq$Dlw˝r|-Fpvȡr*>myΪw,9iz˩u7;m{zǫx6 3i}zͲ|9 -gxɲxF -gwŲ}L%_}uʸQ]wĶ~^ ]ve Uwüj OzuPz{EzĽ@{{¹(>z}·,5u}ƻ12s|ø>0wD&mǼK"k~~ĺzZh~úz\`Ǿ|b^~ùvo ]ùws U}ǽyv Q~ús O~ºsExüw Bwûs'Bts,:n¼w.7nĺq76k¼q~>/bw}C*_ƿuvN+[~ŸttR%V}ǢuuY!Pyɡtqb $Nxˠsmf KtϣynnGtѢuix=nާsg~8gue4etd4asb$.]tc))Xtb1'Wwa7$PxcA #Ly_J$Ly_}RF{҂d|]BwՂ_weEyۂ^qkAt߇assi١hi/ 9fڨli5 8c٪md< 8dدpc?4aضueF2\ոwbK 3]ѻ~eQ .XоfU 0Z~ɾc}_0^}Ǿezb,[wkzh-[u¿hsn0\ulrq+Vnģrrx%TlĦrk}'WjĪxm!Ugl$Xih&\jl!"Wem'#Xhl,#Ygq0Razt8#Sczw=#Scz{? N]s}E#PbrH$OcsK#L_oU'L_m~WBYkƞ}[=UgǠ{d#QfZcy3@SaZ^7>Q[^^5=T]b\8=UZdX8=WXgV:bslQCdrpRBbtrR?^svWB]rzWAYu}W@U}wXEV~v[IUvxZFUry`JVr~ycKVo||dKTlw|}jOUls|yjRWkp|mSUgk{oVYiiyrY\jg{wZZh`z{z]\i`yz}_]k_szb_g]mzdbf\k}eag[fhafZ_kdf\[{lde]Y|oee]Uzsif_Txuhe]Rzyie\Oz}kg\M|yid\Nw{jd\Or{md^Pn}~mc\Qj}qc\Qd}{sc]Qb}zsa[P_}xva^Q\|xzc_RY~y{_\RU~w~a\ST~tc^WSsb\VPub\XR~rc^ZOqcZXMre[ZJog]\J}oj[\Iwpl\^Iro|n\]Jppyo\_Ijqvq^_Kiqss_`Lerot`aL_umwaaM[tiybcQWvh{dcQUyffcSRzegcUO|egbWNejeYNye}kg\Mtfylh\Logvmh^Nkfroj_Nghnpj`NcjnpkbQaklslbQ^nlrjcQ[pluldUZrixkfWXsixjfWWvj}kfXVwj~kh[V~zllf\Vz|jkf]Xy|lmf^Xu~nld]Xr~nne_Yp}p~od_Zns}pe_Zlt{te_\k~uzvf_\hx{we^^g~xwyg``g|zwzh`_d}zx|h__d{yy}i``e{zzj_`b~}{{l_`c|~zzna`e{~y{pa_cv{|qc`csy{sd`crw}se`bpx~uf_bov}wgaclv}xg`cjw~yi`djv}zlbdjx}{mbcgz}~nbbfz{pdce}|{qcbdz|zsdcdx|xufcdu}ywfadrzxhdeozzjddmz~|kddj{~}lfcg{~~lfdf{}nedez}pedcz|reebz}sfe`z}ugf_y|vgg^z|whg]{y{zhg]wy{{hh]sz||hh^qy{~ji_lzzli`i{zmh`e|xnibd}x~picb}w~qhe`w~tif_w|vig^v|xjh^}w{zjh_{vz{kh_xvy|kh`uvy}lharvw~mhcoxwniclyvqiejzvriei}vtifh~uujfhuwifguxight{kfgu|lgf}v}mhf{xnhfzxoifxypigw{rjgu|sjgs~ukgrwlgoxmhnymimznjl|olk}pmk}}qnk|rojzrojxspkvsqlttrmstroruroqvrppwsqnxtrnxttnytun}ztvo{{uwpz|uwpx|uxqw}vxqu~wyrtwztsxztryzury{wqzzxqz{yr{{zr}|{zr|||{rz}|{sy~|{tx||ux}|vw}|wv}}xv}}xv~~}yv}~~}zv}~}zw|~}zw|~}{x{~}|y{~|yz~~|zz~}zz~|{z}{z}|{}|{~}{~~}{~~}|~~~|~~|~~}~~}~~}~~~~~~~xscavenger-1.4.4/data/spiralthing.lbm0100644000175000001440000007760606644315236016506 0ustar dashusersFORM~ILBMBMHD@@CMAP((H(̠t@HhLTpX`|`dhlpt|| Xd (\,d0h4p8tDxP\8t8t D|<À`8> >6݀|p 0݀>π8&!0 0& V!>π& >π ,UTpQ@>π4\@   >π >π}pӀ_qpÀG   qpÀG  }pÀO    TP@R$pÀGq `πO}@@@B @FdpÀGq    LpǀGuUU@րlπ> π<`8π>    π>p 0݀6݀π>>)8 06 V!0π> >( π>]@UTpQ@ ,π> 4  π>  π>pӀ_}pÀGq   pÀGq  pÀO}    P@R%UpÀGq `πO|@@B A@FdpÀGq   L pǀGuU@րmUπ> π<`8π>   π> 0݀6݀pπ>)8> 0 V!06π>(  >π>Hpi@" ([@I> 4  >>psqpsqpsqpsq"%@@PP@b"wppw"v``w $@@@b"d@@f"wppw"@"wppw#i``II@@#>>"<<ÀÀ"`"88#>> #>>#66݀||p 0 0݀#>>π"88&!"00 "00& V V!#>>π& #>>π# ,UTpQ@Q@#>>π"44\@\@    #>>π #>>π"}ppӀӀ_"qppÀÀG   "qppÀÀG  "}ppÀÀO""  ""  ""TTPP@R$"ppÀÀGq" ` `ππO}@@@@@B "@@Fd"ppÀÀGq"     L"ppǀǀGu#UU@@րl#π>>"  ππ<<"`"88#π>>"      #π>>#p 0 0݀66݀#π>>">)88" 00"6 V V!00#π>> >( #π>>#]@]@UTpQ@Q@ ,#π>>"  44   #π>>  #π>>"ppӀӀ_}"ppÀÀGq   "ppÀÀGq  "ppÀÀO}""  ""  "#PP@R%UU#ppÀÀGq# ` `ππO|@@@B AA#@@Fd#ppÀÀGq"    L #ppǀǀGu#U@@րmU#π>>#  ππ<<#`#88#π>>"     #π>># 0 0݀66݀p#π>>#)88>! 00" V V!006#π>> (  >#π>>#Hpi@i@" ([@[@I#>>#  44  #>> #>>#ppsq#ppsq#ppsq#ppsq"%@@PP@b"wppw"v``w $@@@b"d@@f"wppw"@"wppw#i``II@@#>>"<<ÀÀ"`"88#>> #>>#66݀||p 0 0݀#>>π"88&!"00 "00& V V!#>>π& #>>π# ,UTpQ@Q@#>>π"44\@\@    #>>π #>>π"}ppӀӀ_"qppÀÀG   "qppÀÀG  "}ppÀÀO""  ""  ""TTPP@R$"ppÀÀGq" ` `ππO}@@@@@B "@@Fd"ppÀÀGq"     L"ppǀǀGu#UU@@րl#π>>"  ππ<<"`"88#π>>"      #π>>#p 0 0݀66݀#π>>">)88" 00"6 V V!00#π>> >( #π>>#]@]@UTpQ@Q@ ,#π>>"  44   #π>>  #π>>"ppӀӀ_}"ppÀÀGq   "ppÀÀGq  "ppÀÀO}""  ""  "#PP@R%UU#ppÀÀGq# ` `ππO|@@@B AA#@@Fd#ppÀÀGq"    L #ppǀǀGu#U@@րmU#π>>#  ππ<<#`#88#π>>"     #π>># 0 0݀66݀p#π>>#)88>! 00" V V!006#π>> (  >#π>>#Hpi@i@" ([@[@I#>>#  44  #>> #>>#ppsq#ppsq#ppsq#ppsq"%@@PP@b"wppw"v``w $@@@b"d@@f"wppw"@"wppw#i``II@@#>>"<<ÀÀ"`"88#>> #>>#66݀||p 0 0݀#>>π"88&!"00 "00& V V!#>>π& #>>π# ,UTpQ@Q@#>>π"44\@\@    #>>π #>>π"}ppӀӀ_"qppÀÀG   "qppÀÀG  "}ppÀÀO""  ""  ""TTPP@R$"ppÀÀGq" ` `ππO}@@@@@B "@@Fd"ppÀÀGq"     L"ppǀǀGu#UU@@րl#π>>"  ππ<<"`"88#π>>"      #π>>#p 0 0݀66݀#π>>">)88" 00"6 V V!00#π>> >( #π>>#]@]@UTpQ@Q@ ,#π>>"  44   #π>>  #π>>"ppӀӀ_}"ppÀÀGq   "ppÀÀGq  "ppÀÀO}""  ""  "#PP@R%UU#ppÀÀGq# ` `ππO|@@@B AA#@@Fd#ppÀÀGq"    L #ppǀǀGu#U@@րmU#π>>#  ππ<<#`#88#π>>"     #π>># 0 0݀66݀p#π>>#)88>! 00" V V!006#π>> (  >#π>>#Hpi@i@" ([@[@I#>>#  44  #>> #>>#ppsq#ppsq#ppsq#ppsq"%@@PP@b"wppw"v``w $@@@b"d@@f"wppw"@"wppw#i``II@@#>>"<<ÀÀ"`"88#>> #>>#66݀||p 0 0݀#>>π"88&!"00 "00& V V!#>>π& #>>π# ,UTpQ@Q@#>>π"44\@\@    #>>π #>>π"}ppӀӀ_"qppÀÀG   "qppÀÀG  "}ppÀÀO""  ""  ""TTPP@R$"ppÀÀGq" ` `ππO}@@@@@B "@@Fd"ppÀÀGq"     L"ppǀǀGu#UU@@րl#π>>"  ππ<<"`"88#π>>"      #π>>#p 0 0݀66݀#π>>">)88" 00"6 V V!00#π>> >( #π>>#]@]@UTpQ@Q@ ,#π>>"  44   #π>>  #π>>"ppӀӀ_}"ppÀÀGq   "ppÀÀGq  "ppÀÀO}""  ""  "#PP@R%UU#ppÀÀGq# ` `ππO|@@@B AA#@@Fd#ppÀÀGq"    L #ppǀǀGu#U@@րmU#π>>#  ππ<<#`#88#π>>"     #π>># 0 0݀66݀p#π>>#)88>! 00" V V!006#π>> (  >#π>>#Hpi@i@" ([@[@I#>>#  44  #>> #>>#ppsq#ppsq#ppsq#ppsq"%@@PP@b"wppw"v``w $@@@b"d@@f"wppw"@"wppw#i``II@@#>>"<<ÀÀ"`"88#>> #>>#66݀||p 0 0݀#>>π"88&!"00 "00& V V!#>>π& #>>π# ,UTpQ@Q@#>>π"44\@\@    #>>π #>>π"}ppӀӀ_"qppÀÀG   "qppÀÀG  "}ppÀÀO""  ""  ""TTPP@R$"ppÀÀGq" ` `ππO}@@@@@B "@@Fd"ppÀÀGq"     L"ppǀǀGu#UU@@րl#π>>"  ππ<<"`"88#π>>"      #π>>#p 0 0݀66݀#π>>">)88" 00"6 V V!00#π>> >( #π>>#]@]@UTpQ@Q@ ,#π>>"  44   #π>>  #π>>"ppӀӀ_}"ppÀÀGq   "ppÀÀGq  "ppÀÀO}""  ""  "#PP@R%UU#ppÀÀGq# ` `ππO|@@@B AA#@@Fd#ppÀÀGq"    L #ppǀǀGu#U@@րmU#π>>#  ππ<<#`#88#π>>"     #π>># 0 0݀66݀p#π>>#)88>! 00" V V!006#π>> (  >#π>>#Hpi@i@" ([@[@I#>>#  44  #>> #>>#ppsq#ppsq#ppsq#ppsq"%@@PP@b"wppw"v``w $@@@b"d@@f"wppw"@"wppw#i``II@@#>>"<<ÀÀ"`"88#>> #>>#66݀||p 0 0݀#>>π"88&!"00 "00& V V!#>>π& #>>π# ,UTpQ@Q@#>>π"44\@\@    #>>π #>>π"}ppӀӀ_"qppÀÀG   "qppÀÀG  "}ppÀÀO""  ""  ""TTPP@R$"ppÀÀGq" ` `ππO}@@@@@B "@@Fd"ppÀÀGq"     L"ppǀǀGu#UU@@րl#π>>"  ππ<<"`"88#π>>"      #π>>#p 0 0݀66݀#π>>">)88" 00"6 V V!00#π>> >( #π>>#]@]@UTpQ@Q@ ,#π>>"  44   #π>>  #π>>"ppӀӀ_}"ppÀÀGq   "ppÀÀGq  "ppÀÀO}""  ""  "#PP@R%UU#ppÀÀGq# ` `ππO|@@@B AA#@@Fd#ppÀÀGq"    L #ppǀǀGu#U@@րmU#π>>#  ππ<<#`#88#π>>"     #π>># 0 0݀66݀p#π>>#)88>! 00" V V!006#π>> (  >#π>>#Hpi@i@" ([@[@I#>>#  44  #>> #>>#ppsq#ppsq#ppsq#ppsqxscavenger-1.4.4/data/regularguy.lbm0100644000175000001440000010013206644315311016317 0ustar dashusersFORMRILBMBMHD@@CMAP((H(̠t@HhLTpX`|`dhlpt|| Xd (\,d0h4p8tDxP\8t8t D|"<x||"<x||"<x||  "?"xxx"xxx"xxx  ""|x8v|"|x8v|"|x8v| x x"b"xx||z<<x"xx||z<<x"xx||z<<x00""|~~<|"|~~<|"|~~<|"@"<|"<|"<|#"  B"|@"|@"|@!"р#bD!1#|#|#|# @"@ Q@$#8#8#8# @"8 $ @ X# # # #@# B@ 0 r"8 x |x|  "8 x |x|  "8 x |x|  "",@@ddAB0   `  p> `  p> `  p>  @2$<@A  p pp< p pp< p pp< HD$H  H : `0800 `0800 `0800 (8H H $1`0p 0 `0p 0 `0p 0 !(0!@("DA@8>@8>@8>"@@@@# @"""###    ###""#    """" " #>" " " "  > "  > #:6'>>~?" ?" ?" ?"6'0 >~8>"6'0 >~8>#.Zvg.-8~=>"<??0?8>"<??0?8>"<??0?8>"7#& 0``<<<"7#& 0``<<<#.[wcf-p}}|"<????o>>?"<????o>>?"<????o>>?' @`q10' @`q10#/O1!g)`qp"???_o??"???_o??"???_o??0!@`1380!@`138"/Gq!#3aqsy"8>?_n??>"8>?_n??>"8>?_n??>` @08` @08"!F !A3a`s{?"8>`>^<<"8>`>^<<"8>`>^<<` ` #A  @C SM">~?=~<>?">~?=~<>?">~?=~<>?# @ @S` @A@"??<??>?"??<??>?"??<??>?#p@`D @ AP B@ @@"?;?>/=???"?;?>/=???"?;?>/=???#DF @"@@@#;p889>xx?s#;p889>xx?s#;p889>xx?s#0@ D0@# $ #π88πppq#π88πppq#π88πppq#P@# DP@$p100 #78pp0#78pp0#78pp0#@!H/ HAAB@ 0HN #00>>01`0#00>>01`0#00>>01`0#D4 @&HH1& B@0@P11#800| `#800| `#800| `#HH@(L$(<@CP#00< p#00< p#00< p# "$P@@\PH`   0``   0``   0` PH$p p 0pp p 0pp p 0p @@ D"xx8|xx8|xx8|8 88 88 88 88 88 8#`88`#`88`#`88`#`88`#`88`#`88`#À8ÀÀ8À#À8ÀÀ8À#À8ÀÀ8À#88#88#88#88#88#88#88#88#88"8oo8"8oo8"8oo8"""""""""""""""xppxxppxxppx"xxxxxxxxxx"xxxxxxxxxx"xxxxxxxxxx888888"xxxxxxxxxxxx"xxxxxxxxxxxx"xxxxxxxxxxxx888888"88xxx88xxx88"88xxx88xxx88"88xxx88xxx88"888x8888x888"888x8888x888"888x8888x888"<<8x8<<8x8<<"<<8x8<<8x8<<"<<8x8<<8x8<<"<<<8<<<<8<<<"<<<8<<<<8<<<"<<<8<<<<8<<<"||<8<||<8<||"||<8<||<8<||"||<8<||<8<||"|||<||||<|||"|||<||||<|||"|||<||||<|||"|<||<|"|<||<|"|<||<|"||"||"||"ll|ll|ll"ll|ll|ll"ll|ll|ll"ll||ll||ll"ll||ll||ll"ll||ll||ll"llllllllll"llllllllll"llllllllll",,|||,,|||,,",,|||,,|||,,",,|||,,|||,,"||l||l||"||l||l||"||l||l||"||"||"||`00``00``00``00``00``00`#`pp`#`pp`#`pp`#`pp`#`pp`#`pp`#8````````8#8````````8#8````````8#8`gg``gg`8#8`gg``gg`8#8`gg``gg`8#pssssp#pssssp#pssssp#pp#pp#pp#wggw#wggw#wggw####}}?/gg/?}}#}}?/gg/?}}#}}?/gg/?}}#????#????#????#=//=#=//=#=//=#????#????#????"""""""""""""<<<<<<"<<<<<<"<<<<<<"<<<<<<<<<<"<<<<<<<<<<"<<<<<<<<<<">><<>><<>>">><<>><<>>">><<>><<>>">>><>>>><>>>">>><>>>><>>>">>><>>>><>>>"??><>??><>??"??><>??><>??"??><>??><>??"???>????>???"???>????>???"???>????>???"66?>?66?>?66"66?>?66?>?66"66?>?66?>?66"66>?>66>?>66"66>?>66>?>66"66>?>66>?>66"666?6666?666"666?6666?666"666?6666?666"44>>>44>>>44"44>>>44>>>44"44>>>44>>>44">>?6?>>?6?>>">>?6?>>?6?>>">>?6?>>?6?>>#???>????>???#???>????>???#???>????>???####888888888888#888888888888#888888888888#888888888888#888888888888#888888888888#||||||||||||#||||||||||||#||||||||||||####888888888888#888888888888#888888888888############"""""""||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"""""""""#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#######ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ"""######"888888888888"888888888888"888888888888 ``` ``` ```"|| | | |||||`|`|`|"|| | | |||||`|`|`|"|| | | |||||`|`|`| ``` ``` ```"88 8 8 88888`8`8`8"88 8 8 88888`8`8`8"88 8 8 88888`8`8`8#>>00#>>00#>>00#>888888>88099980#>888888>88099980#>888888>88099980#??00#??00#??00#??00#??00#??00#######|?????|#|?????|#|?????|      "||"||"||  >>  >>  >>"||}}}||>||||>|"||}}}||>||||>|"||}}}||>||||>| 88 88 88 88 88 88"||8||||8|8||||8|"||8||||8|8||||8|"||8||||8|8||||8|ppppppppp"||~p~p~p~||"||~p~p~p~||"||~p~p~p~||000000000"000"000"000"""""""````    "````    "````          "ÀÀÀÀ"ÀÀÀÀ"ÀÀÀÀ""""À"À"À""""""      "888888"888888"888888"||||||>>>>>>"||||||>>>>>>"||||||>>>>>>"888888"888888"888888"888888"888888"888888""""""""""""####??????#??????#??????####??????#??????#??????#||||||>>>>>>#||||||>>>>>>#||||||>>>>>>pppppppppppppppppp#||||||>p>p>p>p>p>p#||||||>p>p>p>p>p>p#||||||>p>p>p>p>p>p888888888888888888#||||||>8>8>8>8>8>8#||||||>8>8>8>8>8>8#||||||>8>8>8>8>8>8### 00 0000 00 "00  #00  #0000    0  00000  #ssssss#!!111!ssssss#11111!ssssssPP  00  pp00  00  #33##CC33##ss33## @@   pp``  #'''#WWgg#wwgg'`@`` pp```@`` #cc##ccCC#sscccC` @@@``` @@@#AAA#aa!!#aaa! @ @ @ @#A##A #ÆÆaaaaaa###ÆÆÆaaaaaa#ÆÆÆaaaaaa`` ##cc#@@ ""@@"@@@@xscavenger-1.4.4/data/reddevil.lbm0100644000175000001440000015062007227105036015735 0ustar dashusersFORMшILBMBMHD@@CMAP((H(̠t@HhLTpX`|`dhlpt|| Xd (\,d0h4p8tDxP\8t8t D|>>>>>>>????"00001111"}}}}||||""#````````"#ƀƀƀƀ#????#    "<<<<"XXXX"#CCCC0@0@0@0@hhhh#oooo@@@@#@@@@##@@@@# @ @ @ @"bbbb#@@@@#,,,,0 0 0 0 ````#3`3`3`3` #    @@@@#     @@@@# ` ` ` `    % % % % "#```` #    PPPP q q q q# ?` ?` ?` ?`_p_p_p_p n n n n#     #````#    # &` &` &` &`PPPP l l l l"FFFF@@@@#````````RPRPRPRPdddd#`p`p`p`p````#߰߰߰߰????#*@*@*@*@d d d d #    #%@%@%@%@h h h h #O0O0O0O07`7`7`7`"    #J0J0J0J0 5` 5` 5` 5`#0p0p0p0p((((#&ϐ&ϐ&ϐ&ϐ&&&&#5`5`5`5`    #%%%%% % % % #0`0`0`0`    # ##88888888 0 0 0 0#nnnnooooHHHH#     iiii#߰߰߰߰# #nnnnm&Hm&Hm&Hm&H #vvvvu"Hu"Hu"Hu"H#nhnhnhnh 0 0 0 0#uOuOuOuOHHHH#K@K@K@K@4444KKKK#~~~~ϰϰϰϰ#h@h@h@h@#Ć(Ć(Ć(Ć(5555>>>HHHHXXXX#0000wwwwN N N N #f f f f #7777F F F F #CLCLCLCLXXXX hhhh#CCCCXXXX#ddddxxxx# ~ ~ ~ ~uuuu#````#@@@@````#d@d@d@d@````#    XXXX#    #PPPP    #xPxPxPxP ٰ ٰ ٰ ٰ# ;@;@;@;@#@@@@#"@"@"@"@#BBBB    @@@@#CCCC    ## @ @ @ @rrrr Fp Fp Fp Fp#### 8888 p p p p#  p p p p#||||#ArArArAr#        #    #        #pppp ###DDDD#DDDD#DDDD#9999#Y@Y@Y@Y@# #````# #@@@@#@@@@#xxxx#ffffssss# ##pppp#FFFFssss #FFFFrrrr# ` ` ` `"8888#?@?@?@?@#????! @ @ @ @"8888     "8888    "{{{{0000<<<<"????<8<8<8<8"    "????<<<<"    " { { { {<<<< "{{{{<<<< @@@@ @@@@ @@@@ @@@@ @@@@ @@@@ @@@@ @@@@ 1111 1111#////#0000#@@@@>@>@>@>@#@@@@0@0@0@0@# @ @ @ @@@@@##!!!!"cccc#@@@@@@@@#0000````#||||||||# ````#>>>># @ @ @ @ @ @ @ @#3333#@@@@@@@@#@@@@@@@@#ccccMMMM## #<<<<yyyyHHHH##@#@#@#@@@@@#ccccKKKK#@@@@    ````#````#IIII#x x x x #@@@@IIII#@@@@"FFFF##4444    #@@@@#0@0@0@0@( ( ( ( #pppp@@@@x x x x 0 0 0 0     #````PPPP### #````vvvv#pppp@@@@PPPP#xxxxxxxx#`x`x`x`xXXXX#dddd H@ H@ H@ H@6666#bbbb@@@@! J J J J&&&&#    # ` ` ` ` ` ` ` `#TTTT &&&&# p p p p#ApApApAp# ` ` ` ` 1` 1` 1` 1`"@P@P@P@P# R@ R@ R@ R@ !@ !@ !@ !@#    # d d d d d d d d#/@/@/@/@HHHH# @ @ @ @#    @@@@8888#```` p` p` p` p`0000#@@@@    @@ @@ @@ @@#pppp     0 0 0 0#vvvv#ЗЗЗЗ@@@@ H H H H#ߟߟߟߟ@@@@ #PPPP @ @ @ @ ( ( ( (#vvvvdddd    #nnnnDDDD#vvvv8-8-8-8-    #////////oooo#,,,,    #~~~~ # p p p p #a#a#a#a#))))>>> s s s s# 3 3 3 3#(KH(KH(KH(KH    #(KH(KH(KH(KH    #<<<<7777#5D5D5D5D#G<G<G<G<    #<<<<<<<<#F<F<F<F<#5D5D5D5D #5D5D5D5D"3,x3,x3,x3,x#||||38383838# @@@@rrrr#@@@@ffff"@@@@bbbb# 28282828 #78787878#9999&&&&    #x~x~x~x~#hhhh((((#AxAxAxAx????8888#HHHH&&&&#8888#8888#???? # # # ##pppp     0 0 0 0#8888aPaPaPaP#8888}}}}GGGG#8888aaaaDDDD#pppp B@ B@ B@ B@ @0 @0 @0 @0#pppp @ @ @ @ 0 0 0 0#1111    #0000NNNNb0b0b0b0# mmmm# #     #00000000@@@@pppp#0000p0p0p0p0#>>>>9999#N`N`N`N` ` ` ` `#????0}0}0}0}0000#????pppp0000#????0}0}0}0}0000#```` ` ` ` ` #```` ` ` ` `#3333cccc#3333""""GGGGAAAAGGGGAAAAGGGGAAAA#3333""""#3333""""""qqqq""""1111"1111#////#ffff````#0000aaaa###bbbb        #bbbb    N N N N ##ssss#XXXX#xxxx#XXXX#cccc #CCCC# < < < <# <<<< 8888"<<<<  #0000<<<< #<<<<"{{{{0000<<<<"????<8<8<8<8"    "????<<<<"    " { { { {<<<< "{{{{<<<<# ` ` ` `"8888#?@?@?@?@#????! @ @ @ @"8888     "8888    #xxxx#ffffssss# ##pppp#FFFFssss #FFFFrrrr#9999#Y@Y@Y@Y@# #````# #@@@@#@@@@##DDDD#DDDD#DDDD#||||#ArArArAr#        #    #        #pppp ### @ @ @ @rrrr Fp Fp Fp Fp#### 8888 p p p p#  p p p p#PPPP    #xPxPxPxP ٰ ٰ ٰ ٰ# ;@;@;@;@#@@@@#"@"@"@"@#BBBB    @@@@#CCCC    #ddddxxxx# ~ ~ ~ ~uuuu#````#@@@@````#d@d@d@d@````#    XXXX#    #4444xxxx#>>>>HHHHXXXX#0000wwwwN N N N #f f f f #7777F F F F #CLCLCLCLXXXX hhhh#CCCCXXXX#>>>>>>>????"00001111"}}}}||||"" ""    "xxxx||||"    !""                # < < < <# <<<< 8888"<<<<  #0000<<<< #<<<<##ssss#XXXX#xxxx#XXXX#cccc #CCCC#////#ffff````#0000aaaa###bbbb        #bbbb    N N N N ""qqqq""""1111"1111#3333cccc#3333""""GGGGAAAAGGGGAAAAGGGGAAAA#3333""""#3333""""#>>>>9999#N`N`N`N` ` ` ` `#????0}0}0}0}0000#????pppp0000#????0}0}0}0}0000#```` ` ` ` ` #```` ` ` ` `#1111    #0000NNNNb0b0b0b0# mmmm# #     #00000000@@@@pppp#0000p0p0p0p0#???? # # # ##pppp     0 0 0 0#8888aPaPaPaP#8888}}}}GGGG#8888aaaaDDDD#pppp B@ B@ B@ B@ @0 @0 @0 @0#pppp @ @ @ @ 0 0 0 0#9999&&&&    #x~x~x~x~#hhhh((((#AxAxAxAx????8888#HHHH&&&&#8888#8888"3,x3,x3,x3,x#||||38383838# @@@@rrrr#@@@@ffff"@@@@bbbb# 28282828 #78787878#<<<<7777# 5D5D5D5D#G<G<G<G<    #<<<<<<<<#F<F<F<F<#5D5D5D5D #5D5D5D5D#ijijijij9J9J9J9J# @ @ @ @....    #PPPP 3 3 3 3#>>>> s s s s# 3 3 3 3#(KH(KH(KH(KH    #(KH(KH(KH(KH    #,,,,8}8}8}8}    # /~/~/~/~# % % % %3333 4 4 4 4#==== #%,%,%,%,1111     #)Nf)Nf)Nf)Nf(((( # )Nd)Nd)Nd)Nd((((#vvvv8-8-8-8-    #////////oooo#,,,,    #~~~~ # p p p p #a#a#a#a#))))>>># @ @ @ @ @ @ @ @#3333 1111 1111#////#0000#@@@@>@>@>@>@#@@@@0@0@0@0@# @ @ @ @@@@@##!!!! @@@@ @@@@ @@@@ @@@@ @@@@ @@@@ @@@@ @@@@ ```@@@@@@"\\\ppp"V V V <<<000   F@F@F@PPP"F@F@F@PPPc0c0c0 @@@"_ _ _ @x@8@8"888 @ @ @HH<<<@@@@8@x@x    @ @ @PP[ [ [ @@@X"[ [ [ X" "@@@0 0 0 hhhD<DD @@@"?@?@?@BBB @@@"@@@@@@ "@@@ #pppFFF.,,#:::LNN!```UUU" 1 1#}}}bb=b=!```eee"""" ! !#1 1 1  """ "  #???ppp ,ll#>x>x>x{p{p{pN&&#   qqq qHpHp#bJ{J{  cHSHS" x x xcpcpcp $$000@@@#> x> x> x#p#p#pxxx $$#FFFmmm|\\#EpEpEpr:r:r:6VV#212121PPPHp8 #` #`#333€€€J{ ' '#222@@@HS''#42@42@42@b:b:b:4 VV@@@@@@888#t2@t2@t2@":":":===4>VxVx#+++ @ @ @\qq#hhhXXXW a a#C`C`C` @ @ @ #`# '# @ @ @'#eee Waaxxx000 #xdxdxd<<<Wx`@`@#xxxNNN ` ` `6q&!&!#DpDpDp ߀ ߀ ߀iayaya#y y y NNN ` ` `#999__A_A#999NNN```#<p<p<p !a!!!!   #ppp!`@  #OOO   GGG&3""#nmnmnm^^^y88#1$1$1$   YYY@@#$$$///YYY_]]#$$$   ApApAp#$$$ЎЎЎ^`^`^`!bbhhh```   #~$~$~$ЎЎЎ b0b0#   "#!;!;!;8#^x^x^x```@DA0DA0#^~^~^~ = = =___]n8n8#^X^X^X@@@00#pppbU@0U@0 @@@ #!!!P`P`P`b0U@U@#333   # 6^ 6^ 6^>'|>'|>'|gg#3в3в3вx^Fx^Fx^F   Dg0$x$x#???<=<=<=n8oo#3330#VVVLLL222Uf04'4'~~~#RRRLLL"""Uf4'4'#X@X@X@CCCPIPI#>|>|>|zl0zl0zl0w??#u$u$u$M M M $~bzbz"?'|>'|>'|>'|>'|>'|>|>|>|>|>|>|#      #<=<=<=<=<=<=?>>>>p>"ĀĀ?##!!!p! ?p!?p"ppp?ppp##!!!p! 000000"|||?|||>#>#>!>!>!p>!#@8####~~8###???!????#~>~|x9#99#?~?>??~|x#?~?>??~|x#FFFF?FFbbbbbb#zz~6^^__~_l_`#}9 998888#}9 ======#}9 !! #Z~Z6ZZ[[ZZ~ZlZ`#Z~Z6ZZ[[ZZ~ZlZ`#.  t``#w@w@@z@:@:@@^\\#j|jjjWWVV>V V !|<<><<#|>  #@@b@zb@b@b@GGFF^F@F@#@@b@zb@b@b@GGFF^F@F@``_       xscavenger-1.4.4/data/redbrick.lbm0100644000175000001440000011020206644315236015723 0ustar dashusersFORMzILBMBMHD@@CMAP((H(̠t@HhLTpX`|`dhlpt|| Xd (\,d0h4p8tDxP\8t8t D|>0 0 0 0 *8>* A0 68y60 >8}>0 >8>0 0 8` 0 >`>0 >`>ZD  ?|y~?|}?|? ?|H ?8?8Z( p?S`8`x`?8`?8`? ?8pP ?p?pZ8p!0 px0 pp}?p0 p0 0 p 0 ppp0 pZ?00 pA0 =0=?0 00 xx00 0 xA 0 x0 xZUpp p 0 `np8}p 0 80 xx80 0 | 0 |0 |Z | A0 ` |8y  0 |8}0 xx|80 0 ||0 |0 |t|t  0 `|z" 0 |0   xx?|?0 0  | 0 0 | 0 @|x J 0 ||K0 @@?|?0 0 @|@0 0 wT|T!?|?|?$?|?? ?|<?<?<   A? x x??$? ?>D?>?>uPuP  0 y0 }0 $ 0 0 |`0 |0 | A0 Mz 0 0 @@$@xx??0 0 @@x@@0 x0 xZWǀW  0 ǀx$0 xǀ|x0 xx?ǀ?0 0 ǀ@0 xx0 Z p0 y!0 }!0 xx??0 0 0 0 Z  p!0  N 0 o0 xx0 0 0 0 Z`ǀ` pA0 ZǀPZ?0 ǀ0 BBǀ0 0 BǀB0 0 Z p ?`@z@ ?{{?? ??{{?Z@@ A?`x. ?|/?????ZZ  0 `y 0 }0 0 0 0 0  0 @y0 }0 xx0 0 0 0 0 0 0 xx0 0 0 0 0 0 0 ~xx80 0 0 0 8  0 8y>0 8}0 @xx>0 0 0 80 88>* A0 8y>60 8}>0 >@8>0 0 8` 0 `>0 `>_D  ?`|y~>?|}?@|? ?|H ?8?8_ ( p? 8`y>`?p8`}? 8`? ? 8pP ?pp?p_08p!0  p0  p?p0 p0 0 p 0 pp0 p_ 0 pA0  0=?0 0 Ñ0 xx00 0 xA 0 x0 x_]Tp p 0 `8sp 0 8{0 xx?80 0 | 0 |0 |_*| A0 `7]|8sf  0 ?|8{0 A'xx|80 0 A||0 ?|0 ?|]|t  0 `k|s 0 w}|{0  / xx |?0 0  | 0 w}0 s| 0 @Q|s 0 o|{0 ?@ |?0 0 |@0 o0 W]T|T!?g|?|?|???|<?<?<*  A?=  x?? ?>??>D??>??>]tuP  0 sf0 {w0  8 ?0 0  |`0 |0 | A0 QDsh 0 {0 @8@xx??0 0 @x@@0 x0 xǀW  0 ǀs0 ǀ{x0 8xx?ǀ?0 0 ǀ@0 x0  ]h 0  s0 {0 8xx?0 0 0 0  !0 ]pt f 0 w0 Axx0 0 A0 0 `ǀ` A0  ǀpAZ?0 }ǀxA0 Bǀ0 0 ǀB0 }0   ?``s!@ ?{!{? ???{?U@@ A?`8N ?o?????Z  0 `N 0 o0 0 0 0 0  0 @|N0 ~o0 xx0 0 0 0 0 0 0 xx0 0 0 0 0  0  0 xx80 0 0 0 8  0 8y0 8}0 xx>0 0 0 80 88>* A0 8y60 8}>0 >8>0 0 8` 0 `>0 `>D  ?`|y~?|}?|? ?|H ?8?8 ( p? 8`x`?p8`? 8`? ? 8pP ?pp?p08p!0  px0  p}?p0 p0 0 p 0 pp0 p 0 pA0  0=?0 00 xx00 0 xA 0 x0 x]Tp p 0 `8}p 0 80 xx?80 0 | 0 |0 |*| pA0 `7]|8y  0 ?|8}0 Axx|80 0 A||0 ?|0 ?|]|t p 0 `k|z" 0 w}|0   xx |?0 0  | 0 w}0 s| p0 @Q|x J 0 o||K0 @ |?0 0 |@0 o0 W]T|Tp!?g|?|?$|???|<?<?<* p A?= x???$??>D??>??>]tuP p 0 y0 }0  $ ?0 0  |`0 |0 | pA0 QDz 0 0 @$@xx??0 0 @x@@0 x0 xǀW p 0 ǀx$0 ǀ|x0 xx?ǀ?0 0 ǀ@0 x0  ]h p0  y!0 }!0 xx?0 0 0 0  p!0 ]pN 0 o0 Axx0 0 A0 0 `ǀ` pA0  ǀPZ?0 }ǀ0 Bǀ0 0 ǀB0 }0  p ?``z@ ?{????{?U@@ A?`x. ?|/?????Z  0 `y 0 }0 0 0 0 0  0 @y0 }0 xx0 0 0 0 0 0 0 xx0 0 0 0 0 0 0 ~xx0 0 0 0   0 y>0 }0 @xx>>0 0 0 0 *8>* A0 68y>60 >8}>0 >@8>0 0 8` 0 >`>0 >`>D  ?|y~>?|}?@|? ?|H ?8?8( ?S`8`y>`?8`}?8`? ?8pP ?p?p8!0 p0 pp?p0 p0 0 p 0 ppp0 p?00 A0 =0=?0 0 Ñ0 xx00 0 xA 0 x0 xUpp  0 `np8sp 0 8{0 xx80 0 | 0 |0 | | A0 ` |8sf  0 |8{0 'xx|80 0 ||0 |0 |t|t  0 `|s 0 |{0  / xx?|?0 0  | 0 0 | 0 @|s 0 |{0 @?@?|?0 0 @|@0 0 wT|T!?|?|??|?? ?|<?<?<   A? x  x? ?>? ?>D?>?>uPuP  0 sf0 {w0 8 0 0 |`0 |0 | A0 Msh 0 {0 @@8@xx??0 0 @@x@@0 x0 x_WǀW  0 ǀs0 xǀ{x0 8xx?ǀ?0 0 ǀ@0 xx0 _ p0 s0 {0 8xx??0 0 0 0 _  p!0  t f 0 w0 xx0 0 0 0 _`ǀ` pA0 ZǀpAZ?0 ǀxA0 BBǀ0 0 BǀB0 0 _ p ?`@s!@ ?{{!{? ? ??{{?_@@ A?`8N ?o?????ZZ  0 `N 0 o0 0 0 0 0  0 @|N0 ~o0 xx0 0 0 0 0 0 0 xx0 0 0 0 ?@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ @@ @@ @@     @@? @@ @@ @@@@@@@@@@@@@@@@@@@ @@@@ @@@@ @@@ xxxxxxxx xxxxxxxx00000 0 0000000 0 000000?00000000 00000000 00000000?000000000 0 00xxxx ?xxxxxxxx?x x xx > ? ?        <<<<<   <@ @@ 0l 0l 0l  @ @@ 0l  0l 0l  0l 0l @@ @@ 0lx<@`````0lxÀ0lx @ @@ 0lx 0lx0lx<0lx0lx8@ @@ 0l8x o`oo`0l8xppp0l8x@ @@ 0l8x0l8x0l8x0l8x0l8xr@ @@ 0l8x8 i`hi`0l8x8ppp0l8x8@ @@ 0l8x8a0a0l8x8yxy0l8x8yxy0l8x80l8x8 P@ @@`0l800 i`hk 0l800`ppp0l800@ @@`0l800ap!0l800yx{0l800yx{0l8000l800 P@ @@ 0ll0p i`von0ll0p`ppq0ll0p@ @@`0ll0pa`0ll0py0ll0py0ll0p0ll0p P@ @@`08l0` i``a08l0``p08l0`@ @@@08l0`a08l0`y08l0`y08l0`08l0` P@ B@B080 i`}080`p>|080@ @C080a?080y080y080080 P@ 080 i`~~080`p080@ 080a080y080y080080 P@  i``p@ ayy P@ ||| i`|||`p|||@ |||a|||y|||y|||||| P@ x~~ i`x`px@ x axyxyxxB@B P@ x } i`x >|`px @C@ x ?ax yx yx x @@` P@ `a i``p @@@@  ayy@@  P@ ~>von i`~>pq`p~> @@`@ ~> a~>y~>y~>~>@@` P@ >8~hk  i`>8~pp`p>8~ @@`@ >8~ !a>8~x{y>8~x{y>8~>8~@@ B@ 0hi` i`0ppp0 @@ @ 0 aa0xyy0xyy00@@ @ poo` o`ppppp @@ @ p pppp@@ @@ ````<@```À` @@ @ ` ``<``@@ <@ ~~~ @@ @ ~ ~~ ~~~||~||<~|| ~|| ~||~|| ~||~||<<<< 8| 8| 8| 8| x8| 8| 8| 8| x8 x8 8 8 !8 x8 x8 8 !08 ` ?08 ` x08 ` 08 ` @08 ` ?08 ` ?08 ` 08 ` /^z08pT /a08pT /!08pT /x08pT /B08pT /08pT /08pT /08pT ͯ>Zj<808 ͯ>m<808 ͯ>)808 ͯ>x808 ͯ>B808 ͯ><808 ͯ>808 ͯ><<808 o^>RJ888 o^>m888 o^>!<<888 o^>x888 o^>B888 o^>888 o^>888 o^><888 o~Ǯ^z<<08 o~Ǯa<08 o~Ǯ!<<08 o~Ǯx<08 o~ǮB<08 o~Ǯ<08 o~Ǯ<08 o~Ǯ<<08 ì~!B@08pT ì~?<<@08pT ì~~x08pT ì~08pT ì~@08pT ì~?~08pT ì~?08pT ì~~08pT ljp!B@|>jpp?<<@|>jp~x| >j|>jp@|>jp?~|>jp?|>jpp~|V|kf^z<V|kfaV|kf!< V|kfxV|kfB V|kfV|kfV|kf<jtZjp|jmp|j)<<p|j xp|jBp|j p|jp|j<p|V*RJ<088|V*Dm<088|V*!088|V*@x088|V*B088|V*@<088|V*088|V*<<088|T^zpap!p xpBp ppp/!` /?` /x` /` /@` /?` /?` /` pxpxp p! xpxpxxscavenger-1.4.4/data/pop.raw0100644000175000001440000001663306644315236014770 0ustar dashusers~~~~~~~~~~}}}}||}}}}}~~}|{zzzz{{}}}~~~~}|yuplf`ZTNHB=95212258<@EKPSTVWWXXXYY[\_chmsyþ~~}|zvpjd]WQJD?:65322149?DINRUVWWWXXXYY[^diou{¾~~~~|zvrmhb[UNHB<74333469=CINRTVWXXXYYZ[\_chou{ſ~~}|xslf_YRLF@;853223784333469=CINQUWWXXXYYZ[]`gntzľ~~~}|xrle_XRKD>:632225:?EKRUVWWWXXXYZ]aejpw~~ywwxyz|}}{xtnf_WOG?8433357=DKPTVWXXXYYZ]ckrz¼~~~}zung_WOHA;63235:@GNSUVWXXYYZ]agnv~ľ~~}{ytme]UME>843335;AHOSVWXXXXYY]dls{¼~~~~{vpjbZRJB;632259?FMRUVWXXYY[_cjrz»~~|zunf^UMD=853215FHHHIO\ixȼ~rg^WW[cow{|{yzüyvsnhYI9*&07;?DKXft}woiflrwyxuqptxùvhZOFEFKU\_`aabhqy|tmjijkkh_TJ?8449EPX[_bgq~ºyk_WSTX`bccccgp{xlb\\]_`^VNE<645>>>>>>>>>>>">>>>>>>>>>>>">>>>>>>>>>>>"">>>>>>>>>>>>"""""""888888888888"""||||"||||"||||"||||"||||"||||"||||"||||"||||"||||"||||"||||"||||"||||"||||||||""""||||||||""pppp""#{{{{#{{{{#{{{{ #{{{{#xxxx#{{{{#yyyy#yyyy#xǀǀxǀǀxǀǀxǀǀ"88888888#yyyy#yyyy#yyyy#88888888"<<<<<<<<<<<<#????????????#????????????"<<<<<<<<<<<<##????????????##????????????"##"####"##"###########"||||||||||||"||||||||||||"||||||||||||#"||||||||||||######"##">??>>??>#>??>>??>#>??>>??>">??>>??>#>??>>??>#>??>>??>#>??>>??>">>>>#>>>>#>>>>">>>>#>>>>#>>>>#>>>>">>>>>>>>##"#>>@>@>>>@>@>###"##"####""""""""<<>><<>>##"<<>><<>>#ÀÀÀÀ##ÀÀÀÀ#"##"#~gg~~gg~##~cc~~cc~##????????###????????##!######<<<<##"">>>>>>>>">>>>>>>>">>>>>>>>"">>>>>>>>"""""""<>><~~<>><~~"""<<<<<<<<<<<<"||||||||||||"||||||||||||"||||||||||||"<<<<<<<<<<<<"||||||||||||"@@@@@@@@@@@@"||||||||||||"<<<<<<<<<<<<###"<<<<<<<<<<<<##CCCCCCCCCCCC#"#????????????#????????????#????????????"#????????????#''''''''''''#????????????"????????????#????????????"????????????"????????????"????????????"????????????"<<<<<<<<<<<<"<<<<<<<<<<<<"<<<<<<<<<<<<"<<<<<<<<<<<<"<<<<<<<<<<<<"<<<<<<<<<<<<"||||||||||||"||@<@<@@||@<@<@@##"||@<@<@@||@<@<@@#????##?àà??àà?#"8 8 8 8 #````#````"8 8 8 8 #~``~~``~#````#~@@~~@@~#````"  ##"  #????#!@@@@#####"<@@<<@@<###"||||||||"||||||||"||||||||#?{{??{{?"||||||||###????#????#????#????"~~<||<~~<||<#????#????"<<<<<<<<<<<<">>>>>>>>>>>>">>>>>>>>>>>>">>>>>>>>>>>>"<<<<<<<<<<<<">>>>>>>>>>>>"">>>>>>>>>>>>"<<<<<<<<<<<<""""<<<<<<<<<<<<""""""""""""""""""<<<<<<<<<<<<"<<<<<<<<<<<<"<<<<<<<<<<<<"<<<<<<<<<<<<"<<<<<<<<<<<<"<<<<<<<<<<<<">>>>>>>>>>>>##############0 0 0 """0 0 0 """#???!!#???#!!#?????????###?????????#~~~~~~~~~~~~##~~~~~~~~~~~~#?????????#?????????#!@@@#?????????#?????????#@@@##111###111"#"#####"#"#""""""""""""####``#``#####``#  ##### @@@@@@#@@@@#"""" "````"""""""````"######@  @@  @#"##"####~~~~~~~~#~~~~~~~~"~~~~~~~~  #~~~~~~~~#~~~~~~~~~~~~#~~~~~~~~"~~~~~~~~"~~~~~~~~"~~~~~~~~~~~~"~~~~~~~~"~~~~~~~~"~~~~~~~~"ffffffffffff"}}}}}%8}==<<<<?}???}!  "}!  ""  !|||||>>>>>  ?????"}?????!|||||>>>>>  "?????"  ??????????  ?????"}??????????  "?????"  ?????#     ??0?0?0?0?0  ?????#}     ?0?0?0?0?0#     ??0?0?0?0?0#     ??0?0?0?0?0 ?00000  ?????#     %000008#} =00000# =00000"<<# 00000#     00000"<<#}%xxxxx"8"}=#}=xxxxx<<#}xxxxx}xxxxx"<<#$$"8#<@@@@@<#<<#<@@@@@<????? ????? #<@@@@@<#"?????D#@@@@@#@@@@@#"D#@@@@@?#?????{#?????;#@@@@@#?????#@@@@@`#@@@@@`?????##~@@@@@~`#?????`#~?????~`#@@@@@`#?#@@@@@#@@@@@?????#?#@@@@@?#?????#?????@@@@@#@@@@@?????""?????#?????<<#??????????"#>`````|#>xxxxx|#>`````|?#>`````|#``````````#??#?#?<<#? ?#<<|>|>#|><<#|>#@|>#<<?#?#?<<#?#?#?#?#?#?#'? ?#?#?#?#?? <<#<<#<<#<<#<<<< #|>   xscavenger-1.4.4/data/levels.scl0100644000175000001440000010473006644315236015450 0ustar dashusersSCAVh H d4Pl <X t(D `!!"|#0#$%L&&'h(()*8*+,T--.p/$/01@123\445x6,678H89:d;;<=4=>?P@@AlB BCD<DEFXG GHtI(IJKDKLM`NNO|P0PQRLSSThUUVW8WXYTZZ[p\$\]^@^_`\aabxc,cdeHefgdhhij4jklPmmnlo opq<qrsXt tutv(vwxDxyz`{{||}0}~Lh8Tp$``p0wx0100000 01p00000p003330073ps0 030a0 31a33310a2"#10pa3331{0a""0a"p" 0a2#10c3p30p"""""""""" @DDGpsw1 pvpDDCGpwGtGt4Dwp373s33330s:3373;7703s;333:1303s333ss3s033333s3373073s33933703;331j73373733073073330`d@@000pp01p0wp`00`0@sp0c1cp0wp`00`0s@p0@ hawww{wwww`1`0`0`a0a0ff#@@@@1@@@0QQQQQQQQ#ff@DDbK` 0G& 0Q2q+0DDDDFdDDDD@tDDDDC4DDDDGDDDDC4DDDDAtDDDC4DDDKDDDDC4DDDDDtDDC4DDGDtDDDC4DDqDDDAtDC4DGDGtDDC4DqDDzDAtC4GDGtD0qDDqDA1DGp0q10DDDDD40C""0""0q"q"q0C""4q"q"q ""4q"q"q0C""0q"q"q0""0C4333300333300 3300 0031q0031p1wqqs33s3033033033 ptDD@!pp1ppp10pq7 p1pp1 0p0 00cc'tq`"""!s1s`0pq0ps1`0p0pq1`0pDCDC0p8```a"` p @@  p  ` p  p !#!#!#!#ff01330133303p0w0pp0"3"p301330wwq13301``DD@D`0g000Pp1P 00P004qC009004DDC00000p000000 111110101q0101101qq0p111q1101qq0wwvwwa ` 2"" `""#!00`00`00`00 `Z1a!1!0(!!!1""0"" !1 DGw@p2qQ1 """ q0qa1 "!"p`2j02p!7p04DDDw@00p000[p1P0P p1Pw3Pp1Pw4D@Wp1Z0333pDDCD@p0sx7a11wwpA00 4p04p100D01p 11p01010000  DD00DD`3 30313000a00 0!0!0r'00ww0330p0834IDD"000p01&0 00@1R 00p108P"" " DFDDDD`gp````&#``#``1`1#`1`0`"``p`!"`` `11 1110pr0q""1000p0q0D `@p'r0" qp" 0r"""q0wp wp0# p p2qw'qq0wpwp0p p0qw7qq0wp1wp0!p0p16q0qc00""""""""""""pDDDDG0 pp0!""p""C@s!q@s213p"#1q32""!17DCDDD11b@Dbqp6b2sDD@ p6b1wwwp6b7pwww6bwww6bs"""6b1DD@qp6b7pwww p6bwwwp6fswww61"""#""&"0Cfffc2as&wws&2c11cwwwpKxwwvw!"2"&B&""#0ww7wp@wsw""2" 0ww7wpwsw""2"  0&"7wp"" wsw2" w!0 0 37wwqwwsf0p1"""""" 11q""""""&11q"""""" 11q""""""&11"""""" 11""""""&1@@@F2""21AJA921qqq DDDDDF11wpww wpwwpwwwpwwppwwpw&"""""&"""""'rw'&'rw'rc0303030a#p1"""0000r01q55000#s0 Q0@0ssssssssss10ppp1d@@@@FHa GKGKFdtttpjdtttttGGGGGF`gGGGG@ttttvadtttttGGGGGF`gGGGG@ttttvadtttttGGGGGF```1p001p111p11p1771p0s7:1p0p0:1p00s;0`brrrrrr`0000000#brrrrrr0r`0000000" brrrrrr0`0000000rbrrrrrr0" `0000000brrrrrr0r`0000000"" b2222220`""#``pppt`pp000000sp4p4t0t0t00000004pt0p4pts000000pp4pp4pt0000000pt0pp4pp000000pt0ppp4p00000000000000 pww2vqp11p1w0"070:w02s2sw"!2"!""#000`a` D@`1D@`110`10Q0110@@11 "317111gC`0000010100101000101001100010100:@# `ww`v`vww` v`wvfwpvj` `p&" @@@@@&pp1qq&&f"""0PP300pq01&""""0p0D &Q''#ppsss !Q''#p@sss !0 #0@110"""""1q1 121"1"!21021021021G0210p2101111U3D0Daaa6p06`a0@DDDDD@A0000p00000q!0!!0q0A00pp011000s0 b"""""""""q`p`pp@7q`114d00C0`'0w0r7`""""p``"R"!""""`GDpp`5:S2"R""""""""0atD1`1gCqq1S11Q1vspapC!g#j@q1qqsq1!p#1#s1131311s`&#qqqqqqqqq`'#qqqqqqqqq`'#qqqqqqqqq`'#qqrqq`''#qqrqq`''#qqrq`'"""'#` """"#""w1"10 w0""#7pw1w0w{0" 00p1``11:` 5 5 5`111`000`!!!`p``111`0 0 0`!!!``111`000`!!!` dDDDDDDDDDD0@DDDDDD0DDDDD1w@@D1"'q@1!"w@0"""'q9" !2 !" 0""" ""0pppr"1!" 1 0p8`iDD@A!AApA qAqAqqppspp"!"!"!"!@@@@@@1aaaaa0"1qqqqsqw01qqqqq01qqqqq0q1qqqqqq0:q6q0pb 11be!: 5"% 10#"""4@# 0""# 01'ws 01D!"" 27Ds11a101DD01011q17wwwwp@#wD@ p!"qr 11rq1" qq0p0 0b@b 01b2""@01pb0p01b""201b24@1b2""1b0p2"b""22b2"""""1b2""wwww1b0pb""2F2q7q1"!"7"""""@0""001sA"""" 00C@DDDD@s1r"0"pDF00:0@040@00p000pb``@p`#Q02`1S01`11`w7wq10s14DDC1 1p000p0000pp011DDDDDDDDDD`DDDD0"@p0"qA014 q@04q!rqG01'A07DrqDs0@q0rq@0@ 0p000` 1`0 11q`q0 01`0 01qgq0 01110 01q01q0"2""!10101q01q02"""""""""4@@D@D@DD0q0p0q0x81a`pp``s1111""""1spw2"" 0p1#11011p0qs0p1pp!##! #s !!#!!ps#!#sp !!p!#!#ssp!!!!!)dDD` "0Da0F"""""" ""# @" 'w 'p!" " """@@D4a1`p @ @`1ps`pppp0CD@sDC1w0{D 004DD@D0a170"""7@"0!!!!7 p7 !1"#01ws71010"!0q7p1ppppppppq1 0p""00pq0"w01q0"1"1!!171100q7!!3 31"!s31w1#ppq00sq7s0ww w`w!!!! 01C4@10;0 s107@s1!7qs1D0D@7#q2s1@p1pp 1 0`p1q00q4@1q00010w0p7011q0p4D@0q`wq0`0p`sq0`#q0`sfp0`c &""11!2 'wspq1!!"""0 """"!""#1014rprps770& """"""*a0 0 ` @@@@@@HHHHF2aaaaaaaaaaabb6b`bq6b0cccb4q6b00`b04q6ab000Pfb000abQUR#3gD@pppptF&&&& vDqqqqDDDDC q0 0""IDDC@0 1qp610q6106010q6q060106```#`1@0#`2"aq0#"p`Q2R0!!!!2qz0G7"""#R 0DDD0""" DDD2Dtq8pPPQ71 0111!!!!!!!!"g`a@+ " %`&""""""` """" frb""""a fa"""` "" fpb""""""""""8" @@4DD0& qp0" @qq0q0 %p0q1R#ppq pq"!%pD;0"!DIDD@D1DD01@H0100!01r0q0'0q0s!00p00sw;zp1 Vpq21V!5Vq5V!5D3Vq5V!qq5pCVq0 @5V!305Vq0V!qsVqw!V!!""4D"!DDD2pp"0# 2##0p0002##s0s""0"#"#pp02"02#""0s0x2"0"2"# 080"# 7"27s ""00"""#70ps "" " ""a`0# w001DFdb`aag b""""s @4D'3 433""s3#0HH'33!24s3320'33320aa`"UUU21`k`w"21!a`U""026""" 0""""""""""""`@@@@@@@C````31{wwqwwwq wwwwwwwwq31wwwqdDDDD@@`fafafweq`au``*#f`f`fV%fafafweq`au``*#f`f`fV%ffafafwq`au``*#f````Uf`f`fxF@pppppq1DDCq111 1q1p0p111pw11100s`aq qqqqq qqv  8 q0p  1pp0000CD"0032#33"0032#2""33"0`dDDDIDDDF0@0@0@0Aq4DDC00q000000DDD4C0D@0300D@04DDDD@3DDfcD@c3 cD@cccca1a`DD0``0 `1p0a1`p0 1p0a1`p01p01`DDDDDDDDDD@`pZDDDDDDDDDC1Q0DDDD@DDDDDDDDDC10DDDDDDDD@1Q4DDDDDDDDC100pR""""""01ppppDDDD"""p""!!""" pp""""!"""p@!"b""!"""f@p4Cp"""001711""" 2#0p2#!""""""" tD&#@1"" & s  2#p&""  2#! &' 2#s@&""""x2#"Q&QQ""""""&p#p33&!"!"#!"5S&2# r5S&!2#*7s&'wr2#5S&!2""""75Sv2pDD0DDDD@00 0D(0s"10@1DD11`DD@4DD""""#0 `#UUQUUUb"""#b#UUUUUUb"""#`p@3@"b"&#!""b"!0`#`2"" 02p 2 02q q2"!" p0ffcfffcffff   c   b   b   b ' + b   bDDDCDDDCDDDb   b   b   b   b++'b***""""""""""""``p padDDDDDDDDDDF``4DDDDC`0wpp`2"&""#`""&"""0`2"&""#`" &"""0`2"&""#c" &"""6b""&b""""""""""& D@q331C11C011qC7 11C011qC711011p0000p111111110080f110f101111111q1111;11s110111111111111111s171111111110#0#0#1#23#23s0""&3#23230#4&3#23s23#7#$&3#2323#0#$&3#2323#0#$&3#23#03#0#$&3#03#73#1#$&3#03#83#0#$&3#73#13#0#$&3#03#23#0#$&303#23#0#$&3s13#23#0#$&323#23#0#$&323#23#8#$&3'ffDDDDD6f`6fq306fUQ3@6fUS06fTCwww{@6fUS06fUQ3@6fuQ306fQ6f6d6 & & & & & &f"#"!"#"`` C`DC`0 d44DDF`0 1`010`0 7`2r`0r""!" `0 0`00a `h##0#2DsDK4DsD03##0#27sDDG4DsD;7##0#2sDsDG4DsD7##0#2##0#2sDD@4DD7##0#2000010` `tDDDDC4DDDDK000DD@0DD@000""""""""""001001""z2 9"#2p28 F0DDDDDDDDDD1rp0  0!!'D0 "r0! 2#0"20 20DDD122 s12 q122""""#12212'qp2""!""s````0`0`pp0`0`  0`p0`0`DD0`0`0b` 0`!!!!!!!!"" `D` `"""""#@`#dDDDD0@0pC#@0p0@0p 3q0 p@03p1 DDb`d4D@DD@`gC4CFDd10tttp4D@004tttt4ttp0004tttttp40004tttvD020ba`3DDDDD@psDCppsf``````ps``````{spv``sf`pspp``ha"""""!000000p001 000003330007000800 70100000010 DDD D4DDF'@DDD02pp'0pp0p4DDC00sG00 4G0w01" 0 q qqq @2 &2!21 &2'20r &7!21 &2'20r &2!21 &2'20r &2!21 &2'20r &2!21 &2'70r &7!21 & 20 &""!81""" `C`4Hp `DCCDF0`p031p7 s43C0qp4DDC03p4DDDDC92""+""#vq01sq7q7:sq171sq181q1`` `3`"""""D@`01q00ZQ00q00s0D"""```b""""`aa aa100sp3q10p10000q0131y0130q "``4DDD1010p101014DDD101q0101014DDD10101"""""""""" & 2&&"""""""""2&& 22&&&"!""!22&&& 222&&& 222&&& b222&&&""""""222&&&p222&&""""""""22&&DD@22&"""2`#"""2&p2`#pp2""""""""""""pC1 1 1!1 1 1!1 1 1!1 1+1*1 `010 2000p 0010p20010p2000@I@@@@DDD`D@1@1@#@@1@&1D1@&!#1 !!0&4D@@&!!!#DA0Cp!!!!!!0DDD{{110AD@DDDDDD0DDDDDdDDDHDDDDD4DDADDDDD4DDDADDDDD4DDDADDDD4DDDADDDDC4DDADDDCDDDDADDDCDDDDA@DDCDDDDADDDCDDDADDCDCqDDD01DDD110114pDDp00810100s0110111000s010p0p0`DDD@ p0000 0010p1100s10tD0tG0t004G0w0G000000t04s00000s00074p00st107G010t1000DDG0pp00871q1 110DDC171713000101003`p1`11`11`p11x111110100110011001000100010000000000``30`10`10`710`1`0``@@@@@@@@@@`dDDDDDDD@``DDDgDhI@@@@@@@@@@Fssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss13333333333133333333331777;333733133373333371333373733313333333333173333333731333333333713333337;33137737733731333337333310000000888fffffffffffhb"""""""""""`"" """"""""&`b" """""""""`"" """"""""&`b" """""""""`""$"""""""&ffffffffffffggggggggggg`ssssssssssq("" q111A11DAA01D405UD00DDDC 101p13000p0 @@p##p###!1 ""00101""7p 11"" "1""" 0@11 111p111111111111111#1211#""121"""1# 121021# 1212"21#p112p21"""17112""110@0023q03"r#002"R"01Q0D2"R"0D3"R#002R312330211!0000p0000DDdF0p00p00p00p00p00p00p0`33008313000101 0000q03330DDDC3333333333330`0fff h 0& h b0" 0 100PPPPPP2r""r"r"r"0001``wwpDDD@wwwpUUU wDDDC #("!s D@1q3q{qs3qcqqs3qqqsqq30cqqs3qqqs`2""""""""""#24DDD44DDDC#20p;0p#04DDD44DDDC2000#24DDD44DDDC#2007 #04DDD44DDDC2770ps#24DDD44DDDC#2000#2&&&&&&&&&""""""""""#0`DDDHDDD`spb7c##"22620 0# !!0 !!0 !!0'!qq!p0r"#"!!"2" !!r0 !qq!0 !!0 !!w0'!!Up0r1DDD1 Cp3DDDDDDDDCDDC1130130p17010181 @tF1a1` b1`""1`1`1`1f b1`""1f1"""1! 1! 1"""Swwwpwv"""""""""""&wwwwb"""""""""""`wwpwp"""""""""""&wwwwb"""""""""""`wwwtv""""""""""%&1111qq1q11sq133333333339333373333333;3333s333333333333s333333s333333333s333733333333s3333373;3333373333333733333733333333333333s33337s3s3337333:33333```` ffffffffffffffvffffffgffffffgfff1ffff1ffffffffffcfffffffffcfffffffcfaffcfafffcfffffffcfffffffcfffffffs33vfffvf1fg ptDD@!pp1ppp10pp7p1pp10p000wwvww(1a00 b0pp&22""% bR""##0000`0000`0000`000 `01a` ffffffffffffffvffffffgffff#ffgfff2ffff## 2ffff""###"""ffffffc##fffffffffc##fffff(ff&c##fbff"""&c##fb"""f"ffc##fff"ff"ffc##fff"ff"ffc##fff"ff"ffs33vff"fvf1"""fgDDD0p4DDDDDDCp71p11pwq11p11p110```$DCDDB$DD4DB  0 p p0  0$DCDDB$DD4DB p p0p  0$DCDDB$DD4DB' p0  0$DCDDC4DD4DB p00r!""""""""""""``$DCDD2#DD4DB+2#0"#" """2""#" """2"'r+@0@r" # """"2"" # """"2"'@r'@0r"#" """2 ""#" """2 "$DCDDC4DD4DB's70r!""""""""""""3"" 30c5DDBPb p2 '0v#0323#"310w3 2330102r20102R2#010s 201012010s3 3p1012#710 3p102#73003U3pp1102"""""""""""0@@@@@1qqqqqh2R"""R"""R""0@@@@@1qqqqh2R"""R"""R""0@@@@@1qqqqh2R"""R"""R""0@@@@@1qqh2""""""""""`"""""" ppppppppppppppp`51333311p4111101110111 83q1q11733013q73131313s3133pp31337337100```D@D@DD`1010101p1qqpp0110030000@DD@01q@1pGDp1@1p1 sd@@@@010p10!1010J0000000!00310p101222ttt20 0200200200200200200000 0 +8 '8 "2 "2 "2 700`DDDDDDDDDD11@q1qq@1@@q1qq@1@@q1qq@1@@q1qq@1@@q1@1@0q1Cps#x!s!!01s70!!!!0p02" s@@000pD101 0 0:0D4CD7#2'00#20@0#200#200Q0#2 00#2 0Q0#200#20p0#2330Q0# 20p`D03!10x`````````ffff````````p```0`0 4DDH0`033331`0313`01"!3`01!3`0313`0333`013`0A`3`spp11pp11711711111111@101;01``p``10`1c0100010000000000000001 133731s13s1711311331113113S13111Q1311Q3s11qs1773117s311s31337 @DD@qpaq`pgq`qjf1q1v0a t0DD``a`0DF@DC1aa0qCqGC: 2212121212121121212121212272727272727`D4DDDDDp0033p0:33q01730 133qq01`1ssq01133q01173p01133011sp014C33D017301333``@GGGpg sssx"""'7"s"pCC00q10qs0C""!DDD@22ppQ@1p111391 010003pp00pp wwwwwpwwwwwwvff1"q4DDCq0q1qq1pq4{wCq0wq0q1pwqq1 qq0tGq0q0"""""" aDDDDDa0 a0"a#0a4@a 0a0a 00q0ww010 0y@`@@11q1!1!!1!2!1q11111wp11117110`` `0DA0`004@Cp00010wDGp1p000! 0p00#00!00D4@@D4DD@ @Dd0q0000 q0p000q66q1a`p10""""""#000100pp04@C00:0000C01qq1010q(``0S0tS0S0 0S0S""p0@@0pqqq "C@DD@DC0q17! a10a:0v11d@p 0#!q1""!q00001 D#2#`1 "#`1qC `1!1"1q"!01C11"1w"1q11q010@ 11 pp1q0 1q7p p1p0p14DDDDDDDwwv0ff&#  qqq"""!""qqsqqqq""!""qsqqqqs"""""qqxscavenger-1.4.4/data/fall.raw0100644000175000001440000004704006644315236015104 0ustar dashusers~~}}~||~~{{}~{z}}zy}}yy||xx||ww{{vv{{vuzzutzzttyzssxzrrxzqrwzpqvzopuznptzmps{mpr|m~qr}m}qq~m|rpm{spmztomyuomxvnnwwnnvxmotymos{mpr|m~qq~m|rpmztomyunmwwnnuxmotzmpr|m}qq~m{spmyunmwwnnuymos{m~qq~m|rpmztomwwnnuymps|m~qqm{somxvnnuxmos{m~qqm{somxvnnuympr|m}rpmzunnvxmot{m~qqm{tomwwmotzmqq~m{tomwwmot{mqqmztonwxmos|m}rpmyunnuympr~m|somwwmos{m~rpmyvnnuzmqqmztnnvympr~m{tonvxmpr}m|somwxmps}m|somwxmpr}m|sonvxmpr~m{tonvymqqmzunnuzmrpmyvnos|m}somwxmpr~m{unnuzm~rpmxwmos}m|tonuzmqqmxwmos}m|tonuzmrpmxwmpr~mzunot|m}sonvymqqmxwmpr~mzunot|m|sonuzm~rpmwxmqqmxwmprmzvnos}m{unot|m|tonu{m}sonvzm~rpmvymrpmwymqpmwxmqqmwxmqqmxxmqqmxxmqqmxxmqqmwxmqpmwymrpmvzmrpnvzm~sonu{m}tont|m|unos~mzvnprmywmqqmwxmrpnvzm~sont|m|unos~mzvmpqmxymrpnu{m}toos}mzvnpqmxymrpnu{m|tnosmywmqpmvzm}toos~mzvmqqmwzm~soos~mzwmqqmvzm}tnosmywmrpnu|m|unprmwym~soos~mzwmqpnu|m|unpqmwzm}tnormxymsoos~mywmrpnt}mzwmqpnu|m{vmqpnu|m{vnqqnu|m{vnqqnu|m{vmqpnu|m{vmqpnu}mzwmrpnt~myxmsoosmxym~tnprmw{m|unqqnu}mzwmroosmxym~tnprmv{m|vmrpnt~myym~tnprmv|m{vmrposmxzm}unqqnu}myxmtnpqmv|m{wmsoormv{m{vmroosmw{m|vmroosmw{m{vmroormv|m{wmsoprnu}mzxmtnpqnt~mxym}unrposmw{m{wmsopqnu~myym}unrpormv|mzxmtnqposmw{m{wmtnqqntmw{l{wmtnqpnsmw|m{xmtnqposmv}mzym}unroprnt~mx{m|wmtnqposmv}myym}vmsopqosmv}myym}vmsoqqosmv}myzm|vmtnqpornu~mx{m{xm~unropqosmv}mxzm|wmunropqosmu~mx{m{xm~umsoqporntmw|myym|wmtnropqornumw|myzm|wmunsoqpornsmv~mx{mzym}wmunsoqppqnsnumw|myzm{xm~vmtnroqppqnsnumv}mx{mzym|wm~umtnroqppqosntmv~mw|my{m{ym}wm~vmtnsoroppoqosntmumw}mx|mzzm{ym}wm~vmuntnsoroqppqornsntmumv~mw}mx|mzzm{ym|xm}wm~vmumtnsnsoroqpqppqoqorosnsntnumumv~mw~mw}mx|my{mz{mzzm{ym{ym|xm}xm}wm~wm~vmvmumumuntntnsnsnsnsorororororoqoqoqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqpqoqorororororososnsnsntntntnumumvmvmwm~wm~xm}xm|ym|ym{zm{{mz{my|mx}mx}mw~mvmvmuntntnsororpqppqpqorosntntnumvm~wm}xm|ym{{mz|mx}mw~mvmuntnsoroqppqorosntnumwm~xm|ym{{my}mx~mvmunsoroqppqosntnumwm}ym{zmz|mx~mvmtnsorppqosntnvm~xm|zmz|mx~mvmtnsoqpprotnumwm}ymz|mx~mvntorpqqosnumwm}ymz|mx~mvntorpprotnvm~xm{{my~mvntorpprotnwm}ymz|mxmunspqqotnvm~ym{|mxmunspqrotnwm}ymz}mwmtorppsnum~xm{{mxmunrpprnumxm{{mxmunrppsnvm~ymz|mwntoqqotnwm|zmy~munrppsnvm}ymz}mvnspprnvm~ymz}mvnsppsnvm}zmy~mvnrppsnwm|{mxmuoqqoumymz}mvnsppsnwm|{mxmtoqrnvm~zmy~muoqroum~ymz~muorqoum~ymz~muorqoum~yly~muoqrovm}zmxmtpqsnwm||mwnspptmymz~muoqrnvm}{mxnspptmymz~muoqrnwm||mwnrqoum~zmxntpptmymymtppsnxmz~muoqsnxm{}mvoqsnwm{}mvoqsnwm{}muoqsnxm{~muoqsnymzmtpptmzmynsqoum}{mwnrrnwm{}mvoqsnymymtpoum}{mwnrrnxm{~mupptm~zmxnrrnwm{~muppum~{mwnrrnxmzmtqovm}|mvoqtmzmxnrrnxmzmtqovm|}mupptm~{mwoqsnzmxnrrnxmznsqowm{~mtqovm{~mupovm|}muppum}}muppum}|mvppum}|mvppum}|mvppum}}muppvm|}mupovm{~mtqowmznsrnxmynrsnymxoqtm{mwopum}}mupowm{mtrnxmynrsnzmwoqum}}muqowmznsrnzmxoqum}}muqowmznrsn{mwopvm|~mtrnymxoqum}}muqoxmynrtm~|muqoxmznrtm~|muqoxmznrtm~|muqoxmyoqum}}mtrnymxopvm{nssn{mvpoxmynqum}~mtrnzmwppwmznrtm}}mtrnzmwppwmznqum|~mssn{mvqoymxopvm{nrtm}~mtrn{mvqoymxppwmzoqum|nstm~}mtrn{mvqozmwpoxmyopwmznqum{nrtm}~mssm~}mtrn|murn{mvqozmwpoymwpoxmxppxmyopwmyopwmzoqwmzoqvmzoqvmzoqvmzoqvmzoqvmzoqvmzoqwmzopwmyopxmyopxmxppymxpoymwqozmvqn{murn|mtsn~}mstm}nsum|nrvmzoqwmyppymwqozmvrn|mtsm~~mstm|nqvmzopxmxpozmvrn|mtsm}nrum{oqxmxpozmvrn}mttm|nqvmyppymwqn|mttm}nrvmzppymwrn}mttm|nqwmypo{musn~~nrvmzopymwrn}msum{opxmwqn|mttm|oqxmxqn|mttm|opxmwqn}msum{opymvrn~~nrvmypo{musm}nqxmxqn}msumzpozmusm}nqxmwqn~msvmzpo{mttm|opzmvsm}nqxmwrn~nrwmyqn}msvmzpo|mtum{po{mutm|opzmutm|opzmvsm|opzmvsm|opzmvsm|opzmutm|opzmutm{op{mtum{po|mtvmzqo}mswmxqnnrxmwrm}oqzmutm|oo|mtvmzqn~nrwlwrn~nqzmutm{po|msvmxrn~nqymvtm{po|mswmxrn~nqzmuumzpo~nrxmwsm|op|msvmxrn~opzmtumyqnnqzmuumzqn~nqymvtm{po~nrymvtm{po~nqymuumzqnnqzmuumyqn~op{mtvmxrm}op|msxmwtm{po~nqzmuumyrn~op|msxmwtm{pnnqzmtvmxsm|po~nrymuvmyrm}oo}nrymuumyrm}oo~nrzmuvmysm|po~nqzmtwmwsm{qnop|msxmvumyrm}po~nq{mtwmwtmzqn~oo~nqzmtwlwtmzrn~oo~nq{mtxmvumyrm}ponp|mrymuvmxtmzrn~ponq|msymuvmxtmzrn}ponp}mrzmtwmwumysm|qn~oonq|mrzmtwmvumysm{qn~poop}nq{msymuwmwumysm{qn}poop~nq|mrzmtxmuvmwumysm{rn}qnooop~nq|mrzmtymuwmvvmxtmzsm{rm}qn~pooonp~nq|mr{msymtxmuwmvvmxumytmzsm{rm|qn}qn~poooopnp~nq}nq|mr{mszmszmtymtxmuwmvwmvvmwvmxumxumytmytmzsmzsm{sm{rm|rm|rm|rn}qn}qn}qn~qn~qn~qn~pn~pn~pn~pn~pnpn~pn~pn~pn~pn~qn~qn~qn~qn}qn}qn}qn}rm|rm|rm{rm{sm{smztmztmytmyumxumwvmwvmvwmvxmuxmtymtzms{ms|mr}nq~nq~npopoopopn~qn}rm|smztmyumxvmwwmvxmuymtzms|mr}nqnpoopn~qn}rm{smztmxvmwwmuymtzms|nq~npoopn~qn|rm{tmyumwwmuymt{mr}nqoopnqn|smztmxvmvxmt{mr}nqoopn~rm|smyumwxmuzms|nqoopn~rm{tmyvmvxmt{mr~nppoqm|smyvmvxmt{mr~nppn~rm{tmxwmuzms}nqooqn|smyvmvyms|nqooqn|tmyvmvzms}npporm{umwxmt{mrooqn|smywmuzmr~nppn}smyvmvzms~nppn}smyvmvzmr~npqn}tmxwmu{mroorm{umwyms}nppn}smywmu{mroorm{umvzmr~npqn|umwyms}npqn|tmxxms}npqn|tmxxms}npqn|tmwyms~npqm{umvzmroormzvmu{mqpn~smxxmt}npqm{umvzmroo~smyxmt}npqm{umv{mqpn~tmxyms~oormzwmt}npqm{vmv{mqpn}umwzmrpn~tmxymroo~smxymsoosmyxmsoosmyxmsoosmyxmsoosmxymsoo~tmxzmrpn}tmw{mqpn|ulv|npqm{wmt~nosmyxmsoo~tmwzmqqn|vmu}nprmyxmson~tmw{mqqm{wmt~oosmxzmqqn{vmt~nosmxzmrqn{vmt~oosmwzmqqm{wmtoo~tmv|nprmyymrpn|vmt~ootmw{nqrmyymrpn|wmtoo~umv|npsmxzmqqmzxmspn|wmton~umu}notmw|npsmxzmqrmyymrqmzxmspn{wmspn|vmton}vmu~oo~umu~oo~umv~ooumv}notmv}notmv}notmv}notmv}noumv~oo~ulu~oo~vmuon}vmtpn|wmspn{xmsqmzymrrmyzmqrmx{nptmw}noumuon}vmtpn{xmrqmzzmqsmx|nptmv~oo~vmtpn{xmrrmy{nptmv~oo~vmtpn{ymrrmx|npumuon}wmsqmyzmptmv~oo}wmsqmzzmqtmv~oo}wmsqmy{nptmvon|xmrrmx|novmtpmzzmqtmv~on}xmrrmx|novmtqmz{npumupn{zmqtmvon|ymrsmw~on}xmrsmw~oo}xmrrmw}oo}xmrrmw~oo}xmrsmw~on}xmrsmvon|ymqtmupn{zmpumtqmy|novmsrmx~oo}xmrtmvpn{znpumtqmx}oo}xmrsmvpn{{npvmsrmx~on|ymqumtqmy}no}xmrtmuqmy|no~xmrtmuqmz|no~xmrtmuqmy|no~xmquluqmx~on|ymqvmsrmwpn{{nowmrtmuqmx~on|zmpvmssmvqmy}oo}ymqvmssmvpmy}oo}ympvmssmuqmx~on|{npxmrumtrmwpmz}oo}zmpwmrtmtrmwpmz}oo|znpwmrumtsmvqmx~on{|no~ympwmrumtsmvqmxpnz|no}znpxmqvmstmurmvqmxpnz}on|{no~ymqwmrumstmurmvqmxpmy~on{|no}zno~ympwmqvmrumttmusmvrmwqmxpmz~on{}on||no}zno~ympxmqwmqvmrvmsumstmttmusmurmvrmwqmwqmxqmxpmypmy~pnz~onz~on{}on{}on{}on||on||no||no||no||no}{no}{no}{no}|no}|no||no||no||nn||on|}on{}on{}on{~onz~onz~pnypmypmxqmxqmwrmwrmvsmusmutmttmsumsvmrwmqxmqympzno~{no}|on|}onz~pmypmxqmwrmvsmttmsvmrwmqxmpzno~|no|}onzpmyqmwrmutmtumrwmqymp{no}}on{pmyqmwsmutmsvmrxmp{no}}onzpmxrmvtmtvmrxmpzno}}onzqmxrmutmswmqyno~|on{pmxrmutmswmqzno}}onzqmwsmtvmrymp~|on{pmxrmuumrxmp|nn{pmxsmuvmrymp~|onzqmwtmtwmqzno|~pmxrmuumryno}}onyrmvumrymp~}onzqmvumrxmp~}onzrmvumryno}}pmyrmuvmqzno|pmwtmsxmp|onzrmuvmrzno|pmwtmsxmp~}onysmtwmq|onzrmuvmq{nn{qmvumrzno|qmwumrzno|qmwumrzno|qmwumrzno{qmvvmq{nn{rmuvmq|onysmtxmp~~pmxtmszno|qmvvmq|onzsmtxmp}~pmwumr{nn{rmuwmp~~pmwumr{nnzrmtxmp}pmwumq|onysmsyno|rmuwmp~~pmwumq|onytmsznn{rmtymo}qmvwmp~~pmwvmq}omxumr|onytmr{nnzsmsznn{smtzno{rmtyno|rmtyno|rmtyno|rmtyno|rmtyno|rmtzno{smsznnzsms{nnztmr|onyumr}pmxvmq~pmvwmp~qmuyno|rmtznnztmr|omxumq~pmvwmp}rmtznn{tmr|omxvmqqmvxno|sms{onyumq~pmvxmo|sms{onyvmqqmuyno{tmr}pmwwmp}rmt{onyumqqmuynnztmr~pmvxno{tmr}pmwxmo|smr}pmwxmo|sms}pmwxmo|smr}pmvxno{tmr~pmvynnzumqqmt{onyvmp}sms}pmwxno{tmqqmuznnyvmp}sls}pmvynnzumq~rmt|omwxno{umqrmt|omwxno{umq~rms}pmvynnzvmp}smr~qmu{onxwmo|tmqrms}pmvznnywmo|tmqrmt}pmvznnywmo|umqrms~qmu{omwynnzvmp}tmqrms~qmu|omwynnywmo|umq~smrrmt}pmu{omwynnywmo{vmp}tmqsmrqmt~pmu|omwznnxynnzwmo{vmp}umq~smrrmsqmt~qmu}pmv|omwzonxynnyxnnzxmo{wmo{vmp|ump}tmq~tmqsmqsmrsmrrmsrmsqmsqmtqmt~qmt~qmt~qmt~pmu~pmu~pmt~qmt~qmt~qmt~qmt~qmtqmtqmsrmsrmsrmsrmrsmrsmqtmq~tmp}ump}vmo|wmo{wnozxnnyynnxzomw{omv}pmu~qmtrmsrmrsmqump}vmo{wmozynnxzomw|pmv~qmtrmssmqump}vmo{xnnyzomw|pmu~qmssmrtmp}vmo{xnny{omv}pmtrmrtmq~vmo{xnnx{omv~qmtsmrump|wnnyzomw}pmtsmrump|xnny{omv~qmssmq~vmozynnw}pmtrmrumo{ynnx|pmurmrumo{ynnx|pmtsmq~vmozzomw~qmstmp}wnny{pmurmrvmo{zomw~qmstmp|xnnx}pmttmp}xnnx|pmtsmq}wnny|pmtsmq}wnnx|pmttmp}xnnx}qmstmp|ynmwqmrvmoz{omusmq~xnnx}pmsump{zomvrmq~wnny}pmsump{zomvsmq~xnnx~qmrvmoz|pmttmp{zomusmq}ynnwrmrwnnx~qmsvmoy}pmsumoz|pmtumo{{pmttmp{{omutmp{zomutmp{{omutmp{{pmtumo{{pmtumoz|pmsvmoy}qmswnnx~rmrxnnwsmq}zomutmp{{pmtumoy}qmrwnnwrmq}zomutmo{|pmswnnxrmq~yomutmo{|pmswnnwsmq}{omtvmoy~qmr~yomvumoz}qmrxnmvtmp{|pmsxnnwtmp{}qmsxnmvtmp{}qmrynmvumoz~rlq~zomuvmnysmp|{pmsxnnwtmoz~qmr~zomuvnnxsmp{}qmryomuvmnxsmp{}qmrzomuwnnwtmoz~qmq~{pmsxnmvumnysmp{}qmr~zomtxnmvvmnxsmp{~rmq}{pmsyomuwnnwumoysmp{~rmq}|pmszomtxnmvvnnwumoysmp{~rmq|}qmr~{pmszomtxnmuwnnvvmnxumoytmozsmp{~rmq|}qmq}}qmr~|pmr{pmszomtyomtyomuxnmuxnmuwnmvwnnvwnnvvnnwvnnwvnnwvmnwvmnwvnnwvnnwvnnwvnnwwnnvwnmvwnmuxnmuxomuyomtzomtzpms{pmr|qmr~}qlq}~rmp|smp{tmoyumoxumnwwnnvxnmuyomt{pmr|qmq}~rmp|smozumnxvnnvxnmuzoms|pmr~~rmp{smoyumnwwnmuyoms|qmq}~rmp{tmoxvnnvyomt{pmr}~rmp{tmnxwnmuzoms}qmq|tmoyvnnvyoms|qmq|smoyvnnvzoms}rmp{tmnxwnmu{pmr}smozvnnvzoms}rmp{umnwyoms}qmp{umnwxomt}qmp{umnwyoms}rmp{umnvzoms~~smoywnmu{pmq}tmnxxoms}rmpzvnnu{pmq}tmnxyoms~rmozwnmu|qmp{umnv{pmr}tmnwyomr~smoxxoms~smoyxomt~rmoywnmt~rmpzwnmt}rmpzwnmt~rmoyxoms~smoyxomssmoxyomr~tmnwzpmq}umnv|qmp{wnmt~rmoyxoms~tmnw{pmq|vnmu}rmpyxomstmnw{pmq{wnmt~smoxzpmr}unnu}rmoyyomr}unnu}rmoyyomr~unnu}rmoyzpmr}vnmu~smox{pmq{wnmstmnv}rmpzyomr}vnmtsmnw|qmpzyomr}vnmttmnw|qmpyzpmq|wnmsumnv~smox|qmpzypmq|wnmsumnusmnw}rmoy{pmp{yomr}wnmsunmutmnv~smow|rmoy{pmp{ypmq|xomr}wnms~vnmtumnutmnvsmnv~smow}rmox|qmoy|qmpy{qmpz{pmpzzpmq{zpmq{ypmq{ypmq{ypmq{ypmq|ypmq|ypmq{zpmq{zpmq{zpmpzzpmpz{qmpy|qmoy|rmox}rmox~smnwsmnvtmnuunmtvnmswomr}xomq|zpmpz{qmpy|rmox~smnvtmmuvnms~xomr|ypmq{{qmoy}smnwtmnuvnms~xomq|zqmpy}rmnwtmnuvnms}ypmq{|qmoxtmnuvnms~yomq{|qmoxtmnuwnmr}zplpz}rmnwunmsxomq{|rmowtmmtxomq{|qmoxtnmtxomq{|rmowunmtypmpz}smnvvnmr}zqmpytmmtxomq{}rmnvvnmr}{qmoxunms~ypmpytmntxomqz}smnuwomq{}rmnxscavenger-1.4.4/data/dig.raw0100644000175000001440000002147106644315236014731 0ustar dashuserszslf_XPJC<5.(')-3:AHNV]dkry»zskd\UNG@92+''+18?GOV]dkszüxphaYRJC<4-(')/7?GOV]elt|û}umf^VOF?7/)').6?FNV^fmu~Ž|tld\TLD;3+()-44,((/8AKU^hqzŻxne[QG>5,'(0:DMW`js}Ǿxoe[QG=3*&*3=GQ[eoyȾwmcYOD9/('-7BLV`juȾuj`VLA6,&)2=GR\gs}Ⱦ}sh]RF<1)'-7BMYdnyȾ{pdYNC8.'*3=HT`kuɾznbWL@4*'-7CNYeq|ʿymbVK?3)'/;FR]iuö{ocWK>3))0;GS`lxȼrfZNB5+)/:FS_kxƹznaTG;0),5AN[huƹyl_RE8-).9FS`mz˾|oaSF9.).9FTbn|ƸuhZL?3*+5BP^kyƹtfXK<0)-9FTcq̾xj\N@2*,7ESao}ʼufWI;/*0O`qôq`O>0+4CSdu̾yhWE5,/=M_p{iWF7-0=N`r˼vdR@1+4DVhzIJ|jXF5,1@RdvIJ|jXE5,3CTfyvcQ>/-9J]pƴ|iVC3,5FYlȶ|hUB2-6I\oñvbO<..=Pdxʹ~ļ}vnf^VNF>6/)&).5=EMU]emu}ļ{sjbYRJB92+().4=FNV^gowżwof^VNE=4,'(,4=FOW`hpyŽuld[RIA8/)(*2;DMV_hpzvmcZQH>5-().6?IR[eoxǽzqg]TK@7/))-6@IS^gqzɿypf[QH>4-(*1;EOYdmxǽukaVKB8/((09DOZdnx¸yncWMC8/))0:FP[fq|ƼymbWLA7-(*3>IT_kvȽxmaVK?4+(-8COZeq}ȼvk_SH<0))15,&(1@P`pƵtdSB4'#'/9DMXbmw{qf]QG=43=M^nͽxgUE3#'1BQdvzfR?- "5Ok˶iPAD]|sgZM@5/.037;?BGLVbn|öqcSE7( &4CRao}˼qcVME@;62.*).;IYhu{vrmid_YPHCDGLRW\`eint|vgWF7* "&.:HXhwʺyhVF5% *:L]m}ͽweWME=72-*+3BSdu{uohb\WRMJJMT[bhntz{m]L>416=CHNU_n~ǿm[I7& -=Oatϼr]I5" -@Sezıu`M<2*!!-?Sh}˼ocZRJB945?Qes~|uld[TMIJOXajrzwocSF@BJS\cjs}p[F603;BJTbtkT?,!!(2@SiİmV@**>Tk{cL33Kc{ĭ}dK2!7PhѻpW?,/E^yҾqXC3' $3Ic~˵hRB4+'.@Yt̹lYJ>2-1B[vôrbSKO]qŮhR;)#(7GXhyudSB2(*:Ogн}fQGIVhyrY@( #:SlsbPDDTk͵hN9-1@Rex~iUB0!*A[vųzeVS_qʺjP60E\vmYE78Hb~oUCBPcyvY=##=Yvp\NN_yֽdI511&"(.5>GTapƿ~n_PA3&!(-5>IWgu~n]N>0% "&,3:EScsļvgVE6*$%)/6>HTcsº{jYI8,(+07?FOZhx~n]NDBEKQW^dkvtfUD4*&+4=HQ[do|xhZRQW^elt{uj`VLD=9w}}~}تs@7){}}~~}}}~^/)?2f~}%8=Se2>ODl阅mB AK[k< [RHyؕ|R #"+ RHf򲚉Y2.>'#&\ǿo: *%"0/&^΍P %%(7;IB@LG3$IXcipw{qieh}Ƴ|YHD<7,022JU_fm{~xrsl]Uingm}aPG3-$%(--2BFN[\_abb`ebgǵoaNC6+'$"'.:AOX_rr}yyνzeZZRKEFHADITTV[bdcdmnnsusrx»qaOJC1.+*(/5=IM]fnv}ͼxj[IB:83*,3?BIT[gipqtryzxzut}ȿtf[B:2& ##,.5AEOV]^]cfhkqyɡo^B90 .5=T[_dilca~ϼkgeNC3+%"(13"4F99Y@OwtжϹǝe\j;?= & 7ZYExƻrnwWI-   ,>"N렸яhˏڴ~A*X8&3&8 Y昖ƙ]mvnO2HqLyV0kzp[nyl?K``Q_h]BDE8rxƋgj]VtkayWPele1>f[Ol{mNKtG~⓾“jtcP}D?qk21\A?9?UabhwSHOLQwklksC.t<_L%=DFqw9fvm}mWHQZ}꧓яVoyL>FC=slg^[`^22`Ti\VoVV|ti6]ղlXoGAT%010ccLVVVW^\pvVƒ}sWE2/'F-=_b[V`icձbfzE:/  @Yľ]W6 $/EiTxxüǬ_H@*&.)-lgjpdvoeewx_mcSUQa[cdnoc|o[bY}yiƵyljg\E>v¼_TRssu~}kgeNH^YIl~toTRRMRSMWX[bŰխnPG7aaKYgONTM_gp̿ylmt]Wo[gdtOGB"SoXu~w_Y^YKOCAegp`׾͖yq5Nk}ttgb31+%}hݬ窀栙Կʏv\?lg5찊ۙZ# eimӔ|-y3ϩڰI+)%V_v%Yh*7nL)71տUG5AȪs^hQr;8)+O]vwKibǗW}h8wr)yC;9%tM"4y[nq.bHU~d3:8EzmrFծ޹z{jf/*.uvtYubMl{önhH  YR:{߸hF(Ut_6 Q?*qY:CMD-II_5%jes~t{a.=6 ~yrns:glꑐxtss CvuyY{x~ohnޕ}/:=;||l!xVVi=_|ulᬀ5)L}okzXֶeb`a\]}Ҭrez_w~ wfgaYVV')FLs֘VVVJ2w̟րvmFQǝqtPcl2 H+w[w񀀀&:!lje=7QǢjSVVVѕԥ^F 6|TFBybtQiVVEV֥=DB/ 4)))EV',>/"&cRN)}% $退3b]CàݰrosCJD 8HKIe֥h~ï|C'Ewũ˓hrjpuW;:2mx¾wl^lʿhfK`ˢ`*v;-6?r('}͖^֧uJYt__`ePWXA4-*X~϶wgWdyitmyyuY\M,CZsD2={|mǁzarКsW5?EX_yYV?RC=WyݸArΖ~;.Vʇ:ZC ))|r?|< )߾kQ))oRmb4OrVdmnA))_ܵhJ֞0X|tR~|laa_joS LkdqVqVqtyqyrJyulF6kԭygWjqjC1W?룐{%Shf5 5T̒zeu:양g87k}A Vo{X@;{oSb]qO\TU_fcÞ-3LIۃPCZR`Ԩ=!VVYyA;7ɬh\?1&< Mѯ~Q;LGI°Auӭ) VQpkq:)ʅh.`ga`skk|i$7@pjdhS}lpqjωb@$@,r|, y̪dZfU+m`Z~8*uހmVAd}6_VV5TV)kĉ ?lQ3}ƭl2zrqJ9%X'#QB%:\9ged~{'NNshqri_U6yroQgnec3:i|ѿo6Vߢ\R7~|sY Krd|ӑex1d{/dQv}Es޻lqngrdb#HQY֯)_t8Slb4*K gр8\֎^Cf𮀀/ grрznaw\ <Ϳ:c쭐XkUck^" _#j߈=1I¡vXal##5Sį{llieUdrseUfBxVCFB{ЛaILVjsĘ\]pwl[Q1W<=^س=smxpKxyTd`c>3[~}na)7ozv~|x_hfrRxhes|hfg^cf\ule8Gdlm`\c}qtuqw~b_Q\`|~iwvi1[hxivrepys"-ScK,Lϕl[VįXLiK`ԾidV|nrTTe~`Q'5txuof|e;Tk- &1DvΆ^[Veqvu~3+9LƧZ"BkrɃ'5noUM3u<1L42X|v/3H~~F0I4!(91&=~["5~"$ӨJK3?sπd~1T?= 3cB8T, knS\չ'%nŤE@ԝq:k3VV&`!Pqڢh#D=> br;o-Z)))q>#0 0{~nw :t%=uR74tPǿZNLNC;s|qgE]l,bkπWOQǽL.֓>))~fV51RivMx|wֵWtЀ|➌x/mj7\MT)߷H )^Ȃ^06c֚))iۧv)*[y{¢Fy֟k8SoPγX`mB;O[ZoVTXğq6RBQ$zQ K-֞wpΊhYoZ{9. ұqphTwkWMGtytn|}uFZdUSconlkXWf^jdQ@VUcsYX|H+/+6WS3G~`X^ͥc\LVn[BbSdbhBIr\bufuE[R~! |={ZglsWtU;1S/Ca,>ޏMNwkOcɖcaͻkD*G֫/kA͝uk|kUfdk|UmEW|:)qop}i66EScnlbas5}QMchh㸇 tyggwsxĸT^erJSj̠y\B`voƴnbXexxsupfPodPbgzluw|h\Tɱxpk^pu{vgggƢ~ca~oĨ|wmeYhȞ}{sg`jϫofmw|΂wzWeӛxwCG1gɣz+.Ϭ|}}h_gx~\ͪWOJrfk}~bcj̟z{|Y7kxV;GezvoR>P}aIXp^QiO~yxp]YalbBSCsXl[c|ubexgTjosxvo\`kyXcUPnRYc@dil[SLepsgzateXdKajvcdg|xdW`Xlsrbtvw[egokbwoV>dkx_fkekh:VJLLxxqWBPyup}rwn~}{VMSjOLO\~xxv_hr{}||}w^g|l`fusogswQa|mT>_enrzf142axNUhtkj}a`he)IoT9-0CuhӜÚx~L(oXf-- lĭ[fSJ4+SlǠ=XO]wN0?_peLCaRE<:|PN^xtatǕ@Im0-1xإkFЌxj|P7QͭndUTN}_cy{I/{mMI|K[&eᩰ4,!鵄NĻakch|_N[jeupdowXfx~{y^kbjbEThsfzҴpCM`Y`K]_{tҴfxUTC\z[PCeд3:]ks`k`|pwrq֗~Md]\`âC?GvtZ_x|e;?s`ryɯyseNbzəQ4+Ŭh``Vj^hPnc\}lj/Hr{tou|eYuo|AXaWnLnwqUO}Pi`Ϳ1/Qv]D]y{lqb\esmh{yVqyvetwy}ym`CKw|]^|yqpccv~xixdnsvdxtudCPy{rQ]^wXTpq~~}{wkyadyhLY{kDGqpr]U~{MJFTzwcMUMNK~zbdvxeIP||aFW{oiP]}zxvnrtqs|ddgv}|yujekulgWx{njnjxtaZwpxros_]ZWedqkMThmdst{yltnxu{uniSGrjqps`^]\iqx|p[hkudrykphpzsrsoruyrsdtqfjrs\W^swh\]t_[k~tmhpmg`Ztz}n{l]W|phptoYXq{pxx~g_rpttwtpZlmkotrdqrj[iqtPUU_eyR8LgȇXIQguF9Dg|ti~|lyr_LQuENXugMC^zd]factvsC=Zjs`GBLtvLawQDGqppZ_YnlSq|DZuVTˆU|fQJlQYk{r49H:|kJDwÙrxt|0.gvUmsxqxx`NY|A0-owxtx{kdlqelsa]]WvgW\mu_o{ywe}gX]oni_r}vx|smsWuzupzysjghsx}x|Vzzmhdbkk`QShedkokkx~dmnzxpNzgMH\NGK{Q[lo~oueemq{pjezlpvivt^dupbW|oclwshl{n`b~sb_ems{}YVSku]vznlwl|{mixqpppk{~soqfb]_q~[ady}hjORusmi{z^Unwc`]fj\ajmjkpjgfjkjqz][c~e^^f\^}{t{oh_fnj\^}wgt~kv{h\\ltttr{k`i|zyylojr~xpdq{fkoumpnuwrwvjqtxlgi}yt{ujv}|rpz~pyy~lbgqyqpuyz~oe|}zz{tqzxx|rm}}ypt|{y|xy|~v{z}wvwlo~{z{~wry~|sfl}kjiq~}w}|~|or{zpojkr~|w}{xm}zu{okt{zspsx~wlb`fv}b]dakp}sKJPnbf|teZYgzmWdytru{~p}kdVa~``qshczvtoisohdn~vkNKO`ops}kZlz}tsnsorx^UcrqykaUwbT}^ZmxvojrYZlw|{|snyqhRTVM\{yrnnsfktwTWl~e_\^hcjyxwjU`qgzxaccxw{zvt|qef{x|ojvojsv}ywwphewy~sttr^vy~dah}fYm~|y]coxshxq]~luvxqi_stbl_]\~{|~wx\^ilquth|hapoux|pw{x|}~voy}jez~or_\\rgazz{ps}qlmvhgh~zwv{rpsvzxz{~tr|}peiwq{uvkkuuv}|y{y~}jjr}px~usrqkxq~}tx|}|p|~}ms}|~~jp{vs~}uqlqurt{pqpri{|}~~s~vijkwtuvsyrllr}|}uuqrnw}yyu~~||}z~ypmryzwtw}~|zw|y~xv}}{}z~{y{~w|~|s||}|~~~}{zy|{y{vswz|~zyz{z}~~||}{}}~~wsqxzzv{xv~|~}y}~~z|{uvz|{xz~~}{}~}~|~|xutw}|~{}npt{ejx{rxtnitz|v}sq}wf_h}mnq{~mbl{~{}{wzw~rso~~zworl}rpzs~~zmvyw}u{}x{}z}wttu|zqerrny}j^}x}rkduqklx{qpxukqm}omyxqzuq{oi{dgh}somxtpr|}tjrsiu~mr~xor{yu~x}tom|{ysot}||}xpry~}hm{ursqwp}ytx{}vv|trq|x{}wsqwnxwuu~|z~|}yz~iiq|ux~|x}yuv~~|w{{vy}v~|utx|u~}}ur}y}z}w{yvwyr}~|uy|}u~{zz~|zy|}~{|xxy}~}{~~||~~~}}~|||y~}}~~|{}~~||}~{{~yxrsxv~~~}y|ytwzxz~|y|{zyvz~{zyuw~~{}vttw|~|{}}y|xuy~~vtuz{wvyru|~}|{y~~}|z~~~}|||}|{{zz|~|~}{z~}~wx~}|}}{yy|}~||~yx|}}||zv{zy{|~~~|~|yvv}z}~~yy}~}{xzz~}}~}wu{}}|}~|uvxy{y|}~yz}zutz||uuv|zqu~z{|{yux}~|uvz~ytoo~t{}z~y{~yy|~ywx}yyyy|{vuzxr|ww{{{ps}~xv{|sqsvy{{{~||mqyvq}}w|}zy}xvx|u}}~~|{z~~}|vu{yxz{{}w}tx~}|zy}z|~z~~xwxw|z|yz}xy~|uv}zxx}{{vz~{xvy{||~~}}yt|ssy~|ztyzy~|~z{xwz|}}{v~y}~z{~ztw}rty}|{|{z}|{y{{}~~}~xxz}xvy~{z|}|zz}}z}uu{~|yz|{x|||y{~~|{z||x{}zw{~z}|{xxzxxxw|~|{|w}zzz}}~|}}}~~~}{}|||~{yy}}|}}}~~~zy|y|~}~~x|}}|~yy|~{xz~|}||~~~~}~|}}~}|{}|~|{~~~~||}~|yz{~}z{~z{~}z{|}~}~~{|}}~||||{}~}~}|}~~~|||~~|y{||uuyyy{{wzzvsxxvw|{~wz~zsu}vvx}}zy{~{xvy{wzxy|sy}yyv~{{y~{yy||x}|{xv}yxz~}x{~|~zxy|z~}~z|wxrtz||z~||zx|{{x|~vuzvu||||}xx~~~zx}~|w{~~~~~|~}}|~~||~}{|z{~{}}{zxx{{xwz{~y{}~~~~}yxy~|x~}ww{ww{z{|}}||z{}}|~}{z|y|wz}~~|z{}{x|~z~||~}~|~|}}|}}{z{~yz{~}|~{|}~}|{{~}|||~|||}}~~|~}{|}{{z}{{|}~~~{{|}{{~{{~~}}}}}~~}~~|{|~~|}~~~~~~~~~~~~~~~~}{}~~~~~~}}~}~~~~~}~~~~~~~~}}~~}~~~~}~~~~~~~~~}|~z||{||}|}|{|~~|z|~y}|||~~||}{zz~~~~~~||w{|}z}~{{}~~~}~{|{~{~yzz|xx}||~~|~|z}~~{z}|z{|wy|{{~~{{|{||}~~}~~~~~~|}~~}|}~~|~}~|z~}}~~{{}|}}}}~~~}|{}~~{}~{~~~~~~~~|}~||}~~~~~~~~~|}~~~~~~}}}}~}~~~~}}~}~~~~~~||~{~~~~~}{~~~~~~~}}~~}~~~}|~~}|~~~|~~~~~~~~~~~~~~}}~}~~xscavenger-1.4.4/data/brownblue.lbm0100644000175000001440000010650006644315236016143 0ustar dashusersFORM8ILBMBMHD@@CMAP((H(̠t@HhLTpX`|`dhlpt|| Xd (\,d0h4p8tDxP\8t8t D|yA0 8y}0 8}>Op8>p0 8`0 0 `0 `?pDp y ?|y~}?`|}`@| ?p|p? ?p8p?8?( x?h8`xh ?8`pp@8` ?8p? ?p?p0 =8= xJ!0  <px  |K0 p}  O$BDp$bD 0 p0 0 p0 <p0 == A0 0 0  =0 Hx B0 b 0 x0 0 x0 <x0 =`=`  0 `=`8}` 0  <8&Hx B8 b 0 |0 0 |0 <|0 @|p yA0 `P|8y }0  P|8}$>ppHx|8 0 ~||~0 0 |p0 n|0 | z" 0 ` |z" 0  |oHx| 0 |0 0 80 0 >p| xJ0 @NP|x JP |K0 N`||K`πO>| 0 |0 0 p0 p?_p|p 璂!?P|P ?`|`$$@_| ?|<?? <?<?pp 璄A?PP ?``$$@ ?>??>p?>0 pp y璠 0 Py_P }0 `}_`$$߀O 0 |0 0 | 0 |0 >> zA0 >z 0 >$$߀Hx>p>p 0 x0 0 x 0 x߀0 pǀppHxAa 0 0 0 0 >0 == ;N!0  <N < o0 =o=  Hx$BD$BD 0 0 0 0 <<0 =ǀ= PA0 ǀP 0 =ǀ=O Bǀ B 0 ǀ0 0 0 <<?=`=` z ?`=`z=` ?@ B B ????<<? x.A?`x. |/?|/pp@ ????0  yΈ 0 `y }0 }O0 0 0 0 0 y0 @y}0 }Hx0 0 0 0 0 0 0 Hx0 0 0 0 0 "0 "0 ~Hx0 0 0 0 0 y栂 0 y>}0 }@Hx0 0 0 0 0 8> z A0 8y>0 8}>@Op8>p0 8`0 0 `0 `?pDp x,! ?|y~> |.!?`|}`@@| ?p|p? ?p8p?8?( y?h8`y>h }?8`}pp@8` ?8p? ?p?p0 =8= !0  <p 0 p  O$BDp$bD 0 p0 0 p0 <p0 == !A0 0 !0  =0 ÑnHx B0 b 0 x0 0 x0 <x0 =`=`OF 0 `=`8s`o0  <8{Hx B8 b 0 |0 0 |0 <|0 @|pOA0 `P|8sfo0  P|8{>p'pHx|8 0 ~||~0 0 |p0 n|0 | P 0 ` |s0  |{o/Hx| 0 |0 0 80 0 >p| ~A00 @NP|sPa>0 N`|{`π?O>| 0 |0 0 p0 p?_p|p ~NB!?P|P ob?`|`@_| ?|<?? <?<?pp ~NLA?P P on?` `>@ ?>??>p?>0 pp ~ 0 Psf_P 0 `{w_`8߀O 0 |0 0 | 0 |0 >> ~,A0 >sh .0 >{8߀Hx>p>p 0 x0 0 x 0 x߀0 pǀp8pHxAa 0 0 0 0 >0 == z!0  <t f <0 =w=  Hx$BD$BD 0 0 0 0 <<0 =ǀ= xA0 ǀpA |0 =ǀxA=|O Bǀ B 0 ǀ0 0 0 <<?=`=` < ?`=`s!=` ?{!A @ B B ????<<? A?`8N ?oApp@ ????0  s< 0 `N {0 oAO0 0 0 0 0 s<0 @|N{0 ~oAHx0 0 0 0 0 A0 0 Hx0 0 0 0 0 "0  "0  Hx0 0 0 0 0 y栂 0 y }0 }Hx0 0 0 0 0 8> z A0 8y0 8}>Op8>p0 8`0 0 `0 `?pDp x,! ?|y~ |.!?`|}`@| ?p|p? ?p8p?8?(y?h8`xh}?8`pp@8` ?8p? ?p?p0 =8= !0  <px 0 p}  O$BDp$bD 0 p0 0 p0 <p0 == (A0 0 (0  =0nHx B0 b 0 x0 0 x0 <x0 =`=` OF 0 `=`8}` o0  <8Hx B8 b 0 |0 0 |0 <|0 @|p OA0 `P|8y o0  P|8}>ppHx|8 0 ~||~0 0 |p0 n|0 | P 0 ` |z" 0  |oHx| 0 |0 0 80 0 >p| A00 @NP|x JPa>0 N`||K`πO>| 0 |0 0 p0 p?_p|p NB!?P|P ob?`|`$@_| ?|<?? <?<?ppNLA?PPon?``$@ ?>??>p?>0 pp 0 Py_P0 `}_`$߀O 0 |0 0 | 0 |0 >>,A0 >z.0 >$߀Hx>p>p 0 x0 0 x 0 x߀0 pǀppHxAa 0 0 0 0 >~0 == }z!0  <N < 0 =o=  Hx$BD$BD 0 0 0 0 <<~0 =ǀ= }xA0 ǀP |0 =ǀ=|O Bǀ B 0 ǀ0 0 0 <<|?=`=` ~< ?`=`z=` ~?A@ B B ?~??~?<<? A?`x. ?|/App@ ????0  s< 0 `y {0 }AO0 0 0 0 0 s<0 @y {0 }AHx0 0 0 0 0 A0 0 Hx0 0 0 0 0 "0 "0 ~Hx0 0 0 0 0 y栂 0 y>}0 }@Hx0 0 0 0 0 8> z A0 8y>0 8}>@Op8>p0 8`0 0 `0 `?pDp x,! ?|y~> |.!?`|}`@@| ?p|p? ?p8p?8?( y?h8`y>h }?8`}pp@8` ?8p? ?p?p0 =8= ﷁ!0  <p 0 p  O$BDp$bD 0 p0 0 p0 <p0 == !A0 0 !0  =0 ÑnHx B0 b 0 x0 0 x0 <x0 =`=` OF 0 `=`8s` o0  <8{Hx B8 b 0 |0 0 |0 <|0 @|pOA0 `P|8sfo0  P|8{>p'pHx|8 0 ~||~0 0 |p0 n|0 |P 0 ` |s0  |{o/Hx| 0 |0 0 80 0 >p| ?A00 @NP|sPa>0 N`|{`π?O>| 0 |0 0 p0 p?_p|p {NB!?P|P ob?`|`@_| ?|<?? <?<?pp {NLA?P P on?` `>@ ?>??>p?>0 pp { 0 Psf_P 0 `{w_`8߀O 0 |0 0 | 0 |0 >> ,A0 >sh .0 >{8߀Hx>p>p 0 x0 0 x 0 x߀0 pǀp8pHxAa 0 0 0 0 >0 == z!0  <t f < 0 =w=  Hx$BD$BD 0 0 0 0 <<0 =ǀ= xA0 ǀpA |0 =ǀxA=|O Bǀ B 0 ǀ0 0 0 <<?=`=` < ?`=`s!=` ?{!A @ B B ????<<? A?`8N ?oApp@ ????0 s< 0 `N{0 oAO0 0 0 0 0 s<0 @|N{0 ~oAHx0 0 0 0 0 A0 0 Hx0 0 0 0 ?8888 8|? 8| 8| 8| 8| 8| 8| 8| 8| 8| 8| 8|8 888     xxxxxxxx xxxxxxxx00000 0 0000000 0 000000?00000000 00000000 00000000?000000000 0 00xxxx ?xxxxxxxx?x x xx > ? ?        <<<<<   <@ @@ 0l 0l 0l  @ @@ 0l  0l 0l  0l 0l @@ @@ 0lx<@`````0lxÀ0lx @ @@ 0lx 0lx0lx<0lx0lx<@ @@ 0l8x o`oo`0l8xppp0l8x@ @@ 0l8x0l8x0l8x0l8x0l8xv@ @@ 0l8x8 i`hi`0l8x8ppp0l8x8@ @@ 0l8x8a0a0l8x8yxy0l8x8yxy0l8x80l8x8 P@ @@`0l800 i`hk 0l800`ppp0l800@ @@`0l800ap!0l800yx{0l800yx{0l8000l800 P@ @@ 0ll0p i`von0ll0p`ppq0ll0p@ @@`0ll0pa`0ll0py0ll0py0ll0p0ll0p P@ @@`08l0` i``a08l0``p08l0`@ @@@08l0`a08l0`y08l0`y08l0`08l0` P@ B@B080 i`}080`p>|080@ @C080a?080y080y080080 P@ 080 i`~~080`p080@ 080a080y080y080080 P@  i``p@ ayy P@ ||| i`|||`p|||@ |||a|||y|||y|||||| P@ x~~ i`x`px@ x axyxyxxB@B P@ x } i`x >|`px @C@ x ?ax yx yx x @@` P@ `a i``p @@@@  ayy@@  P@ ~>von i`~>pq`p~> @@`@ ~> a~>y~>y~>~>@@` P@ >8~hk  i`>8~pp`p>8~ @@`@ >8~ !a>8~x{y>8~x{y>8~>8~@@ f@ 0hi` i`0ppp0 @@ @ 0 aa0xyy0xyy00@@ <@ poo` o`ppppp @@ @ p pppp@@ @@ ````<@```À` @@ @ ` ``<``@@ <@ ~~~ @@ @ ~ ~~ ~~~||~||<~|| ~|| ~||~|| ~||~||<<<<8| 8|8|8|x8|8|8|8|x8 x888!8x8x88!08 ` ?08 `x08 `08 `@08 `?08 `?08 `08 `^z08pT /a08pT!08pTx08pTB08pT08pT08pT08pTZj<808 ͯ>m<808)808x808B808<808808<<808RJ888 o^>m888!<<888x888B888888888<888^z<<08 o~Ǯa<08!<<08x<08B<08<08<08<<08!B@08pT ì~?<<@08pT~x08pT08pT@08pT?~08pT?08pT~08pTj?<<@|~x||@|?~|?|~|^z< V|kfa!<xB<Zjp| jmp|)<<p|xp|Bp|p|p|<p|RJ<088| V*m<088|!088|x088|B088|<088|088|<<088|^zp ap!pxpBpppp!` /?` x` ` @` ?` ?` ` x x!xxxxscavenger-1.4.4/data/badguy.lbm0100644000175000001440000011411006644315236015413 0ustar dashusersFORM@ILBMBMHD@@CMAP++K+ϣwCKkOWs[ccgkosw#[g+_/g3k7s;w G{S_;w;wG ?{;w C{ C{GKO'[;o'[K;w;wKO#+ 3KK?kgk/_;gGsW_cOWW#[+_7g/c'[[W;'3##?'#K+#W3c7#o?7wK?WKcOoKOg?++++777CCCOOO[[[gggooo{{{G77WGCkWS{gc{sóǷ3K[G_o_w'/7#?'K/S3 [;gCoO{[c'o+{3;CK7C'O+[3g7s? O_o#+w7Kg/G_wc;wOg+?WϫwǛ'3CO_+s7{CS'c7sG[;c_3kC{Sg {#_G?'oO/_W/+Kw3SO/ /[;o#++?/#㛛WW'+OkC[#s3So_7{K󣣧WWWDPPSnh@@@CRNGCRNG /CRNG`oCRNGCRNGCRNGCRNGCRNGCRNGCRNGCRNGCRNGCRNGCRNGCRNGCRNGTINY !P2 AAA AAA AAA AAA AAA AAA 0 0 0 0 0 0 0 0 0 0 0 0       AAA AAA AAA AAA AAA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0                                  00B  0C0C A 0C0C A 0C0C A 0C0C A CA CA C 0A0 C 00A C 00A C 00A C 00A @@ QC QC QC QC QC "@  "@  "@  "@  "@  @@A @@a @@a @@a @@a   aAA aAA aAA aAA `@A `@A AA@ Aa A Aa A Aa A Aa A   8bÆ 8bÆ 8bÆ 8bÆ 8bÆ @I @I @I @I @I h0  h0  h0  h0  h0  h0  @A CA CA CA CA AAA AAA AAA AAA AAA 0C 0C 0C 0C 0C A A0A A A0A A A0A A A0A A A0A AAA 0c 0c 0c 0c " " @A AAA AAA AAA AAA @ @ AAA AAA AAA AAA AAA AAA AAA AAA AAA AAA AAA aaa aaa aaa aaa       AAA AAA AAA AAA AAA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ((( ((( ((( ((( ((( ((( ((( ((( ((( ((( AAA ]EQEa ]EQEa ]EQEa ]EQEa MA MA AAA aa0 aa0 aa0 aa0       0 0C 0 0 0C q 0 0C q 0 0C q 0 0C q AA (QE (QE (QE (QE (QE          BODYp"888888888888"888888888888"888888888888"888888888888"888888888888"DDDDDDDDDDDD"||||||||||||"||||||||||||"||||||||||||"||||||||||||"888888888888"888888888888"(((((((((((("888888888888"888888888888"888888888888"888888888888"""888888888888"888888888888"888888888888"888888888888"888888888888"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"""""""888888888888"""""""||||||||||||"""""""||||||||||||"""""""||||||||||||"""""""||||||||||||"""""""||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||""""""""""""""""""""""""""""""""""""""""""""""""""#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ"````@"`"`"`"`"  0``@0 """"""   @ "p"p"p"p"`"`"0pp"0pp"0pp"0pp"0``pppp"0``pppp @@"8ppx"8ppx"8ppx"8ppx"`hp0xx|0xp"`hp0xx|0xp$H@"< xx|"< xx|"< xx|"< xx|"pl p0|~8|x"pl p0|~8|x"$8H@@"<x||"<x||"<x||"<x||"pd0 <<<"pd0 <<<" pxhpp"|xxx"|xxx"|xxx"|xxxp p "px80xpp0`"|x8v|"|x8v|"|x8v|"|x8v|  xx|0xx0 "xx||z<<x"xx||z<<x"xx||z<<x"xx||z<<x x x"|~<x|4L|"|~~<|"|~~<|"|~~<|"|~~<|00"4|"<|"<|"<|"<|"|@"|@"|@"|@"|@#|#|#|#|#|#8#8#8#8#8# # # # # "8 x |x|  "8 x |x|  "8 x |x|  "8 x |x|  "8 x |x|  `  p> `  p> `  p> `  p> `  p> p pp< p pp< p pp< p pp< p pp<`0800 `0800 `0800 `0800 `0800 `0p 0 `0p 0 `0p 0 `0p 0 `0p 0 @8>@8>@8>@8>@8>""""""  ######"""""" " " " " " "   " ?" ?" ?" ?"  > "  > $ "<??0?8>"<??0?8>"<??0?8>"<??0?8>"6'0 >~8>"6'0 >~8>"$"<????o>>?"<????o>>?"<????o>>?"<????o>>?"7#& 0``<<<"7#& 0``<<<"0">??_o??">??_o??">??_o??">??_o??' @`q10' @`q10"8  "8>?_n??>"8>?_n??>"8>?_n??>"8>?_n??>0!@`1380!@`1388>  "8>`>^<<"8>`>^<<"8>`>^<<"8>`>^<<` @08` @08">~?<>,2>">~?=~<>?">~?=~<>?">~?=~<>?">~?=~<>?` ` "??,??>?"??<??>?"??<??>?"??<??>?"??<??>?"?;?>/=???"?;?>/=???"?;?>/=???"?;?>/=???"?;?>/=???#;p889>xx?s#;p889>xx?s#;p889>xx?s#;p889>xx?s#;p889>xx?s#π88πppq#π88πppq#π88πppq#π88πppq#π88πppq#78pp0#78pp0#78pp0#78pp0#78pp0#00>>01`0#00>>01`0#00>>01`0#00>>01`0#00>>01`0#800| `#800| `#800| `#800| `#800| `#00< p#00< p#00< p#00< p#00< p`   0``   0``   0``   0``   0`p p 0pp p 0pp p 0pp p 0pp p 0pxx8|xx8|xx8|xx8|xx8|8 88 88 88 88 88 8#`88`#`88`#`88`#`88`#`88`#`88`00 0000#88#88#88#88#À8ÀÀ8À#À8ÀÀ8À0 000#88#88#88#88#88#88"""""8oo8"8oo8@@ @@""""""@@@ @@@""""""xx@ xx@xx"xxxxxxxxxx"xxxxxxxxxx"xxxxxxxxxx"xxxxxxxxxxxppxxppx"xxx@xxxx@xxx"xxxxxxxxxxxx"xxxxxxxxxxxx"xxxxxxxxxxxx"xxxxxxxxxxxx8888"88x@x88x@x88"88xxx88xxx88"88xxx88xxx88"88xxx88xxx88"88xxx88xxx888888"888x8888x888"888x8888x888"888x8888x888"888x8888x888"888x8888x888"<<8x8<<8x8<<"<<8x8<<8x8<<"<<8x8<<8x8<<"<<8x8<<8x8<<"<<8x8<<8x8<<"<<<8<<<<8<<<"<<<8<<<<8<<<"<<<8<<<<8<<<"<<<8<<<<8<<<"<<<8<<<<8<<<"||<8<||<8<||"||<8<||<8<||"||<8<||<8<||"||<8<||<8<||"||<8<||<8<||"|||<||||<|||"|||<||||<|||"|||<||||<|||"|||<||||<|||"|||<||||<|||"|<||<|"|<||<|"|<||<|"|<||<|"|<||<|"||"||"||"||"||"ll|ll|ll"ll|ll|ll"ll|ll|ll"ll|ll|ll"ll|ll|ll"ll||ll||ll"ll||ll||ll"ll||ll||ll"ll||ll||ll"ll||ll||ll"llllllllll"llllllllll"llllllllll"llllllllll"llllllllll",,|||,,|||,,",,|||,,|||,,",,|||,,|||,,",,|||,,|||,,",,|||,,|||,,"||l||l||"||l||l||"||l||l||"||l||l||"||l||l||"||"||"||"||"||`00``00``00``00``00``00`#`pp`#`pp`#`pp`#`pp`#`pp`#`pp`    #8`gg``gg`8#8`gg``gg`8#8`gg``gg`8#8`gg``gg`8#8````````8#8````````8   #pp#pp#pp#pp#pssssp#pssssp#####wggw#wggw #????#????#????#????#}}?/gg/?}}#}}?/gg/?}} #????#????#????#????#=//=#=//= """"""""""""""""""""<<<<<<"<<<<<<"<<<<<<"<<<<<<"<<<<<<"<<<<<<<<<<"<<<<<<<<<<"<<<<<<<<<<"<<<<<<<<<<"<<<<<<<<<<">><<>><<>>">><<>><<>>">><<>><<>>">><<>><<>>">><<>><<>>">>><>>>><>>>">>><>>>><>>>">>><>>>><>>>">>><>>>><>>>">>><>>>><>>>"??><>??><>??"??><>??><>??"??><>??><>??"??><>??><>??"??><>??><>??"???>????>???"???>????>???"???>????>???"???>????>???"???>????>???"66?>?66?>?66"66?>?66?>?66"66?>?66?>?66"66?>?66?>?66"66?>?66?>?66"66>?>66>?>66"66>?>66>?>66"66>?>66>?>66"66>?>66>?>66"66>?>66>?>66"666?6666?666"666?6666?666"666?6666?666"666?6666?666"666?6666?666"44>>>44>>>44"44>>>44>>>44"44>>>44>>>44"44>>>44>>>44"44>>>44>>>44">>?6?>>?6?>>">>?6?>>?6?>>">>?6?>>?6?>>">>?6?>>?6?>>">>?6?>>?6?>>#???>????>???#???>????>???#???>????>???#???>????>???#???>????>???"888888888888#888888888888#888888888888#888888888888#888888888888##"DDDDDDDDDDDD#||||||||||||#||||||||||||#||||||||||||#||||||||||||#888888888888#888888888888"((((((((((((#888888888888#888888888888#888888888888#888888888888##"888888888888############"""""""||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"||||||||||||"""""""""""""""#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ###########ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ#ǀǀǀǀǀǀǀǀǀǀǀǀ"""""##########"888888888888"888888888888"888888888888"888888888888"888888888888"||||||||||||"|| | | |||||`|`|`|"|| | | |||||`|`|`|"|| | | |||||`|`|`|"|| | | |||||`|`|`| ``` ```"888888888888"88 8 8 88888`8`8`8"88 8 8 88888`8`8`8"88 8 8 88888`8`8`8"88 8 8 88888`8`8`8 ``` ```"888888888888#>888888>88099980#>888888>88099980#>888888>88099980#>888888>88099980#>>00#>>00#??00#??00#??00#??00#??00#??00######"|88888|88888#|?????|#|?????|#|?????|#|?????|"||||||||||||"||"||"||"||    "||||||||||||"||}}}||>||||>|"||}}}||>||||>|"||}}}||>||||>|"||}}}||>||||>|  >>  >>"||||||||||||"||8||||8|8||||8|"||8||||8|8||||8|"||8||||8|8||||8|"||8||||8|8||||8| 88 88 88 88"||~~~~||"||~p~p~p~||"||~p~p~p~||"||~p~p~p~||"||~p~p~p~||pppppp""000"000"000"000000000"""""""""""````    "````    "````    "````    "````              "ÀÀÀÀ"ÀÀÀÀ"ÀÀÀÀ"ÀÀÀÀ"ÀÀÀÀ""""""À"À"À"À"À""""""""""          xscavenger-1.4.4/copyright0100644000175000001440000000126006644315236014467 0ustar dashusers Copyright by Dave Ashley dash@xdr.com This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 dated June, 1991. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave., Cambridge, MA 02139, USA. xscavenger-1.4.4/changelog0100644000175000001440000002107207572574450014417 0ustar dashusersScavenger and this changelog file were written by David Ashley. ------------------------------------------------------------------------------ Sun Dec 1 22:07:18 PST 2002 Version is 1.4.4 Fix for if sound fork doesn't open successfully, it exits and doesn't bog down the cpu or something. Icon for if the program is minimized. "H. S. Teoh" is the new Debian maintainer and he sent these in. Thanks! ------------------------------------------------------------------------------ Sat Feb 9 16:32:55 PST 2002 Version is 1.4.3 scav.c, have parent of fork() return 0. (Joey Hess ) sound.c, declare some char as signed char, since char defaults to unsigned char on some archs (arm, s390 + powerpc (Gerhard Tonn ) Both these were passed on by (Marcus Brinkmann ) ------------------------------------------------------------------------------ Thu Jan 18 09:33:07 PST 2001 Version is 1.4.2 Dave Ashley: added slowdown value in scavrc so game can be slowed down. slowdown=0 ;normal slowdown=1 ; 7/8 slowdown=2 ; 3/4 slowdown=3 ; 1/2 slowdown=4 ; 1/4 ------------------------------------------------------------------------------ Wed Jan 5 22:08:17 PST 2000 Version is 1.4.0 Dave Ashley: Yanked out the scavserver mechanism, and removed the last major piece of code in scavenger not written by me. Used the sound program I wrote for XBomber. ------------------------------------------------------------------------------ Mon Dec 13 09:43:29 PST 1999 Version is 1.3.9 Dave Ashley: Added XK_Meta_L as a synonym for XL_Alt_L as per request of Daniel de RAUGLAUDRE daniel.de_rauglaudre@inria.fr http://cristal.inria.fr/~ddr/ ------------------------------------------------------------------------------ Sat Dec 11 14:22:35 PST 1999 Version is 1.3.8 Dave Ashley: Fixed key repeat problem where undesired keyup/keydown events are causing slow movement on some machines. They're now filtered out. ------------------------------------------------------------------------------ Mon Jan 4 20:53:52 PST 1999 Version is 1.3.7 Dave Ashley: Hwei Sheng TEOH sent me some new artwork and a modified scav.c file to show some animation during digging. Every bit helps :^). Thanks Hwei! ------------------------------------------------------------------------------ Sun Oct 4 10:45:52 PDT 1998 Version is 1.3.6 Dave Ashley: Daniel de RAUGLAUDRE, daniel.de_rauglaudre@inria.fr, http://pauillac.inria.fr/~ddr/ found a bug in the movie generation that I'm surprised no one ever noticed. It turns out every time you finished a level you would be the previous best score, and your new movie would be saved. Now the movie should only be saved if you actually did get a better score. Daniel also added F7 for previous level, similiar to F8 going to next level. Thanks Daniel! ------------------------------------------------------------------------------ Sat Jun 6 11:43:26 PDT 1998 Version is 1.3.5 Dave Ashley: fixed problem in scavserver.c, if the /dev/dsp file cannot be opened, the scavserver task just lingers and never exits. I changed it so it will do everything normally, just not try to write to the filehandle associated with the sound device. Also the error message is more helpful: scavserver: Couldn't open DSP /dev/dsp, you must play without sound. ------------------------------------------------------------------------------ Wed May 27 14:00:07 PDT 1998 Version is still 1.3.4 Dave Ashley: Fixed minor quirk in edit.c, in the level editor the fill type was not drawn with a box around it correctly. Relavent routines are ebox0 and ebox1. ------------------------------------------------------------------------------ Sun May 24 12:26:10 PDT 1998 Version is 1.3.4 Dave Ashley: Fixed bug discovered by Hwei Sheng TEOH . The bug would surface when you'd replay a level, the movie wouldn't be recorded correctly. The problem was that during a recording (when you're actually playing), if a movie exists the first movement count would get corrupted. The movies are stored as a series of count,action pairs. Had to fix the initplay() routine in scav.c. ------------------------------------------------------------------------------ Wed May 6 11:33:54 PDT 1998 Version is 1.3.3 Dave Ashley: Made changes contributed by Eivind Eklund , sorry to be so late about it Eivind! Anyway: 1) Supposedly works under FreeBSD. 2) Supposed to check for disk full when writing out level resource file. 3) If no sound card exists, scavserver exits gracefully (no core dump). Thanks, Eivind! ------------------------------------------------------------------------------ Wed Feb 25 14:43:22 PST 1998 Version is 1.3.2 Dave Ashley: Changed x.c and anim.c so the animator should work with 8 bit, 16 bit, 24 bit and 32 bit modes ok. Originally it only worked right with 8 bit mode. ------------------------------------------------------------------------------ Wed Dec 17 17:51:00 PST 1997 Version is still 1.3.1 Dave Ashley: Marcus wants me to adopt his version as the "official" xscavenger so I've checked all his changes out and am now putting it up on my web page. It looks like what he did was to run lint or equivalent on all the source files, and fix all the niggling compiler warnings...There are 100's of little changes made, but it doesn't look like he installed some evil virus :^). ------------------------------------------------------------------------------ Sat Dec 6 18:02:00 1997 Version is now 1.3.1 Marcus Brinkmann: I extracted header files for correct proty type declaration. I corrected the include statements and some other stuff as explicit type declarations. Doing this reduced the warnings the compiler gave with "-Wall" down to five. Note that the header files are maximal, means there are to many extern declarations. Perhaps I will fix this later. I also added a provisoric manpage scavenger.6, which gets not automagically installed (even with make install.man), because I don't know how to set section 6 with the Imakefile. ------------------------------------------------------------------------------ Thu May 8 18:30:19 1997 Version is now 1.3 I fixed it so F10 in the menu (which you get after hitting space in demo mode) lets you remap keys. Lots of people have had to manually change the $HOME/.scavenger/scavrc file as my defaults are not universal. ------------------------------------------------------------------------------ Tue Apr 29 17:13:10 1997 Version is now 1.2 I modified the x.c file as per instructions from Jan Schoenepauck so that the game runs in 16/24/32 bits per pixel mode. It works ok (I only tried it in 8bpp and 24bpp) but there are new problems introduced: 1) The animator display is completely messed up. The animator is unusable in anything but 8 bit mode. Fixing this will require figuring out how to fake color table stuff when there is no color table. I doubt if many people use the animator anyway, so it's not a critical issue. And if you really need the animator, switch to an 8 bit display. 2) The level editor display is supposed to have a box around the selected tile type. This doesn't work properly in 16/24/32 modes, it appears as if none of the tiles is selected. I'm lazy so don't want to spend the time fixing these just yet. ------------------------------------------------------------------------------ Mon Apr 28 16:46:34 1997 Version is now 1.1 Thomas Haller compiled Scavenger on an Amiga Linux system, and found all the keycodes are different so none of the controls worked. He modified his copy of the source so it would work, but this is only a partial fix since each different implementaion of Linux/X has different definitions for the keycodes. I'm copying Koules again and using the XLookupKeysym() function, then using the equates in the file, so it should work across all platforms with a recompile. If you want to upgrade to this version from an older version, you will have to delete the ~/.scavenger/scavrc file, or fix up the keycodes for the up, down, left, right, digleft and digright. Deleting the scavrc file will cause scavenger to create a new one. Find new heycodes in the file. ------------------------------------------------------------------------------ Fri Apr 25 20:41:50 1997 I installed the Imakefile stuff and modified the README file. Thanks to Adam Jenkins for making the Imakefile! Adam made the vga_tetris game that uses the svgalib. It's available on sunsite.unc.edu in /pub/Linux/games/arcade ------------------------------------------------------------------------------ xscavenger-1.4.4/TODO0100644000175000001440000000062106644315236013224 0ustar dashusersScavenger and this TODO file were written by David Ashley. --- LEFT TO DO/BUGS ------------------------------------------------------- I'd like to have some mechanism for viewing many levels at once, maybe in much reduced size. I'd like to also be able to reorder levels from within the program. I'd like also to be able to switch graphics sets on the fly. --Dave Ashley Wed Apr 23 05:44:42 1997 xscavenger-1.4.4/README0100644000175000001440000000627606644315236013430 0ustar dashusersScavenger and this README file were written by David Ashley. You can contact me at dash@xdr.com. Old email addresses that might be defunct are dash@epyx.com, dash@netcom.com, dash5@geocities.com. http://www.xdr.com/dash The X Scavenger home page is http://www.xdr.com/dash/linux.html You can always get the latest version there. This is my first linux/xwindows contribution so please be patient with me. Send me *ANY* and all comments you have, please! I love to get feedback. --- COPYING --------------------------------------------------------------- Let's put it under the GNU license, shall we? --- DISCLAIMER ------------------------------------------------------------ USE THIS AT YOUR OWN RISK!!!! I'm not responsible for any damage this software may cause. --- GAME PLAY ------------------------------------------------------------- Scavenger is like Lode Runner. You've got to run around gathering objects while avoiding enemies. You can dig down through some of the blocks to get at buried objects. After you've collected everything, ladders may appear. To finish the level you've got to exit through the top of the screen. If an enemy falls into a dug brick, he is stunned for a while. If the brick fills in with him in it, he is killed, and he will reappear at the top of the screen. This version has a level editor for designing your own levels, and a graphics editor for drawing your own artwork. --- INSTALLATION ---------------------------------------------------------- See the file INSTALL for instructions how to install the game. --- GAME CONTROLS --------------------------------------------------------- The default control is with the number pad keys 4-9: Dig left Move up Dig right 7 8 9 4 5 6 Move left Move down Move right As of version 1.3 you can remap the controls. In demo mode hit space to get to the menu, then hit F10 to remap the keys. For each key if you hit escape the key is unchanged. F8 Skip to next level k Kill player (useful if he's trapped) ESC Exit back to demo mode Pause Pause game See the file DOC for more details about scavenger. --- WHAT TO DO IF YOU LIKE THIS GAME -------------------------------------- If you like this game, here's what to do: 1) If you have contributed something useful to the Linux community, you can use Scavenger for free! 2) If you are more of a user but money is tight, you can use Scavenger for free! 3) If you're a user but can afford it, you might consider sending me some money to help me continue to make games for Linux/Xwindows. Maybe send me $10 or $20 US cash? Or anything you can spare. Thanks! 4) If you create any levels, send them to me!!!!! 5) If you create any artwork, send it to me!!!!! This is a full working version of the game, not crippled in any way. You've even got the source to the game. Also all 180 levels are included. I've put a lot of work into it...it would be nice to get some kind of reward for it. --Dave Ashley Wed Apr 23 05:44:42 1997 ----------------------- CHANGELOG ------------------------------ See the changelog file for a history of scavenger. --------------------------------------------------------------------- xscavenger-1.4.4/INSTALL0100644000175000001440000000255007035030506013555 0ustar dashusersScavenger and this INSTALL file were written by David Ashley. --- INSTALLATION: --------------------------------------------------------- Thanks to Adam Jenkins for making an Imakefile for scavenger, it's easy. First, CD to the src directory, then do xmkmf and then a make: $ cd src $ xmkmf $ make It shouldn't give you any errors. Now, as root, do $ make install This should do everything. Now run scavenger $ scavenger The first time you run scavenger it wants to create a directory $HOME/.scavenger and copy some files into it from the global library file, and it should print out some statements telling what it's doing. If you don't have root access, don't do the "make install" above (it won't work most likely). Instead, create a directory $HOME/.scavenger and copy all the data files into it. $ mkdir ~/.scavenger $ cp data/* ~/.scavenger Put the scavenger executable somewhere in your path, and run it. You may need to rehash. If you want to modify any of the files and then recompile, I think you have to do "make depend" to remake the executables. $ make depend --- How to run scavenger -------------------------------------------------- Run by just typing "scavenger": $ scavenger The first time you run it, it may print some messages out as it creates or copies over some necessary files. --Dave Ashley Wed Apr 23 05:44:42 1997 xscavenger-1.4.4/DOC0100644000175000001440000001450507231624656013074 0ustar dashusersScavenger and this DOC file were written by David Ashley. --- DETAILED INFO --------------------------------------------------------- --- DEMO MODE: --- The game starts up in demo mode, where the game is playing on its own. Some keys do things: F1 Start game at first unsolved level F2 Enter animator F3 Enter level editor F4 Start game at level 1 F8 Skip to next demo level Alt-X Exit game Space Go to a menu listing the above things, --- MENU MODE: --- In the menu you get the option to change your player name with F5 F5 Change player name. The F8 key doesn't do anything in the menu, it only works while the game is demoing. I just put it there for informative purposes. --- ANIMATOR MODE: --- The color table will switch all around, don't be surprised. The animator is a lot like Dpaint. b Pick up brush. Click somewhere in the blowup and drag an area. shift-b Go back to last brush. x Flip brush in x, or flip square if no brush in hand. y Flib brush in y, or flip square if no brush in hand. z Rotate brush 90 degrees, or rotate square if no brush in hand. . Go to having a single point brush of the current color. [ and ] Select previous and next color , Pick a color--click somewhere in the blowup to use the same color as another one you see. Shorthand for this is clicking left or right mouse button on the large color boxes under the icons on the center right. Alt-1 Select the background artwork to work on Alt-2 Select the hero artwork to work on Alt-3 Select the enemy artwork to work on Alt-4 Select the hidden enemy artwork to work on u UNDO f Area fill mode d Draw mode v Vector mode r Rectangle mode ESC Exit back to demo mode Shift-S Save out file Shift-L Load in last saved file - Go to smaller built in brush = (+) Go to larger built in brush. Draw in the blowup box. Clicking the left mouse button draws with the primary color (indicated by the square in the color map). The right mouse button paints with the secondary color. Change the primary by clicking the left mouse button on the color array, and change the secondary by clicking the right mouse button on the color array. Select which box to work on with the left mouse button, just click on the box. Copy on box to another by using the right mouse button and a click-drag- unclick operation. Change the color table by moving the RGB sliders. It is sometimes useful to change the background color (normally the black in the upper left of the color array) to something besides black. You will be able to see other animation frames that are normally hidden, such as the dig animation. --- EDITOR MODE: --- This is for creating your own levels. l load level (use alt-l to force a load) w write level (use alt-w to force a write) space Try the level esc exit back to demo mode rightarrow Increase level # leftarrow Decrease level # `1234567890-= Select matching tile type Left mouse button draws with current tile type. Right mouse button erases. You can start writing new levels at 181 if you don't want to write over existing levels. The order of the tiles from left to right is: Empty brick Your hero can dig these cement These can't be dug Ladder Rail Fakebrick You fall through this. The enemies think it's a normal brick. exitladder These appear after the last object has been collected. Object The hero must collect these. Enemy You can have 0 to 5 of these Hero Only 1 of these Hidden This is a place where a hidden monster might be if you dig there. Flashing This object is more valuable if you collect it first. --- SCORING AND MOVIES ---------------------------------------------------- You've got infinite lives to complete each level, but after each failed attempt you start all over. Each level has its own best score. If you beat the level's previous best score, or if the level hasn't been solved before, a recording of your play will be stored in the $HOME/.scavenger/level.scl file. It's fun to watch the movies play back in demo mode. Remember F8 will let you skip levels in demo mode. Each object is worth 250 points. The flashing object is worth 8000 points, but you've got to get it first. If you exit the level without trapping any monsters (the hidden monster doesn't count), you get a bonus of 20000 points. If you exit the level without killing any monsters (the hidden monster doesn't count), you get a bonus of 10000 points. You don't get both large bunuses together. The time bonus starts at 10000 points and counts down about 100 points every second. The hidden monster carries an object that is worth 10000 points. Trap him to get it. Trapping and killing the hidden monster doesn't harm your bonus-- the whole idea is to find him and kill him. --- LEVEL DESIGN ---------------------------------------------------------- The hidden monsters are an interesting addition. Try to locate them where it won't hurt the player. You don't want the player to accidentally find a hidden monster while trying to dig a pit for an enemy to fall into. The flashing object adds some more variety. Sometimes it's tricky to get to the flashing object. Enemies can pick up normal objects temporarily, but not the flashing object. Writing out a level deletes the matching movie, if there is one. --- The scavrc file - remapping keys - alternate gfx sets ------------- The $HOME/.scavenger/scavrc file contains the XWindows key mappings. You can edit this file to change the mappings, but you've got to know the keycode. Each item is in hex. The names: background hero enemy hidden Point to .lbm graphics format names. If you want to see other graphics sets, point these to other ones. If you want to create your own graphics sets, make a copy of an existing one and put it into your $HOME/.scavenger directory. You might want to rename it also, but keep the .lbm suffix for future uses. Then change the scavrc file to point to your new filename. Don't include any path, scavenger looks for the file first in the LIBNAME (see Imakefile & names.h) then in $HOME/.scavenger. There is also an entry for slowing the game down slowdown=# Where # is 0-4 slowdown=0 ;normal slowdown=1 ; 7/8 speed slowdown=2 ; 3/4 " slowdown=3 ; 1/2 " slowdown=4 ; 1/4 " --Dave Ashley Wed Apr 23 05:44:42 1997 xscavenger-1.4.4/CREDITS0100644000175000001440000000245607227105551013557 0ustar dashusersScavenger and this CREDITS file were written by David Ashley. --- THANKS ---------------------------------------------------------------- I learned a lot from koules (an excellent game written by Jan Hubicka). I learned most of what I know about XWindows by looking at his code. Also the sound player is a modified version of the one in koules. Kevin Oster and Alex Morando designed a lot of the levels, but most of them are mine. Ron Hunsinger figured out the algorithms for enemy movement--they match the real Lode Runner exactly. --Dave Ashley Wed Apr 23 05:44:42 1997 -------- Marcus Brinkman has adopted xscavenger and is taking care of the debian maintenance. He also cleaned up the code in a lot of places to prevent lint-warnings. Thanks for your efforts, Marcus! --Dave Ashley Wed Dec 17 17:58:22 PST 1997 -------- Eivind Eklund contributed patches to make scavenger work on FreeBSD and do some better error correction. Thanks, Eivind! --Dave Ashley Wed May 6 11:33:54 PDT 1998 -------- "H. S. Teoh" contributed artwork and patches to improve the falling and digging animation, and provided some improved artwork (reddevil.lbm and microman.lbm, also jungle.lbm, gems.lbm and flashspiral.lbm). --Dave Ashley Wed Jan 10 08:18:44 PST 2001 --------