diff --git a/defs.h b/defs.h index 7299d4f..cf8effb 100644 --- a/defs.h +++ b/defs.h @@ -15,7 +15,7 @@ // size of flower straem when getting last flower // (number of gems on each side) -#define STREAMWID 6 +#define STREAMWID 5 // puff of smoke @@ -59,8 +59,12 @@ #define NETSPEED 9 // how fast the player's net moves #define POWERUPTIME 15 // # secs before a powerup appears +#define MACEEXPX 4 // X size of mace explosion +#define MACEEXPY 2 // Y size of mace explosion + // Limits +#define MAXLEVELS 100 #define MAXMAPPINGS 50 #define MAXMONSTERSPERLEVEL 40 #define MAXLETTERHEIGHT 100 @@ -85,7 +89,7 @@ /* enums */ /* sounds */ -#define MAXFX 15 +#define MAXFX 18 #define FX_SHOOT 0 #define FX_SLAM 1 #define FX_KILL 2 @@ -101,6 +105,9 @@ #define FX_MORPH 12 #define FX_BOOM 13 #define FX_SPRING 14 +#define FX_TELEPORT 15 +#define FX_SPLASH 16 +#define FX_MACE 17 // Slope types #define S_NOTSOLID 0 @@ -108,7 +115,7 @@ #define S_SLOPE 2 // Sprite types -#define MAXPTYPES 31 +#define MAXPTYPES 33 #define P_PLAYER 0 #define P_RAT 1 #define P_CHEESE 2 @@ -140,11 +147,14 @@ #define P_FTOGEM 28 #define P_BOMB 29 #define P_SHIELD 30 +#define P_MACEPOWERUP 31 +#define P_MACE 32 // powerups #define PW_NONE 0 #define PW_BOXING 1 // boxing glove #define PW_BOMB 2 // bomb +#define PW_MACE 3 // made // Frame names #define F_WALK1 0 @@ -284,6 +294,11 @@ typedef struct level_s { } level_t; level_t *level; +typedef struct levelentry_s { + char *filename; + char *desc; +} levelentry_t; + typedef struct sprite_s { int id; // what kind of sprite? (eg. player, cheese, rat) int score; // player's score, for monsters how much they are worth @@ -329,6 +344,7 @@ typedef struct sprite_s { char name[MIDBUFLEN]; // Help text for help icons, otherwise not really used outside of debugging // player and monster + int swimming; // are we in the water? int falling; // are we falling? int dropping; // are we purposely dropping through solid ground? int dropx,dropy;// coords of tile we dropped from @@ -365,7 +381,7 @@ imageset_t imageset[MAXPTYPES]; /* external globals */ extern SDL_Color black; -extern SDL_Surface *screen, *temps; +extern SDL_Surface *screen, *temps, *levelbg; extern sprite_t *sprite, *lastsprite, *player; extern level_t *curlevel; extern tiletype_t fakeblock; @@ -373,6 +389,7 @@ extern int gtime; extern int timer; extern SDL_Color red; extern SDL_Color black; +extern SDL_Color blue; extern SDL_Color white; extern SDL_Color green; extern SDL_Color yellow; @@ -386,6 +403,8 @@ extern int oldexitdir; extern int levelcomplete; extern text_t *text, *lasttext; extern int cheat; +extern int nexthurryup; +extern levelentry_t levelentry[]; #endif diff --git a/doco/adding_a_sprite.txt b/doco/adding_a_sprite.txt index 1c5aee6..fcbd843 100644 --- a/doco/adding_a_sprite.txt +++ b/doco/adding_a_sprite.txt @@ -7,4 +7,4 @@ - in shared.c: update isflower(), isfruit(), isbullet(), iseffect(); - in shared.c: IF A GEM: update flowertogem() - in rc.c: update ismonster() -- in rc.c: add monster movement +- in rc.c: add monster/effect movement diff --git a/edit.c b/edit.c index 7a6a340..79424f5 100644 --- a/edit.c +++ b/edit.c @@ -41,6 +41,8 @@ int main (int argc, char **argv) { curlevelnum = 1; + levelbg = NULL; + /* handle arguments */ if (argc >= 2) { for (i = 1; i < argc; i++) { @@ -62,6 +64,11 @@ int main (int argc, char **argv) { } } + if (loadlevellist()) { + printf("Error loading level list from levels.dat.\n"); + return 1; + } + /* initialise */ initglobals(); @@ -139,17 +146,19 @@ int main (int argc, char **argv) { seltile = NULL; /* get tile number */ for (tt = tiletype; tt != NULL; tt = tt->next) { - // is mouse over this one? - if ((mx >= x) && (my >= y) && (mx <= x+TILEW-1) && (my <= y+TILEH-1)) { - seltile = tt; - selsprite = -1; - break; - } else { - // check next one - x += TILEW; - if (x >= EDITORW) { - x = PALX; - y += TILEH; + if (isplacabletile(tt->id)) { + // is mouse over this one? + if ((mx >= x) && (my >= y) && (mx <= x+TILEW-1) && (my <= y+TILEH-1)) { + seltile = tt; + selsprite = -1; + break; + } else { + // check next one + x += TILEW; + if (x >= EDITORW) { + x = PALX; + y += TILEH; + } } } } @@ -163,30 +172,31 @@ int main (int argc, char **argv) { selsprite = -1; for (p = 0; p < MAXPTYPES; p++) { - SDL_Surface *firstimg; - int w,h; + if (isplacablesprite(p)) { + SDL_Surface *firstimg; + int w,h; - /* select images */ - firstimg = imageset[p].img[F_WALK1]; - w = firstimg->w; - h = firstimg->h; - if (h > maxh) maxh = h; + /* select images */ + firstimg = imageset[p].img[F_WALK1]; + w = firstimg->w; + h = firstimg->h; + if (h > maxh) maxh = h; - // is mouse over it? - if ((mx >= x) && (my >= y) && (mx <= x+w-1) && (my <= y+h-1)) { - selsprite = p; - seltile = NULL; - break; - } else { - // check next one - x += w; - if (x >= EDITORW-TILEW) { - x = SPALX; - y += maxh; - maxh = 0; + // is mouse over it? + if ((mx >= x) && (my >= y) && (mx <= x+w-1) && (my <= y+h-1)) { + selsprite = p; + seltile = NULL; + break; + } else { + // check next one + x += w; + if (x >= EDITORW-TILEW) { + x = SPALX; + y += maxh; + maxh = 0; + } } } - } // redraw palette with new selection drawpalette(); @@ -309,29 +319,7 @@ int main (int argc, char **argv) { } if (keys[SDLK_c]) { if (toggletimer == 0) { - int offset,x,y; - - /* clear all sprites */ - while (sprite) { - killsprite(sprite); - } - - /* clear level */ - for (x = 0; x < LEVELW; x++) { - for (y = 0; y < LEVELH; y++) { - offset = y*LEVELW+x; - if ((x == 0) || (x == LEVELW-1)) { - curlevel->map[offset] = T_FULL; - } else if (y == LEVELH-1) { - curlevel->map[offset] = T_LAND; - } else { - curlevel->map[offset] = T_BLANK; - } - curlevel->map2[offset] = T_BLANK; - drawtile(screen,x,y); - } - } - printf("cleared level\n"); + clearlevel(); toggletimer = 30; } } @@ -371,7 +359,10 @@ int main (int argc, char **argv) { if (toggletimer == 0) { printf("Skipping to next level.\n"); curlevelnum++; - loadlevel(curworld,curlevelnum); + if (loadlevel(curworld,curlevelnum)) { + printf("creating new level\n"); + clearlevel(); + } draweditorlevel(); drawsprites(); toggletimer = 30; @@ -383,7 +374,10 @@ int main (int argc, char **argv) { if (curlevelnum > 1) { printf("Skipping to previous level.\n"); curlevelnum--; - loadlevel(curworld,curlevelnum); + if (loadlevel(curworld,curlevelnum)) { + printf("creating new level\n"); + clearlevel(); + } draweditorlevel(); drawsprites(); toggletimer = 30; @@ -517,22 +511,23 @@ void drawpalette(void) { area.w = TILEW; area.h = TILEH; for (tt = tiletype; tt != NULL; tt = tt->next) { - /* draw background */ - SDL_BlitSurface(bg->img[0], NULL, screen, &area); - /* draw tile */ - SDL_BlitSurface(tt->img[0], NULL, screen, &area); - /* draw selector box */ - if (seltile == tt) { - drawbox16(screen,area.x,area.y,area.x+area.w-1,area.y+area.h-1,&red,NULL); - drawbox16(screen,area.x+1,area.y+1,area.x+area.w-2,area.y+area.h-2,&red,NULL); + if (isplacabletile(tt->id)) { + /* draw background */ + SDL_BlitSurface(bg->img[0], NULL, screen, &area); + /* draw tile */ + SDL_BlitSurface(tt->img[0], NULL, screen, &area); + /* draw selector box */ + if (seltile == tt) { + drawbox16(screen,area.x,area.y,area.x+area.w-1,area.y+area.h-1,&red,NULL); + drawbox16(screen,area.x+1,area.y+1,area.x+area.w-2,area.y+area.h-2,&red,NULL); + } + /* move on to next position */ + area.x += TILEW; + if (area.x >= EDITORW) { + area.x = PALX; + area.y += TILEH; + } } - /* move on to next position */ - area.x += TILEW; - if (area.x >= EDITORW) { - area.x = PALX; - area.y += TILEH; - } - } SDL_UpdateRect(screen, PALX,PALY,PALW,PALH); @@ -545,28 +540,30 @@ void drawpalette(void) { for (p = 0; p < MAXPTYPES; p++) { SDL_Surface *firstimg; - /* select images */ - firstimg = imageset[p].img[F_WALK1]; - area.w = firstimg->w; - area.h = firstimg->h; - if (area.h > maxheight) maxheight = area.h; + if (isplacablesprite(p)) { + /* select images */ + firstimg = imageset[p].img[F_WALK1]; + area.w = firstimg->w; + area.h = firstimg->h; + if (area.h > maxheight) maxheight = area.h; - /* clear bg */ - drawbox16(screen,area.x,area.y,area.x+area.w,area.y+area.h,&black,&black); - /* draw sprite */ - SDL_BlitSurface(firstimg, NULL, screen, &area); - /* draw selector box */ - if (selsprite == p) { - drawbox16(screen,area.x,area.y, area.x+area.w-1,area.y+area.h-1,&red,NULL); - drawbox16(screen,area.x+1,area.y+1, area.x+area.w-2,area.y+area.h-2,&red,NULL); - } + /* clear bg */ + drawbox16(screen,area.x,area.y,area.x+area.w,area.y+area.h,&black,&black); + /* draw sprite */ + SDL_BlitSurface(firstimg, NULL, screen, &area); + /* draw selector box */ + if (selsprite == p) { + drawbox16(screen,area.x,area.y, area.x+area.w-1,area.y+area.h-1,&red,NULL); + drawbox16(screen,area.x+1,area.y+1, area.x+area.w-2,area.y+area.h-2,&red,NULL); + } - /* move to next position */ - area.x += area.w; - if (area.x >= EDITORW-TILEW) { - area.x = SPALX; - area.y += maxheight; - maxheight = 0; + /* move to next position */ + area.x += area.w; + if (area.x >= EDITORW-TILEW) { + area.x = SPALX; + area.y += maxheight; + maxheight = 0; + } } } @@ -582,7 +579,8 @@ int savelevel(int wnum, int lnum) { sprite_t *s; - sprintf(filename, "world%d/level%d.dat",wnum,lnum); + sprintf(filename,"world%d/%s",wnum,levelentry[lnum].filename); + f = fopen(filename,"wt"); if (!f) { printf("can't open level file\n"); @@ -646,3 +644,63 @@ int savelevel(int wnum, int lnum) { return 0; } + +void clearlevel(void) { + int offset,x,y; + + /* clear all sprites */ + while (sprite) { + killsprite(sprite); + } + + /* clear level */ + for (x = 0; x < LEVELW; x++) { + for (y = 0; y < LEVELH; y++) { + offset = y*LEVELW+x; + if ((x == 0) || (x == LEVELW-1)) { + curlevel->map[offset] = T_FULL; + } else if (y == LEVELH-1) { + curlevel->map[offset] = T_LAND; + } else { + curlevel->map[offset] = T_BLANK; + } + curlevel->map2[offset] = T_BLANK; + drawtile(screen,x,y); + } + } + + modified = B_TRUE; +} + +int isplacabletile(int tid) { + switch (tid) { + case T_TRAMPDOWN: + return B_FALSE; + } + return B_TRUE; +} + +int isplacablesprite(int sid) { + switch (sid) { + case P_SPEED: + case P_NUMNETS: + case P_BIGNET: + case P_CLOUD: + case P_SPIT: + case P_PUFF: + case P_BOXING: + case P_GLOVE: + case P_DIAMOND: + case P_FTODIAMOND: + case P_FTOGEM: + case P_BOMB: + case P_SHIELD: + case P_MACEPOWERUP: + case P_MACE: + case P_GEMRED: + case P_GEMYELLOW: + case P_GEMPURPLE: + return B_FALSE; + } + return B_TRUE; +} diff --git a/edit.h b/edit.h index 80f6cf9..968ddbc 100644 --- a/edit.h +++ b/edit.h @@ -21,4 +21,7 @@ void drawsprites(void); int savelevel(int wnum, int lnum); void cleanup(void); void usage(void); +void clearlevel(void); +int isplacabletile(int tid); +int isplacablesprite(int sid); diff --git a/globals.h b/globals.h index f834c07..53bb5c7 100644 --- a/globals.h +++ b/globals.h @@ -4,6 +4,9 @@ /* global variables */ int musicplaying; +levelentry_t levelentry[MAXLEVELS]; // level filenames etc + +SDL_Surface *levelbg; // level background image SDL_Surface *temps; // temporary surface SDL_Surface *screen; // the actual video screen sprite_t *sprite; // head of sprite linked list @@ -19,6 +22,8 @@ level_t *curlevel; // the current level's data int levelcomplete; // has the levle been finished? +int nexthurryup; // next hurryuptime for the level + int cheat; tiletype_t fakeblock; // used for returning tiletypes from a function @@ -37,6 +42,7 @@ int toggletimer; // used for toggling between fullscreen mode /* colours */ SDL_Color red; SDL_Color black; +SDL_Color blue; SDL_Color white; SDL_Color green; SDL_Color yellow; diff --git a/rc.c b/rc.c index 882eeba..6509bfa 100644 --- a/rc.c +++ b/rc.c @@ -70,6 +70,7 @@ sprite_t *lastsprite; SDL_Color red = {255, 0, 0, 0}; SDL_Color black = {0, 0, 0, 0}; +SDL_Color blue = {0, 0, 255, 0}; SDL_Color white = {255, 255, 255, 0}; SDL_Color green = {0, 255, 0, 0}; SDL_Color yellow = {255, 255, 0, 0}; @@ -89,6 +90,7 @@ int main (int argc, char **argv) { curlevelnum = 1; musicplaying = B_FALSE; cheat = B_FALSE; + levelbg = NULL; /* handle arguments */ if (argc >= 2) { @@ -130,7 +132,15 @@ int main (int argc, char **argv) { screen = SDL_SetVideoMode(640,480,16,SDL_SWSURFACE|SDL_DOUBLEBUF|vidargs); #endif + srand(time(NULL)); + if (loadimagesets()) { + printf("Error loading images.\n"); + return 1; + } + + if (loadlevellist()) { + printf("Error loading level list from levels.dat.\n"); return 1; } @@ -244,7 +254,7 @@ int main (int argc, char **argv) { if (keys[SDLK_q]) { - gtime = curlevel->hurryuptime -1; + gtime = nexthurryup-1; } if (keys[SDLK_n]) { if (toggletimer == 0) { @@ -287,19 +297,26 @@ int main (int argc, char **argv) { } } if (keys[SDLK_UP]) { - if (isonladder(player) || isladderabove(player)) { - player->y -= getspeed(player); - player->jumping = 0; - player->falling = 0; - player->climbing = B_TRUE; + //if (isonladder(player) || isladderabove(player)) { + if (player->climbing || isladderabove(player)) { + if (!player->netting && !player->slamming) { + player->y -= getspeed(player); + player->jumping = 0; + player->falling = 0; + player->climbing = B_TRUE; + player->moved = B_TRUE; + } } } if (keys[SDLK_DOWN]) { if (isonladder(player)) { - player->y += getspeed(player); - player->jumping = 0; - player->falling = 0; - player->climbing = B_TRUE; + if (!player->netting && !player->slamming) { + player->y += getspeed(player); + player->jumping = 0; + player->falling = 0; + player->climbing = B_TRUE; + player->moved = B_TRUE; + } } } if (keys[SDLK_x]) { @@ -323,14 +340,13 @@ int main (int argc, char **argv) { } else { whichway = 0; } - // TODO: change to splash - playfx(FX_JUMP); + playfx(FX_SPLASH); jump(player, whichway); } } } - } else { + } else { // not in water if (!player->jumping) { if (!player->falling) { if (isonground(player) || isonladder(player)) { @@ -342,9 +358,8 @@ int main (int argc, char **argv) { player->dropx = player->x / TILEW; player->dropy = player->y / TILEH; } - } else { + } else { // jumping int whichway; - player->climbing = B_FALSE; if (keys[SDLK_RIGHT]) { whichway = 1; } else if (keys[SDLK_LEFT]) { @@ -375,6 +390,28 @@ int main (int argc, char **argv) { player->slamangle = 0; player->netxstart = player->x - (player->img->w/2)*player->dir; player->netystart = player->y; + + /* handle boxing glove */ + if (player->powerup == PW_MACE) { + sprite_t *s; + int found; + // use existing mace if it is there + found = B_FALSE; + for (s = sprite; s ; s = s->next) { + if (s->id == P_MACE) { + s->x = player->x; + s->y = player->y - (imageset[P_PLAYER].img[F_SHOOT]->h / 2) + 5; + found = B_TRUE; + } + } + + if (!found) { + addsprite(P_MACE, player->x, + player->y - (imageset[P_PLAYER].img[F_SHOOT]->h / 2) + 5, + "mace"); + } + } + } } else { if (player->netcaught < player->netmax) { @@ -530,7 +567,7 @@ void tick(void) { /* check for hurryup*/ - if (gtime == curlevel->hurryuptime) { + if (gtime == nexthurryup) { if (!levelcomplete) { for (s = sprite; s; s = s->next) { if ((s != player) && (!isfruit(s->id))) { @@ -542,7 +579,7 @@ void tick(void) { stopmusic(); Mix_PlayChannel(CH_HURRYUP, sfx[FX_HURRYUP], 0); } - } else if (gtime == curlevel->hurryuptime + 10) { + } else if (gtime == nexthurryup + 10) { if (!levelcomplete) { addsprite(P_CLOUD, 320,240,"cloud"); addtext(320,240,TEXTSIZE_HURRY, "Too slow!", &red,HURRYDELAY); @@ -585,6 +622,8 @@ void tick(void) { void nextlevel(void) { char msg[SMALLBUFLEN]; + SDL_Surface *tempt; + int wid; // remove the player removesprite(player); @@ -616,9 +655,22 @@ void nextlevel(void) { /* reset level stats */ level->gotpowerup = B_FALSE; - sprintf(msg, " Level %02d-%02d ",curworld, curlevelnum); - addtext(318,242,32,msg,&black,LEVELDELAY); - addtext(320,240,32,msg,&green,LEVELDELAY); + sprintf(msg, "Level %d-%d",curworld, curlevelnum); + // calc width + tempt = TTF_RenderText_Solid(font[32], msg, black); + wid = tempt->w; + addtext(318,240-18+2,32,msg,&black,LEVELDELAY); + addtext(320,240-18,32,msg,&red,LEVELDELAY); + SDL_FreeSurface(tempt); + + + sprintf(msg, "%s", curlevel->name); + // calc width + tempt = TTF_RenderText_Solid(font[22], msg, black); + wid = tempt->w; + addtext(319,240+18+1,22,msg,&black,LEVELDELAY); + addtext(320,240+18,22,msg,&blue,LEVELDELAY); + SDL_FreeSurface(tempt); /* reset player stats */ player->netting = B_FALSE; @@ -635,7 +687,12 @@ void jump(sprite_t *s, int dir) { if (s->jumping) return; if (s->jumptimer) return; - if (isonground(s) || isinwater(s)) { + // can only jump up when climbing + if (s->climbing && (dir == 0)) { + return; + } + + if (isonground(s) || isinwater(s) || isonladder(s)) { if (ismonster(s->id)) { s->jumpdir = dir; if (s->jumpdir != 0) { @@ -648,12 +705,16 @@ void jump(sprite_t *s, int dir) { s->dir = s->jumpdir; } s->jumping = 1; - if (s->ontramp) { + if (s->climbing) { + s->jumpspeed = 3; + } else if (s->ontramp) { s->jumpspeed = 7; } else { s->jumpspeed = 5; } } + // stop climbing + player->climbing = B_FALSE; } } @@ -666,7 +727,7 @@ void die(sprite_t *s) { // 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; + nexthurryup = gtime + level->hurryuptime; if (curmusic == fastmusic) { playmusic(normalmusic); } @@ -1061,7 +1122,9 @@ void movesprite(sprite_t *s) { if (isonground(s)) { if ((!s->falling) && (!s->jumping)) { if (!s->climbing && !s->dropping) { - adjustheight(s); + if (!isonladder(s)) { + adjustheight(s); + } } } } @@ -1126,6 +1189,19 @@ void movesprite(sprite_t *s) { s->y = player->y - (player->img->h/2) + 5; s->dir = player->dir; } + } else if (s->id == P_MACE) { // mace slam effect + // dies when the player finishes slamming + if (!player->slamming) { + s->dead = D_FINAL; + } else { + double dist; + // keep it at the end of the slam + dist = (player->slamangle * (180/M_PI))/2; + + s->x = player->x + cos(player->slamangle-(180*(M_PI/180)))*dist*player->dir; + s->y = player->y + sin(player->slamangle-(180*(M_PI/180)))*dist + imageset[P_MACEPOWERUP].img[F_WALK1]->h/2; + s->dir = player->dir; + } } else if (s->id == P_RAT) { if (!s->falling) { int move = B_FALSE; @@ -1517,7 +1593,7 @@ void movesprite(sprite_t *s) { if ((s->img->h <= 3) || (s->img->w <= 3)) { s->dead = D_FINAL; /* reset hurryup timer */ - gtime = 0; + nexthurryup = gtime + level->hurryuptime; } else { SDL_Surface *ts; /* get smaller */ @@ -1582,10 +1658,15 @@ void dotileeffects(sprite_t *s) { /* check where we are */ tt = gettileat(s->x,s->y-2,&tilex,&tiley); + + // teleporters if ((tt->id == T_TELEPORT) || (tt->id == T_TELEPORT2)) { if (s->id == P_PLAYER || ismonster(s->id)) { if (s->id != P_CLOUD) { - s->teleporting = 1; + if (!s->teleporting) { + playfx(FX_TELEPORT); + s->teleporting = 1; + } } } } @@ -2212,11 +2293,21 @@ int isonbridge(sprite_t *s) { return B_FALSE; } +int isladder(int tid) { + switch (tid) { + case T_LADDER: + case T_LADDERTOP: + return B_TRUE; + } + + return B_FALSE; +} + int isonladder(sprite_t *s) { tiletype_t *tthere; tthere = gettileat(s->x,s->y, NULL,NULL); - if ((tthere->id == T_LADDER) || (tthere->id == T_LADDERTOP)) { + if (isladder(tthere->id)) { return B_TRUE; } @@ -2312,7 +2403,8 @@ int isongroundpoint(sprite_t *s, int x,int y) { // when dropping, the tile you dropped from doesn't count // as "ground". - if (s->dropping && (tilex == s->dropx) && (tiley == s->dropy)) { + //if (s->dropping && (tilex == s->dropx) && (tiley == s->dropy)) { + if (s->dropping && (tiley == s->dropy)) { return B_FALSE; } @@ -2387,10 +2479,48 @@ void dogravity(sprite_t *s) { if (isbullet(s->id)) return; - if (isonladder(s) && !s->falling && !s->jumping) { + //if (isonladder(s) && !s->falling && !s->jumping) { + /* + if (isonladder(s) ) { s->falling = B_FALSE; return; } + */ + + // update water stats + if (isinwater(s)) { + if (!s->swimming) { + s->swimming = B_TRUE; + playfx(FX_SPLASH); + } + } else { + if (s->swimming) { + s->swimming = B_FALSE; + } + } + + if (s->climbing) { + int attop = B_FALSE; + // check if we are at the top of our ladder + //tt = gettileat(s->x, s->y - s->img->h-1,NULL,NULL); + + if (!isonladder(s)) { + attop = B_TRUE; + } + + if (isonground(s)) { + if (!isongroundpoint(s, s->x, s->y-1)) { + attop = B_TRUE; + } + } + + if (attop) { + s->climbing = B_FALSE; + } else { + // don't do any more checking + return; + } + } // handle jumps if (s->jumping) { @@ -2416,7 +2546,7 @@ void dogravity(sprite_t *s) { s->fallspeed = 0; } - } else { + } else { // not jumping if (isonground(s) ) { s->dropping = B_FALSE; s->falling = B_FALSE; @@ -2451,9 +2581,7 @@ void dogravity(sprite_t *s) { } } } - } - - if (s->slamming) { + } else if (s->slamming) { int netx; double dist; int hitwall = B_FALSE; @@ -2473,12 +2601,47 @@ void dogravity(sprite_t *s) { int pointsinc = 250; int psize = 6; int gotsomething = B_FALSE; + int macex,macey; s->slamming = 0; /* reset fruit type counter */ curfruittype = 0; + // if we have a mace, add an explosion and play a thump sound + if (player->powerup == PW_MACE) { + // play sound + playfx(FX_MACE); + + // find location of mace + for (s2 = sprite; s2 ; s2 = s2->next) { + if (s2->id == P_MACE) { + break; + } + } + + if (!s2) { + // should never happen + macex = 0; + macey = 0; + } else { + int xx,yy; + macex = s2->x; + macey = s2->y - s2->img->h/2; + + // add explosion + puffin(-1, macex, macey, "nothing", 0); + for (yy = 0; yy < MACEEXPY; yy++) { + for (xx = 0; xx < MACEEXPX; xx++) { + puffin(-1, macex+xx*TILEW, macey-yy*TILEH, "nothing", 0); + puffin(-1, macex-xx*TILEW, macey-yy*TILEH, "nothing", 0); + } + } + } + } + + + /* kill anything we've caught */ for (s2 = sprite; s2 ; s2 = s2->next) { /* kill anything we have caught */ @@ -2507,29 +2670,50 @@ void dogravity(sprite_t *s) { } } - /* kill anything we hit */ - for (s2 = sprite; s2 ; s2 = s2->next) { - if ((s2->caughtby != s) && (!s2->dead) && (ismonster(s2->id))) { - xdiff = s2->x - xnet; - if (xdiff < 0) xdiff =-xdiff; - ydiff = (s2->y - s2->img->h/2) - ynet; - if (ydiff < 0) ydiff =-ydiff; + // if we have a powerup, centre of net is the mace position + if (player->powerup == PW_MACE) { + xnet = macex; + ynet = macey; + } - if ((xdiff <= s2->img->w) && (ydiff <= s2->img->h)) { - if (s2->id != P_CLOUD) { - /* dies and becomes a powerup */ - s2->willbecome = poweruptypes[curpoweruptype]; - if (poweruptypes[++curpoweruptype] == -1) { - curpoweruptype = 0; - } - die(s2); - pointsinc *= 2; - psize += 10; - gotsomething++; + // only check for hitting something if we already had a monster caught, + // or we have a mace + if (gotsomething || (player->powerup == PW_MACE)) { + /* kill anything we hit */ + for (s2 = sprite; s2 ; s2 = s2->next) { + if ((s2->caughtby != s) && (!s2->dead) && (ismonster(s2->id))) { + int xthresh,ythresh; + + xdiff = s2->x - xnet; + if (xdiff < 0) xdiff =-xdiff; + ydiff = (s2->y - s2->img->h/2) - ynet; + if (ydiff < 0) ydiff =-ydiff; + + if (player->powerup == PW_MACE) { + xthresh = TILEW*MACEEXPX*2; + ythresh = TILEW*MACEEXPY*2; + } else { + xthresh = s2->img->w; + ythresh = s2->img->h; } - } + if ((xdiff <= xthresh) && (ydiff <= ythresh)) { + if (s2->id != P_CLOUD) { + /* dies and becomes a powerup */ + s2->willbecome = poweruptypes[curpoweruptype]; + if (poweruptypes[++curpoweruptype] == -1) { + curpoweruptype = 0; + } + die(s2); + pointsinc *= 2; + psize += 10; + + gotsomething++; + } + } + + } } } if (gotsomething >= 1) { @@ -2563,8 +2747,8 @@ void dogravity(sprite_t *s) { s->score += pointsinc; } - } - } + } // end if slamangle > 180degrees + } // end if slamming } @@ -2678,9 +2862,14 @@ int dofruiteffect(sprite_t *s) { sprintf(tempm, "Big net!"); addtext(s->x,s->y - s->img->h/2, TEXTSIZE_POINTS, tempm,&white,POINTSDELAY); return B_TRUE; + } else if (s->id == P_MACEPOWERUP) { + playfx(FX_POWERUP); + player->powerup = PW_MACE; + sprintf(tempm, "Mace Slam!"); + addtext(s->x,s->y - s->img->h/2, TEXTSIZE_POINTS, tempm,&white,POINTSDELAY); + return B_TRUE; } else if (s->id == P_BOXING) { playfx(FX_POWERUP); - //player->netbig = B_TRUE; player->powerup = PW_BOXING; sprintf(tempm, "Boxing Glove!"); addtext(s->x,s->y - s->img->h/2, TEXTSIZE_POINTS, tempm,&white,POINTSDELAY); @@ -2705,6 +2894,12 @@ int dofruiteffect(sprite_t *s) { return B_TRUE; } else if (s->id == P_FTOGEM) { sprite_t *s2, *nexts; + int howmany; + int puffdelay; + int gemtype = P_GEMYELLOW; + int xx; + tiletype_t *tt; + // convert all flowers to gems playfx(FX_MORPH); sprintf(tempm, "Make gems!"); @@ -2719,6 +2914,44 @@ int dofruiteffect(sprite_t *s) { sprintf(s2->name, "made_gem"); } } + + // and also make a stream of gems underneath us + howmany = (STREAMWID+1)*3; + // RIGHT + puffdelay = 0; + for (xx = s->x+TILEW; xx < s->x + (TILEW*howmany); xx += TILEW) { + // if on a wall, exit + tt = gettileat(xx,s->y-TILEH,NULL,NULL); + if (tt->solid) { + break; + } + switch (puffdelay % 3) { + case 0: gemtype = P_GEMYELLOW; break; + case 1: gemtype = P_GEMRED; break; + case 2: gemtype = P_GEMPURPLE; break; + } + /* create a gem */ + puffin(gemtype, xx, s->y, "gem", puffdelay); + + puffdelay += 1; + } + // LEFT + puffdelay = 0; + for (xx = s->x+TILEW; xx > s->x - (TILEW*howmany); xx -= TILEW) { + // if on a wall, exit + tt = gettileat(xx,s->y-TILEH,NULL,NULL); + if (tt->solid) { + break; + } + switch (puffdelay % 3) { + case 0: gemtype = P_GEMYELLOW; break; + case 1: gemtype = P_GEMRED; break; + case 2: gemtype = P_GEMPURPLE; break; + } + /* create a gem */ + puffin(gemtype, xx, s->y, "gem", puffdelay); + puffdelay += 1; + } return B_TRUE; } else if (s->id == P_BOMB) { sprite_t *s2, *nexts; @@ -2781,9 +3014,6 @@ int dofruiteffect(sprite_t *s) { } /* create a flower */ puffin(flowertogem(s->id), xx, s->y, "flower", puffdelay); - //ss = addsprite(P_PUFF, xx,s->y,"puff", B_FALSE); - //ss->timer1 = -puffdelay; - //ss->timer3 = flowertogem(s->id); puffdelay += 1; } @@ -2796,9 +3026,6 @@ int dofruiteffect(sprite_t *s) { break; } puffin(flowertogem(s->id), xx, s->y, "flower", puffdelay); - //ss = addsprite(P_PUFF, xx,s->y,"puff", B_FALSE); - //ss->timer1 = -puffdelay; - //ss->timer3 = flowertogem(s->id); puffdelay += 1; } playfx(FX_BONUS); @@ -2822,7 +3049,8 @@ void usage(void) { int canmove(sprite_t *pl) { if (!pl->jumping && !pl->slamming ) { if (!pl->netting) { - if (!isonladder(pl) || pl->falling || isonground(pl)) { + //if (!isonladder(pl) || pl->falling || isonground(pl)) { + if ( pl->climbing || pl->falling || isonground(pl)) { return B_TRUE; } } else if (pl->netting && pl->falling) { // netting and falling @@ -2879,6 +3107,9 @@ int initsound(void) { loadfx(FX_MORPH, "morph.wav"); loadfx(FX_BOOM, "boom.wav"); loadfx(FX_SPRING, "spring.wav"); + loadfx(FX_TELEPORT, "teleport.wav"); + loadfx(FX_SPLASH, "splash.wav"); + loadfx(FX_MACE, "mace.wav"); // load sound effects @@ -2981,8 +3212,7 @@ SDL_Surface *grabbehind(sprite_t *s, SDL_Surface *surf) { // returns a random powerup int randompowerup(void) { int num; - num = rand() % 8; - + num = rand() % 9; switch (num) { case 0: @@ -3002,6 +3232,8 @@ int randompowerup(void) { return P_BOMB; case 7: return P_SHIELD; + case 8: + return P_MACEPOWERUP; } } diff --git a/rc.h b/rc.h index 2504bd8..0a1ed38 100644 --- a/rc.h +++ b/rc.h @@ -45,3 +45,4 @@ int randompowerup(void); void dumpsprites(void); void countmonsters(void); int getpoints(int id); +int isladder(int tid); diff --git a/shared.c b/shared.c index 69ce390..38fc0c6 100644 --- a/shared.c +++ b/shared.c @@ -48,6 +48,16 @@ int loadlevel(int wnum, int lnum) { printf("Loading level %d-%d...",wnum,lnum); + sprintf(filename,"world%d/%s",wnum,levelentry[lnum].filename); + //filename = levelentry[lnum].filename; + + //sprintf(filename, "world%d/level%d.dat",wnum,lnum); + f = fopen(filename,"rt"); + if (!f) { + printf("can't open level file %s\n",filename); + return B_TRUE; + } + // remember exit direction for current level // before loading the new one. if (level) { @@ -62,10 +72,17 @@ int loadlevel(int wnum, int lnum) { if (level->animtiles) free(level->animtiles); level->id = 0; - sprintf(level->name, "Level %d-%d",wnum,lnum); + //sprintf(level->name, "Level %d-%d",wnum,lnum); + sprintf(level->name, "\"%s\"",levelentry[lnum].desc); level->prev = NULL; level->next = NULL; + /* load background image */ + // TODO: read this from the level file rather than hardcoding + if (levelbg) SDL_FreeSurface(levelbg); + + levelbg = IMG_Load("backgrounds/forest.png"); + /* default */ level->hurryuptime = 30; if (cheat) { @@ -77,12 +94,6 @@ int loadlevel(int wnum, int lnum) { level->powerupy = -1; - sprintf(filename, "world%d/level%d.dat",wnum,lnum); - f = fopen(filename,"rt"); - if (!f) { - printf("can't open level file\n"); - return B_TRUE; - } /* clear tiletype linked list */ @@ -294,7 +305,7 @@ printf("got %d monsters\n", numenemies); case D_RIGHT: printf("RIGHT"); break; case D_LEFT: - printf("LEFT"); break; + printf("lEFT"); break; case D_UP: printf("UP"); break; case D_DOWN: @@ -649,6 +660,7 @@ printf("got %d monsters\n", numenemies); } gtime = 0; + nexthurryup = level->hurryuptime; printf("Done.\n"); /* @@ -667,6 +679,7 @@ void setdefaults(sprite_t *s) { s->speed = 1; s->teleporting = 0; s->climbing = 0; + s->powerup = 0; s->jumping = 0; s->jumpspeed = 0; s->jumpdir = 1; @@ -1092,6 +1105,12 @@ int loadimagesets(void) { loadspriteimage(P_SHIELD,F_WALK1, "sprites/shield.png"); imageset[P_SHIELD].numimages = 1; + loadspriteimage(P_MACEPOWERUP,F_WALK1, "sprites/macepowerup.png"); + imageset[P_MACEPOWERUP].numimages = 1; + + loadspriteimage(P_MACE,F_WALK1, "sprites/mace.png"); + imageset[P_MACE].numimages = 1; + for (i = 0; i < PUFFFRAMES; i++) { char name[SMALLBUFLEN]; sprintf(name, "sprites/puff%d.png",i); @@ -1214,6 +1233,8 @@ void drawsprite(sprite_t *s) { } } else if (s->id == P_GLOVE) { frame = F_WALK1; + } else if (s->id == P_MACE) { + frame = F_WALK1; } } else if (s->dead) { if (s == player) { @@ -1224,7 +1245,16 @@ void drawsprite(sprite_t *s) { } else if (s->caughtby) { frame = F_CAUGHT; } else if (s->climbing) { - frame = F_CLIMB1 + ((timer/12) % 2); + //frame = F_CLIMB1 + ((timer/12) % 2); + if (s->moved) { + if ((timer/12) % 2 == 0) { + frame = F_CLIMB1; + } else { + frame = F_CLIMB2; + } + } else { + frame = F_CLIMB1; + } } else if (s->netting) { frame = F_SHOOT; } else if (s->jumping) { @@ -1420,6 +1450,7 @@ int isfruit(int id) { case P_HELP: /* random powerups */ case P_BOXING: + case P_MACEPOWERUP: case P_FTODIAMOND: case P_FTOGEM: case P_BOMB: @@ -1451,6 +1482,7 @@ int iseffect(int id) { if (id == P_PUFF) return B_TRUE; if (id == P_POWERUPPOS) return B_TRUE; if (id == P_GLOVE) return B_TRUE; + if (id == P_MACE) return B_TRUE; return B_FALSE; } @@ -1669,11 +1701,12 @@ void drawtile(SDL_Surface *where, int x, int y) { area.x = x * TILEW; area.y = y * TILEH; - area.w = 0; - area.h = 0; + area.w = TILEW; + area.h = TILEH; /* draw blank tile first */ tt = gettile(curlevel->bgtileid); - SDL_BlitSurface(tt->img[0], NULL, where, &area); + //SDL_BlitSurface(tt->img[0], NULL, where, &area); + SDL_BlitSurface(levelbg, &area, where, &area); /* now draw real one */ offset = y*LEVELW+x; @@ -1709,6 +1742,7 @@ void initglobals(void) { /* colours */ red.r = 255; red.g = 0; red.b = 0; black.r = 0; black.g = 0; black.b = 0; + blue.r = 0; blue.g = 0; blue.b = 255; white.r = 255; white.g = 255; white.b = 255; green.r = 0; green.g = 255; green.b = 0; yellow.r = 255; yellow.g = 255; yellow.b = 0; @@ -1853,3 +1887,41 @@ int getpoints(int id) { return points; } + + +int loadlevellist(void) { + int lev; + FILE *f; + char buf[BUFLEN]; + char *p; + + f = fopen("levels.dat","r"); + // format is: + // + // dummy,filename,description, + lev = 1; + fgets(buf, BUFLEN, f); + while (!feof(f)) { + p = strtok(buf, ","); + p = strtok(NULL, ","); + if (!p) { + printf("invalid level filename - line %d\n",lev); + return B_TRUE; + } + levelentry[lev].filename = strdup(p); + p = strtok(NULL, ","); + if (!p) { + printf("invalid level description - line %d\n",lev); + return B_TRUE; + } + p[strlen(p)-1] = '\0'; // strip newline + levelentry[lev].desc = strdup(p); + lev++; + fgets(buf, BUFLEN, f); + } + fclose(f); + + printf("Read %d levels.\n",lev); + + return B_FALSE; +} diff --git a/shared.h b/shared.h index 28e71f8..6c7d5a6 100644 --- a/shared.h +++ b/shared.h @@ -37,5 +37,6 @@ int ismonster(int id); void puffin(int willbecome, int x, int y, char *name, int delay); SDL_Surface *loadspriteimage(int spriteid, int frame, char *filename); int getpoints(int id); +int loadlevellist(void); #endif diff --git a/sounds/mace.wav b/sounds/mace.wav new file mode 100644 index 0000000..4e586ed Binary files /dev/null and b/sounds/mace.wav differ diff --git a/sounds/teleport.wav b/sounds/teleport.wav new file mode 100644 index 0000000..ce65f8e Binary files /dev/null and b/sounds/teleport.wav differ diff --git a/sprites/boxing.jpg b/sprites/boxing.jpg deleted file mode 100644 index 01557ff..0000000 Binary files a/sprites/boxing.jpg and /dev/null differ diff --git a/sprites/boxing.png b/sprites/boxing.png index c37172b..70355ff 100644 Binary files a/sprites/boxing.png and b/sprites/boxing.png differ diff --git a/world1/level1.dat b/world1/level1.dat index acdb4e2..14a05e1 100644 --- a/world1/level1.dat +++ b/world1/level1.dat @@ -33,9 +33,9 @@ exitdir 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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,18,19,0,0,0,0,0,0,0,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,18,19,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,0,0,0,0,0,0,0,0,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/level10.dat b/world1/level10.dat index 1e61bb0..a7d9ba3 100644 --- a/world1/level10.dat +++ b/world1/level10.dat @@ -57,7 +57,7 @@ exitdir 1 4,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,1,1,1,1,1,27,27,27,27,27,27,4, 4,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,1,4,4,4,4,4,27,27,27,27,27,27,4, 4,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,1,4,4,4,4,4,4,27,27,27,27,27,27,4, -4,27,27,27,27,27,27,1,1,1,27,27,27,27,27,27,27,27,27,27,27,1,1,1,1,4,4,4,4,4,4,4,4,27,27,27,27,27,27,4, +4,27,27,27,27,27,27,1,1,1,27,27,27,27,27,27,27,27,27,27,27,1,1,1,1,1,4,4,4,4,4,4,4,27,27,27,27,27,27,4, 4,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,4, 4,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,4, 1,1,1,1,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,1,1,1,1, diff --git a/world1/level2.dat b/world1/level2.dat index 86400dd..27a8278 100644 --- a/world1/level2.dat +++ b/world1/level2.dat @@ -26,7 +26,7 @@ Y 20 4 endmonsters exitdir 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,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,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,0,0,0,0,0,0,0,0,0,0,0,4, 4,4,4,4,4,4,4,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,0,0,0,0,0,0,0,0,0,0,0,4, 4,4,4,4,4,4,4,27,27,27,27,27,27,1,1,27,27,27,27,27,27,27,27,27,27,27,27,27,0,0,0,0,0,0,0,0,0,0,0,4, @@ -55,3 +55,4 @@ exitdir 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, +layer2 diff --git a/world1/level3.dat b/world1/level3.dat index beb14ca..da87002 100644 --- a/world1/level3.dat +++ b/world1/level3.dat @@ -8,6 +8,7 @@ But don't fall on them! endhelp monsters 1 4 27 +! 20 15 r 19 15 r 5 7 r 35 7 @@ -31,12 +32,11 @@ r 4 23 @ 2 23 ? 10 19 ? 16 19 -! 20 15 endmonsters exitdir -2 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,18,23,23,23,23,19,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, @@ -49,7 +49,7 @@ exitdir -2 4,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,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,18,23,19,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,1,1,1,1,1,1,1,1,1,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, @@ -64,3 +64,4 @@ exitdir -2 4,0,0,0,0,0,0,0,0,0,6,11,11,5,0,0,0,0,0,0,0,0,0,0,0,0,6,11,11,5,0,0,0,0,0,0,0,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,1,1,1,1,1,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,1,4,4,4,4, +layer2 diff --git a/world1/level4.dat b/world1/level4.dat index 9d40565..49319ea 100644 --- a/world1/level4.dat +++ b/world1/level4.dat @@ -6,7 +6,7 @@ help Drop through bridges with Down+X endhelp monsters -1 4 27 +! 20 8 r 10 4 r 11 12 r 33 12 @@ -32,25 +32,25 @@ Y 6 24 P 8 4 @ 26 8 ? 21 8 -! 20 8 +1 24 8 endmonsters exitdir 1 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,18,23,19,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,20,20,21,21,21,21,21,21,21,21,20,20,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,18,19,0,0,0,0,0,0,0,0,0,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,20,20,21,21,21,21,21,21,21,21,20,20,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,18,19,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,20,20,20,20,20,20,20,20,20,20,20,20,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, @@ -65,3 +65,4 @@ exitdir 1 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, +layer2 diff --git a/world1/level5.dat b/world1/level5.dat index 49579d4..b2d8316 100644 --- a/world1/level5.dat +++ b/world1/level5.dat @@ -46,7 +46,7 @@ exitdir -2 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,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,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, diff --git a/world1/level6.dat b/world1/level6.dat index eb15ebe..0a3973a 100644 --- a/world1/level6.dat +++ b/world1/level6.dat @@ -49,7 +49,7 @@ exitdir -2 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,1,1,1,1,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,18,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18,19,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,5,0,0,0,0,5,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,1,9,9,9,9,1,1,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 0b2331a..600f347 100644 --- a/world1/level7.dat +++ b/world1/level7.dat @@ -29,19 +29,19 @@ a 4 8 endmonsters exitdir 1 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,18,19,0,0,0,0,0,0,0,0,0,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,18,23,19,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,18,19,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,18,23,23,19,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,0,0,0,0,0,0,0,0,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,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,0,0,0,0,0,0,0,0,0,0,0,4, 4,0,0,0,7,0,0,0,0,0,0,0,0,0,0,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,7,0,0,0,0,0,0,0,0,0,0,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,0,0,0,0,0,0,0,0,4, 4,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,24,24,24,24,24,24,24,24,24,24,24,24,0,0,0,0,0,0,0,0,0,0,4, -4,0,18,19,7,0,0,0,0,0,0,0,0,0,0,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,7,0,0,0,0,0,0,0,0,0,0,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,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,4, 4,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,4, 4,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,4, diff --git a/world1/level8.dat b/world1/level8.dat index 38a0e42..515aa60 100644 --- a/world1/level8.dat +++ b/world1/level8.dat @@ -5,7 +5,6 @@ endmaps help endhelp monsters -1 22 15 ! 20 12 @ 11 5 @ 12 9 @@ -47,11 +46,12 @@ r 10 12 r 29 12 r 6 15 r 31 15 +1 20 12 endmonsters exitdir 2 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,18,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,19,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, diff --git a/world1/level99.dat b/world1/level99.dat index 03c7fe7..44f978c 100644 --- a/world1/level99.dat +++ b/world1/level99.dat @@ -7,19 +7,13 @@ endhelp monsters 1 15 12 ! 3 12 -Y 10 12 -@ 17 17 P 25 21 -Y 13 12 -Y 11 12 -Y 12 12 -@ 18 17 -@ 15 17 -@ 16 17 P 24 21 P 23 21 P 26 21 r 37 3 +r 20 6 +r 9 6 endmonsters exitdir 1 17,17,17,17,17,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,4, @@ -28,29 +22,35 @@ exitdir 1 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,1,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,1,1,1,1,1,1,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,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,0,0,0,0,0,0,0,0,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,17,17,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,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,1,1,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,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,20,20,20,20,20,20,20,20,20,20,20,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,15,15,15,15,15,15,15,1,16,16,16,16,16,16,1,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,15,15,15,15,15,15,15,1,15,15,15,15,15,15,1,0,0,0,0,20,20,20,20,20,20,20,20,20,20,20,0,0,0,0,0,0,0,0,4, -4,15,15,15,15,15,15,15,1,15,15,15,15,15,15,1,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,15,15,15,15,15,15,15,1,15,15,15,15,15,15,1,0,11,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,0,0,1,0,0,0,0,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,1,1,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,7,0,0,0,7,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,7,0,0,0,7,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,7,0,0,0,7,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,7,0,0,0,7,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,7,0,0,0,7,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,20,20,20,20,20,20,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,0,1,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,7,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,7,0,0,0,7,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,7,0,0,0,7,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,7,0,0,0,7,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,7,0,0,0,7,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,7,0,0,0,7,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,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,15,15,15,15,15,15,15,1,16,16,16,16,16,16,1,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,15,15,15,15,15,15,15,1,15,15,15,15,15,15,1,0,7,0,0,20,20,20,20,20,20,20,20,20,20,20,0,0,0,0,0,0,0,0,4, +4,15,15,15,15,15,15,15,1,15,15,15,15,15,15,1,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,15,15,15,15,15,15,15,1,15,15,15,15,15,15,1,0,7,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,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,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, 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,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, layer2 +19,6,1 +22,6,1 +13,7,8 +17,7,8 +13,13,8 +17,13,8 11,24,11 diff --git a/world1/toohard/level9.dat b/world1/toohard/level9.dat deleted file mode 100644 index c3a8d1a..0000000 --- a/world1/toohard/level9.dat +++ /dev/null @@ -1,67 +0,0 @@ -tileset green -bg 0 -hurryup 60 -endmaps -help -endhelp -monsters -1 1 2 -r 33 7 -r 13 10 -@ 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 -r 11 18 -C 9 28 -S 30 5 -S 30 5 -S 30 5 -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,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,5,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,15,15,15,15,15,15,15,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,1,1,1,1,1,1,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,4,0,0,0,0,4,15,15,15,15,15,15,4, -4,4,4,7,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,15,15,15,15,15,15,4,0,0,0,0,4,15,15,15,15,15,15,4, -4,4,4,7,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,15,15,15,15,15,15,4,12,0,0,0,4,15,15,15,15,15,15,4, -4,4,4,8,1,1,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,15,15,15,15,15,15,4,13,0,0,0,4,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,16,16,4,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,