From: Markus Armbruster Date: Thu, 4 Mar 2004 13:49:25 +0000 (+0000) Subject: (sctstr): Member sct_che encoded number of che and their target. X-Git-Tag: v4.2.14~88 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=5bad9875a546095af2fa30734b072239c9b6e852 (sctstr): Member sct_che encoded number of che and their target. Simplify. Split into member sct_che (number) and sct_che_target. Users changed. (get_che_cnum, set_che_cnum, get_che_value, get_che_value): Che encoding/decoding functions; remove. (CHE_MAX): Move from var.h to sect.h. (prsect, doland): Print / edit the new field. --- diff --git a/include/sect.h b/include/sect.h index 5f186910c..dd2224e0e 100644 --- a/include/sect.h +++ b/include/sect.h @@ -77,7 +77,8 @@ struct sctstr { u_short sct_mines; /* number of mines */ u_short sct_pstage; /* plague stage */ u_short sct_ptime; /* how many etus remain in this stage */ - u_short sct_che; /* che combo */ + u_char sct_che; /* number of guerrillas */ + natid sct_che_target; /* nation targeted by che */ u_short sct_fallout; time_t sct_access; /* Last time mob was updated (MOB_ACCESS) */ u_char sct_road; /* Road value of a sector */ @@ -183,6 +184,9 @@ extern struct dchrstr bigcity_dchr; /* Sector flags */ #define MOVE_IN_PROGRESS bit(0) /* move in progress */ +/* maximal number of che, must fit into struct sctstr member sct_che */ +#define CHE_MAX 255 + /* Each cost is per point of efficency */ struct sctintrins { char *in_name; diff --git a/include/var.h b/include/var.h index 1509e7844..9fe13de58 100644 --- a/include/var.h +++ b/include/var.h @@ -66,13 +66,6 @@ #define I_RAD 14 #define I_MAX 14 -/* should this be here?? */ -#define CHE_MAX 255 -#define get_che_cnum(x) ((x) >> 8) -#define set_che_cnum(x, cn) ((x) = ((x) & 0xff) | ((cn) << 8)) -#define get_che_value(x) ((x) & 0xff) -#define set_che_value(x, n) ((x) = ((x) & 0xff00) | (n)) - #define V_CIVIL V_ITEM(I_CIVIL) #define V_MILIT V_ITEM(I_MILIT) #define V_SHELL V_ITEM(I_SHELL) diff --git a/src/lib/commands/add.c b/src/lib/commands/add.c index 3a300b9ab..ea6d0926e 100644 --- a/src/lib/commands/add.c +++ b/src/lib/commands/add.c @@ -187,6 +187,7 @@ add(void) sect.sct_pstage = PLG_HEALTHY; sect.sct_ptime = 0; sect.sct_che = 0; + sect.sct_che_target = 0; sect.sct_fallout = 0; putsect(§); pr("wiped\n"); diff --git a/src/lib/commands/anti.c b/src/lib/commands/anti.c index dc8d0d693..3cef7fac8 100644 --- a/src/lib/commands/anti.c +++ b/src/lib/commands/anti.c @@ -77,8 +77,8 @@ anti(void) pr(" ---- --------------------------\n"); } mil = sect.sct_item[I_MILIT]; - che = get_che_value(sect.sct_che); - target = get_che_cnum(sect.sct_che); + che = sect.sct_che; + target = sect.sct_che_target; avail_mil = sect.sct_mobil / 2; if (mil <= avail_mil) avail_mil = mil; @@ -114,8 +114,8 @@ anti(void) sect.sct_mobil = sect.sct_mobil - chekilled - milkilled; sect.sct_item[I_MILIT] = mil - milkilled; if (ache == 0) - sect.sct_che = 0; - set_che_value(sect.sct_che, ache); + sect.sct_che_target = 0; + sect.sct_che = ache; putsect(§); pr(" Body count: Military %d - Guerillas %d.\n", milkilled, chekilled); @@ -138,9 +138,11 @@ anti(void) /* Ok, now leave anywhere from 16% to 25% of the che */ n_cheleft = (ache / (n_cheleft + 3)); ache -= n_cheleft; - set_che_value(sect.sct_che, n_cheleft); - } else + sect.sct_che = n_cheleft; + } else { sect.sct_che = 0; + sect.sct_che_target = 0; + } sect.sct_item[I_MILIT] = ache; if (sect.sct_own == sect.sct_oldown) sect.sct_oldown = 0; diff --git a/src/lib/commands/cede.c b/src/lib/commands/cede.c index 50a7d74f9..8b1162dc7 100644 --- a/src/lib/commands/cede.c +++ b/src/lib/commands/cede.c @@ -273,10 +273,8 @@ grab_sect(register struct sctstr *sp, natid to) sp->sct_avail = 0; if (sp->sct_oldown == to) { - oldche = get_che_value(sp->sct_che); - set_che_value(oldche, 0); - set_che_cnum(oldche, 0); - sp->sct_che = oldche; + sp->sct_che = 0; /* FIXME where do these guys go? */ + sp->sct_che_target = 0; sp->sct_loyal = 0; } diff --git a/src/lib/commands/edit.c b/src/lib/commands/edit.c index dd902dad6..f22d9b808 100644 --- a/src/lib/commands/edit.c +++ b/src/lib/commands/edit.c @@ -284,13 +284,14 @@ prsect(struct sctstr *sect) xyas(sect->sct_dist_x, sect->sct_dist_y, player->cnum)); pr("Designation : %c\t New designation : %c\n", dchr[sect->sct_type].d_mnem, dchr[sect->sct_newtype].d_mnem); - pr("own oo eff mob min gld frt oil urn wrk lty che plg ptime fall avail\n"); - pr(" o O e m i g f c u w l x p t F a\n"); - pr("%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %4d %3d %5d %4d %5d\n", + pr("own oo eff mob min gld frt oil urn wrk lty che ctg plg ptime fall avail\n"); + pr(" o O e m i g f c u w l x X p t F a\n"); + pr("%3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %5d %4d %5d\n", sect->sct_own, sect->sct_oldown, sect->sct_effic, sect->sct_mobil, sect->sct_min, sect->sct_gmin, sect->sct_fertil, sect->sct_oil, sect->sct_uran, sect->sct_work, sect->sct_loyal, - sect->sct_che, sect->sct_pstage, sect->sct_ptime, + sect->sct_che, sect->sct_che_target, + sect->sct_pstage, sect->sct_ptime, sect->sct_fallout, sect->sct_avail); pr("Mines : %d\t", sect->sct_mines); @@ -586,11 +587,19 @@ doland(s_char op, int arg, s_char *p, struct sctstr *sect) break; case 'x': old = sect->sct_che; - new = errcheck(arg, 0, 65536); - pr("Guerillas in %s changed from %d to %d%\n", + new = errcheck(arg, 0, CHE_MAX); + pr("Guerillas in %s changed from %d to %d\n", xyas(sect->sct_x, sect->sct_y, player->cnum), old, new); sect->sct_che = new; break; + case 'X': + old = sect->sct_che_target; + new = errcheck(arg, 0, MAXNOC - 1); + pr("Old owner of %s changed from %s (#%d) to %s (#%d).\n", + xyas(sect->sct_x, sect->sct_y, player->cnum), + cname(old), old, cname(new), new); + sect->sct_che_target = new; + break; case 'p': old = sect->sct_pstage; new = errcheck(arg, 0, PLG_EXPOSED); diff --git a/src/lib/commands/hidd.c b/src/lib/commands/hidd.c index 732f2d144..8b23ea25a 100644 --- a/src/lib/commands/hidd.c +++ b/src/lib/commands/hidd.c @@ -71,8 +71,7 @@ hidd(void) pr(" %c %3d%% %3d %3d %3d %3d %3d %3d %3d", dchr[sect.sct_type].d_mnem, sect.sct_effic, sect.sct_oldown, sect.sct_loyal, - get_che_cnum(sect.sct_che), - get_che_value(sect.sct_che), + sect.sct_che_target, sect.sct_che, sect.sct_pstage, sect.sct_ptime, sect.sct_mines); pr("\n"); } diff --git a/src/lib/common/bridgefall.c b/src/lib/common/bridgefall.c index 7589cf398..13fc7ed28 100644 --- a/src/lib/common/bridgefall.c +++ b/src/lib/common/bridgefall.c @@ -166,4 +166,5 @@ knockdown(struct sctstr *sp, struct emp_qelem *list) sp->sct_pstage = PLG_HEALTHY; sp->sct_ptime = 0; sp->sct_che = 0; + sp->sct_che_target = 0; } diff --git a/src/lib/global/nsc.c b/src/lib/global/nsc.c index 455c93f67..5b4e4a715 100644 --- a/src/lib/global/nsc.c +++ b/src/lib/global/nsc.c @@ -130,6 +130,7 @@ struct castr sect_ca[] = { {NSC_DEITY | NSC_USHORT | NSC_OFF | fldoff(sctstr, sct_pstage), "pstage", 0}, {NSC_DEITY | NSC_USHORT | NSC_OFF | fldoff(sctstr, sct_ptime), "ptime", 0}, {NSC_DEITY | NSC_USHORT | NSC_OFF | fldoff(sctstr, sct_che), "che", 0}, + {NSC_DEITY | NSC_USHORT | NSC_OFF | fldoff(sctstr, sct_che_target), "che_target", 0}, {NSC_USHORT | NSC_OFF | fldoff(sctstr, sct_fallout), "fallout", 0}, {NSC_UCHAR | NSC_OFF | fldoff(sctstr, sct_road), "road", 0}, {NSC_UCHAR | NSC_OFF | fldoff(sctstr, sct_rail), "rail", 0}, diff --git a/src/lib/subs/takeover.c b/src/lib/subs/takeover.c index 84411a3f9..7e2d7d28a 100644 --- a/src/lib/subs/takeover.c +++ b/src/lib/subs/takeover.c @@ -51,7 +51,6 @@ takeover(register struct sctstr *sp, natid newown) struct plnstr *pp; struct lndstr *lp; int civ; - int che; int che_count; int oldche; int n; @@ -116,7 +115,7 @@ takeover(register struct sctstr *sp, natid newown) sp->sct_avail = 0; civ = sp->sct_item[I_CIVIL]; - oldche = get_che_value(sp->sct_che); + oldche = sp->sct_che; /* * create guerrillas from civilians * how spunky are these guys? @@ -124,7 +123,6 @@ takeover(register struct sctstr *sp, natid newown) */ n = (50 - sp->sct_loyal) + ((random() % 100) - 25); che_count = 0; - che = 0; if (n > 0 && sp->sct_own == sp->sct_oldown) { che_count = (civ * n / 3000) + 5; if (che_count * 2 > civ) @@ -139,10 +137,9 @@ takeover(register struct sctstr *sp, natid newown) che_count = oldche; } else che_count = oldche; - set_che_value(che, che_count); + sp->sct_che = che_count; if (newown != sp->sct_oldown) - set_che_cnum(che, newown); - sp->sct_che = che; + sp->sct_che_target = newown; sp->sct_item[I_CIVIL] = civ; if (sp->sct_oldown == newown || civ == 0) { /* diff --git a/src/lib/update/revolt.c b/src/lib/update/revolt.c index 75e79bac0..5f550024e 100644 --- a/src/lib/update/revolt.c +++ b/src/lib/update/revolt.c @@ -59,15 +59,11 @@ revolt(struct sctstr *sp) int che_uw; int civ; int uw; - u_short che_combo; int che; int n; - int target; - che_combo = sp->sct_che; - che = get_che_value(che_combo); - target = get_che_cnum(che_combo); - if (che_combo != 0 && (target != sp->sct_own || che >= CHE_MAX)) + che = sp->sct_che; + if (che != 0 && (sp->sct_che_target != sp->sct_own || che >= CHE_MAX)) return; civ = sp->sct_item[I_CIVIL]; uw = sp->sct_item[I_UW]; @@ -98,9 +94,8 @@ revolt(struct sctstr *sp) if (che_civ + che_uw > 0) { civ -= che_civ; uw -= che_uw; - set_che_cnum(che_combo, sp->sct_own); - set_che_value(che_combo, che); - sp->sct_che = che_combo; + sp->sct_che_target = sp->sct_own; + sp->sct_che = che; if (che_civ > 0) sp->sct_item[I_CIVIL] = civ; if (che_uw > 0) @@ -153,7 +148,6 @@ guerrilla(struct sctstr *sp) int convert; natid actor; natid victim; - u_short che_combo; int vec[I_MAX + 1]; int tmp; int min_mil; @@ -166,9 +160,8 @@ guerrilla(struct sctstr *sp) recruit = 0; convert = 0; move = 0; - if ((n = sp->sct_che) <= 0) + if (!sp->sct_che) return; - che_combo = n; if (getvec(VT_ITEM, vec, (s_char *)sp, EF_SECTOR) <= 0) return; civ = vec[I_CIVIL]; @@ -176,7 +169,7 @@ guerrilla(struct sctstr *sp) uw = vec[I_UW]; victim = sp->sct_own; actor = sp->sct_oldown; - che = get_che_value(che_combo); + che = sp->sct_che; mil = vec[I_MILIT]; snxtitem_xy(&ni, EF_LAND, sp->sct_x, sp->sct_y); @@ -214,10 +207,11 @@ guerrilla(struct sctstr *sp) /* Security forces killed all the che */ if (che <= 0) { sp->sct_che = 0; + sp->sct_che_target = 0; return; } - target = get_che_cnum(che_combo); + target = sp->sct_che_target; if (target == 0) { /* the deity can't be a target! */ return; @@ -228,6 +222,7 @@ guerrilla(struct sctstr *sp) logerror("%d Che targeted at country %d retiring", che, target); civ += che; sp->sct_che = 0; + sp->sct_che_target = 0; sp->sct_item[I_CIVIL] = civ; return; } @@ -402,11 +397,10 @@ guerrilla(struct sctstr *sp) continue; if (nsp->sct_own != target) continue; - if ((val = nsp->sct_che) > 0) { - che_combo = val; - if (get_che_cnum(che_combo) != target) + if (nsp->sct_che > 0) { + if (nsp->sct_che_target != target) continue; - if (get_che_value(che_combo) + che > CHE_MAX) + if (nsp->sct_che + che > CHE_MAX) continue; } val = nsp->sct_item[I_MILIT]; @@ -422,20 +416,18 @@ guerrilla(struct sctstr *sp) } /* if we found a nice sector, go there */ if (nicest_sp != 0) { - che_combo = nicest_sp->sct_che; - che += get_che_value(che_combo); - set_che_value(che_combo, che); - set_che_cnum(che_combo, target); - nicest_sp->sct_che = che_combo; + nicest_sp->sct_che += che; + nicest_sp->sct_che_target = target; che = 0; } } if (che > 0) { - set_che_value(che_combo, che); - set_che_cnum(che_combo, target); - sp->sct_che = che_combo; - } else + sp->sct_che = che; + sp->sct_che_target = target; + } else { sp->sct_che = 0; + sp->sct_che_target = 0; + } if (mc > 0 || cc > 0) { /* don't tell who won just to be mean */ wu(0, target,