diff --git a/src/lib/commands/anti.c b/src/lib/commands/anti.c index a20ff692..bdced571 100644 --- a/src/lib/commands/anti.c +++ b/src/lib/commands/anti.c @@ -138,10 +138,6 @@ anti(void) sect.sct_item[I_MILIT] = ache; if (sect.sct_own == sect.sct_oldown) sect.sct_oldown = 0; - makelost(EF_SECTOR, sect.sct_own, 0, - sect.sct_x, sect.sct_y); - makenotlost(EF_SECTOR, sect.sct_oldown, 0, - sect.sct_x, sect.sct_y); sect.sct_own = sect.sct_oldown; sect.sct_off = 1; /* Turn the sector off */ putsect(§); diff --git a/src/lib/commands/buil.c b/src/lib/commands/buil.c index 2c325141..6a80a3ab 100644 --- a/src/lib/commands/buil.c +++ b/src/lib/commands/buil.c @@ -383,8 +383,6 @@ build_ship(struct sctstr *sp, struct mchrstr *mp, short *vec, int tlev) if (sp->sct_pstage == PLG_INFECT) ship.shp_pstage = PLG_EXPOSED; - makenotlost(EF_SHIP, ship.shp_own, ship.shp_uid, - ship.shp_x, ship.shp_y); putship(ship.shp_uid, &ship); pr("%s", prship(&ship)); pr(" built in sector %s\n", xyas(sp->sct_x, sp->sct_y, player->cnum)); @@ -507,8 +505,6 @@ build_land(struct sctstr *sp, struct lchrstr *lp, short *vec, int tlev) if (sp->sct_pstage == PLG_INFECT) land.lnd_pstage = PLG_EXPOSED; putland(nstr.cur, &land); - makenotlost(EF_LAND, land.lnd_own, land.lnd_uid, - land.lnd_x, land.lnd_y); pr("%s", prland(&land)); pr(" built in sector %s\n", xyas(sp->sct_x, sp->sct_y, player->cnum)); return 1; @@ -693,8 +689,6 @@ build_nuke(struct sctstr *sp, struct nchrstr *np, short *vec, int tlev) vec[I_OIL] -= np->n_oil; vec[I_RAD] -= np->n_rad; - makenotlost(EF_NUKE, nuke.nuk_own, nuke.nuk_uid, - nuke.nuk_x, nuke.nuk_y); putnuke(nuke.nuk_uid, &nuke); pr("%s created in %s\n", prnuke(&nuke), xyas(sp->sct_x, sp->sct_y, player->cnum)); @@ -793,8 +787,6 @@ build_plane(struct sctstr *sp, struct plchrstr *pp, short *vec, int tlev) vec[I_HCM] -= hcm; vec[I_MILIT] -= mil; - makenotlost(EF_PLANE, plane.pln_own, plane.pln_uid, - plane.pln_x, plane.pln_y); putplane(plane.pln_uid, &plane); pr("%s built in sector %s\n", prplane(&plane), xyas(sp->sct_x, sp->sct_y, player->cnum)); diff --git a/src/lib/commands/cede.c b/src/lib/commands/cede.c index bcc1b63a..b1981475 100644 --- a/src/lib/commands/cede.c +++ b/src/lib/commands/cede.c @@ -229,10 +229,7 @@ grab_sect(struct sctstr *sp, natid to) wu(0, to, "\t%s ceded to you by %s\n", prplane(pp), cname(player->cnum)); - makelost(EF_PLANE, pp->pln_own, pp->pln_uid, pp->pln_x, pp->pln_y); pp->pln_own = to; - makenotlost(EF_PLANE, pp->pln_own, pp->pln_uid, - pp->pln_x, pp->pln_y); pp->pln_mobil = 0; pp->pln_mission = 0; putplane(pp->pln_uid, pp); @@ -246,10 +243,7 @@ grab_sect(struct sctstr *sp, natid to) wu(0, to, "\t%s ceded to you by %s\n", prnuke(np), cname(player->cnum)); - makelost(EF_NUKE, np->nuk_own, np->nuk_uid, np->nuk_x, np->nuk_y); np->nuk_own = to; - makenotlost(EF_NUKE, np->nuk_own, np->nuk_uid, - np->nuk_x, np->nuk_y); putnuke(ni.cur, np); } @@ -265,8 +259,6 @@ grab_sect(struct sctstr *sp, natid to) wu(0, to, "\t%s ceded to you by %s\n", prland(lp), cname(player->cnum)); - makelost(EF_LAND, lp->lnd_own, lp->lnd_uid, lp->lnd_x, lp->lnd_y); - makenotlost(EF_LAND, to, lp->lnd_uid, lp->lnd_x, lp->lnd_y); lp->lnd_own = to; lp->lnd_mobil = 0; lp->lnd_mission = 0; @@ -288,8 +280,6 @@ grab_sect(struct sctstr *sp, natid to) sp->sct_dist_x = sp->sct_x; sp->sct_dist_y = sp->sct_y; - makelost(EF_SECTOR, sp->sct_own, 0, sp->sct_x, sp->sct_y); - makenotlost(EF_SECTOR, to, 0, sp->sct_x, sp->sct_y); if (sp->sct_oldown == sp->sct_own) sp->sct_oldown = to; sp->sct_own = to; @@ -358,10 +348,7 @@ grab_ship(struct shpstr *sp, natid to) wu(0, to, "\t%s ceded to you by %s\n", prplane(pp), cname(player->cnum)); - makelost(EF_PLANE, pp->pln_own, pp->pln_uid, pp->pln_x, pp->pln_y); pp->pln_own = to; - makenotlost(EF_PLANE, pp->pln_own, pp->pln_uid, - pp->pln_x, pp->pln_y); pp->pln_mobil = 0; pp->pln_mission = 0; putplane(pp->pln_uid, pp); @@ -379,15 +366,11 @@ grab_ship(struct shpstr *sp, natid to) wu(0, to, "\t%s ceded to you by %s\n", prland(lp), cname(player->cnum)); - makelost(EF_LAND, lp->lnd_own, lp->lnd_uid, lp->lnd_x, lp->lnd_y); - makenotlost(EF_LAND, to, lp->lnd_uid, lp->lnd_x, lp->lnd_y); lp->lnd_own = to; lp->lnd_mobil = 0; lp->lnd_mission = 0; putland(ni.cur, lp); } - makelost(EF_SHIP, sp->shp_own, sp->shp_uid, sp->shp_x, sp->shp_y); sp->shp_own = to; - makenotlost(EF_SHIP, sp->shp_own, sp->shp_uid, sp->shp_x, sp->shp_y); } diff --git a/src/lib/commands/coll.c b/src/lib/commands/coll.c index 04a51c6e..94a78afd 100644 --- a/src/lib/commands/coll.c +++ b/src/lib/commands/coll.c @@ -112,8 +112,6 @@ coll(void) * Used to call takeover() here a long time ago, but that does * unwanted things, like generate che. */ - makelost(EF_SECTOR, sect.sct_own, 0, sect.sct_x, sect.sct_y); - makenotlost(EF_SECTOR, player->cnum, 0, sect.sct_x, sect.sct_y); sect.sct_own = player->cnum; memset(sect.sct_dist, 0, sizeof(sect.sct_dist)); diff --git a/src/lib/commands/edit.c b/src/lib/commands/edit.c index f5af20b7..55695414 100644 --- a/src/lib/commands/edit.c +++ b/src/lib/commands/edit.c @@ -462,8 +462,6 @@ doland(char op, int arg, char *p, struct sctstr *sect) xyas(sect->sct_x, sect->sct_y, player->cnum), cname(sect->sct_own), sect->sct_own, cname(newown), newown); if (sect->sct_own) { - makelost(EF_SECTOR, sect->sct_own, 0, - sect->sct_x, sect->sct_y); wu(player->cnum, sect->sct_own, "Sector %s lost to deity intervention\n", xyas(sect->sct_x, sect->sct_y, sect->sct_own)); @@ -471,7 +469,6 @@ doland(char op, int arg, char *p, struct sctstr *sect) benefit(sect->sct_own, 0); sect->sct_own = newown; if (newown) { - makenotlost(EF_SECTOR, newown, 0, sect->sct_x, sect->sct_y); wu(player->cnum, newown, "Sector %s gained from deity intervention\n", xyas(sect->sct_x, sect->sct_y, sect->sct_own)); @@ -777,11 +774,7 @@ doship(char op, int arg, char *p, struct shpstr *ship) if (arg && arg < MAXNOC) { wu(player->cnum, (natid)arg, "%s given to you by deity intervention!\n", prship(ship)); - makelost(EF_SHIP, ship->shp_own, ship->shp_uid, - ship->shp_x, ship->shp_y); ship->shp_own = (natid)arg; - makenotlost(EF_SHIP, ship->shp_own, ship->shp_uid, - ship->shp_x, ship->shp_y); } else if (!arg) ship->shp_effic = 0; break; @@ -882,11 +875,7 @@ dounit(char op, int arg, char *p, struct lndstr *land) if (arg && arg < MAXNOC) { wu(player->cnum, (natid)arg, "%s given to you by deity intervention!\n", prland(land)); - makelost(EF_LAND, land->lnd_own, land->lnd_uid, - land->lnd_x, land->lnd_y); land->lnd_own = (natid)arg; - makenotlost(EF_LAND, land->lnd_own, land->lnd_uid, - land->lnd_x, land->lnd_y); } else if (!arg) land->lnd_effic = 0; break; @@ -1009,11 +998,7 @@ doplane(char op, int arg, char *p, struct plnstr *plane) "%s taken from you by deity intervention!\n", prplane(plane)); if (arg && arg < MAXNOC) { - makelost(EF_PLANE, plane->pln_own, plane->pln_uid, - plane->pln_x, plane->pln_y); plane->pln_own = (natid)arg; - makenotlost(EF_PLANE, plane->pln_own, plane->pln_uid, - plane->pln_x, plane->pln_y); wu(player->cnum, plane->pln_own, "%s given to you by deity intervention!\n", prplane(plane)); } else if (!arg) diff --git a/src/lib/commands/load.c b/src/lib/commands/load.c index d245ba21..0526275b 100644 --- a/src/lib/commands/load.c +++ b/src/lib/commands/load.c @@ -316,10 +316,7 @@ gift(natid givee, natid giver, void *ptr, char *mesg) if (giver != givee) wu(0, givee, "%s %s %s\n", cname(giver), obj_nameof(gen), mesg); - - makelost(gen->ef_type, gen->own, gen->uid, gen->x, gen->y); gen->own = givee; - makenotlost(gen->ef_type, gen->own, gen->uid, gen->x, gen->y); } static int diff --git a/src/lib/commands/scra.c b/src/lib/commands/scra.c index 5de18625..88985cbe 100644 --- a/src/lib/commands/scra.c +++ b/src/lib/commands/scra.c @@ -196,11 +196,7 @@ scra(void) "%s given to you by %s\n", prplane(&plane), cname(player->cnum)); } - makelost(EF_PLANE, plane.pln_own, plane.pln_uid, - plane.pln_x, plane.pln_y); plane.pln_own = sect2.sct_own; - makenotlost(EF_PLANE, plane.pln_own, plane.pln_uid, - plane.pln_x, plane.pln_y); putplane(plane.pln_uid, &plane); } } @@ -222,11 +218,7 @@ scra(void) "%s given to you by %s\n", prland(&land), cname(player->cnum)); } - makelost(EF_LAND, land.lnd_own, land.lnd_uid, - land.lnd_x, land.lnd_y); land.lnd_own = sect2.sct_own; - makenotlost(EF_LAND, land.lnd_own, land.lnd_uid, - land.lnd_x, land.lnd_y); putland(land.lnd_uid, &land); } } @@ -261,11 +253,7 @@ scra(void) "%s given to you by %s\n", prland(&land), cname(player->cnum)); } - makelost(EF_LAND, land.lnd_own, land.lnd_uid, - land.lnd_x, land.lnd_y); land.lnd_own = sect2.sct_own; - makenotlost(EF_LAND, land.lnd_own, land.lnd_uid, - land.lnd_x, land.lnd_y); putland(land.lnd_uid, &land); } } @@ -288,11 +276,7 @@ scra(void) "%s given to you by %s\n", prplane(&plane), cname(player->cnum)); } - makelost(EF_PLANE, plane.pln_own, plane.pln_uid, - plane.pln_x, plane.pln_y); plane.pln_own = sect2.sct_own; - makenotlost(EF_PLANE, plane.pln_own, plane.pln_uid, - plane.pln_x, plane.pln_y); putplane(plane.pln_uid, &plane); } } diff --git a/src/lib/commands/setsect.c b/src/lib/commands/setsect.c index 07087ece..9c608e29 100644 --- a/src/lib/commands/setsect.c +++ b/src/lib/commands/setsect.c @@ -149,9 +149,6 @@ setsector(void) wu(player->cnum, amt, "Sector %s gained from deity intervention\n", xyas(sect.sct_x, sect.sct_y, amt)); - makelost(EF_SECTOR, sect.sct_own, 0, - sect.sct_x, sect.sct_y); - makenotlost(EF_SECTOR, amt, 0, sect.sct_x, sect.sct_y); sect.sct_own = (natid)amt; putsect(§); } diff --git a/src/lib/commands/trad.c b/src/lib/commands/trad.c index dc3037b9..1668c8d6 100644 --- a/src/lib/commands/trad.c +++ b/src/lib/commands/trad.c @@ -352,22 +352,14 @@ check_trade(void) case EF_NUKE: tg.nuke.nuk_x = trade.trd_x; tg.nuke.nuk_y = trade.trd_y; - makelost(EF_NUKE, tg.nuke.nuk_own, tg.nuke.nuk_uid, - tg.nuke.nuk_x, tg.nuke.nuk_y); tg.nuke.nuk_own = trade.trd_maxbidder; - makenotlost(EF_NUKE, tg.nuke.nuk_own, tg.nuke.nuk_uid, - tg.nuke.nuk_x, tg.nuke.nuk_y); break; case EF_PLANE: if (!pln_is_in_orbit(&tg.plane)) { tg.plane.pln_x = trade.trd_x; tg.plane.pln_y = trade.trd_y; } - makelost(EF_PLANE, tg.plane.pln_own, tg.plane.pln_uid, - tg.plane.pln_x, tg.plane.pln_y); tg.plane.pln_own = trade.trd_maxbidder; - makenotlost(EF_PLANE, tg.plane.pln_own, tg.plane.pln_uid, - tg.plane.pln_x, tg.plane.pln_y); tg.plane.pln_wing = 0; /* no cheap version of fly */ if (opt_MOB_ACCESS) { @@ -393,11 +385,7 @@ check_trade(void) ship.shp_nland--; putship(ship.shp_uid, &ship); } - makelost(EF_LAND, tg.land.lnd_own, tg.land.lnd_uid, - tg.land.lnd_x, tg.land.lnd_y); tg.land.lnd_own = trade.trd_maxbidder; - makenotlost(EF_LAND, tg.land.lnd_own, tg.land.lnd_uid, - tg.land.lnd_x, tg.land.lnd_y); tg.land.lnd_army = 0; /* no cheap version of fly */ if (opt_MOB_ACCESS) { diff --git a/src/lib/subs/attsub.c b/src/lib/subs/attsub.c index 64ce6196..2d56188a 100644 --- a/src/lib/subs/attsub.c +++ b/src/lib/subs/attsub.c @@ -361,8 +361,6 @@ put_combat(struct combat *com) sect.sct_mobil = (short)(com->mob - com->mobcost); } } - makelost(EF_SECTOR, sect.sct_own, 0, sect.sct_x, sect.sct_y); - makenotlost(EF_SECTOR, com->own, 0, sect.sct_x, sect.sct_y); sect.sct_own = com->own; if (com->plague) { if (sect.sct_pstage == PLG_HEALTHY) @@ -381,11 +379,7 @@ put_combat(struct combat *com) else land.lnd_mobil = (signed char)(com->mob - com->mobcost); } - makelost(EF_LAND, land.lnd_own, land.lnd_uid, - land.lnd_x, land.lnd_y); land.lnd_own = com->own; - makenotlost(EF_LAND, land.lnd_own, land.lnd_uid, - land.lnd_x, land.lnd_y); if (com->plague) { if (land.lnd_pstage == PLG_HEALTHY) land.lnd_pstage = PLG_EXPOSED; @@ -409,11 +403,7 @@ put_combat(struct combat *com) else ship.shp_mobil = (signed char)(com->mob - com->mobcost); } - makelost(EF_SHIP, ship.shp_own, ship.shp_uid, - ship.shp_x, ship.shp_y); ship.shp_own = com->own; - makenotlost(EF_SHIP, ship.shp_own, ship.shp_uid, - ship.shp_x, ship.shp_y); if (com->plague) { if (ship.shp_pstage == PLG_HEALTHY) ship.shp_pstage = PLG_EXPOSED; diff --git a/src/lib/subs/bridgefall.c b/src/lib/subs/bridgefall.c index 0a436af7..70fa4875 100644 --- a/src/lib/subs/bridgefall.c +++ b/src/lib/subs/bridgefall.c @@ -134,7 +134,6 @@ knockdown(struct sctstr *sp) xyas(sp->sct_x, sp->sct_y, sp->sct_own)); sp->sct_type = SCT_WATER; sp->sct_newtype = SCT_WATER; - makelost(EF_SECTOR, sp->sct_own, 0, sp->sct_x, sp->sct_y); sp->sct_own = 0; sp->sct_oldown = 0; sp->sct_mobil = 0; diff --git a/src/lib/subs/detonate.c b/src/lib/subs/detonate.c index 2530faae..beca372a 100644 --- a/src/lib/subs/detonate.c +++ b/src/lib/subs/detonate.c @@ -116,7 +116,6 @@ detonate(struct nukstr *np, coord x, coord y, int airburst) sect.sct_fallout = MIN(fallout, FALLOUT_MAX); } if (damage > 100) { - makelost(EF_SECTOR, sect.sct_own, 0, sect.sct_x, sect.sct_y); sect.sct_oldown = 0; sect.sct_own = 0; if (type == SCT_WATER || type == SCT_BSPAN || diff --git a/src/lib/subs/land.c b/src/lib/subs/land.c index d8ab37a5..41ebf794 100644 --- a/src/lib/subs/land.c +++ b/src/lib/subs/land.c @@ -111,15 +111,15 @@ lnd_postread(int n, void *ptr) void lnd_prewrite(int n, void *old, void *new) { + struct lndstr *oldlp = old; struct lndstr *llp = new; + natid own = llp->lnd_own; struct lndstr *lp; struct plnstr *pp; int i; if (llp->lnd_own && llp->lnd_effic < LAND_MINEFF) { - makelost(EF_LAND, llp->lnd_own, llp->lnd_uid, - llp->lnd_x, llp->lnd_y); - llp->lnd_own = 0; + own = 0; for (i = 0; NULL != (lp = getlandp(i)); i++) { if (lp->lnd_own && lp->lnd_land == n) { @@ -149,6 +149,17 @@ lnd_prewrite(int n, void *old, void *new) item_prewrite(llp->lnd_item); } + /* We've avoided assigning to llp->lnd_own, in case oldsp == sp */ + if (oldlp->lnd_own != own) { + if (oldlp->lnd_own) + makelost(EF_LAND, oldlp->lnd_own, + llp->lnd_uid, llp->lnd_x, llp->lnd_y); + if (own) + makenotlost(EF_LAND, own, + llp->lnd_uid, llp->lnd_x, llp->lnd_y); + } + + llp->lnd_own = own; } char * diff --git a/src/lib/subs/nuke.c b/src/lib/subs/nuke.c index 4732f386..938f8bf5 100644 --- a/src/lib/subs/nuke.c +++ b/src/lib/subs/nuke.c @@ -76,15 +76,24 @@ nuk_postread(int n, void *ptr) void nuk_prewrite(int n, void *old, void *new) { + struct nukstr *oldnp = old; struct nukstr *np = new; + natid own = np->nuk_own; - if (np->nuk_effic == 0) { - if (np->nuk_own) - makelost(EF_NUKE, np->nuk_own, np->nuk_uid, - np->nuk_x, np->nuk_y); - np->nuk_own = 0; - np->nuk_effic = 0; + if (np->nuk_effic == 0) + own = 0; + + /* We've avoided assigning to np->nuk_own, in case oldsp == sp */ + if (oldnp->nuk_own != own) { + if (oldnp->nuk_own) + makelost(EF_NUKE, oldnp->nuk_own, + np->nuk_uid, np->nuk_x, np->nuk_y); + if (own) + makenotlost(EF_NUKE, own, + np->nuk_uid, np->nuk_x, np->nuk_y); } + + np->nuk_own = own; } int diff --git a/src/lib/subs/plane.c b/src/lib/subs/plane.c index 3c21b26a..a5fb8133 100644 --- a/src/lib/subs/plane.c +++ b/src/lib/subs/plane.c @@ -110,15 +110,14 @@ pln_postread(int n, void *ptr) void pln_prewrite(int n, void *old, void *new) { + struct plnstr *oldpp = old; struct plnstr *pp = new; + natid own = pp->pln_own; struct nukstr *np; int i; if (pp->pln_effic < PLANE_MINEFF) { - if (pp->pln_own) - makelost(EF_PLANE, pp->pln_own, pp->pln_uid, - pp->pln_x, pp->pln_y); - pp->pln_own = 0; + own = 0; pp->pln_effic = 0; for (i = 0; NULL != (np = getnukep(i)); i++) { if (np->nuk_own && np->nuk_plane == n) { @@ -129,6 +128,18 @@ pln_prewrite(int n, void *old, void *new) } } } + + /* We've avoided assigning to pp->pln_own, in case oldsp == sp */ + if (oldpp->pln_own != own) { + if (oldpp->pln_own) + makelost(EF_PLANE, oldpp->pln_own, + pp->pln_uid, pp->pln_x, pp->pln_y); + if (own) + makenotlost(EF_PLANE, own, + pp->pln_uid, pp->pln_x, pp->pln_y); + } + + pp->pln_own = own; } char * diff --git a/src/lib/subs/sect.c b/src/lib/subs/sect.c index 111444ff..02f979b5 100644 --- a/src/lib/subs/sect.c +++ b/src/lib/subs/sect.c @@ -61,6 +61,7 @@ sct_postread(int id, void *ptr) void sct_prewrite(int id, void *old, void *new) { + struct sctstr *oldsp = old; struct sctstr *sp = new; int mil, civs; natid own; @@ -70,23 +71,33 @@ sct_prewrite(int id, void *old, void *new) mil = sp->sct_item[I_MILIT]; civs = sp->sct_item[I_CIVIL]; + own = sp->sct_own; - if (sp->sct_own != 0 && !civs) { + if (own && !civs) { sp->sct_work = 100; - sp->sct_oldown = sp->sct_own; + sp->sct_oldown = own; } - if (sp->sct_own && !civs && !mil - && !has_units(sp->sct_x, sp->sct_y, sp->sct_own, NULL) + if (own && !civs && !mil && !has_units(sp->sct_x, sp->sct_y, own, NULL) && !(sp->sct_flags & MOVE_IN_PROGRESS)) { /* more cruft! */ - own = sp->sct_own; - makelost(EF_SECTOR, sp->sct_own, 0, sp->sct_x, sp->sct_y); - sp->sct_own = 0; + own = 0; sp->sct_mobil = 0; if (sp->sct_type == SCT_CAPIT || sp->sct_type == SCT_MOUNT) caploss(sp, own, ""); } + + /* We've avoided assigning to sp->sct_own, in case oldsp == sp */ + if (oldsp->sct_own != own) { + if (oldsp->sct_own) + makelost(EF_SECTOR, oldsp->sct_own, + 0, sp->sct_x, sp->sct_y); + if (own) + makenotlost(EF_SECTOR, own, + 0, sp->sct_x, sp->sct_y); + } + + sp->sct_own = own; } void diff --git a/src/lib/subs/ship.c b/src/lib/subs/ship.c index e9f3eff0..16b8e5b5 100644 --- a/src/lib/subs/ship.c +++ b/src/lib/subs/ship.c @@ -64,15 +64,16 @@ shp_postread(int n, void *ptr) void shp_prewrite(int n, void *old, void *new) { + struct shpstr *oldsp = old; struct shpstr *sp = new; + natid own = sp->shp_own; struct lndstr *lp; struct plnstr *pp; int i; - if (sp->shp_own != 0 && sp->shp_effic < SHIP_MINEFF) { - mpr(sp->shp_own, "\t%s sunk!\n", prship(sp)); - makelost(EF_SHIP, sp->shp_own, sp->shp_uid, sp->shp_x, sp->shp_y); - sp->shp_own = 0; + if (own && sp->shp_effic < SHIP_MINEFF) { + mpr(own, "\t%s sunk!\n", prship(sp)); + own = 0; for (i = 0; NULL != (lp = getlandp(i)); i++) { if (lp->lnd_own && lp->lnd_ship == n) { @@ -95,6 +96,18 @@ shp_prewrite(int n, void *old, void *new) } else { item_prewrite(sp->shp_item); } + + /* We've avoided assigning to sp->shp_own, in case oldsp == sp */ + if (oldsp->shp_own != own) { + if (oldsp->shp_own) + makelost(EF_SHIP, oldsp->shp_own, + sp->shp_uid, sp->shp_x, sp->shp_y); + if (own) + makenotlost(EF_SHIP, own, + sp->shp_uid, sp->shp_x, sp->shp_y); + } + + sp->shp_own = own; } char * diff --git a/src/lib/subs/takeover.c b/src/lib/subs/takeover.c index a5342ea4..962432c7 100644 --- a/src/lib/subs/takeover.c +++ b/src/lib/subs/takeover.c @@ -158,8 +158,6 @@ takeover(struct sctstr *sp, natid newown) */ sp->sct_loyal = 50; } - makelost(EF_SECTOR, sp->sct_own, 0, sp->sct_x, sp->sct_y); - makenotlost(EF_SECTOR, newown, 0, sp->sct_x, sp->sct_y); sp->sct_own = newown; if (opt_MOB_ACCESS) { game_tick_to_now(&sp->sct_access); @@ -206,9 +204,7 @@ takeover_plane(struct plnstr *pp, natid newown) trdswitchown(EF_PLANE, pp, newown); if (pp->pln_mobil > 0) pp->pln_mobil = 0; - makelost(EF_PLANE, pp->pln_own, pp->pln_uid, pp->pln_x, pp->pln_y); pp->pln_own = newown; - makenotlost(EF_PLANE, pp->pln_own, pp->pln_uid, pp->pln_x, pp->pln_y); pp->pln_mission = 0; pp->pln_wing = 0; putplane(pp->pln_uid, pp); @@ -225,9 +221,7 @@ takeover_ship(struct shpstr *sp, natid newown, int hostile) if (opt_MARKET) trdswitchown(EF_SHIP, sp, newown); - makelost(EF_SHIP, sp->shp_own, sp->shp_uid, sp->shp_x, sp->shp_y); sp->shp_own = newown; - makenotlost(EF_SHIP, sp->shp_own, sp->shp_uid, sp->shp_x, sp->shp_y); sp->shp_mission = 0; sp->shp_fleet = 0; sp->shp_rflags = 0; @@ -251,10 +245,7 @@ takeover_ship(struct shpstr *sp, natid newown, int hostile) if (opt_MARKET) trdswitchown(EF_PLANE, pp, newown); pp->pln_mission = 0; - makelost(EF_PLANE, pp->pln_own, pp->pln_uid, pp->pln_x, pp->pln_y); pp->pln_own = newown; - makenotlost(EF_PLANE, pp->pln_own, pp->pln_uid, - pp->pln_x, pp->pln_y); putplane(pp->pln_uid, pp); } /* Take over land units */ @@ -290,11 +281,7 @@ takeover_land(struct lndstr *landp, natid newown, int hostile) if (opt_MARKET) trdswitchown(EF_LAND, landp, newown); landp->lnd_mission = 0; - makelost(EF_LAND, landp->lnd_own, landp->lnd_uid, - landp->lnd_x, landp->lnd_y); landp->lnd_own = newown; - makenotlost(EF_LAND, landp->lnd_own, landp->lnd_uid, - landp->lnd_x, landp->lnd_y); pp = &p; lp = &llp; /* Take over planes */ @@ -314,10 +301,7 @@ takeover_land(struct lndstr *landp, natid newown, int hostile) if (opt_MARKET) trdswitchown(EF_PLANE, pp, newown); pp->pln_mission = 0; - makelost(EF_PLANE, pp->pln_own, pp->pln_uid, pp->pln_x, pp->pln_y); pp->pln_own = newown; - makenotlost(EF_PLANE, pp->pln_own, pp->pln_uid, - pp->pln_x, pp->pln_y); putplane(pp->pln_uid, pp); } /* Take over land units */ diff --git a/src/lib/update/revolt.c b/src/lib/update/revolt.c index e9ef4e46..8e379b67 100644 --- a/src/lib/update/revolt.c +++ b/src/lib/update/revolt.c @@ -312,8 +312,13 @@ guerrilla(struct sctstr *sp) /* che won, and sector converts. */ if (sp->sct_own == sp->sct_oldown) sp->sct_oldown = 0; - else + else { + makelost(EF_SECTOR, sp->sct_own, + 0, sp->sct_x, sp->sct_y); + makenotlost(EF_SECTOR, sp->sct_oldown, + 0, sp->sct_x, sp->sct_y); takeover(sp, sp->sct_oldown); + } sp->sct_mobil = oldmob; civ += uw; uw = 0;