Made wall_damage() and blast_blastable_wall() similar to D2X-Rebirth code base. Also fixing regression introduced in a4068234b4 causing blast_blastable_wall() being called multiple times and causing high damage

This commit is contained in:
zico 2013-06-11 00:17:00 +02:00
parent 4a223d102c
commit c1578e6937
2 changed files with 14 additions and 5 deletions

View file

@ -1,5 +1,9 @@
D1X-Rebirth Changelog
20130611
--------
main/wall.c: Made wall_damage() and blast_blastable_wall() similar to D2X-Rebirth code base. Also fixing regression introduced in a4068234b4 causing blast_blastable_wall() being called multiple times and causing high damage
20130610
--------
misc/hmp.c: Made hmp code actually read tempo. Due to missing documentation of the format I can only guess it's a 4 bit int

View file

@ -254,6 +254,8 @@ void blast_blastable_wall(segment *seg, int side)
Assert(seg->sides[side].wall_num != -1);
Walls[seg->sides[side].wall_num].hps = -1; //say it's blasted
csegp = &Segments[seg->children[side]];
Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
@ -266,6 +268,7 @@ void blast_blastable_wall(segment *seg, int side)
if (WallAnims[Walls[seg->sides[side].wall_num].clip_num].flags & WCF_EXPLODES)
explode_wall(seg-Segments,side);
else {
//if not exploding, set final frame, and make door passable
a = Walls[seg->sides[side].wall_num].clip_num;
n = WallAnims[a].num_frames;
wall_set_tmap_num(seg,side,csegp,Connectside,a,n-1);
@ -276,6 +279,7 @@ void blast_blastable_wall(segment *seg, int side)
}
//-----------------------------------------------------------------
// Destroys a blastable wall.
void wall_destroy(segment *seg, int side)
@ -293,7 +297,7 @@ void wall_destroy(segment *seg, int side)
// Deteriorate appearance of wall. (Changes bitmap (paste-ons))
void wall_damage(segment *seg, int side, fix damage)
{
int a, i, n;
int a, i, n, cwall_num;
if (seg->sides[side].wall_num == -1) {
return;
@ -302,7 +306,7 @@ void wall_damage(segment *seg, int side, fix damage)
if (Walls[seg->sides[side].wall_num].type != WALL_BLASTABLE)
return;
if (!(Walls[seg->sides[side].wall_num].flags & WALL_BLASTED))
if (!(Walls[seg->sides[side].wall_num].flags & WALL_BLASTED) && Walls[seg->sides[side].wall_num].hps >= 0)
{
int Connectside;
segment *csegp;
@ -310,9 +314,10 @@ void wall_damage(segment *seg, int side, fix damage)
csegp = &Segments[seg->children[side]];
Connectside = find_connect_side(seg, csegp);
Assert(Connectside != -1);
cwall_num = csegp->sides[Connectside].wall_num;
Walls[seg->sides[side].wall_num].hps -= damage;
Walls[csegp->sides[Connectside].wall_num].hps -= damage;
if (cwall_num > -1)
Walls[cwall_num].hps -= damage;
a = Walls[seg->sides[side].wall_num].clip_num;
n = WallAnims[a].num_frames;
@ -321,7 +326,7 @@ void wall_damage(segment *seg, int side, fix damage)
blast_blastable_wall( seg, side );
#ifdef NETWORK
if (Game_mode & GM_MULTI)
multi_send_door_open(seg-Segments, side, 0);
multi_send_door_open(seg-Segments, side,Walls[seg->sides[side].wall_num].flags);
#endif
}
else