diff --git a/data/backgrounds/snow1.png b/data/backgrounds/snow1.png index 95ee64d..96666ff 100644 Binary files a/data/backgrounds/snow1.png and b/data/backgrounds/snow1.png differ diff --git a/data/levels/level60.dat b/data/levels/level60.dat index 46e3d3d..6bcb790 100644 --- a/data/levels/level60.dat +++ b/data/levels/level60.dat @@ -6,7 +6,7 @@ endhelp monsters 0 4 14 134 35 14 -152 19 14 +152 19 18 endmonsters exitdir 1 61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61, diff --git a/data/map.dat b/data/map.dat index e7d67e5..a125180 100644 --- a/data/map.dat +++ b/data/map.dat @@ -58,6 +58,7 @@ 412,level412.dat,Test Tubes 420,level420.dat,Water Feature 60,level60.dat,King Fly +601,level601.dat,NEW LEVEL 109,level109.dat,THE END SO FAR 99,level99.dat,TEST LEVEL 0,intro.dat,INTRO diff --git a/data/newtiles/ice.png b/data/newtiles/ice.png index 1aa0882..a3a0a02 100644 Binary files a/data/newtiles/ice.png and b/data/newtiles/ice.png differ diff --git a/data/newtiles/icetop.png b/data/newtiles/icetop.png index 09e870a..2ae95fd 100644 Binary files a/data/newtiles/icetop.png and b/data/newtiles/icetop.png differ diff --git a/data/tiledefs.dat b/data/tiledefs.dat index 71574f7..65f8837 100644 --- a/data/tiledefs.dat +++ b/data/tiledefs.dat @@ -559,3 +559,21 @@ id 5 solid 0 file newtiles/clothbg.png end + +tile icicle +id 5 +solid 0 +file newtiles/icicle.png +end + +tile icebg +id 5 +solid 0 +file newtiles/icebg.png +end + +tile icebridge +id 17 +solid 2 +file newtiles/icebridge.png +end diff --git a/defs.h b/defs.h index 1c5d2cb..b01c789 100644 --- a/defs.h +++ b/defs.h @@ -397,7 +397,7 @@ #define S_SLOPE 2 // Sprite types -#define MAXPTYPES 153 +#define MAXPTYPES 154 #define P_PLAYER 0 #define P_RAT 1 #define P_CHEESE 2 @@ -556,6 +556,7 @@ #define P_WINGBOOTS 150 #define P_BIGUMBRELLA 151 #define P_KINGFLY 152 +#define P_SUPERUMBRELLA 153 #define FLY_FLYTIME 150 diff --git a/rc.c b/rc.c index a74f237..f0e14fd 100644 --- a/rc.c +++ b/rc.c @@ -1657,6 +1657,9 @@ void die(sprite_t *s) { case P_KINGSNAIL: addsprite(P_BIGSCUBA, (640/2), 0, "bigscuba"); break; + case P_KINGFLY: + addsprite(P_SUPERUMBRELLA, (640/2), 0, "bigumbrella"); + break; } } else if ((s->id == P_SNAIL) && (s->lives > 0)) { // snails can't die but turn into slugs instead sprite_t *newsp; @@ -3626,13 +3629,17 @@ int movesprite(sprite_t *s) { } s->timer2--; - if (s->timer2 == 0) { - if (s->timer1 == KFS_FLY1) { - s->timer1 = KFS_HORZWAIT; - s->timer3 = s->y; - } else { - s->timer1 = KFS_VERTWAIT; - s->timer3 = s->x; + if (s->timer2 <= 0) { + if ((s->y >= s->img->h*4) && (s->y <= (480-s->img->h*2))) { + if ((s->x >= s->img->w) && (s->x <= 640-(s->img->w))) { + if (s->timer1 == KFS_FLY1) { + s->timer1 = KFS_HORZWAIT; + s->timer3 = s->y; + } else { + s->timer1 = KFS_VERTWAIT; + s->timer3 = s->x; + } + } } } } else if (s->timer1 == KFS_HORZWAIT) { @@ -6734,6 +6741,8 @@ void dogravity(sprite_t *s) { ontheground = B_FALSE; } else if ((s->id == P_BIGSCUBA) && (s->y < 480/2)) { ontheground = B_FALSE; + } else if ((s->id == P_SUPERUMBRELLA) && (s->y < 480/2)) { + ontheground = B_FALSE; } else { ontheground = isonground(s); } @@ -7365,12 +7374,34 @@ int dofruiteffect(sprite_t *pp, sprite_t *s) { if (player) { player->permmask = B_TRUE; player->hasmask = B_TRUE; - addoutlinetext(player->x,player->y - player->img->h/2, TEXTSIZE_LIFE, "SUPER MASK!", &cyan,&black,POINTSDELAY, TT_NORM); + if ((player->lives > 0) && !player->dead) { + addoutlinetext(player->x,player->y - player->img->h/2, TEXTSIZE_LIFE, "SUPER MASK!", &cyan,&black,POINTSDELAY, TT_NORM); + } } if (player2) { player2->permmask = B_TRUE; player2->hasmask = B_TRUE; - addoutlinetext(player2->x,player2->y - player2->img->h/2, TEXTSIZE_LIFE, "SUPER MASK!", &cyan,&black,POINTSDELAY, TT_NORM); + if ((player2->lives > 0) && !player2->dead) { + addoutlinetext(player2->x,player2->y - player2->img->h/2, TEXTSIZE_LIFE, "SUPER MASK!", &cyan,&black,POINTSDELAY, TT_NORM); + } + } + return B_TRUE; + } else if (s->id == P_SUPERUMBRELLA) { + // both players + playfx(FX_POWERUP); + if (player) { + player->permumbrella = B_TRUE; + player->umbrella = B_TRUE; + if ((player->lives > 0) && !player->dead) { + addoutlinetext(player->x,player->y - player->img->h/2, TEXTSIZE_LIFE, "SUPER UMBRELLA!", &cyan,&black,POINTSDELAY, TT_NORM); + } + } + if (player2) { + player2->permumbrella = B_TRUE; + player2->umbrella = B_TRUE; + if ((player2->lives > 0) && !player2->dead) { + addoutlinetext(player2->x,player2->y - player2->img->h/2, TEXTSIZE_LIFE, "SUPER UMBRELLA!", &cyan,&black,POINTSDELAY, TT_NORM); + } } return B_TRUE; } else if (s->id == P_NUMNETS) { @@ -11852,7 +11883,15 @@ void doplayermovement(sprite_t *pl) { } } - } + if (pl->falling) { + if (pl->umbrella) pl->umbrellaup = B_TRUE; + } + + } else { + if (pl->falling) { + if (pl->umbrella) pl->umbrellaup = B_FALSE; + } + } if (keydown(pnum,KEY_DOWN)) { if ((pl->swimming) && (pl->hasmask)) { // swimming @@ -11869,15 +11908,6 @@ void doplayermovement(sprite_t *pl) { pl->x = ladderx; } } - - if (pl->falling) { - if (pl->umbrella) pl->umbrellaup = B_TRUE; - } - - } else { - if (pl->falling) { - if (pl->umbrella) pl->umbrellaup = B_FALSE; - } } // Jump if (keydown(pnum,KEY_JUMP)) { diff --git a/shared.c b/shared.c index d48c9ef..6edc999 100644 --- a/shared.c +++ b/shared.c @@ -1604,6 +1604,9 @@ int loadimagesets(void) { loadspriteimage(P_BIGUMBRELLA,F_WALK1, "sprites/bigumbrella.png"); imageset[P_BIGUMBRELLA].numimages = 1; + loadspriteimage(P_SUPERUMBRELLA,F_WALK1, "sprites/superumbrella.png"); + imageset[P_SUPERUMBRELLA].numimages = 1; + loadspriteimage(P_CAMERA,F_WALK1, "sprites/camera.png"); imageset[P_CAMERA].numimages = 1; @@ -2459,6 +2462,7 @@ int isfruit(int id) { /* super powerups */ case P_BIGSPEED: case P_BIGSCUBA: + case P_SUPERUMBRELLA: return FT_SUPER; /* permenant powerups */ case P_SPEED: @@ -3373,6 +3377,7 @@ void setfruitinfo(void) { setinfo(P_HELMET, "Helmet","Gives you a suit of armour which will protect you from death.", "helmet.png"); setinfo(P_BIGSPEED, "Big Speed Up", "Makes you walk faster, permenantly!", "bigspeed.png"); setinfo(P_BIGSCUBA, "Big Scuba Mask", "Permenantly gives you fast underwater movement.", "bigscuba.png"); + setinfo(P_SUPERUMBRELLA, "Big Umbrella", "Bestows you with an umbrella which can survive death!", "superumbrella.png"); setinfo(P_MASKPOWERUP, "Scuba Mask", "Allows you to move fast underwater.", "maskpowerup.png"); setinfo(P_WINGBOOTS, "Winged Boots", "These magical boots cause you to grow wings, allowing to you jump again while in mid-air!", "wingboots.png"); @@ -3404,7 +3409,7 @@ void setfruitinfo(void) { setinfo(P_MAGNET, "Magnet", "Collecting this powerup will align the magnetic forces of the earth in your favour, attracting all nearby fruits towards you.", "magnet.png"); setinfo(P_BADMAGNET, "Red Skull", "This skull curses you and will repel fruits away from you, denying you access to them!", "badmagnet.png"); setinfo(P_JETPACK, "Jetpack", "For the remainder of the current level, the jetpack's thrust will add to your jumping ability!", "jetpack.png"); - setinfo(P_UMBRELLA, "Umbrella", "Slows your descent, giving you more time to contemplate your rat eradication quest.", "umbrella.png"); + setinfo(P_UMBRELLA, "Umbrella", "Slows your descent, giving you more time to contemplate your rat eradication quest. Activate this useful item by holding UP while falling.", "umbrella.png"); setinfo(P_CAMERA, "Camera", "Creates a bright flash of light, blinding all enemies.", "camera.png"); setinfo(P_ZAPPOWERUP, "Bug Zapper", "Zaps nearby enemies with miniature bolts of lightning", "zapper.png"); setinfo(P_SKULL, "Green Skull", "Avoid these at all costs! The green skull will shrink your net to miniscule proportions for the remainder of the level.", "skull.png"); @@ -4088,27 +4093,29 @@ void drawplayer(sprite_t *s, SDL_Rect *where) { // draw umbrella if (s->umbrella && s->umbrellaup) { - if (!s->swimming && !s->climbing) { - SDL_Rect umarea; - if (s->netting) { - if (s->dir == D_RIGHT) { - umarea.x = s->x - 11 - 10; + if ((levelcomplete != LV_CLOUD) && (levelcomplete != LV_CLOUDLOOP)) { + if (!s->swimming && !s->climbing) { + SDL_Rect umarea; + if (s->netting) { + if (s->dir == D_RIGHT) { + umarea.x = s->x - 11 - 10; + } else { + umarea.x = s->x - 11 + 10; + } + umarea.y = s->y - s->img->h - 2; + } else if (s->falling) { + if (s->dir == D_RIGHT) { + umarea.x = s->x - 11 - 8; + } else { + umarea.x = s->x - 11 + 8; + } + umarea.y = s->y - s->img->h - 9; } else { - umarea.x = s->x - 11 + 10; + umarea.x = s->x - 11; + umarea.y = s->y - s->img->h - 2; } - umarea.y = s->y - s->img->h - 2; - } else if (s->falling) { - if (s->dir == D_RIGHT) { - umarea.x = s->x - 11 - 8; - } else { - umarea.x = s->x - 11 + 8; - } - umarea.y = s->y - s->img->h - 9; - } else { - umarea.x = s->x - 11; - umarea.y = s->y - s->img->h - 2; + doblit(imageset[P_BIGUMBRELLA].img[F_WALK1], screen, &umarea); } - doblit(imageset[P_BIGUMBRELLA].img[F_WALK1], screen, &umarea); } } diff --git a/website/info.html b/website/info.html index dc5e7b3..59786a9 100644 --- a/website/info.html +++ b/website/info.html @@ -49,7 +49,7 @@