Fixed bug with player2 and scuba mask

Added armour images for player 2
This commit is contained in:
Rob Pearce 2008-11-12 05:06:32 +00:00
parent 9805d3c503
commit aa2ddf538e
21 changed files with 57 additions and 24 deletions

BIN
data/sprites/armor2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 648 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 503 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 478 B

BIN
data/sprites/armor2fall.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 615 B

BIN
data/sprites/armor2jump.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 712 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 896 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 594 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 625 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 765 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 774 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 703 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 991 B

After

Width:  |  Height:  |  Size: 969 B

BIN
data/sprites/dwarf2head.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 761 B

After

Width:  |  Height:  |  Size: 761 B

4
defs.h
View File

@ -325,7 +325,7 @@
#define S_SLOPE 2
// Sprite types
#define MAXPTYPES 135
#define MAXPTYPES 136
#define P_PLAYER 0
#define P_RAT 1
#define P_CHEESE 2
@ -466,6 +466,7 @@
#define P_PLATFORM 132
#define P_FLY 133
#define P_PLAYER2 134
#define P_ARMOUR2 135 // player 2 wearing armour
#define FLY_FLYTIME 150
@ -882,6 +883,7 @@ imageset_t imageset[MAXPTYPES];
extern char progname[];
extern SDL_Color black;
extern SDL_Surface *screen, *temps, *levelbg, *head, *head5, *icecube;
extern SDL_Surface *head2,*head52;
extern SDL_Surface *healthbar[];
extern SDL_Surface *greenbox, *redbox;
extern sprite_t *sprite, *lastsprite, *player, *player2, *boss;

View File

@ -31,6 +31,7 @@ SDL_Surface *levelbg; // level background image
SDL_Surface *temps; // temporary surface
SDL_Surface *screen; // the actual video screen
SDL_Surface *head,*head5; // imgs in corner showing number of lives
SDL_Surface *head2,*head52; // imgs in corner showing number of lives
SDL_Surface *icecube; // overlaid on frozen monsters
SDL_Surface *greenbox; // for fly spray effect
SDL_Surface *redbox; // for gunner

46
rc.c
View File

