From: Markus Armbruster Date: Sun, 9 Jan 2011 18:03:38 +0000 (+0100) Subject: Remove option SLOW_WAR X-Git-Tag: v4.3.27~164 X-Git-Url: http://git.pond.sub.org/?p=empserver;a=commitdiff_plain;h=439f111f9859393a787ce33694e0758ca8a090de Remove option SLOW_WAR SLOW_WAR has issues: * The check whether the attacker old-owns the attacked sector is broken, because att_abort() uses sect.sct_oldown uninitialized. Spotted by the Clang Static Analyzer. * Its implementation in setrel() is somewhat scary. It's actually okay, because that part of setrel() only runs within decl(). Other callers don't reach it: update_main() because player->god != 0 there, and the rest because they never pass a rel < HOSTILE. * Documentation is a bit vague. SLOW_WAR hasn't been used in a public game in years. Fixing it is not worth it, so remove it instead. --- diff --git a/include/econfig-spec.h b/include/econfig-spec.h index 31a9f2065..4e69aecfe 100644 --- a/include/econfig-spec.h +++ b/include/econfig-spec.h @@ -181,8 +181,6 @@ EMPCF_OPT("RES_POP", opt_RES_POP, "Population is limited by research") EMPCF_OPT("SAIL", opt_SAIL, "Enable sail command") -EMPCF_OPT("SLOW_WAR", opt_SLOW_WAR, - "Declaring war takes time") EMPCF_OPT("SUPER_BARS", opt_SUPER_BARS, "Make bars immune to damage") EMPCF_OPT("TECH_POP", opt_TECH_POP, @@ -207,8 +205,6 @@ EMPCFBOTH("at_least_one_100", at_least_one_100, int, NSC_INT, KM_INTERNAL, "Initialize new countries with at least one sector with 100 of all resource") EMPCFBOTH("start_cash", start_cash, long, NSC_LONG, KM_INTERNAL, "Starting cash for new countries") -EMPCFBOTH("war_cost", War_Cost, int, NSC_INT, 0, - "Cost to declare war (if SLOW_WAR is on)") EMPCF_COMMENT("\n\n### Technology/Research/Education/Happiness") EMPCFBOTH("easy_tech", easy_tech, float, NSC_FLOAT, 0, diff --git a/include/nat.h b/include/nat.h index 9bdab545b..e8c0d736e 100644 --- a/include/nat.h +++ b/include/nat.h @@ -120,12 +120,10 @@ struct natstr { /* nation relation codes */ #define AT_WAR 0 -#define SITZKRIEG 1 -#define MOBILIZATION 2 -#define HOSTILE 3 -#define NEUTRAL 4 -#define FRIENDLY 5 -#define ALLIED 6 +#define HOSTILE 1 +#define NEUTRAL 2 +#define FRIENDLY 3 +#define ALLIED 4 /* nation reject codes */ #define REJ_TELE bit(0) /* dont allow telegrams to be sent */ diff --git a/info/Attacking.t b/info/Attacking.t index 0034c22a2..7b6f42be5 100644 --- a/info/Attacking.t +++ b/info/Attacking.t @@ -44,10 +44,6 @@ The "assault" command is the only command which will let you attack your own sector (you can use this to get mil & assault units on shore). You should not "attack" unowned land (see info explore). .s1 -If the SLOW_WAR option is enabled, you will not be able to attack -a sector owned by a country you are not AT_WAR with, unless you -are the old owner of the sector. -.s1 .L "(2) Ask the aggressor further details about the offensive force." .s1 When you board, you are asked for a ship or sector to board from. diff --git a/info/Options.t b/info/Options.t index 811f121ed..aff702585 100644 --- a/info/Options.t +++ b/info/Options.t @@ -11,7 +11,6 @@ The following options were introduced in the Chainsaw server: EASY_BRIDGES: bridges can be built from any sector SUPER_BARS: gold bars aren't destroyed by shelling or bombing ALL_BLEED: you get tech bleed from all countries, not just allies -SLOW_WAR: War declaring takes time. No land attacks unless at war. NOMOBCOST: ships pay 0 mob to fire. Subs pay 1/2 a sect's movement cost TRADESHIPS: you can build/nav/scuttle trade ships to make money RES_POP: Research affects max sector population. diff --git a/info/declare.t b/info/declare.t index 90ae13a38..150073cdf 100644 --- a/info/declare.t +++ b/info/declare.t @@ -15,31 +15,6 @@ which case you will declare towards all nations. For a complete list of the meanings of all the different types of relations, see "info relations". .s1 -GOING TO WAR -.s1 -(Note: the following stuff is only in effect if the SLOW_WAR option is selected) -With the SLOW_WAR option in use, you cannot attack the land of someone you are -not at war with. When you declare war on -someone, your relation goes to \*Qmobilizing\*U. You still can't attack them. -After the next update, your relation goes to \*Qsitzkrieg\*U, and you still -can't attack them. After the NEXT update, you're at war with them, and anything -goes. -.s1 -If someone is \*Qmobilizing\*U or in \*Qsitzkrieg\*U, or at war with you, -and you -declare war against them, your relation is set to be the same as theirs, so -there is no way to gain any advantage through this stuff. It just means that -you can't sneak-attack people. -.s1 -The first person who declares war pays $1000. Return declarations are -free. -.s1 -There is an exception to the SLOW_WAR restrictions. If you are listed as -the old owner of a sector, you are still allowed to attack it. This is to -prevent someone from declaring war with you, taking some sectors, then -declaring neutrality before you declare war. (Assuming you didn't notice -their declaration of war) -.s1 The newspaper is very interested in declarations of war or alliance -- don't expect to keep such declarations secret. .s1 diff --git a/info/fire.t b/info/fire.t index 3c0ab514b..1a1e1b314 100644 --- a/info/fire.t +++ b/info/fire.t @@ -7,9 +7,6 @@ changes. It is still used to shoot up land sectors or ships. However, you may now use multiple ships, units, sectors to fire from. Return fire is spread amongst all the firing things. .s1 -If the SLOW_WAR option is in use, you cannot fire on the -land of any nation you are not at war with. (see info relations) -.s1 The general form for shooting at land from a sector is: .EX fire sect Where is the victim sector, diff --git a/info/relations.t b/info/relations.t index 9b9a03b9f..66f880d6b 100644 --- a/info/relations.t +++ b/info/relations.t @@ -30,8 +30,7 @@ report. .FI .s1 Relations are: \*QAllied\*U, \*QFriendly\*U, \*QNeutral\*U, -\*QHostile\*U, \*QMobilizing\*U, \*QSitzkrieg\*U, and \*QAt -War\*U. Each has certain ramifications. +\*QHostile\*U, and \*QAt War\*U. Each has certain ramifications. .s1 .L Allied Your ally is someone you trust deeply, and are willing to make @@ -85,19 +84,4 @@ attacks you, you become hostile towards them. If someone you are neutral to over-flies or attacks you, you become hostile towards them. Neither of these progressions can lead to war, however, they both stop at hostility. .s1 -The following paragraphs apply only if the SLOW_WAR option is used. -.s1 -.L Mobilizing -If you are Mobilizing, it means that you have declared war, and are getting -ready to attack. You cannot attack someone's land until you are actually -\*QAt War\*U. At the next update, you will automatically move to -\*QSitzkrieg\*U. Your interdiction of the enemy will be the same as -if you were hostile towards them. -.s1 -.L Sitzkrieg -Sitzkrieg is the same as \*QMobilizing\*U. You still are unable to attack -their land. At the next update, you will automatically move to \*QAt War\*U. -.s1 -When you are At War with someone, you may attack them willy-nilly. -.s1 .SA "Diplomacy" diff --git a/info/version.t b/info/version.t index 097d2a70e..b7131530f 100644 --- a/info/version.t +++ b/info/version.t @@ -81,8 +81,7 @@ Options enabled in this game: Options disabled in this game: AUTO_POWER, GO_RENEW, GUINEA_PIGS, HIDDEN, LOANS, LOSE_CONTACT, MARKET, - MOB_ACCESS, NO_FORT_FIRE, RES_POP, SLOW_WAR, SUPER_BARS, TECH_POP, - TRADESHIPS + MOB_ACCESS, NO_FORT_FIRE, RES_POP, SUPER_BARS, TECH_POP, TRADESHIPS See "info Options" for a detailed list of options and descriptions. diff --git a/src/lib/commands/assa.c b/src/lib/commands/assa.c index 3a66ea9fc..9fbd30e2f 100644 --- a/src/lib/commands/assa.c +++ b/src/lib/commands/assa.c @@ -173,8 +173,7 @@ assa(void) putland(llp->unit.land.lnd_uid, &llp->unit.land); } else { pr("%s was spotted", prland(&llp->unit.land)); - if (rel == HOSTILE || rel == AT_WAR || rel == SITZKRIEG || - rel == MOBILIZATION) { + if (rel <= HOSTILE) { wu(0, def->own, "%s spy shot and killed in %s.\n", cname(player->cnum), xyas(def->x, def->y, def->own)); diff --git a/src/lib/commands/bomb.c b/src/lib/commands/bomb.c index 5fb2bc988..33cecb2c9 100644 --- a/src/lib/commands/bomb.c +++ b/src/lib/commands/bomb.c @@ -95,8 +95,6 @@ bomb(void) char mission; struct plist *plp; struct emp_qelem *qp, *next; - int rel; - struct natstr *natp; char buf[1024]; if (get_planes(&ni_bomb, &ni_esc, player->argp[1], player->argp[2]) < 0) @@ -160,20 +158,6 @@ bomb(void) } break; case 's': - if (opt_SLOW_WAR) { - natp = getnatp(player->cnum); - if (target.sct_own) { - rel = getrel(natp, target.sct_own); - if ((rel != AT_WAR) && (player->cnum != target.sct_own) - && (target.sct_own) && - (target.sct_oldown != player->cnum)) { - pr("You're not at war with them!\n"); - pln_put(&bomb_list); - pln_put(&esc_list); - return RET_FAIL; - } - } - } nreport(player->cnum, N_SCT_BOMB, target.sct_own, 1); strat_bomb(&bomb_list, &target); break; @@ -197,8 +181,6 @@ pin_bomb(struct emp_qelem *list, struct sctstr *target) char *p; int nsubs; int nunits; - struct natstr *natp; - int rel; char buf[1024]; int i; @@ -229,18 +211,6 @@ pin_bomb(struct emp_qelem *list, struct sctstr *target) } switch (*p) { case 'l': - if (opt_SLOW_WAR) { - natp = getnatp(player->cnum); - if (target->sct_own) { - rel = getrel(natp, target->sct_own); - if ((rel != AT_WAR) && (player->cnum != target->sct_own) - && (target->sct_own) && - (target->sct_oldown != player->cnum)) { - pr("You're not at war with them!\n"); - goto retry; - } - } - } if (nunits == 0) { pr("no units there\n"); goto retry; @@ -248,18 +218,6 @@ pin_bomb(struct emp_qelem *list, struct sctstr *target) land_bomb(list, target); break; case 'p': - if (opt_SLOW_WAR) { - natp = getnatp(player->cnum); - if (target->sct_own) { - rel = getrel(natp, target->sct_own); - if ((rel != AT_WAR) && (player->cnum != target->sct_own) - && (target->sct_own) && - (target->sct_oldown != player->cnum)) { - pr("You're not at war with them!\n"); - goto retry; - } - } - } if (nplanes == 0) { pr("no planes there\n"); goto retry; @@ -281,19 +239,6 @@ pin_bomb(struct emp_qelem *list, struct sctstr *target) ship_bomb(list, target); break; case 'c': - if (opt_SLOW_WAR) { - natp = getnatp(player->cnum); - if (target->sct_own) { - rel = getrel(natp, target->sct_own); - if ((rel != AT_WAR) && (player->cnum != target->sct_own) - && (target->sct_own) && - (target->sct_oldown != player->cnum)) { - pr("You're not at war with them!\n"); - goto retry; - } - } - } - for (i = 0; i < nbomb; i++) { if (!target->sct_item[bombcomm[i]]) continue; @@ -307,18 +252,6 @@ pin_bomb(struct emp_qelem *list, struct sctstr *target) comm_bomb(list, target); break; case 'e': - if (opt_SLOW_WAR) { - natp = getnatp(player->cnum); - if (target->sct_own) { - rel = getrel(natp, target->sct_own); - if ((rel != AT_WAR) && (player->cnum != target->sct_own) - && (target->sct_own) && - (target->sct_oldown != player->cnum)) { - pr("You're not at war with them!\n"); - goto retry; - } - } - } eff_bomb(list, target); break; case 'q': diff --git a/src/lib/commands/decl.c b/src/lib/commands/decl.c index ea626cfc6..40190b292 100644 --- a/src/lib/commands/decl.c +++ b/src/lib/commands/decl.c @@ -64,20 +64,6 @@ decl(void) case 'h': rel = HOSTILE; break; - case 'm': - if (!opt_SLOW_WAR) - return RET_SYN; - if (!player->god) - return RET_SYN; - rel = MOBILIZATION; - break; - case 's': - if (!opt_SLOW_WAR) - return RET_SYN; - if (!player->god) - return RET_SYN; - rel = SITZKRIEG; - break; case 'w': rel = AT_WAR; break; diff --git a/src/lib/commands/laun.c b/src/lib/commands/laun.c index dac323240..aac9fa179 100644 --- a/src/lib/commands/laun.c +++ b/src/lib/commands/laun.c @@ -182,8 +182,6 @@ launch_missile(struct plnstr *pp) struct mchrstr *mcp; struct shpstr target_ship; struct sctstr sect; - int rel; - struct natstr *natp; struct nukstr nuke; char buf[1024]; @@ -230,18 +228,6 @@ launch_missile(struct plnstr *pp) if (msl_equip(pp, 's') < 0) return RET_FAIL; getsect(sx, sy, §); - if (opt_SLOW_WAR) { - natp = getnatp(player->cnum); - rel = getrel(natp, sect.sct_own); - if ((rel != AT_WAR) && (sect.sct_own != player->cnum) && - (sect.sct_own) && (sect.sct_oldown != player->cnum)) { - pr("You are not at war with the player->owner of the target sector!\n"); - pr_beep(); - pr("Kaboom!!!\n"); - pr("Missile monitoring officer destroys RV before detonation.\n"); - return RET_OK; - } - } if (msl_launch(pp, EF_SECTOR, "sector", sx, sy, sect.sct_own, &sublaunch) < 0) return RET_OK; diff --git a/src/lib/commands/mfir.c b/src/lib/commands/mfir.c index 7d38da78c..f2e3b7a71 100644 --- a/src/lib/commands/mfir.c +++ b/src/lib/commands/mfir.c @@ -82,8 +82,6 @@ multifire(void) struct shpstr vship; struct sctstr vsect; enum targ_type target; - int rel; - struct natstr *natp; struct nstr_item nbst; int type; struct empobj *attgp; @@ -416,17 +414,6 @@ multifire(void) break; } - if (opt_SLOW_WAR) { - if (target == targ_land) { - natp = getnatp(player->cnum); - rel = getrel(natp, vict); - if ((rel != AT_WAR) && (player->cnum != vict) && - (vict) && (vsect.sct_oldown != player->cnum)) { - pr("You're not at war with them!\n"); - continue; - } - } - } nfiring++; switch (target) { case targ_sub: diff --git a/src/lib/commands/vers.c b/src/lib/commands/vers.c index 5a1cbd009..294e746a3 100644 --- a/src/lib/commands/vers.c +++ b/src/lib/commands/vers.c @@ -101,8 +101,6 @@ vers(void) if (rollover_avail_max) pr("Up to %d avail can roll over an update.\n", rollover_avail_max); - if (opt_SLOW_WAR) - pr("Declaring war will cost you $%i\n\n", War_Cost); pr("Happiness p.e. requires 1 happy stroller per %d civ.\n", (int)hap_cons / etu_per_update); pr("Education p.e. requires 1 class of graduates per %d civ.\n", diff --git a/src/lib/common/nat.c b/src/lib/common/nat.c index d0f3463ee..e71e1cf81 100644 --- a/src/lib/common/nat.c +++ b/src/lib/common/nat.c @@ -42,8 +42,7 @@ char *relates[] = { /* must follow nation relation defines in nat.h */ - "At War", "Sitzkrieg", "Mobilizing", "Hostile", "Neutral", "Friendly", - "Allied" + "At War", "Hostile", "Neutral", "Friendly", "Allied" }; char * diff --git a/src/lib/global/constants.c b/src/lib/global/constants.c index d95b9e89f..7c455c3eb 100644 --- a/src/lib/global/constants.c +++ b/src/lib/global/constants.c @@ -191,9 +191,6 @@ double buil_tower_bt = 100.0; /* tech level required to build a tower */ int buil_tower_bh = 400; /* hcm required to build a bridge tower */ double buil_tower_bc = 3000.0; /* cash required to build a bridge tower */ -/* opt_SLOW_WAR */ -int War_Cost = 1000; /* Cost to declare war */ - float drnuke_const = 0.0; /* research must be at least drnuke_const*tech */ /* in order to build a nuke. For example, if * drnuke_const is .25, you need a 75 res to diff --git a/src/lib/global/options.c b/src/lib/global/options.c index 1c85d950e..8ad75521a 100644 --- a/src/lib/global/options.c +++ b/src/lib/global/options.c @@ -59,7 +59,6 @@ int opt_NO_PLAGUE = 1; int opt_RAILWAYS = 1; int opt_RES_POP = 0; int opt_SAIL = 1; -int opt_SLOW_WAR = 0; int opt_SUPER_BARS = 0; int opt_TECH_POP = 0; int opt_TRADESHIPS = 0; diff --git a/src/lib/global/symbol.c b/src/lib/global/symbol.c index f27312fce..835827a35 100644 --- a/src/lib/global/symbol.c +++ b/src/lib/global/symbol.c @@ -139,8 +139,6 @@ struct symbol nation_rejects[] = { struct symbol nation_relations[] = { {-1, "unknown"}, {AT_WAR, "at-war"}, - {SITZKRIEG, "sitzkrieg"}, - {MOBILIZATION, "mobilization"}, {HOSTILE, "hostile"}, {NEUTRAL, "neutral"}, {FRIENDLY, "friendly"}, diff --git a/src/lib/subs/attsub.c b/src/lib/subs/attsub.c index 0edf5d148..e2651352d 100644 --- a/src/lib/subs/attsub.c +++ b/src/lib/subs/attsub.c @@ -435,9 +435,6 @@ int att_abort(int combat_mode, struct combat *off, struct combat *def) { struct sctstr sect; - int rel; - char y_or_n[512]; - struct natstr *natp; if (player->aborted) return 1; @@ -513,23 +510,7 @@ att_abort(int combat_mode, struct combat *off, struct combat *def) setcont(player->cnum, def->own, FOUND_SPY); setcont(def->own, player->cnum, FOUND_SPY); } - if (opt_SLOW_WAR && def->own != player->cnum) { - natp = getnatp(player->cnum); - rel = getrel(natp, def->own); - if (rel == ALLIED) { - sprintf(y_or_n, "Sector is owned by %s, your ally, %s [yn]? ", - cname(def->own), att_mode[combat_mode]); - if (!confirm(y_or_n)) - return abort_attack(); - - } - if ((rel != AT_WAR) && (def->own) && - (sect.sct_oldown != player->cnum)) { - pr("You're not at war with them!\n"); - return abort_attack(); - } - } return 0; } diff --git a/src/lib/subs/lndsub.c b/src/lib/subs/lndsub.c index d37f3eb93..4164f75f7 100644 --- a/src/lib/subs/lndsub.c +++ b/src/lib/subs/lndsub.c @@ -1011,8 +1011,7 @@ lnd_mar_one_sector(struct emp_qelem *list, int dir, natid actor, "%s unit spotted in %s\n", cname(player->cnum), xyas(sect.sct_x, sect.sct_y, sect.sct_own)); setrel(sect.sct_own, llp->unit.land.lnd_own, HOSTILE); - } else if (rel == HOSTILE || rel == AT_WAR || - rel == SITZKRIEG || rel == MOBILIZATION) { + } else if (rel <= HOSTILE) { wu(0, sect.sct_own, "%s spy shot in %s\n", cname(player->cnum), xyas(sect.sct_x, sect.sct_y, sect.sct_own)); diff --git a/src/lib/subs/mission.c b/src/lib/subs/mission.c index bac815886..23b3b0e91 100644 --- a/src/lib/subs/mission.c +++ b/src/lib/subs/mission.c @@ -298,7 +298,6 @@ build_mission_list_type(struct genlist *mi, coord x, coord y, int mission, struct empobj *gp; union empobj_storage item; int relat; - struct sctstr sect; snxtitem_all(&ni, type); while (nxtitem(&ni, &item)) { @@ -329,25 +328,6 @@ build_mission_list_type(struct genlist *mi, coord x, coord y, int mission, if (!in_oparea(gp, x, y)) continue; - if (opt_SLOW_WAR) { - if (mission != MI_AIR_DEFENSE) { - getsect(x, y, §); - if (getrel(getnatp(gp->own), sect.sct_own) > AT_WAR) { - - /* - * If the owner of the unit isn't at war - * with the victim, and doesn't own the - * sect being acted upon, and isn't the - * old owner of that sect, bounce them. - */ - if (sect.sct_type != SCT_WATER && - sect.sct_own != gp->own && - sect.sct_oldown != gp->own) - continue; - } - } - } - glp = malloc(sizeof(struct genlist)); memset(glp, 0, sizeof(struct genlist)); glp->thing = malloc(sizeof(item)); diff --git a/src/lib/subs/rej.c b/src/lib/subs/rej.c index c3f2079fa..77faac4b6 100644 --- a/src/lib/subs/rej.c +++ b/src/lib/subs/rej.c @@ -53,7 +53,6 @@ setrel(natid us, natid them, int rel) int n_up = 0; int n_down = 0; char *addendum = NULL; - int theirrel; if (rel < AT_WAR) rel = AT_WAR; @@ -84,34 +83,6 @@ setrel(natid us, natid them, int rel) n_up = N_UP_HOSTILE; n_down = N_DOWN_HOSTILE; } else if (rel < HOSTILE) { - if (opt_SLOW_WAR) { - struct natstr *natp2; - double cost; - - if (!player->god) { - natp2 = themnp; - theirrel = getrel(natp2, us); - if (theirrel <= MOBILIZATION) { - rel = theirrel; - cost = 0; - } else if (us == player->cnum && !update_running) { - if (mynp->nat_money < War_Cost) { - mpr(us, "You don't have the money!\n"); - return RET_FAIL; - } - rel = MOBILIZATION; - cost = War_Cost; - } else { /* nreport is forcing us to decl war */ - return RET_FAIL; - } - if (rel >= oldrel) { - if (us == player->cnum && !update_running) - mpr(us, "No change required for that!\n"); - return RET_FAIL; - } - player->dolcost += cost; - } - } addendum = "Declaration made (give 'em hell)."; n_down = N_DECL_WAR; } diff --git a/src/lib/update/main.c b/src/lib/update/main.c index 2084f1505..60547d2a4 100644 --- a/src/lib/update/main.c +++ b/src/lib/update/main.c @@ -59,8 +59,7 @@ update_main(void) int n; int i; struct bp *bp; - int cn, cn2, rel; - struct natstr *cnp; + int cn; struct natstr *np; logerror("production update (%d etus)", etu); @@ -130,26 +129,7 @@ update_main(void) prod_nat(etu); age_levels(etu); free(bp); - if (opt_SLOW_WAR) { - /* Update war declarations */ - /* MOBILIZATION->SITZKRIEG->AT_WAR */ - for (cn = 1; cn < MAXNOC; cn++) { - if (!(cnp = getnatp(cn))) - break; - for (cn2 = 1; cn2 < MAXNOC; cn2++) { - if (cn2 == cn) - continue; - rel = getrel(cnp, cn2); - if (rel == MOBILIZATION) { - rel = SITZKRIEG; - setrel(cn, cn2, rel); - } else if (rel == SITZKRIEG) { - rel = AT_WAR; - setrel(cn, cn2, rel); - } - } - } - } + /* Only update mobility for non-MOB_ACCESS here, since it doesn't get done for MOB_ACCESS anyway during the update */ if (!opt_MOB_ACCESS) {