]> git.pond.sub.org Git - empserver/commitdiff
Revert "commands: Always put ship or land unit before retreating it"
authorMarkus Armbruster <armbru@pond.sub.org>
Sun, 17 May 2015 16:11:20 +0000 (18:11 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Sun, 17 May 2015 16:11:20 +0000 (18:11 +0200)
This reverts commit f4d8d64bb34dee75cb2485c130e125fdd3980c18.

Breaks retreat after ship got sunk by bombs or missile.

ship_bomb() and launch_missile() pass .shp_own to retreat_ship().
Wrong after putship(), because putship() resets the owner when the
ship got sunk.  retreat_ship() then oopses and fails to retreat the
surviving members of the group.

Other callers save the owner before putting the ship, and pass that.
We could change these two to do the same.  But since we're trying to
get a release out, simply revert the broken commit instead.

src/lib/commands/bomb.c
src/lib/commands/laun.c
src/lib/commands/mfir.c
src/lib/commands/torp.c

index d44d7d7d61144f3d02c4edf7cc1dffbc2d6cc4d7..39f1aa170815c182fb051f14868536380dc9aa06 100644 (file)
@@ -480,11 +480,11 @@ ship_bomb(struct emp_qelem *list, struct sctstr *target)
            pr("%s at %s sunk!\n",
               prship(&ship),
               xyas(target->sct_x, target->sct_y, player->cnum));
-       putship(ship.shp_uid, &ship);
        if (dam && (ship.shp_rflags & RET_INJURED))
            retreat_ship(&ship, ship.shp_own, 'i');
        else if (ship.shp_rflags & RET_BOMBED)
            retreat_ship(&ship, ship.shp_own, 'b');
+       putship(ship.shp_uid, &ship);
        collateral_damage(target->sct_x, target->sct_y, dam / 2);
     }
 out:
@@ -670,12 +670,12 @@ land_bomb(struct emp_qelem *list, struct sctstr *target)
                cname(player->cnum), dam, prland(&land),
                xyas(target->sct_x, target->sct_y, own));
        landdamage(&land, dam);
-       putland(land.lnd_uid, &land);
        if (dam && (land.lnd_rflags & RET_INJURED))
            retreat_land(&land, own, 'i');
        else if (land.lnd_rflags & RET_BOMBED)
            retreat_land(&land, own, 'b');
        nreport(player->cnum, N_UNIT_BOMB, own, 1);
+       putland(land.lnd_uid, &land);
        collateral_damage(target->sct_x, target->sct_y, dam);
     }
 }
index 21f4c244d2d5c2a45f1da98e8a5da3704bf9ba30..04900bac0a59468ba2db561f9236416758b526c5 100644 (file)
@@ -276,9 +276,9 @@ launch_missile(struct plnstr *pp)
        shipdamage(&target_ship, dam);
        if (target_ship.shp_effic < SHIP_MINEFF)
            pr("%s sunk!\n", prship(&target_ship));
-       putship(target_ship.shp_uid, &target_ship);
        if (dam && (target_ship.shp_rflags & RET_INJURED))
            retreat_ship(&target_ship, target_ship.shp_own, 'i');
+       putship(target_ship.shp_uid, &target_ship);
     }
     return RET_OK;
 }
index 57c41623f18b427c31ee0d97ad212b811a95db79..69646fc828f0d1a88ec9541480a2b0efad913c4e 100644 (file)
@@ -397,13 +397,13 @@ multifire(void)
            shipdamage(&vship, dam);
            if (vship.shp_effic < SHIP_MINEFF)
                pr("%s sunk!\n", prsub(&vship));
-           putship(vship.shp_uid, &vship);
            if (dam && (vship.shp_rflags & RET_INJURED))
                retreat_ship(&vship, vict, 'i');
            else if (target == targ_sub && (vship.shp_rflags & RET_DCHRGED))
                retreat_ship(&vship, vict, 'd');
            else if (totaldefdam == 0 && (vship.shp_rflags & RET_HELPLESS))
                retreat_ship(&vship, vict, 'h');
+           putship(vship.shp_uid, &vship);
            break;
        }
        switch (attgp->ef_type) {
index f042f92b64c48e4f7664a9f1eff29b2e5d870173..fc6b99ab43e0097c5da6b6f077918a3cb8a7c1d8 100644 (file)
@@ -190,9 +190,9 @@ torp(void)
            shipdamage(&vship, dam);
            if (vship.shp_effic < SHIP_MINEFF)
                pr("%s sunk!\n", prsub(&vship));
-           putship(vship.shp_uid, &vship);
            if (vship.shp_rflags & RET_TORPED)
                retreat_ship(&vship, vshipown, 't');
+           putship(vship.shp_uid, &vship);
        } else {
            pr("Missed\n");
            if (vshipown != 0 && vshipown != player->cnum)