"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,
"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,
/* 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 */
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.
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.
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
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 <ASECTS> <VSECT>
Where <VSECT> is the victim sector,
.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
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"
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.
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));
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)
}
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;
char *p;
int nsubs;
int nunits;
- struct natstr *natp;
- int rel;
char buf[1024];
int i;
}
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;
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;
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;
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':
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;
struct mchrstr *mcp;
struct shpstr target_ship;
struct sctstr sect;
- int rel;
- struct natstr *natp;
struct nukstr nuke;
char buf[1024];
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;
struct shpstr vship;
struct sctstr vsect;
enum targ_type target;
- int rel;
- struct natstr *natp;
struct nstr_item nbst;
int type;
struct empobj *attgp;
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:
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",
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 *
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
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;
struct symbol nation_relations[] = {
{-1, "unknown"},
{AT_WAR, "at-war"},
- {SITZKRIEG, "sitzkrieg"},
- {MOBILIZATION, "mobilization"},
{HOSTILE, "hostile"},
{NEUTRAL, "neutral"},
{FRIENDLY, "friendly"},
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;
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;
}
"%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));
struct empobj *gp;
union empobj_storage item;
int relat;
- struct sctstr sect;
snxtitem_all(&ni, type);
while (nxtitem(&ni, &item)) {
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));
int n_up = 0;
int n_down = 0;
char *addendum = NULL;
- int theirrel;
if (rel < AT_WAR)
rel = AT_WAR;
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;
}
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);
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) {