@ -354,7 +354,7 @@ int main (int argc, char **argv) {
srand(time(NULL));
} else {
// cheat
want1up = B_TRUE;
want1up = B_FALSE;
want2up = B_TRUE;
}
@ -2445,7 +2445,7 @@ int movesprite(sprite_t *s) {
}
} else if (s->id == P_MASK) { // mask effect
// stay on top of player
if (player->slamming) {
if (s->owner->slamming) {
s->y = s->owner->y + MASKOFFSETSLAMY;
s->x = s->owner->x + (MASKOFFSETSLAMX*s->owner->dir);
} else {
@ -2551,7 +2551,7 @@ int movesprite(sprite_t *s) {
} else if (s->owner->powerup == PW_CANNON) {
int targx,targy;
// try to stay behind player
targx = s->owner->x - (player->dir * 32);
targx = s->owner->x - (s->owner->dir * 32);
targy = s->owner->y;
if (s->x < targx) {
s->x += 2;
@ -3384,7 +3384,8 @@ int movesprite(sprite_t *s) {
} else if ((xdiff <= -(TILEW*2)) && (xdiff >= -(TILEW*3))) {
/* jump left */
jump(s, -1);
} else if (s->y - player->y <= (TILEH*6)) {
} else if ((player && (s->y - player->y <= (TILEH*6))) ||
(player2 && (s->y - player2->y <= (TILEH*6)))) {
if ((xdiff >= 0) && (xdiff < (TILEW*2))) {
/* jump up */
jump(s, 0);
@ -4992,25 +4993,25 @@ void drawscore(void) {
// go left correct amount
numtoshow2 = numtoshow;
while (numtoshow2 >= 5) {
area.x -= (head->w + 3);
area.x -= (head2->w + 3);
numtoshow2 -= 5;
}
for (i = 0; i < numtoshow2; i++) {
area.x -= (head->w + 3);
area.x -= (head2->w + 3);
}
// now start displaying
// show "x5" for lots of lives
while (numtoshow >= 5) {
SDL_BlitSurface(head5, NULL, screen, &area);
area.x += (head->w + 3);
SDL_BlitSurface(head52, NULL, screen, &area);
area.x += (head2->w + 3);
numtoshow -= 5;
}
for (i = 0; i < numtoshow; i++) {
SDL_BlitSurface(head, NULL, screen, &area);
area.x += (head->w + 3);
SDL_BlitSurface(head2, NULL, screen, &area);
area.x += (head2->w + 3);
}
@ -5610,7 +5611,6 @@ void dogravity(sprite_t *s) {
if (s->id == P_PINKCLOUD) return;
if (s->id == P_TICK) printf("9 dogravity for tick\n");
// only player can move if you have a clock
if (globpowerup == PW_CLOCK) {
if (!iseffect(s->id) && (!isplayer(s)) && !s->caughtby && !s->dead) {
@ -5645,7 +5645,6 @@ if (s->id == P_TICK) printf("9 dogravity for tick\n");
}
if (s->id == P_TICK) printf("0 dogravity for tick\n");
if (s->dead) return;
if (s->flies && !s->iced) return; // no gravity if you fly, but ice cancels flying
if (s->id != P_KSSHELL) {
@ -5733,7 +5732,7 @@ if (s->id == P_TICK) printf("0 dogravity for tick\n");
// get rid of the mask
for (ms = sprite; ms ; ms = ms->next) {
if ((ms->id == P_MASK) && (ms->owner == s)) {
s->dead = D_FINAL;
ms->dead = D_FINAL;
break;
}
}
@ -5834,8 +5833,7 @@ if (s->id == P_TICK) printf("0 dogravity for tick\n");
}
if ((s->id == P_KINGRAT) && (s->timer1 == KRS_FALL)) { // special case
// king rat drops until he is at player height
// TODO: 2player
if ((player->dead) || (s->y < player->y)) { // above player
if (!playersalive() || isplayerbelow(s)) { // above player
ontheground = B_FALSE;
} else { // above player
s->dropping = B_FALSE;
@ -6473,8 +6471,11 @@ int dofruiteffect(sprite_t *pp, sprite_t *s) {
} else if (s->id == P_HELMET) {
int xx,yy;
playfx(FX_ARMOR);
// TODO: player2
pp->id = P_ARMOUR; // change how the player looks
if (pp == player) {
pp->id = P_ARMOUR; // change how the player looks
} else {
pp->id = P_ARMOUR2; // change how the player looks
}
pp->armour = B_TRUE;
sprintf(tempm, "Armour!");
addoutlinetext(s->x,s->y - s->img->h/2, TEXTSIZE_POINTS, tempm,&white,&black,POINTSDELAY, TT_NORM);
@ -6783,14 +6784,15 @@ int dofruiteffect(sprite_t *pp, sprite_t *s) {
gunorigy = pp->y;
guntime = 10;
gundelay = 0; // used to control shooting speed
pp->powerup = PW_GUNNER;
// turn off netting etc
player->netting = B_FALSE;
player->slamming = B_FALSE;
player->powerup = PW_GUNNER;
if (player) {
player->netting = B_FALSE;
player->slamming = B_FALSE;
}
if (player2) {
player2->netting = B_FALSE;
player2->slamming = B_FALSE;
player2->powerup = PW_GUNNER;
}
return B_TRUE;
@ -9466,7 +9468,7 @@ void startgame(void) {
if (gamemode == GM_EASY) {
player2->permarmour = B_TRUE;
player2->armour = B_TRUE;
player2->id = P_ARMOUR;
player2->id = P_ARMOUR2;
} else {
player2->permarmour = B_FALSE;
player2->armour = B_FALSE;

View File

@ -644,7 +644,11 @@ void setdefaults(sprite_t *s) {
if (s->permarmour) {
s->armour = B_TRUE;
s->id = P_ARMOUR;
if (s == player) {
s->id = P_ARMOUR;
} else {
s->id = P_ARMOUR2;
}
} else {
s->armour = B_FALSE;
}
@ -1106,6 +1110,10 @@ int loadimagesets(void) {
head = IMG_Load(tempfile);
sprintf(tempfile, "%s/sprites/dwarfhead5.png",datadir);
head5 = IMG_Load(tempfile);
sprintf(tempfile, "%s/sprites/dwarf2head.png",datadir);
head2 = IMG_Load(tempfile);
sprintf(tempfile, "%s/sprites/dwarf2head5.png",datadir);
head52 = IMG_Load(tempfile);
sprintf(tempfile, "%s/sprites/icecube.png",datadir);
icecube = IMG_Load(tempfile);
@ -1189,6 +1197,24 @@ int loadimagesets(void) {
loadspriteimage(P_ARMOUR,F_SWIM2, "sprites/armorswim2.png");
imageset[P_ARMOUR].numimages = 18;
loadspriteimage(P_ARMOUR2,F_WALK1, "sprites/armor2.png");
loadspriteimage(P_ARMOUR2,F_JUMP, "sprites/armor2jump.png");
loadspriteimage(P_ARMOUR2,F_FALL, "sprites/armor2fall.png");
loadspriteimage(P_ARMOUR2,F_CAUGHT, "sprites/armor2.png");
loadspriteimage(P_ARMOUR2,F_DEAD, "sprites/dwarfdie.png"); // not used
/* next 3 are auto generated */
loadspriteimage(P_ARMOUR2,F_CLIMB1, "sprites/armor2climb1.png");
loadspriteimage(P_ARMOUR2,F_CLIMB2, "sprites/armor2climb2.png");
loadspriteimage(P_ARMOUR2,F_SHOOT, "sprites/armor2shoot.png");
loadspriteimage(P_ARMOUR2,F_SLAM1, "sprites/armor2slam1.png");
loadspriteimage(P_ARMOUR2,F_SLAM2, "sprites/armor2slam2.png");
loadspriteimage(P_ARMOUR2,F_SLAM3, "sprites/armor2slam3.png");
loadspriteimage(P_ARMOUR2,F_SLAM4, "sprites/armor2slam4.png");
loadspriteimage(P_ARMOUR2,F_SLAM5, "sprites/armor2slam5.png");
loadspriteimage(P_ARMOUR2,F_SWIM1, "sprites/armor2swim1.png");
loadspriteimage(P_ARMOUR2,F_SWIM2, "sprites/armor2swim2.png");
imageset[P_ARMOUR2].numimages = 18;
loadspriteimage(P_SNAKE,F_WALK1, "sprites/snake.png");
loadspriteimage(P_SNAKE,F_JUMP, "sprites/snakejump.png");
@ -2928,6 +2954,8 @@ int randompowerup(void) {
int num;
num = rand() % 34;
return P_MASKPOWERUP;
switch (num) {
case 0:
default: