diff --git a/defs.h b/defs.h index 5d81cbf..5601c7d 100644 --- a/defs.h +++ b/defs.h @@ -70,6 +70,10 @@ #define LEVELH 30 // level height (in tiles) +// ice effect +#define ICE_NONE 0 +#define ICE_INPROGRESS 1 +#define ICE_COMPLETE 2 // Game mechanics @@ -79,6 +83,9 @@ #define NETSPEED 9 // how fast the player's net moves #define POWERUPTIME 15 // # secs before a powerup appears +#define ICESPEED 2 // how fast a level turns to ice + + #define BELLTIME 20 // how long the bell flash lasts #define CLOCKTIME 10 // how many seconds a clock lasts @@ -117,7 +124,7 @@ /* enums */ /* sounds */ -#define MAXFX 24 +#define MAXFX 26 #define FX_SHOOT 0 #define FX_SLAM 1 #define FX_KILL 2 @@ -142,6 +149,8 @@ #define FX_BELL 21 #define FX_CLOCK 22 #define FX_ARMOR 23 +#define FX_FREEZE 24 +#define FX_ICEBREAK 25 // Slope types #define S_NOTSOLID 0 @@ -149,7 +158,7 @@ #define S_SLOPE 2 // Sprite types -#define MAXPTYPES 43 +#define MAXPTYPES 44 #define P_PLAYER 0 #define P_RAT 1 #define P_CHEESE 2 @@ -193,6 +202,7 @@ #define P_SPARKLE 40 #define P_BELL 41 #define P_CLOCK 42 +#define P_SNOWMAN 43 // powerups #define PW_NONE 0 @@ -233,6 +243,11 @@ #define LV_NEXTLEV 4 // end of delay, nextlevel() in 5 seconds #define LV_GAMEOVER 6 // No lives left. +// movement types +#define MV_NONE 0 // didn't move +#define MV_WALK 1 // walked/climbed on purpose +#define MV_ICE 3 // slid on ice + // Tile types #define T_BLANK 0 @@ -255,6 +270,8 @@ #define T_BRIDGE 17 // like land but you can drop down through it #define T_TRAMPUP 18 #define T_TRAMPDOWN 19 +#define T_ICETOP 20 // slippery +#define T_ICE 21 // slippery // death states #define D_INITIAL (1) // Need to trigger death sequence @@ -343,6 +360,7 @@ typedef struct level_s { initialmonster_t initm[MAXMONSTERSPERLEVEL]; int hurryuptime; int poweruptime; + int icey,iced; // for ice powerups } level_t; level_t *level; @@ -390,6 +408,8 @@ typedef struct sprite_s { int hasbell; // got a bell ? // monster only + int iced; // turned to ice? + SDL_Surface *iceimg; // Image to blit for ice int willbecome; // what fruit this will become when dead int angry; // is this sprite in ANGRY mode for its AI? struct sprite_s *caughtby; // who has us in their net? NULL if nobody @@ -440,7 +460,7 @@ imageset_t imageset[MAXPTYPES]; /* external globals */ extern SDL_Color black; -extern SDL_Surface *screen, *temps, *levelbg, *head, *headsmall; +extern SDL_Surface *screen, *temps, *levelbg, *head, *headsmall, *icecube; extern sprite_t *sprite, *lastsprite, *player; extern level_t *curlevel; extern tiletype_t fakeblock; diff --git a/globals.h b/globals.h index 74c5546..6fb8ba0 100644 --- a/globals.h +++ b/globals.h @@ -11,6 +11,7 @@ SDL_Surface *levelbg; // level background image SDL_Surface *temps; // temporary surface SDL_Surface *screen; // the actual video screen SDL_Surface *head,*headsmall; // img in corner showing number of lives +SDL_Surface *icecube; // overlaid on frozen monsters 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 diff --git a/green.tiles b/green.tiles index adb89b4..7fca450 100644 --- a/green.tiles +++ b/green.tiles @@ -199,10 +199,21 @@ solid 0 file newtiles/signdown.png end - tile trampolinedown id 19 solid 2 file newtiles/trampdown.png lowness 9,9,8,8,8,8,8,8,8,8,8,8,8,8,9,9 end + +tile icetop +id 20 +solid 1 +file newtiles/icetop.png +end + +tile ice +id 21 +solid 1 +file newtiles/ice.png +end diff --git a/newtiles/ice.png b/newtiles/ice.png new file mode 100644 index 0000000..1aa0882 Binary files /dev/null and b/newtiles/ice.png differ diff --git a/newtiles/icetop.png b/newtiles/icetop.png new file mode 100644 index 0000000..09e870a Binary files /dev/null and b/newtiles/icetop.png differ diff --git a/rc.c b/rc.c index 2be931e..9148b49 100644 --- a/rc.c +++ b/rc.c @@ -255,7 +255,7 @@ int main (int argc, char **argv) { /* check for death & update movement status*/ for (s = sprite ; s ; s = nextsprite) { - s->moved = B_FALSE; + s->moved = MV_NONE; nextsprite = s->next; if (s->dead == D_FINAL) { if (s == player) { @@ -291,6 +291,11 @@ int main (int argc, char **argv) { addoutlinetext(320,240,TEXTSIZE_LEVEL,"Level Complete!",&green,&black,LEVELWINDELAY); levelcomplete = LV_WAIT; playfx(FX_WINLEVEL); + // turn off clock powerup + if (player->powerup == PW_CLOCK) { + Mix_ResumeMusic(); + player->powerup = B_FALSE; + } } else if (levelcomplete == LV_WAIT) { int mcount = 0; sprite_t *s2; @@ -387,7 +392,7 @@ int main (int argc, char **argv) { player->jumping = 0; player->falling = 0; player->climbing = B_TRUE; - player->moved = B_TRUE; + player->moved = MV_WALK; } } } @@ -398,7 +403,7 @@ int main (int argc, char **argv) { player->jumping = 0; player->falling = 0; player->climbing = B_TRUE; - player->moved = B_TRUE; + player->moved = MV_WALK; } } } @@ -557,6 +562,11 @@ int main (int argc, char **argv) { } } + + // ice effect + if (curlevel->iced == ICE_INPROGRESS) { + doice(); + } } // move sprites @@ -571,14 +581,16 @@ int main (int argc, char **argv) { dogravity(player); dotileeffects(player); } else { - /* gravity */ - for (s = sprite ; s ; s = s->next) { - dogravity(s); - } + if (levelcomplete != LV_NEXTLEV) { + /* gravity */ + for (s = sprite ; s ; s = s->next) { + dogravity(s); + } - /* tile effects */ - for (s = sprite ; s ; s = s->next) { - dotileeffects(s); + /* tile effects */ + for (s = sprite ; s ; s = s->next) { + dotileeffects(s); + } } } @@ -736,6 +748,7 @@ void tick(void) { for (s = sprite; s; s = s->next) { if ((s != player) && (ismonster(s->id))) { s->angry = B_TRUE; + s->iced = B_FALSE; } } addoutlinetext(320,240,TEXTSIZE_HURRY, "Hurry up!", &yellow,&black,HURRYDELAY); @@ -824,6 +837,9 @@ void nextlevel(void) { playedbell = BELL_DONEFLASH; } + level->iced = ICE_NONE; + level->icey = -1; + sprintf(msg, "Level %d-%d",curworld, curlevelnum); addoutlinetext(320,240-18,TEXTSIZE_LEVEL,msg,&white,&black,LEVELDELAY); @@ -893,6 +909,9 @@ void jump(sprite_t *s, int dir) { playfx(FX_JUMP); } } + + adjustx(s, F_JUMP); + } } @@ -953,10 +972,21 @@ void die(sprite_t *s) { s2->angry = B_TRUE; } } + + // un-ice everything + if (s == player) { + for (s2 = sprite->next ; s2 ; s2 = s2->next) { + if (s2->iced) { + s2->iced = B_FALSE; + } + } + } + /* set death attribute */ s->dead = D_INITIAL; s->netting = 0; s->slamming = 0; + s->iced = 0; // check for level clear countmonsters(); @@ -1060,8 +1090,13 @@ void checkcollide(sprite_t *s) { addoutlinetext(s2->x,s2->y - s->img->h/2, TEXTSIZE_BIFF, tempm,&red,&yellow,POINTSDELAY); keepchecking = B_FALSE; + } else if (s2->iced) { + // it dies + playfx(FX_ICEBREAK); + die(s2); } else { // otherwise we caught it if we have enough nets + if (s->netcaught < s->netmax) { s2->caughtby = s; s2->jumping = B_FALSE; @@ -1107,7 +1142,12 @@ void checkcollide(sprite_t *s) { addoutlinetext(s2->x,s2->y - s2->img->h/2, TEXTSIZE_POINTS, tempm, &white,&black,POINTSDELAY); } } else if (ismonster(s2->id) || isbullet(s2->id)) { - if (!s->invuln) { + if (s2->iced) { + // monster dies + playfx(FX_ICEBREAK); + die(s2); + } else if (!s->invuln) { + // player dies die(s); } } @@ -1182,6 +1222,11 @@ void movesprite(sprite_t *s) { } } + // iced monsters can't move + if (ismonster(s->id) && s->iced) { + return; + } + /* timer */ if (s->doomcount) { s->doomcount--; @@ -1742,7 +1787,7 @@ void movesprite(sprite_t *s) { s->x += s->xs; s->y += s->ys; s->dir = absxs; - s->moved = B_TRUE; + s->moved = MV_WALK; } else if (s->id == P_SPIDER) { /* timer1 loopsfrom 0 - 45 @@ -1931,6 +1976,16 @@ void dotileeffects(sprite_t *s) { } } finished = B_TRUE; + } else if ((tt->id == T_ICE) || (tt->id == T_ICETOP)) { + if (s == player) { + if (player->powerup != PW_CLOCK) { + if (!s->moved) { + movex(s, s->dir*s->speed); + s->moved = MV_ICE; + } + } + } + finished = B_TRUE; } else if (tt->spikes) { if (!isfruit(s->id) && !iseffect(s->id) && !isbullet(s->id)) { if (!s->invuln) { @@ -2689,11 +2744,13 @@ int isonground(sprite_t *s) { return B_TRUE; } if ((s->dead) || (!s->falling && !s->dropping)) { - if (isongroundpoint(s, s->x + s->img->w/2, s->y)) { - return B_TRUE; - } - if (isongroundpoint(s, s->x - s->img->w/2, s->y)) { - return B_TRUE; + if (!s->swimming) { + if (isongroundpoint(s, s->x + s->img->w/2, s->y)) { + return B_TRUE; + } + if (isongroundpoint(s, s->x - s->img->w/2, s->y)) { + return B_TRUE; + } } } @@ -2793,7 +2850,7 @@ void dogravity(sprite_t *s) { if (s->dead) return; - if (s->flies) return; + if (s->flies && !s->iced) return; // ice cancels flying if (iseffect(s->id)) return; if (isbullet(s->id)) return; @@ -2806,11 +2863,17 @@ void dogravity(sprite_t *s) { } */ + // iced sprites can't jump + if (s->iced) { + s->jumping = B_FALSE; + } + // update water stats if (isinwater(s)) { if (!s->swimming) { s->swimming = B_TRUE; playfx(FX_SPLASH); + adjustx(s, F_SWIM1); } } else { if (s->swimming) { @@ -2885,6 +2948,12 @@ void dogravity(sprite_t *s) { } else { // not jumping if (isonground(s) ) { + if (s->falling && s->iced) { + // when an iced monster hits the ground, it smashes + s->willbecome = P_DIAMOND; + playfx(FX_ICEBREAK); + die(s); + } s->dropping = B_FALSE; s->falling = B_FALSE; s->climbing = B_FALSE; @@ -2893,7 +2962,7 @@ void dogravity(sprite_t *s) { s->fallspeed = 1; } s->falling = B_TRUE; - if (isinwater(s)) { + if (isinwater(s) && !s->iced) { s->y += (s->fallspeed/2); } else { s->y += s->fallspeed; @@ -3137,8 +3206,8 @@ int movex(sprite_t *s,double amt) { cury = s->y; /* check for blockage to E/W */ - //newx = s->x + (amtdir*(s->img->w/2)); - newx = s->x + (amtdir*TILEW/2); + newx = s->x + (amtdir*(s->img->w/2)) ; + //newx = s->x + (amtdir*TILEW/2); newy = cury-TILEH; tt2 = gettileat(newx,newy,&newtilex,&newtiley); if (tt2->solid == S_SOLID) { @@ -3179,7 +3248,7 @@ int movex(sprite_t *s,double amt) { s->x += amt; } - s->moved = B_TRUE; + s->moved = MV_WALK; // rings if (s == player) { @@ -3398,6 +3467,16 @@ int dofruiteffect(sprite_t *s) { // pause music Mix_PauseMusic(); return B_TRUE; + } else if (s->id == P_SNOWMAN) { + // ice + playfx(FX_FREEZE); + sprintf(tempm, "Blizzard!"); + addoutlinetext(s->x,s->y - s->img->h/2, TEXTSIZE_POINTS, tempm,&white,&black,POINTSDELAY); + if (!curlevel->iced) { + curlevel->iced = ICE_INPROGRESS; + curlevel->icey = 0; + } + return B_TRUE; } else if (s->id == P_BOMB) { sprite_t *s2, *nexts; @@ -3564,6 +3643,8 @@ int initsound(void) { loadfx(FX_BELL, "bell.wav"); loadfx(FX_CLOCK, "clock.wav"); loadfx(FX_ARMOR, "armor.wav"); + loadfx(FX_FREEZE, "freeze.wav"); + loadfx(FX_ICEBREAK, "icebreak.wav"); // load sound effects @@ -3741,3 +3822,82 @@ void addscore(sprite_t *s, int amt) { } } } + +void doice(void) { + int yy,xx,changed; + sprite_t *s; + + // just in case + if (!curlevel->iced) { + curlevel->iced = ICE_INPROGRESS; + } + // slowly change a level to ice + //if (timer % ICESPEED == 0) { + xx = 0; + for (yy = curlevel->icey; yy >= 0; yy--) { + // finished? + if ((xx == LEVELW-1) && (yy == LEVELH-1)) { + curlevel->iced = ICE_COMPLETE; + break; + } + // make sure tile is valid + if ((yy >= 0) && (yy < LEVELH) && (xx >= 0) && (xx < LEVELW)) { + changed = B_FALSE; + // if not already a second layer here... + if (curlevel->map2[yy*LEVELW+xx] == T_BLANK) { + // add ice layer + switch (curlevel->map[yy*LEVELW+xx] ) { + case T_FULL: + curlevel->map2[yy*LEVELW+xx] = getuniq(T_ICE); + changed = B_TRUE; + break; + case T_LAND: + curlevel->map2[yy*LEVELW+xx] = getuniq(T_ICETOP); + changed = B_TRUE; + break; + } + if (changed) { + drawtile(temps, xx, yy); + } + } + } + xx++; + if (xx >= LEVELW) break; + } + + // ice any monsters + for (s = sprite; s ; s = s->next) { + if (ismonster(s->id)) { + if ((s->x <= (xx*TILEW)) && (s->y <= (curlevel->icey*TILEH))) { + if (!s->iced && !s->dead && !s->caughtby) { + // ice it! + s->iced = B_TRUE; + s->jumping = B_FALSE; + } + } + } + } + + // increase icey for next time + curlevel->icey++; +} + +void adjustx(sprite_t *s,int framenum) { + int newx,newy,diff; + tiletype_t *tt; + + diff = (imageset[s->id].img[framenum]->w - s->img->w) +1 ; + newy = s->y-TILEH; + // check RIGHT + newx = s->x + (s->img->w/2); + tt = gettileat(newx,newy,NULL,NULL); + if (tt->solid == S_SOLID) { + s->x -= diff; + } + // check LEFT + newx = s->x - (s->img->w/2); + tt = gettileat(newx,newy,NULL,NULL); + if (tt->solid == S_SOLID) { + s->x += diff; + } +} diff --git a/rc.h b/rc.h index 3d023e8..33ba472 100644 --- a/rc.h +++ b/rc.h @@ -30,6 +30,7 @@ void nextlevel(void); void jump(sprite_t *s, int dir); double getspeed(sprite_t *s ); void adjustheight(sprite_t *s); +void adjustx(sprite_t *s, int newframe); void tick(void); void usage(void); int canmove(sprite_t *pl); @@ -48,3 +49,5 @@ int getpoints(int id); int isladder(int tid); char *addcommas(char *buffer, int num); void addscore(sprite_t *s, int amt); +void doice(void); + diff --git a/shared.c b/shared.c index 6ebe2d6..b831c60 100644 --- a/shared.c +++ b/shared.c @@ -725,6 +725,11 @@ void setdefaults(sprite_t *s) { s->dead = 0; s->angry = 0; s->jumptimer = 0; + s->iced = B_FALSE; + if (s->iceimg) { + SDL_FreeSurface(s->iceimg); + s->iceimg = NULL; + } s->bullet = NULL; s->owner = NULL; @@ -795,6 +800,7 @@ sprite_t *addsprite(int id, int x, int y, char *name ) { } else { s->netbg = NULL; } + s->iceimg = NULL; setdefaults(s); @@ -812,6 +818,7 @@ sprite_t *addsprite(int id, int x, int y, char *name ) { } #endif + s->next = NULL; lastsprite = s; @@ -1015,6 +1022,7 @@ int loadimagesets(void) { head = IMG_Load("sprites/dwarfhead.png"); headsmall = IMG_Load("sprites/dwarfhead-small.png"); + icecube = IMG_Load("sprites/icecube.png"); loadspriteimage(P_PLAYER,F_WALK1, "sprites/pdwarf.png"); loadspriteimage(P_PLAYER,F_JUMP, "sprites/pdwarfjump.png"); @@ -1196,6 +1204,9 @@ int loadimagesets(void) { loadspriteimage(P_CLOCK,F_WALK1, "sprites/clock.png"); imageset[P_CLOCK].numimages = 1; + loadspriteimage(P_SNOWMAN,F_WALK1, "sprites/snowman.png"); + imageset[P_SNOWMAN].numimages = 1; + // puffs and mace smashes for (i = 0; i < PUFFFRAMES; i++) { char name[SMALLBUFLEN]; @@ -1373,6 +1384,8 @@ void drawsprite(sprite_t *s) { } } else if (s->netting) { frame = F_SHOOT; + } else if (s->iced) { + frame = F_WALK1; } else if (s->jumping) { frame = F_JUMP; } else if (s->falling) { @@ -1394,12 +1407,15 @@ void drawsprite(sprite_t *s) { if ((s->id == P_SPIDER) && (s->ys != -99)) { frame = F_FALL; } else { - if (s->moved) { + // walking / sliding + if (s->moved == MV_WALK) { if ((timer/12) % 2 == 0) { frame = F_WALK1; } else { frame = F_JUMP; } + } else if (s->moved == MV_ICE) { + frame = F_FALL; } else { frame = F_WALK1; } @@ -1425,7 +1441,7 @@ void drawsprite(sprite_t *s) { /* spider's climbing web */ - if ((s->id == P_SPIDER) && ((s->ys != -99) || s->falling) && (!s->dead) && (!s->caughtby)) { + if ((s->id == P_SPIDER) && ((s->ys != -99) || s->falling) && !s->dead && !s->caughtby && !s->iced) { tiletype_t *tt; int x = s->x; int y = s->y - s->img->h/2; @@ -1453,13 +1469,29 @@ void drawsprite(sprite_t *s) { SDL_BlitSurface(s->img, NULL, screen, &area); } } else { + // draw the sprite SDL_BlitSurface(s->img, NULL, screen, &area); /* for opengl */ //SDL_UpdateRect(screen, area.x, area.y, area.w, area.h); } + + // ice cube + if (s->iced) { + if (!s->iceimg) { + double xmod,ymod; + xmod = (double)s->img->w / (double)icecube->w; + ymod = (double)s->img->h / (double)icecube->h; + // create image + s->iceimg = rotozoomSurfaceXY(icecube,0, xmod, ymod ,0); + } + // draw it + SDL_BlitSurface(s->iceimg, NULL, screen, &area); + + } } + /* caughtby lines */ if ((s->caughtby) && (s->caughtstate == 2)){ drawline16(screen, s->x,s->y - s->img->h, @@ -1488,6 +1520,11 @@ void killsprite(sprite_t *s) { } } + // free ice image + if (s->iceimg) { + SDL_FreeSurface(s->iceimg); + } + nextone = s->next; if (nextone != NULL) { nextone->prev = s->prev; @@ -1580,6 +1617,7 @@ int isfruit(int id) { case P_RINGSILVER: case P_RINGGOLD: case P_CLOCK: + case P_SNOWMAN: /* flowers */ case P_FLOWERYELLOW: case P_FLOWERRED: @@ -2091,7 +2129,7 @@ int loadlevellist(void) { int randompowerup(void) { int num; - num = rand() % 16; + num = rand() % 17; switch (num) { case 0: @@ -2127,6 +2165,8 @@ int randompowerup(void) { return P_BELL; case 15: return P_CLOCK; + case 16: + return P_SNOWMAN; } } diff --git a/sounds/freeze.wav b/sounds/freeze.wav new file mode 100644 index 0000000..fd8ef7f Binary files /dev/null and b/sounds/freeze.wav differ diff --git a/sounds/icebreak.wav b/sounds/icebreak.wav new file mode 100644 index 0000000..b5cb6f3 Binary files /dev/null and b/sounds/icebreak.wav differ diff --git a/sprites/icecube.png b/sprites/icecube.png new file mode 100644 index 0000000..af6dd2a Binary files /dev/null and b/sprites/icecube.png differ diff --git a/sprites/snowman.png b/sprites/snowman.png new file mode 100644 index 0000000..f1f3a93 Binary files /dev/null and b/sprites/snowman.png differ diff --git a/world1/level13.dat b/world1/level13.dat index b937e35..e9ef1ab 100644 --- a/world1/level13.dat +++ b/world1/level13.dat @@ -1,4 +1,4 @@ -tileset green +bgfile bg 0 hurryup 232 endmaps @@ -62,20 +62,20 @@ exitdir 1 24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24, 24,20,20,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24, 24,0,0,0,0,0,0,25,25,25,25,25,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,20,20,20,24, -24,0,0,0,0,0,24,24,26,26,26,26,24,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24, -24,0,0,0,0,24,24,26,26,26,26,26,26,24,24,0,0,0,0,0,0,0,0,0,0,0,25,25,25,25,25,25,25,0,0,0,0,0,0,24, -24,20,0,0,24,24,26,26,26,26,26,26,26,26,24,24,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,24, -24,0,0,24,24,26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24, +24,0,0,0,0,0,25,24,26,26,26,26,24,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24, +24,0,0,0,0,25,24,26,26,26,26,26,26,24,25,0,0,0,0,0,0,0,0,0,0,0,25,25,25,25,25,25,25,0,0,0,0,0,0,24, +24,20,0,0,25,24,26,26,26,26,26,26,26,26,24,25,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,24, +24,0,0,25,24,26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24, 24,0,0,24,24,26,26,26,26,26,26,26,26,26,26,26,26,0,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24, 24,20,0,24,24,26,26,26,26,26,26,26,26,26,26,25,25,20,20,20,20,20,20,20,20,20,25,25,25,25,25,25,25,0,0,0,0,0,20,24, 24,0,0,0,24,25,26,26,26,26,26,26,26,26,25,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24, 24,0,0,0,0,24,25,26,26,26,26,26,26,25,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24, 24,20,0,0,0,0,24,25,26,26,26,26,25,24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,24, 24,0,0,0,0,0,0,24,26,26,26,26,24,0,0,0,0,0,0,0,0,0,0,0,0,0,25,25,25,25,25,25,0,0,0,0,0,0,0,24, -24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,26,26,26,26,24,24,0,0,0,0,0,0,24, -24,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,26,26,26,26,26,26,24,24,0,0,0,0,20,24, -24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,26,26,26,26,26,26,26,26,24,24,0,0,0,0,24, -24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,26,26,26,26,26,26,26,26,26,26,24,24,0,0,0,24, +24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,24,26,26,26,26,24,25,0,0,0,0,0,0,24, +24,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,24,26,26,26,26,26,26,24,25,0,0,0,0,20,24, +24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,24,26,26,26,26,26,26,26,26,24,25,0,0,0,0,24, +24,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,24,26,26,26,26,26,26,26,26,26,26,24,25,0,0,0,24, 24,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,0,20,24, 24,0,0,0,0,0,0,29,0,17,17,0,29,0,0,0,0,0,0,0,5,0,26,26,26,26,26,26,26,26,26,26,26,26,26,26,0,0,0,24, 24,0,0,0,0,0,0,25,25,25,25,25,25,20,20,20,20,20,20,20,20,20,25,25,25,26,26,26,26,26,26,26,26,25,25,25,0,0,0,24, diff --git a/world1/level8.5.dat b/world1/level8.5.dat index dfafbe6..04aeb8a 100644 --- a/world1/level8.5.dat +++ b/world1/level8.5.dat @@ -39,7 +39,7 @@ 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,1,1,0,0,0,9,9,9,9,9,0,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,0,9,9,9,9,0,0,1,1,4, +4,1,1,0,0,0,9,9,9,9,9,9,0,0,10,10,10,10,10,10,10,10,10,10,10,10,10,10,0,0,10,9,9,9,9,0,0,1,1,4, 4,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,0,0,0,18,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/level8.dat b/world1/level8.dat index 72a5da4..1e9aa86 100644 --- a/world1/level8.dat +++ b/world1/level8.dat @@ -5,6 +5,7 @@ endmaps help endhelp monsters +1 20 12 ! 20 12 @ 11 5 @ 12 9 @@ -26,7 +27,6 @@ P 29 19 P 30 15 P 9 15 S 7 5 -Y 1 15 Y 11 9 Y 13 9 Y 26 9 @@ -35,7 +35,6 @@ Y 3 15 Y 30 28 Y 32 28 Y 36 15 -Y 38 15 Y 4 28 Y 6 28 a 31 3 @@ -46,7 +45,6 @@ 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, @@ -65,7 +63,7 @@ exitdir 2 4,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,20,20,20,0,0,0,1,1,1,1,1,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,14,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,9,9,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,25,25,25,25,25,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,10,4, +4,0,0,9,9,9,9,9,9,9,9,9,0,0,0,0,0,0,25,25,25,25,25,0,0,0,0,0,10,10,10,10,10,10,10,10,10,0,0,4, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,24,24,24,24,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,24,24,24,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 daf8368..8742e1a 100644 --- a/world1/level99.dat +++ b/world1/level99.dat @@ -1,4 +1,4 @@ -bgfile +bgfile backgrounds/snow1.png bg 0 hurryup 30 endmaps @@ -6,32 +6,27 @@ help endhelp monsters 1 26 13 -! 32 13 -r 37 3 -r 36 24 P 1 13 P 7 13 -s 5 1 r 17 13 -@ 20 10 -@ 19 10 r 37 12 +! 31 13 endmonsters exitdir 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,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,4,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,4,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,4,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,9,9,0,0,9,9,0,9,9,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,10,10,10,10,0,0,0,10,10,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,1,1,1,1,1,1,1,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,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,4, -4,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,1,1,1,4, +1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,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,1,0,0,0,0,0,0,0,0,0,0,0,0,4,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,1,1,0,0,0,0,0,0,0,0,0,0,0,0,4,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,1,1,0,0,0,0,0,0,0,0,0,0,0,0,4,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,1,1,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,10,10,10,10,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,4, +4,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,0,0,0,0,0,0,0,0,1,0,0,0,0,4, +4,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,0,0,0,0,0,0,0,0,1,0,0,0,0,4, +4,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,0,0,0,0,0,0,0,0,1,0,0,0,0,4, +4,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,0,0,0,0,0,0,0,0,1,0,0,0,0,4, +4,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,0,0,0,0,0,0,0,0,1,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,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,4, +4,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,1,1,0,0,0,4, +4,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,1,1,1,1,1,4, 4,1,1,1,1,1,1,1,16,16,16,16,16,16,16,1,1,1,1,1,1,16,16,16,16,1,1,1,1,1,1,1,1,1,1,1,0,0,0,4, 4,4,4,4,4,4,4,4,15,15,15,15,15,15,15,15,15,15,15,15,1,15,15,15,15,4,4,4,4,4,4,4,4,4,4,4,0,0,0,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,4,4,4,4,4,4,4,4,4,4,4,1,1,1,4,