*
* Known contributors to this file:
* Ken Stevens, 1995
+ * Markus Armbruster, 2011-2015
*/
#include <config.h>
struct sctstr sect;
struct lndstr land;
struct nstr_item ni;
- int foundland;
+ int foundland, def_uid;
char *p;
char buf[1024];
* Death, carnage, and destruction.
*/
+ /*
+ * Careful: when the fight sinks the ship, putcombat() clobbers
+ * *def (see FIXME there).
+ */
+ def_uid = def->shp_uid;
if (!(att_fight(A_BOARD, off, &olist, 1.0, def, &dlist, 1.0))) {
- getship(def->shp_uid, &ship);
+ getship(def_uid, &ship);
if (ship.shp_rflags & RET_BOARDED) {
retreat_ship(&ship, 'u');
- putship(def->shp_uid, &ship);
+ putship(def_uid, &ship);
}
}
putship(com->shp_uid, &ship);
}
com->mobcost = 0;
+ /*
+ * FIXME if we just sank the ship att_get_combat() will report
+ * "not in the same sector", and proceed to clobber *com. See
+ * also the workaround in boar().
+ */
att_get_combat(com, com->own != player->cnum);
}
Connect from 127.0.0.1
tester@127.0.0.1 using country #1
tester@127.0.0.1 logged in as country #1
+Oops: !sp->shp_own in ../src/lib/subs/retreat.c:79
+Crash dump complete
tester@127.0.0.1 logged out, country #1
Connect from 127.0.0.1
tester@127.0.0.1 using country #0