diff --git a/data/sounds/camera.wav b/data/sounds/camera.wav new file mode 100644 index 0000000..4d89cbe Binary files /dev/null and b/data/sounds/camera.wav differ diff --git a/data/sprites/camera.png b/data/sprites/camera.png new file mode 100644 index 0000000..b442021 Binary files /dev/null and b/data/sprites/camera.png differ diff --git a/defs.h b/defs.h index f48afce..89dba33 100644 --- a/defs.h +++ b/defs.h @@ -297,7 +297,7 @@ /* enums */ /* sounds */ -#define MAXFX 58 +#define MAXFX 59 #define FX_SHOOT 0 #define FX_SLAM 1 #define FX_KILL 2 @@ -356,6 +356,7 @@ #define FX_EXTRALIFE 55 #define FX_WARP 56 #define FX_JETPACK 57 +#define FX_CAMERA 58 // card suits #define CS_HEART 1 @@ -381,7 +382,7 @@ #define S_SLOPE 2 // Sprite types -#define MAXPTYPES 149 +#define MAXPTYPES 150 #define P_PLAYER 0 #define P_RAT 1 #define P_CHEESE 2 @@ -536,6 +537,7 @@ #define P_MAGNET 146 #define P_BADMAGNET 147 #define P_JETPACK 148 +#define P_CAMERA 149 #define FLY_FLYTIME 150 @@ -599,9 +601,10 @@ #define PW_MAGNET 17 // magnet #define PW_BADMAGNET 18 // badmagnet #define PW_JETPACK 19 // kangaroo +#define PW_CAMERA 20 // camera // "virtual" powerup for bosses -#define PW_RATSHAKE 20 // shake screen horizontally -#define PW_SNAILSHAKE 21 // shake screen vertically +#define PW_RATSHAKE 50 // shake screen horizontally +#define PW_SNAILSHAKE 51 // shake screen vertically #define GUNNERSPEED 2.5 // speed crosshair moves in gunner mode #define GUNNERDELAY 10 // how fast gunner powerup shoots diff --git a/rc.c b/rc.c index 8fb9072..e1494be 100644 --- a/rc.c +++ b/rc.c @@ -71,6 +71,8 @@ double gunorigy[2]; int gundelay[2]; int guntime; +int cameraalpha; + int playedbell; int clocktime; @@ -632,6 +634,28 @@ int main (int argc, char **argv) { } } } + // camera flash + if ((globpowerup == PW_CAMERA) && (cameraalpha)) { + + SDL_Surface *whitebox; + + whitebox = SDL_CreateRGBSurface(SDL_SWSURFACE, + screen->w, + screen->h, + screen->format->BitsPerPixel, screen->format->Rmask, + screen->format->Gmask,screen->format->Bmask, 0); + SDL_FillRect(whitebox, NULL, SDL_MapRGB(screen->format,255,255,255)); + SDL_SetAlpha(whitebox, SDL_SRCALPHA, cameraalpha); + + // clear screen + SDL_BlitSurface(whitebox,NULL,screen,NULL); + SDL_FreeSurface(whitebox); + if (timer % 10 == 0) { + cameraalpha -= 35; + if (cameraalpha < 0) cameraalpha = 0; + } + } + /********************************************** * Collision detection @@ -2922,41 +2946,45 @@ int movesprite(sprite_t *s) { tiletype_t *tunder; - /* distance to closest player */ - xdiff = getxdisttoplayer(s, NULL); - absxdiff = abs(xdiff); + if (globpowerup == PW_CAMERA) { + move = B_TRUE; + } else { + /* distance to closest player */ + xdiff = getxdisttoplayer(s, NULL); + absxdiff = abs(xdiff); - // tile in front and below - tt = gettileat(s->x + s->dir*getspeed(s) + (s->dir * (s->img->w/2)),s->y + (TILEH/2),NULL,NULL); - // tile below - tunder = gettileat(s->x ,s->y + 1,NULL,NULL); - /* if there's a hole in front of us and below*/ - if (tt->solid == S_NOTSOLID) { - // we're on a slope - if (tunder->solid == S_SLOPE) { - move = B_TRUE; - } else { - if (s->angry || boss) { - if ((player && (player->y > s->y)) || (player2 && (player2->y > s->y))) { - /* if player is below, fall off */ - if (xdiff <= (TILEW*8)) { + // tile in front and below + tt = gettileat(s->x + s->dir*getspeed(s) + (s->dir * (s->img->w/2)),s->y + (TILEH/2),NULL,NULL); + // tile below + tunder = gettileat(s->x ,s->y + 1,NULL,NULL); + /* if there's a hole in front of us and below*/ + if (tt->solid == S_NOTSOLID) { + // we're on a slope + if (tunder->solid == S_SLOPE) { + move = B_TRUE; + } else { + if (s->angry || boss) { + if ((player && (player->y > s->y)) || (player2 && (player2->y > s->y))) { + /* if player is below, fall off */ + if (xdiff <= (TILEW*8)) { + move = B_TRUE; + } + } else if ((player && (player->y == s->y)) || (player2 && player2->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 if (level->bottomopen && (s->y >= (480 - 100)) && isplayerabove(s)) { + // if near bottom of the screen and can fall through... move = B_TRUE; } - } else if ((player && (player->y == s->y)) || (player2 && player2->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 if (level->bottomopen && (s->y >= (480 - 100)) && isplayerabove(s)) { - // if near bottom of the screen and can fall through... - move = B_TRUE; } } + } else { + move = B_TRUE; } - } else { - move = B_TRUE; } /* either move or turn around */ @@ -3020,28 +3048,32 @@ int movesprite(sprite_t *s) { int move = B_FALSE; int xdiff, absxdiff; - /* distance to closest player */ - xdiff = getxdisttoplayer(s, NULL); - absxdiff = abs(xdiff); + if (globpowerup == PW_CAMERA) { + move = B_TRUE; + } else { + /* distance to closest player */ + xdiff = getxdisttoplayer(s, NULL); + absxdiff = abs(xdiff); - tt = gettileat(s->x + s->dir+getspeed(s) + (s->dir * (s->img->w/2)),s->y,NULL,NULL); - /* if there's a hole in front of us */ - if (tt->solid == S_NOTSOLID) { - if (s->angry || boss) { - if ((player && (player->y > s->y)) || (player2 && (player2->y > s->y))) { - /* if player is below, fall off */ - if (xdiff <= (TILEW*8)) { + tt = gettileat(s->x + s->dir+getspeed(s) + (s->dir * (s->img->w/2)),s->y,NULL,NULL); + /* if there's a hole in front of us */ + if (tt->solid == S_NOTSOLID) { + if (s->angry || boss) { + if ((player && (player->y > s->y)) || (player2 && (player2->y > s->y))) { + /* if player is below, fall off */ + if (xdiff <= (TILEW*8)) { + move = B_TRUE; + } + } else if (level->bottomopen && (s->y >= (480 - 100)) && isplayerabove(s)) { + // if near bottom of the screen and can fall through... move = B_TRUE; } - } else if (level->bottomopen && (s->y >= (480 - 100)) && isplayerabove(s)) { - // if near bottom of the screen and can fall through... - move = B_TRUE; } + } else { + move = B_TRUE; } - } else { - move = B_TRUE; } - + /* either move or turn around */ if (move) { rv = movex(s, s->dir*getspeed(s)); @@ -3101,33 +3133,37 @@ int movesprite(sprite_t *s) { int xdiff, absxdiff; - /* distance to closest player */ - xdiff = getxdisttoplayer(s, NULL); - absxdiff = abs(xdiff); + if (globpowerup == PW_CAMERA) { + move = B_TRUE; + } else { + /* distance to closest player */ + xdiff = getxdisttoplayer(s, NULL); + absxdiff = abs(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 && (player->y > s->y)) || (player2 && (player2->y > s->y))) { - /* if player is below and nearby, fall off */ - if (xdiff <= (TILEW*16)) { + 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 && (player->y > s->y)) || (player2 && (player2->y > s->y))) { + /* if player is below and nearby, fall off */ + if (xdiff <= (TILEW*16)) { + move = B_TRUE; + } + } else if ((player && (player->y == s->y)) || (player2 && player2->y == s->y)) { + /* if player is at same level and close, try to jump over the gap */ + if ((s->dir == D_RIGHT) && (xdiff > 0) && (xdiff <= (TILEW*9))) { + jump(s,D_RIGHT); + } else if ((s->dir == D_LEFT) && (xdiff < 0) && (xdiff >= -(TILEW*9))) { + jump(s,D_LEFT); + } + } else if (level->bottomopen && (s->y >= (480 - 100)) && isplayerabove(s)) { + // if near bottom of the screen and can fall through... move = B_TRUE; } - } else if ((player && (player->y == s->y)) || (player2 && player2->y == s->y)) { - /* if player is at same level and close, try to jump over the gap */ - if ((s->dir == D_RIGHT) && (xdiff > 0) && (xdiff <= (TILEW*9))) { - jump(s,D_RIGHT); - } else if ((s->dir == D_LEFT) && (xdiff < 0) && (xdiff >= -(TILEW*9))) { - jump(s,D_LEFT); - } - } else if (level->bottomopen && (s->y >= (480 - 100)) && isplayerabove(s)) { - // if near bottom of the screen and can fall through... + } else { move = B_TRUE; } - } else { - move = B_TRUE; } - + /* either move or turn around */ if (move) { rv = movex(s, s->dir*getspeed(s)); @@ -3141,39 +3177,41 @@ int movesprite(sprite_t *s) { - /* moves like an angry rat all the time */ - if ((!s->jumping) && (!s->jumptimer)) { - /* if player is above us or at same level...*/ - if ( (player && (!player->dead) && (player->y <= s->y)) || - (player2 && (!player2->dead) && (player2->y <= s->y))) { - int ydiff; + if (globpowerup != PW_CAMERA) { + /* moves like an angry rat all the time */ + if ((!s->jumping) && (!s->jumptimer)) { + /* if player is above us or at same level...*/ + if ( (player && (!player->dead) && (player->y <= s->y)) || + (player2 && (!player2->dead) && (player2->y <= s->y))) { + int ydiff; - if ( (player && (!player->dead) && (player->y <= s->y))) { - ydiff = s->y - player->y; - } else if (player2) { - ydiff = s->y - player2->y; - } else { - ydiff = 999; - } + if ( (player && (!player->dead) && (player->y <= s->y))) { + ydiff = s->y - player->y; + } else if (player2) { + ydiff = s->y - player2->y; + } else { + ydiff = 999; + } + - - if (isplayerabove(s) && (ydiff >= (TILEH*4)) && (ydiff <= (TILEH*8))) { // player between 4 and 8 tiles above - - if (xdiff <= (TILEW*8)) { // if closeish horizontally - /* jump up */ - jump(s, 0); - } - } else if ((xdiff >= (TILEW*1)) && (xdiff <= (TILEW*10))) { // if 1-9 tiles right - if (s->dir == D_RIGHT) { - /* jump right */ - jump(s, D_RIGHT); - } - } else if ((xdiff <= -(TILEW*1)) && (xdiff >= -(TILEW*10))) { // if 1-9 tiles left - if (s->dir == D_LEFT) { - /* jump left */ - jump(s, D_LEFT); - } - } + if (isplayerabove(s) && (ydiff >= (TILEH*4)) && (ydiff <= (TILEH*8))) { // player between 4 and 8 tiles above + + if (xdiff <= (TILEW*8)) { // if closeish horizontally + /* jump up */ + jump(s, 0); + } + } else if ((xdiff >= (TILEW*1)) && (xdiff <= (TILEW*10))) { // if 1-9 tiles right + if (s->dir == D_RIGHT) { + /* jump right */ + jump(s, D_RIGHT); + } + } else if ((xdiff <= -(TILEW*1)) && (xdiff >= -(TILEW*10))) { // if 1-9 tiles left + if (s->dir == D_LEFT) { + /* jump left */ + jump(s, D_LEFT); + } + } + } } } } else { // falling @@ -3562,32 +3600,36 @@ int movesprite(sprite_t *s) { int xdiff, absxdiff; - /* distance to player */ - xdiff = getxdisttoplayer(s, NULL); - absxdiff = abs(xdiff); + if (globpowerup == PW_CAMERA) { + move = B_TRUE; + } else { + /* distance to player */ + xdiff = getxdisttoplayer(s, NULL); + absxdiff = abs(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) { - double ycutoff = s->y + (TILEH/2); - if ((player && (player->y >= ycutoff)) || (player2 && (player2->y >= ycutoff ))) { - /* if player is below and nearby, fall off */ - if (xdiff <= (TILEW*16)) { + 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) { + double ycutoff = s->y + (TILEH/2); + if ((player && (player->y >= ycutoff)) || (player2 && (player2->y >= ycutoff ))) { + /* if player is below and nearby, fall off */ + if (xdiff <= (TILEW*16)) { + move = B_TRUE; + } + } else if ((player && (player->y == s->y)) || (player2 && (player2->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 if (level->bottomopen && (s->y >= (480 - 100)) && isplayerabove(s)) { + // if near bottom of the screen and can fall through... move = B_TRUE; } - } else if ((player && (player->y == s->y)) || (player2 && (player2->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 if (level->bottomopen && (s->y >= (480 - 100)) && isplayerabove(s)) { - // if near bottom of the screen and can fall through... + } else { move = B_TRUE; } - } else { - move = B_TRUE; } /* either move or turn around */ @@ -3604,24 +3646,26 @@ int movesprite(sprite_t *s) { /* moves like an angry rat all the time */ - if ((playersalive()) && (!s->jumping) && (!s->jumptimer)) { - sprite_t *abovep; - /* if player is above us...*/ - abovep = isplayerabove(s); - if (abovep) { - if ((xdiff >= (TILEW*2)) && (xdiff <= (TILEW*3))) { // if 2-3 tiles right - /* jump right */ - jump(s, D_RIGHT); - } else if ((xdiff <= -(TILEW*2)) && (xdiff >= -(TILEW*3))) { // if 2-3 tiles left - /* jump left */ - jump(s, D_LEFT); - } else if (s->y - abovep->y <= (TILEH*6)) { // player less than 6 tiles above - if ((xdiff >= 0) && (xdiff < (TILEW*4))) { // ... and within 4 tiles - /* jump up */ - jump(s, 0); - } else if ((xdiff <= 0) && (xdiff > -(TILEW*4))) { // ... and within 4 tiles - /* jump up */ - jump(s, 0); + if (globpowerup != PW_CAMERA) { + if ((playersalive()) && (!s->jumping) && (!s->jumptimer)) { + sprite_t *abovep; + /* if player is above us...*/ + abovep = isplayerabove(s); + if (abovep) { + if ((xdiff >= (TILEW*2)) && (xdiff <= (TILEW*3))) { // if 2-3 tiles right + /* jump right */ + jump(s, D_RIGHT); + } else if ((xdiff <= -(TILEW*2)) && (xdiff >= -(TILEW*3))) { // if 2-3 tiles left + /* jump left */ + jump(s, D_LEFT); + } else if (s->y - abovep->y <= (TILEH*6)) { // player less than 6 tiles above + if ((xdiff >= 0) && (xdiff < (TILEW*4))) { // ... and within 4 tiles + /* jump up */ + jump(s, 0); + } else if ((xdiff <= 0) && (xdiff > -(TILEW*4))) { // ... and within 4 tiles + /* jump up */ + jump(s, 0); + } } } } @@ -3647,35 +3691,39 @@ int movesprite(sprite_t *s) { int xdiff, absxdiff,ydiff; - /* distance to player */ - xdiff = getxdisttoplayer(s, NULL); - absxdiff = abs(xdiff); + if (globpowerup == PW_CAMERA) { + move = B_TRUE; + } else { + /* distance to player */ + xdiff = getxdisttoplayer(s, NULL); + absxdiff = abs(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 (s->angry) { - if ((player && (player->y > s->y)) || (player2 && (player2->y > s->y))) { - /* if player is below, fall off */ - if (xdiff <= (TILEW*8)) { + 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 (s->angry) { + if ((player && (player->y > s->y)) || (player2 && (player2->y > s->y))) { + /* if player is below, fall off */ + if (xdiff <= (TILEW*8)) { + move = B_TRUE; + } + } else if ((player && (player->y == s->y)) || (player2 && player2->y == s->y)) { + if (s->angry) { + /* 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 if (level->bottomopen && (s->y >= (480 - 100)) && isplayerabove(s)) { + // if near bottom of the screen and can fall through... move = B_TRUE; } - } else if ((player && (player->y == s->y)) || (player2 && player2->y == s->y)) { - if (s->angry) { - /* 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 if (level->bottomopen && (s->y >= (480 - 100)) && isplayerabove(s)) { - // if near bottom of the screen and can fall through... - move = B_TRUE; } + } else { + move = B_TRUE; } - } else { - move = B_TRUE; } /* shoot */ @@ -3704,6 +3752,7 @@ int movesprite(sprite_t *s) { shoot = B_TRUE; } } + if (globpowerup == PW_CAMERA) shoot = B_FALSE; if (shoot) { // if our shooting timer is okay if (s->timer1 == 0) { @@ -3734,7 +3783,7 @@ int movesprite(sprite_t *s) { } - if (s->angry) { + if (s->angry && (globpowerup != PW_CAMERA)) { if (playersalive() && (!s->jumping) && (!s->jumptimer)) { /* if player is above us, jump */ if ( (player && (!player->dead) && (player->y < s->y)) || @@ -3929,11 +3978,13 @@ int movesprite(sprite_t *s) { playerdist = playerdist2; } - if (playerdist <= (TILEW*10)) { - s->timer1 = 0; - s->flies = F_FLYHORZ; - s->xs = -99; - s->ys = -99; + if (globpowerup != PW_CAMERA) { + if (playerdist <= (TILEW*10)) { + s->timer1 = 0; + s->flies = F_FLYHORZ; + s->xs = -99; + s->ys = -99; + } } // ...and take off eventually anyway @@ -7378,6 +7429,13 @@ int dofruiteffect(sprite_t *pp, sprite_t *s) { addoutlinetext(s->x,s->y - s->img->h/2, TEXTSIZE_POINTS, tempm,&white,&black,POINTSDELAY, TT_NORM); globpowerup = PW_ANCHOR; return B_TRUE; + } else if (s->id == P_CAMERA) { + playfx(FX_CAMERA); + sprintf(tempm, "Blind enemies!"); + addoutlinetext(s->x,s->y - s->img->h/2, TEXTSIZE_POINTS, tempm,&white,&black,POINTSDELAY, TT_NORM); + globpowerup = PW_CAMERA; + cameraalpha = 255; + return B_TRUE; } else if (s->id == P_WAND) { sprite_t *s2; @@ -7651,6 +7709,7 @@ int initsound(void) { loadfx(FX_EXTRALIFE, "extralife.wav"); loadfx(FX_WARP, "warp.wav"); loadfx(FX_JETPACK, "jetpack.wav"); + loadfx(FX_CAMERA, "camera.wav"); // load sound effects for (i = 0; i < MAXFX; i++) { @@ -9266,8 +9325,8 @@ void handleinput(void) { } if (cheat) { if (keydown(0, SDLK_q)) { - //gtime = nexthurryup-1; - gtime = nexthurryup+14; + gtime = nexthurryup-1; + //gtime = nexthurryup+14; } if (keydown(0, SDLK_b)) { //gtime = nexthurryup-1; @@ -11414,6 +11473,8 @@ void doplayermovement(sprite_t *pl) { double getxdisttoplayer(sprite_t *s, sprite_t **pl) { double xdiff1,xdiff2,xdiff; + if (globpowerup == PW_CAMERA) return 9999; + /* distance to closest player */ if (player) { xdiff1 = abs(player->x - s->x); @@ -11442,6 +11503,8 @@ double getxdisttoplayer(sprite_t *s, sprite_t **pl) { double getydisttoplayer(sprite_t *s) { double ydiff1,ydiff2,ydiff; /* distance to closest player */ + if (globpowerup == PW_CAMERA) return 9999; + if (player) { ydiff1 = player->y - s->y; } else { @@ -11465,6 +11528,8 @@ double getydisttoplayer(sprite_t *s) { sprite_t *isplayerbelow(sprite_t *s) { + if (globpowerup == PW_CAMERA) return NULL; + if (player && !player->dead && player->y > s->y) return player; if (player2 && !player2->dead && player2->y > s->y) return player2; @@ -11472,12 +11537,17 @@ sprite_t *isplayerbelow(sprite_t *s) { } sprite_t *isplayerabove(sprite_t *s) { + if (globpowerup == PW_CAMERA) return NULL; + if (player && !player->dead && player->y < s->y) return player; if (player2 && !player2->dead && player2->y < s->y) return player2; return NULL; } sprite_t *isplayerright(sprite_t *s) { + + if (globpowerup == PW_CAMERA) return NULL; + if (player && !player->dead && player->x > s->x) return player; if (player2 && !player2->dead && player2->x > s->x) return player2; diff --git a/shared.c b/shared.c index 3870764..cc8d2bc 100644 --- a/shared.c +++ b/shared.c @@ -1563,6 +1563,9 @@ int loadimagesets(void) { loadspriteimage(P_JETPACK,F_WALK1, "sprites/jetpack.png"); imageset[P_JETPACK].numimages = 1; + loadspriteimage(P_CAMERA,F_WALK1, "sprites/camera.png"); + imageset[P_CAMERA].numimages = 1; + loadspriteimage(P_ZAPPOWERUP,F_WALK1, "sprites/zapper.png"); imageset[P_ZAPPOWERUP].numimages = 1; @@ -2459,6 +2462,7 @@ int isfruit(int id) { case P_MAGNET: case P_BADMAGNET: case P_JETPACK: + case P_CAMERA: return FT_TEMP; /* flowers */ case P_FLOWERYELLOW: @@ -3102,7 +3106,7 @@ int loadlevellist(void) { int randompowerup(void) { int num; - num = rand() % 42; + num = rand() % 43; switch (num) { case 0: @@ -3195,6 +3199,8 @@ int randompowerup(void) { return P_BADMAGNET; case 41: return P_JETPACK; + case 42: + return P_CAMERA; } } @@ -3346,6 +3352,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_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 cause you to lose all net powerups.", "skull.png"); setinfo(P_CLOVER, "4-Leaf Clover", "Increases your luck...", "clover.png"); diff --git a/website/img/camera.png b/website/img/camera.png new file mode 100644 index 0000000..dd085b7 Binary files /dev/null and b/website/img/camera.png differ diff --git a/website/info.html b/website/info.html index 7ec697d..eab59d6 100644 --- a/website/info.html +++ b/website/info.html @@ -81,8 +81,9 @@