diff --git a/Makefile b/Makefile index 22365a3..c78525d 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ all: rc edit rc: rc.c shared.c rc.h shared.h globals.h defs.h - gcc -Wall -o rc -g rc.c shared.c `sdl-config --cflags --libs` -I/usr/local/include -L/usr/local/lib -lSDLmain -lSDL -lSDL_image -lSDL_gfx -lSDL_ttf + gcc -Wall -o rc -g rc.c shared.c `sdl-config --cflags --libs` -I/usr/local/include -L/usr/local/lib -lSDLmain -lSDL -lSDL_image -lSDL_gfx -lSDL_ttf -lSDL_Mixer edit: edit.c shared.c edit.h shared.h globals.h defs.h - gcc -Wall -o edit -g edit.c shared.c `sdl-config --cflags --libs` -I/usr/local/include -L/usr/local/lib -lSDLmain -lSDL -lSDL_image -lSDL_gfx -lSDL_ttf + gcc -D__EDITOR -Wall -o edit -g edit.c shared.c `sdl-config --cflags --libs` -I/usr/local/include -L/usr/local/lib -lSDLmain -lSDL -lSDL_image -lSDL_gfx -lSDL_ttf diff --git a/defs.h b/defs.h index 02cd149..e51eaf6 100644 --- a/defs.h +++ b/defs.h @@ -1,6 +1,8 @@ #ifndef __DEFS_H #define __DEFS_H +#include + /* Macros */ //#define OPENGL @@ -16,7 +18,7 @@ // how long to keep various text on the screen #define POINTSDELAY 40 #define HURRYDELAY 50 -#define LEVELDELAY 40 +#define LEVELDELAY 70 #define HELPDELAY 80 @@ -40,9 +42,9 @@ #define MAXMAPPINGS 50 #define MAXMONSTERSPERLEVEL 20 #define MAXLETTERHEIGHT 100 -#define MAXFRAMES 10 +#define MAXFRAMES 11 // max number of frames for sprites #define MAXHELP 5 -#define MAXTILEFRAMES 5 // max number of frames for animated tiles +#define MAXTILEFRAMES 10 // max number of frames for animated tiles // Fixed text buffer sizes #define BUFLEN 512 @@ -60,13 +62,25 @@ /* enums */ +/* sounds */ +#define MAXFX 9 +#define FX_SHOOT 0 +#define FX_SLAM 1 +#define FX_KILL 2 +#define FX_MULTIKILL 3 +#define FX_JUMP 4 +#define FX_FRUIT 5 +#define FX_POWERUP 6 +#define FX_DIE 7 +#define FX_WINLEVEL 8 + // Slope types #define S_NOTSOLID 0 #define S_SOLID 1 #define S_SLOPE 2 // Sprite types -#define MAXPTYPES 16 +#define MAXPTYPES 19 #define P_PLAYER 0 #define P_RAT 1 #define P_CHEESE 2 @@ -82,7 +96,10 @@ #define P_SNAKE 12 #define P_SPIT 13 #define P_HELP 14 -#define P_FLOWERRED 15 +#define P_FLOWERYELLOW 15 +#define P_FLOWERRED 16 +#define P_FLOWERPURPLE 17 +#define P_COKE 18 // Frame names #define F_WALK1 0 @@ -95,6 +112,7 @@ #define F_DEAD4 7 #define F_CLIMB1 8 #define F_CLIMB2 9 +#define F_SHOOT 10 // Tile types #define T_BLANK 0 @@ -114,6 +132,7 @@ #define T_WATER 14 #define T_WATERTOP 15 #define T_WATERSPIKES 16 +#define T_BRIDGE 17 // like land but you can drop down through it // death states #define D_INITIAL (1) // Need to trigger death sequence @@ -236,6 +255,8 @@ typedef struct sprite_s { // player and monster int falling; // are we falling? + int dropping; // are we purposely dropping through solid ground? + int dropx,dropy;// coords of tile we dropped from int fallspeed; // how fast are we falling? int jumping; // are we jumping? int jumpdir; //which way are we jumping? @@ -280,6 +301,8 @@ extern SDL_Color yellow; extern int vidargs; extern int toggletimer; extern TTF_Font *font[]; +extern Mix_Music *music; +extern Mix_Chunk *sfx[]; #endif diff --git a/doco/adding_a_sprite.txt b/doco/adding_a_sprite.txt index 3e5dd16..8ec0bf1 100644 --- a/doco/adding_a_sprite.txt +++ b/doco/adding_a_sprite.txt @@ -4,3 +4,6 @@ - in shared.c: add loadspriteimage() line(s) in loadimagesets() - in shared.c: add entry to monstertochar - in shared.c: add entry to chartomonster +- in shared.c: update isfruit(), isbullet() +- in rc.c: update ismonster() +- in rc.c: add monster movement diff --git a/edit.c b/edit.c index a9449cb..c8129d8 100644 --- a/edit.c +++ b/edit.c @@ -122,8 +122,8 @@ int main (int argc, char **argv) { timer = 0; - player->invuln = INVULNTIME; - player->score = 0; + //player->invuln = INVULNTIME; + //player->score = 0; while (1) { @@ -178,7 +178,7 @@ int main (int argc, char **argv) { } else { // check next one x += w; - if (x >= EDITORW) { + if (x >= EDITORW-TILEW) { x = SPALX; y += maxh; maxh = 0; @@ -278,6 +278,30 @@ int main (int argc, char **argv) { } } + /* next level */ + if (keys[SDLK_RIGHT]) { + if (toggletimer == 0) { + printf("Skipping to next level.\n"); + curlevelnum++; + loadlevel(curworld,curlevelnum); + draweditorlevel(); + drawsprites(); + toggletimer = 30; + } + } + /* prev level */ + if (keys[SDLK_LEFT]) { + if (toggletimer == 0) { + if (curlevelnum > 1) { + printf("Skipping to previous level.\n"); + curlevelnum--; + loadlevel(curworld,curlevelnum); + draweditorlevel(); + drawsprites(); + toggletimer = 30; + } + } + } if (keys[SDLK_RETURN]) { if (toggletimer == 0) { @@ -451,7 +475,7 @@ void drawpalette(void) { /* move to next position */ area.x += area.w; - if (area.x >= EDITORW) { + if (area.x >= EDITORW-TILEW) { area.x = SPALX; area.y += maxheight; maxheight = 0; diff --git a/globals.h b/globals.h index 3ed4d8d..c3a8fec 100644 --- a/globals.h +++ b/globals.h @@ -8,6 +8,9 @@ sprite_t *sprite; // head of sprite linked list sprite_t *lastsprite; // tail of sprite linked list sprite_t *player; // pointer to the player's sprite +Mix_Music *music; +Mix_Chunk *sfx[MAXFX]; + level_t *curlevel; // the current level's data tiletype_t fakeblock; // used for returning tiletypes from a function diff --git a/music/main.mod b/music/main.mod new file mode 100644 index 0000000..664ff6f Binary files /dev/null and b/music/main.mod differ diff --git a/rc b/rc index 736f427..4caef03 100755 Binary files a/rc and b/rc differ diff --git a/rc.c b/rc.c index 5441610..d4105b9 100644 --- a/rc.c +++ b/rc.c @@ -1,4 +1,3 @@ -#include #include #include #include @@ -14,6 +13,7 @@ #include #include #include +#include #include "shared.h" #include "rc.h" @@ -159,6 +159,15 @@ int main (int argc, char **argv) { return 1; } + /* init sound */ + if (initsound()) { + printf("sound error.\n"); + return 1; + } + + /* start music */ + Mix_PlayMusic(music, -1); + drawlevel(); flip(); @@ -202,6 +211,7 @@ int main (int argc, char **argv) { addtext(318,242,32,"Level Complete!",&black,LEVELDELAY); addtext(320,240,32,"Level Complete!",&yellow,LEVELDELAY); levelcomplete = 2; + playfx(FX_WINLEVEL); } else if (levelcomplete == 2) { int mcount = 0; sprite_t *s2; @@ -244,20 +254,20 @@ int main (int argc, char **argv) { if ((!player->dead) && (!player->teleporting)) { if (keys[SDLK_RIGHT]) { - if ((!player->jumping) && (!player->slamming)) { - if (!isonladder(player) || player->falling || isonground(player)) { - movex(player, getspeed(player)); - } + if (canmove(player)) { + movex(player, getspeed(player)); + } + if (canturn(player)) { + player->dir = D_RIGHT; } - player->dir = D_RIGHT; } if (keys[SDLK_LEFT]) { - if ((!player->jumping) && (!player->slamming)) { - if (!isonladder(player) || player->falling || isonground(player)) { - movex(player, -getspeed(player)); - } + if (canmove(player)) { + movex(player, -getspeed(player)); + } + if (canturn(player)) { + player->dir = D_LEFT; } - player->dir = D_LEFT; } if (keys[SDLK_UP]) { if (isonladder(player) || isladderabove(player)) { @@ -286,16 +296,27 @@ int main (int argc, char **argv) { if (!player->jumping) { if (!player->falling) { if (isonground(player) || isonladder(player)) { - int whichway; - player->climbing = B_FALSE; - if (keys[SDLK_RIGHT]) { - whichway = 1; - } else if (keys[SDLK_LEFT]) { - whichway = -1; + /* dropping through a bridge */ + if (keys[SDLK_DOWN]) { + if (isonbridge(player) && !player->falling) { + /* drop down */ + player->dropping = B_TRUE; + player->dropx = player->x / TILEW; + player->dropy = player->y / TILEH; + } } else { - whichway = 0; + int whichway; + player->climbing = B_FALSE; + if (keys[SDLK_RIGHT]) { + whichway = 1; + } else if (keys[SDLK_LEFT]) { + whichway = -1; + } else { + whichway = 0; + } + playfx(FX_JUMP); + jump(player, whichway); } - jump(player, whichway); } } } @@ -306,6 +327,7 @@ int main (int argc, char **argv) { if (keys[SDLK_DOWN]) { /* slam */ if ((!player->slamming) && (isonground(player))) { + playfx(FX_SLAM); player->slamming = B_TRUE; player->slamangle = 0; player->netxstart = player->x - (player->img->w/2)*player->dir; @@ -314,6 +336,7 @@ int main (int argc, char **argv) { } else { if (player->netcaught < player->netmax) { /* shoot net */ + playfx(FX_SHOOT); player->netting = 1; if (player->netbig) { player->netspeed = NETSPEED+3; @@ -416,7 +439,7 @@ void tick(void) { if (gtime == curlevel->hurryuptime) { if (!levelcomplete) { for (s = sprite; s; s = s->next) { - if (s != player) { + if ((s != player) && (!isfruit(s->id))) { s->angry = B_TRUE; } } @@ -450,6 +473,11 @@ void nextlevel(void) { drawlevel(); levelcomplete = B_FALSE; levelcompletetime = -1; + + /* reset player stats */ + player->netting = B_FALSE; + player->slamming = B_FALSE; + player->jumping = B_FALSE; } void jump(sprite_t *s, int dir) { @@ -480,6 +508,18 @@ void die(sprite_t *s) { /* clouds can't die like this */ if (s->id == P_CLOUD) return; + /* if this is the player, hurryup time counter resets */ + // We already do this in the cloud movement routine, but + // this handles cases where the cloud hasn't appeared yet. + if (s == player) { + gtime = 0; + } + + if (s == player) { + /* play sound */ + playfx(FX_DIE); + } + /* release anything we've caught */ for (s2 = sprite->next ; s2 ; s2 = s2->next) { if (s2->caughtby == s) { @@ -511,6 +551,8 @@ void die(sprite_t *s) { void cleanup(void) { int i; + Mix_HaltMusic(); + Mix_CloseAudio(); for (i = 1; i < MAXLETTERHEIGHT; i++) { TTF_CloseFont(font[i]); } @@ -563,14 +605,18 @@ void checkcollide(sprite_t *s) { if (isfruit(s2->id)) { if (s == player) { int gotscore = s2->score; + /* kill the fruit */ s2->dead = D_FINAL; /* give points to the player */ player->score = player->score + gotscore; /* handle fruit effects */ - if (!dofruiteffect(s2)) { + if (dofruiteffect(s2)) { + playfx(FX_POWERUP); + } else { + playfx(FX_FRUIT); sprintf(tempm, "%d", gotscore); - addtext(s2->x,s2->y - s2->img->h/2, 16, tempm, &white,POINTSDELAY); + addtext(s2->x,s2->y - s2->img->h/2, TEXTSIZE_POINTS, tempm, &white,POINTSDELAY); } } } @@ -892,6 +938,80 @@ void movesprite(sprite_t *s) { } } } + } else if (s->id == P_COKE) { + + if (!s->falling) { + int move = B_FALSE; + int xdiff, absxdiff; + + + /* distance to player */ + xdiff = player->x - s->x; + if (xdiff < 0) absxdiff = -xdiff; + else absxdiff = xdiff; + + tt = gettileat(s->x + s->dir+getspeed(s),s->y,NULL,NULL); + /* if there's a hole in front of us */ + if (tt->solid == S_NOTSOLID) { + if (player->y > s->y ) { + /* if player is below, fall off */ + if (xdiff <= (TILEW*12)) { + move = B_TRUE; + } + } else if (player->y == s->y) { + /* if player is at same level and close, jump */ + if ((s->dir == D_RIGHT) && (xdiff > 0) && (xdiff <= (TILEW*7))) { + jump(s,D_RIGHT); + } else if ((s->dir == D_LEFT) && (xdiff < 0) && (xdiff >= -(TILEW*7))) { + jump(s,D_LEFT); + } + } + } else { + move = B_TRUE; + } + + /* either move or turn around */ + if (move) { + rv = movex(s, s->dir*getspeed(s)); + if (rv) { + /* if we couldn't move (hit a wall), turn */ + s->dir = -s->dir; + } + } else { + s->dir = -s->dir; + } + + + + /* moves like an angry rat all the time */ + if ((player->dead == 0) && (!s->jumping) && (!s->jumptimer)) { + /* if player is above us, jump */ + if (player->y < s->y) { + if ((xdiff >= (TILEW*2)) && (xdiff <= (TILEW*3))) { + /* jump right */ + jump(s, D_RIGHT); + } else if ((xdiff <= -(TILEW*2)) && (xdiff >= -(TILEW*3))) { + /* jump left */ + jump(s, D_LEFT); + } else if (s->y - player->y <= (TILEH*6)) { + if ((xdiff >= 0) && (xdiff < (TILEW*2))) { + /* jump up */ + jump(s, 0); + } else if ((xdiff <= 0) && (xdiff > -(TILEW*2))) { + /* jump up */ + jump(s, 0); + } + } else { + /* jump whichever way we're facing */ + /* + s->jumpdir = s->dir; + s->jumping = 1; + s->jumpspeed = 5; + */ + } + } + } + } } else if (s->id == P_SNAKE) { if (!s->falling) { int move = B_FALSE; @@ -1452,7 +1572,7 @@ void drawnetting(sprite_t *s) { int netsleft; sx = s->x; - s->nety = s->y - (s->img->h/2); + s->nety = s->y - (s->img->h/2) + 2; s->netxstart = s->x; s->netystart = s->nety - 3; @@ -1463,7 +1583,7 @@ void drawnetting(sprite_t *s) { area.x = s->netxstart - TILEW/2 - s->netlen; } //area.y = s->netystart; - area.y = s->y - s->img->h-2; + area.y = s->y - s->img->h-2 + 2; area.w = s->netlen; area.h = s->img->h+2; SDL_BlitSurface(screen, &area,s->netbg, NULL); @@ -1561,6 +1681,16 @@ void removesprite(sprite_t *s) { } } +int isonbridge(sprite_t *s) { + tiletype_t *tthere; + tthere = gettileat(s->x,s->y, NULL,NULL); + if (tthere->id == T_BRIDGE) { + return B_TRUE; + } + + return B_FALSE; +} + int isonladder(sprite_t *s) { tiletype_t *tthere; @@ -1629,7 +1759,7 @@ int isonground(sprite_t *s) { if (isongroundpoint(s, s->x, s->y)) { return B_TRUE; } - if (!s->falling) { + if (!s->falling && !s->dropping) { if (isongroundpoint(s, s->x + s->img->w/2, s->y)) { return B_TRUE; } @@ -1648,6 +1778,14 @@ int isongroundpoint(sprite_t *s, int x,int y) { int groundy; tt = gettileat(x,y, &tilex, &tiley); + + + // when dropping, the tile you dropped from doesn't count + // as "ground". + if (s->dropping && (tilex == s->dropx) && (tiley == s->dropy)) { + return B_FALSE; + } + /* get offset */ xoff = x - (tilex*TILEW); @@ -1669,10 +1807,21 @@ int isongroundpoint(sprite_t *s, int x,int y) { } else if (s->falling) { tiletype_t *abovetile; /* falling, on a tile, but with tiles above you */ + // ie. you've jumped up through a single tile (can't + // jump through two or more tiles abovetile = gettileat(x,y-TILEH, NULL, NULL); if (abovetile->solid) { return B_FALSE; } + // } else if (s->dropping) { + // tiletype_t *abovetile; + /* if the tile we're on is solid but not the one + above, then we've "dropped" and are still + travelling through the tile we dropped from. */ + // abovetile = gettileat(x,y-TILEH, NULL, NULL); + // if (!abovetile->solid) { + // return B_FALSE; + // } } } @@ -1717,7 +1866,7 @@ void dogravity(sprite_t *s) { } } else { - if (isonground(s)) { + if (isonground(s) ) { s->falling = B_FALSE; s->climbing = B_FALSE; } else { @@ -1755,9 +1904,11 @@ void dogravity(sprite_t *s) { if (s->slamming) { s->slamangle += (10 * (M_PI/180)); if (s->slamangle >= (180 * (M_PI/180))) { + /* finished slamming */ int xdiff,ydiff,xnet = 0,ynet = 0; int pointsinc = 250; int psize = 6; + int gotsomething = B_FALSE; s->slamming = 0; @@ -1783,12 +1934,19 @@ void dogravity(sprite_t *s) { psize += 10; xnet = s2->x; ynet = s2->y - s2->img->h/2; + + gotsomething = B_TRUE; } else { /* otherwise it gets angry */ s2->angry = B_TRUE; } } } + if (gotsomething) { + playfx(FX_KILL); + } + + gotsomething = B_FALSE; /* kill anything we hit */ for (s2 = sprite; s2 ; s2 = s2->next) { @@ -1808,11 +1966,16 @@ void dogravity(sprite_t *s) { die(s2); pointsinc *= 2; psize += 10; + + gotsomething = B_TRUE; } } } } + if (gotsomething) { + playfx(FX_MULTIKILL); + } /* release anything we've caught */ for (s2 = sprite; s2 ; s2 = s2->next) { @@ -1945,6 +2108,7 @@ int ismonster(int id) { if (id == P_SPIDER) return B_TRUE; if (id == P_SNAKE) return B_TRUE; if (id == P_CLOUD) return B_TRUE; + if (id == P_COKE) return B_TRUE; return B_FALSE; } @@ -1956,3 +2120,79 @@ void usage(void) { printf(" -l xx Skip to level xx.\n"); printf("\n"); } + +// returns B_TRUE if the given player is able to walk/fall left/right +int canmove(sprite_t *pl) { + if (!pl->jumping && !pl->slamming ) { + if (!pl->netting) { + if (!isonladder(pl) || pl->falling || isonground(pl)) { + return B_TRUE; + } + } else if (pl->netting && pl->falling) { // netting and falling + return B_TRUE; + } + } + return B_FALSE; +} + +// returns B_TRUE if the given player is able to change which direction they're facing +int canturn(sprite_t *pl) { + if (!pl->slamming && !pl->netting) { + return B_TRUE; + } + return B_FALSE; +} + +int loadfx(int sid , char *filename) { + char tempname[BUFLEN]; + + sprintf(tempname, "sounds/"); + strncat(tempname, filename, BUFLEN); + sfx[sid] = Mix_LoadWAV(tempname); + if (!sfx[sid]) { + printf("error loading %s\n",tempname); + return B_TRUE; + } + return B_FALSE; +} + +int initsound(void) { + int i; + + /* init */ + if (Mix_OpenAudio(44100, AUDIO_S16SYS, 2, 1024) < 0) { + printf("Error initialising sound: %s.\n",Mix_GetError()); + return B_TRUE; + } + + loadfx(FX_SHOOT, "shoot.wav"); + loadfx(FX_SLAM, "slam.wav"); + loadfx(FX_KILL, "kill.wav"); + loadfx(FX_MULTIKILL, "multikill.wav"); + loadfx(FX_JUMP, "jump.wav"); + loadfx(FX_FRUIT, "fruit.wav"); + loadfx(FX_POWERUP, "powerup.wav"); + loadfx(FX_DIE, "die.wav"); + loadfx(FX_WINLEVEL, "winlevel.wav"); + + + // load sound effects + for (i = 0; i < MAXFX; i++) { + if (!sfx[i]) { + return B_TRUE; + } + } + + // load music + music = Mix_LoadMUS("music/main.mod"); + if (!music) { + printf("can't load music\n"); + return B_TRUE; + } + + return B_FALSE; +} + +void playfx(int num) { + Mix_PlayChannel(-1, sfx[num], 0); +} diff --git a/rc.h b/rc.h index 43bd057..09b1d4e 100644 --- a/rc.h +++ b/rc.h @@ -20,6 +20,7 @@ int isroofnabove(sprite_t *s,int howfar); int isonground(sprite_t *s); int isongroundpoint(sprite_t *s, int x, int y); int isonladder(sprite_t *s); +int isonbridge(sprite_t *s); int isladderabove(sprite_t *s); int dofruiteffect(sprite_t *s); int ismonster(int id); @@ -31,7 +32,8 @@ double getspeed(sprite_t *s ); void adjustheight(sprite_t *s); void tick(void); void usage(void); - - - - +int canmove(sprite_t *pl); +int canturn(sprite_t *pl); +int initsound(void); +int loadfx(int sid, char *filename); +void playfx(int num); diff --git a/shared.c b/shared.c index 5f72972..694690c 100644 --- a/shared.c +++ b/shared.c @@ -32,7 +32,7 @@ int loadlevel(int wnum, int lnum) { char *p; int tileid; int i; - int *ii; + //int *ii; mapping_t mapping[MAXMAPPINGS]; int nmappings = 0; tiletype_t *lasttile; @@ -41,6 +41,8 @@ int loadlevel(int wnum, int lnum) { int tempanim[LEVELW*LEVELH]; + printf("Loading level %d-%d...",wnum,lnum); + if (!level) level = malloc(sizeof(level_t)); if (level->animtiles) free(level->animtiles); @@ -226,7 +228,7 @@ int loadlevel(int wnum, int lnum) { } else { /* place the monster */ level->initm[level->nummonsters].startx = x*TILEW+(TILEW/2); - level->initm[level->nummonsters].starty = y*TILEH+(TILEH-2); + level->initm[level->nummonsters].starty = y*TILEH+(TILEH-2)+2; level->initm[level->nummonsters].id = monid; if (monid == P_HELP) { @@ -494,10 +496,12 @@ int loadlevel(int wnum, int lnum) { return B_TRUE; } +#ifndef __EDITOR if ((level->p1x == 0) || (level->p1y == 0)) { printf("Level is missing player 1 start position.\n"); return B_TRUE; } +#endif /* free help texts */ for (i = 0; i < numhelp; i++) { @@ -531,11 +535,13 @@ int loadlevel(int wnum, int lnum) { gtime = 0; -printf("Loaded level. Animated tiles: "); +printf("Done.\n"); +/* for (ii = level->animtiles ; ii && *ii != -1; ii++) { printf("%d ",*ii); } printf(".\n"); +*/ return B_FALSE; } @@ -553,6 +559,9 @@ void setdefaults(sprite_t *s) { s->netmax = 1; s->netcaught = 0; s->netbig = 0; + s->dropping = 0; + s->dropx = -1; + s->dropy = -1; s->falling = 0; s->fallspeed = 0; s->dir = 1; @@ -580,20 +589,26 @@ void setdefaults(sprite_t *s) { switch (s->id) { case P_CHEESE: - s->score = 500; + s->score = 100; break; case P_ICECREAM: - s->score = 1000; + s->score = 200; break; case P_CHIPS: - s->score = 2000; + s->score = 300; break; case P_BURGER: - s->score = 4000; + s->score = 400; break; case P_FLOWERRED: s->score = 5; break; + case P_FLOWERYELLOW: + s->score = 10; + break; + case P_FLOWERPURPLE: + s->score = 30; + break; default: s->score = 0; break; @@ -688,6 +703,8 @@ int loadtiletypes(char *filename) { int state; FILE *f; char buf[BUFLEN]; + char dirname[BUFLEN]; + char imagefile[BUFLEN]; char *p,*pp; int uniq = 0 ; @@ -720,6 +737,8 @@ int loadtiletypes(char *filename) { strcpy(t->name, p); /* defaults */ + strcpy(dirname, "."); + t->id = 0; t->animspeed = 0; // not animated t->numframes = 1; // not animated @@ -749,6 +768,13 @@ int loadtiletypes(char *filename) { p = strtok(buf, " "); p = strtok(NULL, " "); t->id = atoi(p); + } else if (strstr(buf, "dir") == buf) { // tile directory + /* strip newline */ + buf[strlen(buf)-1] = '\0'; + + p = strtok(buf, " "); + p = strtok(NULL, " "); + strcpy(dirname, p); } else if (strstr(buf, "animspeed") == buf) { p = strtok(buf, " "); p = strtok(NULL, " "); @@ -789,12 +815,16 @@ int loadtiletypes(char *filename) { SDL_FreeSurface(t->img[frame]); t->img[frame] = NULL; } - t->img[frame] = IMG_Load(p); + strcpy(imagefile, dirname); + strcat(imagefile, "/"); + strcat(imagefile, p); + + t->img[frame] = IMG_Load(imagefile); if (!t->img[frame]) { - printf("cannot load tile image file: '%s'\n",p); + printf("cannot load tile image file: '%s'\n",imagefile); fclose(f); return B_TRUE; - } + } // black is transparent SDL_SetColorKey(t->img[frame], SDL_SRCCOLORKEY, SDL_MapRGB(screen->format, 0, 0, 0)); @@ -830,7 +860,8 @@ int loadimagesets(void) { /* next 3 are auto generated */ loadspriteimage(P_PLAYER,F_CLIMB1, "sprites/dclimb1.png"); loadspriteimage(P_PLAYER,F_CLIMB2, "sprites/dclimb2.png"); - imageset[P_PLAYER].numimages = 10; + loadspriteimage(P_PLAYER,F_SHOOT, "sprites/dwarfshoot.png"); + imageset[P_PLAYER].numimages = 11; loadspriteimage(P_SNAKE,F_WALK1, "sprites/snake.bmp"); loadspriteimage(P_SNAKE,F_JUMP, "sprites/snakejump.bmp"); @@ -872,6 +903,14 @@ int loadimagesets(void) { loadspriteimage(P_CLOUD,F_DEAD, "sprites/cloud.bmp"); imageset[P_CLOUD].numimages = 2; + loadspriteimage(P_COKE,F_WALK1, "sprites/coke.png"); + loadspriteimage(P_COKE,F_JUMP, "sprites/cokejump.png"); + loadspriteimage(P_COKE,F_FALL, "sprites/cokejump.png"); + loadspriteimage(P_COKE,F_CAUGHT, "sprites/cokecaught.png"); + loadspriteimage(P_COKE,F_DEAD, "sprites/cokedead.png"); + imageset[P_COKE].numimages = 8; + + /* fruits / powerups */ loadspriteimage(P_CHEESE,F_WALK1, "sprites/cheese.bmp"); imageset[P_CHEESE].numimages = 1; @@ -896,9 +935,16 @@ int loadimagesets(void) { loadspriteimage(P_HELP,F_WALK1, "sprites/help.bmp"); imageset[P_HELP].numimages = 1; + loadspriteimage(P_FLOWERYELLOW,F_WALK1, "sprites/flower-yellow.png"); + imageset[P_FLOWERRED].numimages = 1; + loadspriteimage(P_FLOWERRED,F_WALK1, "sprites/flower-red.png"); imageset[P_FLOWERRED].numimages = 1; + + loadspriteimage(P_FLOWERPURPLE,F_WALK1, "sprites/flower-purple.png"); + imageset[P_FLOWERPURPLE].numimages = 1; + /* bullets */ loadspriteimage(P_SPIT,F_WALK1, "sprites/spit.bmp"); imageset[P_SPIT].numimages = 1; @@ -908,6 +954,7 @@ int loadimagesets(void) { /* generate rotated/flipped images */ for (p = 0; p < MAXPTYPES; p++) { + /* rotated */ if (!isfruit(p) && !isbullet(p)) { tempimg = rotozoomSurface(imageset[p].img[F_DEAD],90,1,0); imageset[p].img[F_DEAD2] = SDL_DisplayFormat(tempimg); @@ -1007,6 +1054,8 @@ void drawsprite(sprite_t *s) { frame = F_CAUGHT; } else if (s->climbing) { frame = F_CLIMB1 + ((timer/12) % 2); + } else if (s->netting) { + frame = F_SHOOT; } else if (s->jumping) { frame = F_JUMP; } else if (s->falling) { @@ -1155,6 +1204,8 @@ int isfruit(int id) { case P_BIGNET: case P_HELP: case P_FLOWERRED: + case P_FLOWERYELLOW: + case P_FLOWERPURPLE: return B_TRUE; } @@ -1321,6 +1372,9 @@ int chartomonster(char ch) { case '?': return P_HELP; case '1': return P_PLAYER; case '@': return P_FLOWERRED; + case 'Y': return P_FLOWERYELLOW; + case 'P': return P_FLOWERPURPLE; + case 'C': return P_COKE; } return -1; @@ -1335,6 +1389,9 @@ char monstertochar(int id ) { case P_HELP: return '?'; case P_PLAYER: return '1'; case P_FLOWERRED: return '@'; + case P_FLOWERYELLOW: return 'Y'; + case P_FLOWERPURPLE: return 'P'; + case P_COKE: return 'C'; } return '\0'; diff --git a/sounds/die.au b/sounds/die.au new file mode 100644 index 0000000..c741b19 Binary files /dev/null and b/sounds/die.au differ diff --git a/sounds/die.wav b/sounds/die.wav new file mode 100644 index 0000000..c67fd2f Binary files /dev/null and b/sounds/die.wav differ diff --git a/sounds/fruit.wav b/sounds/fruit.wav new file mode 100644 index 0000000..3ee2c13 Binary files /dev/null and b/sounds/fruit.wav differ diff --git a/sounds/jump.wav b/sounds/jump.wav new file mode 100644 index 0000000..66387d3 Binary files /dev/null and b/sounds/jump.wav differ diff --git a/sounds/kill.au b/sounds/kill.au new file mode 100644 index 0000000..71a4f05 Binary files /dev/null and b/sounds/kill.au differ diff --git a/sounds/kill.wav b/sounds/kill.wav new file mode 100644 index 0000000..8dbbcaa Binary files /dev/null and b/sounds/kill.wav differ diff --git a/sounds/multikill.wav b/sounds/multikill.wav new file mode 100644 index 0000000..5d1f70c Binary files /dev/null and b/sounds/multikill.wav differ diff --git a/sounds/powerup.wav b/sounds/powerup.wav new file mode 100644 index 0000000..2df4637 Binary files /dev/null and b/sounds/powerup.wav differ diff --git a/sounds/shoot.wav b/sounds/shoot.wav new file mode 100644 index 0000000..b2509a8 Binary files /dev/null and b/sounds/shoot.wav differ diff --git a/sounds/slam.wav b/sounds/slam.wav new file mode 100644 index 0000000..10b4380 Binary files /dev/null and b/sounds/slam.wav differ diff --git a/sounds/winlevel.au b/sounds/winlevel.au new file mode 100644 index 0000000..8a534bf Binary files /dev/null and b/sounds/winlevel.au differ diff --git a/sounds/winlevel.wav b/sounds/winlevel.wav new file mode 100644 index 0000000..0bfca6d Binary files /dev/null and b/sounds/winlevel.wav differ diff --git a/world1/level1.dat b/world1/level1.dat index f8bb112..ff19ea5 100644 --- a/world1/level1.dat +++ b/world1/level1.dat @@ -8,17 +8,23 @@ Once caught, Down+Z will slam and kill a monster! endhelp monsters 1 3 19 -r 27 15 ? 7 19 ? 12 19 @ 16 14 -@ 36 14 -@ 2 15 -@ 1 15 -@ 22 15 -@ 23 15 @ 30 15 @ 31 15 +P 21 15 +@ 22 15 +@ 20 15 +Y 23 15 +Y 19 15 +P 36 14 +Y 2 15 +Y 1 15 +Y 24 19 +Y 22 19 +Y 20 19 +r 18 15 endmonsters 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, @@ -36,7 +42,7 @@ endmonsters 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,4, -4,1,1,0,0,0,0,0,0,0,9,9,9,10,10,10,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,4, +4,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, diff --git a/world1/level2.dat b/world1/level2.dat index b534a88..86963a8 100644 --- a/world1/level2.dat +++ b/world1/level2.dat @@ -14,9 +14,14 @@ monsters ? 25 10 r 34 9 r 17 10 +Y 15 8 +Y 19 8 +Y 32 8 +Y 36 8 +@ 28 9 endmonsters 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,4, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,18,23,19,0,0,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,4, @@ -25,8 +30,8 @@ endmonsters 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,4, -4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,1,0,0,0,0,4,1,1,1,4,0,0,4, -4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1,1,1,1,1,1,1,1,1,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,0,1,0,0,0,4,1,1,1,4,0,0,4, +4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,4,4,4,1,1,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, diff --git a/world1/level4.dat b/world1/level4.dat index 092cbe0..cfb9874 100644 --- a/world1/level4.dat +++ b/world1/level4.dat @@ -2,42 +2,62 @@ tileset green bg 0 hurryup 30 endmaps +help +endhelp monsters -r 10 4 1 17 8 +r 10 4 r 11 12 r 33 12 r 25 16 r 12 20 r 25 24 +Y 23 12 +Y 25 12 +@ 25 20 +@ 23 20 +Y 32 20 +P 34 20 +@ 7 16 +P 5 16 +@ 16 16 +Y 14 16 +Y 15 24 +@ 16 24 +@ 14 24 +@ 5 24 +@ 7 24 +Y 6 24 +P 8 4 +@ 26 8 endmonsters -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*000000~~~~~~~~~~~~**000000000000000000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*000000000000~~~~~~~~~~~~~~~00000000000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*000~~~~~~~~~~~~~~0000~~~~~0000~~~~~000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*000~~~~~0000~~~~~0000~~~~~~~~~~~~~~000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*000~~~~~~~~~~~~~~0000~~~~~0000~~~~~000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*000~~~~~0000~~~~~0000~~~~~~~~~~~~~~000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -*00000000000000000000000000000000000000* -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, diff --git a/world1/level5.dat b/world1/level5.dat index 809666b..e8d6560 100644 --- a/world1/level5.dat +++ b/world1/level5.dat @@ -13,13 +13,38 @@ r 12 20 r 28 20 r 25 24 r 30 28 +P 20 12 +@ 19 12 +@ 21 12 +Y 19 4 +Y 8 4 +@ 5 24 +@ 7 24 +Y 34 24 +Y 32 24 +P 26 28 +P 26 28 +P 26 28 +P 26 28 +P 27 28 +P 27 28 +P 27 28 +P 27 28 +P 27 28 +P 27 28 +Y 15 8 +Y 26 8 +@ 14 8 +@ 27 8 +@ 33 16 +Y 7 16 endmonsters 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, -4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,4,4,0,0,0,0,0,0,0,0,0,0,0,18,19,0,0,0,0,0,4, +4,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,18,19,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, diff --git a/world1/level6.dat b/world1/level6.dat index a622146..57d31b5 100644 --- a/world1/level6.dat +++ b/world1/level6.dat @@ -10,6 +10,15 @@ r 27 9 r 33 9 r 18 15 r 21 19 +P 19 25 +P 20 25 +P 25 9 +P 24 9 +@ 24 15 +@ 15 15 +@ 15 19 +@ 24 19 +Y 36 9 endmonsters 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, diff --git a/world1/level7.dat b/world1/level7.dat index efbdcb1..33dc033 100644 --- a/world1/level7.dat +++ b/world1/level7.dat @@ -11,6 +11,19 @@ r 7 8 r 32 13 r 17 18 r 28 22 +P 17 10 +P 18 10 +@ 19 10 +@ 16 10 +Y 20 10 +Y 15 10 +Y 10 18 +Y 23 22 +Y 30 22 +Y 30 13 +Y 38 13 +Y 9 8 +Y 2 8 endmonsters 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, diff --git a/world1/level8.dat b/world1/level8.dat index 3fce017..212691c 100644 --- a/world1/level8.dat +++ b/world1/level8.dat @@ -13,6 +13,28 @@ r 3 7 r 37 8 s 14 24 s 26 24 +@ 34 8 +@ 2 7 +@ 5 7 +Y 25 6 +Y 17 6 +Y 25 11 +Y 21 11 +Y 34 11 +Y 12 11 +Y 16 11 +Y 29 11 +P 20 28 +P 20 28 +P 20 28 +P 34 28 +P 34 28 +P 34 28 +P 34 28 +P 7 28 +P 7 28 +P 7 28 +P 7 28 endmonsters 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, diff --git a/world1/level9.dat b/world1/level9.dat index 1c9c0bc..7623eb0 100644 --- a/world1/level9.dat +++ b/world1/level9.dat @@ -2,41 +2,66 @@ tileset green bg 0 hurryup 30 endmaps +help +endhelp monsters 1 1 2 r 30 5 r 33 7 r 13 10 r 29 16 -S 11 28 +S 12 28 +S 12 28 +P 30 19 +@ 6 28 +@ 6 28 +@ 6 28 +@ 6 28 +@ 2 28 +@ 2 28 +@ 2 28 +@ 2 28 +@ 2 28 +@ 15 28 +@ 15 28 +@ 15 28 +@ 15 28 +@ 15 28 +Y 35 5 +Y 28 5 +@ 20 2 +Y 21 2 +Y 18 2 +Y 6 10 +Y 10 10 endmonsters -**************************************** -*00000000000000000000000000000000000000* -*000000000000000000000000b0000000000000* -*~~~~~~~\00000000/~~~~\0000000000000000* -*********\000000/******\000000000000000* -**********\0000/********\00000000000000* -***********\00/**********~~~~~~~000~{{{* -*000000000000000000********00000000*}}}* -*000000000000000000********{{{{{~~~*}}}* -*000000000000000000********}}}}}****}}}* -*0000000000000000000000****}}}}}****}}}* -*~~-~~~~~~~~~~~~~{{{{{{****}}}}}****}}}* -***=***************}}}}****}}}}}****}}}* -***=****************}}}}}}}}}}}}}}}}}}}* -***=****************}}}}}}}}}}}}}}}}}}}* -***=****************}}}}}}}}}}}}}}}}}}}* -***=*****************}}}}}}}}0}}}}}}}}}* -***=*****************}}}}}}*****}}}}}}}* -***=*****************}}}}}}*000*}}}}}}}* -***=*****************}}}}}}*.00*}}}}}}}* -***=*****************}}}}}}*~{~*}}}}}}}* -***=*****************}}}}}}}}}}}}}}}}}}* -***=*****************}}}}}}}}}}}}}}}}}}* -***=******************}}}}}}}}}}}}}}}}}* -***=*******************}}}}}}}}}}}}}}}** -*00=000000000000000*****}}}}}}}}}}}}}*** -*00=000000000000000******}}}}}}}}}}}**** -*00=00000000000000;*******}}}}}}}}}***** -*00=00000000000000:********}}}}}}}****** -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,1,1,1,1,1,1,1,3,0,0,0,0,0,0,0,0,2,1,1,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,4,4,4,4,4,4,4,4,3,0,0,0,0,0,0,2,4,4,4,4,4,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,4,4,4,4,4,4,4,4,4,3,0,0,0,0,2,4,4,4,4,4,4,4,4,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,4,4,4,4,4,4,4,4,4,4,3,0,0,2,4,4,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,0,0,0,1,16,16,16,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,15,15,15,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,16,16,16,16,16,1,1,1,4,15,15,15,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,15,15,15,15,15,4,4,4,4,15,15,15,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,15,15,15,15,15,4,4,4,4,15,15,15,4, +4,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,16,16,16,16,16,16,4,4,4,4,15,15,15,15,15,4,4,4,4,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,1,1,15,15,15,15,4,4,4,4,15,15,15,15,15,4,4,4,4,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,15,15,15,15,15,15,1,1,1,1,1,15,15,15,15,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,15,15,15,15,15,15,4,12,0,0,4,15,15,15,15,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,15,15,15,15,15,15,4,13,0,0,4,15,15,15,15,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,15,15,15,15,15,15,4,1,16,1,4,15,15,15,15,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,4, +4,4,4,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,1,4, +4,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,1,15,15,15,15,15,15,15,15,15,15,15,15,15,1,4,4, +4,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,1,15,15,15,15,15,15,15,15,15,15,15,1,4,4,4, +4,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,1,15,15,15,15,15,15,15,15,15,1,4,4,4,4, +4,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,4,4,4,4,4,4,4,1,15,15,15,15,15,15,15,1,4,4,4,4,4, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,1,1,1,1,1,1,1,4,4,4,4,4,4,