]> git.pond.sub.org Git - empserver/blobdiff - src/lib/common/nat.c
Update copyright notice
[empserver] / src / lib / common / nat.c
index eef71ccdf396f025ef6541044c8436e017d6e631..9997805f227fc21780670e2633391e19f8f00a6c 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2016, Dave Pare, Jeff Bailey, Thomas Ruschak,
+ *  Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak,
  *                Ken Stevens, Steve McClure, Markus Armbruster
  *
  *  Empire is free software: you can redistribute it and/or modify
 #include "sect.h"
 #include "tel.h"
 
-char *relates[] = {
-    /* must follow nation relation defines in nat.h */
-    "At War", "Hostile", "Neutral", "Friendly", "Allied"
-};
-
 char *
 cname(natid n)
 {
@@ -56,12 +51,6 @@ cname(natid n)
     return np->nat_cnam;
 }
 
-char *
-relatename(struct natstr *np, natid other)
-{
-    return relates[getrel(np, other)];
-}
-
 char *
 natstate(struct natstr *np)
 {
@@ -72,27 +61,32 @@ natstate(struct natstr *np)
     return stnam[np->nat_stat];
 }
 
-/* This returns the relations that np has with them */
-int
-getrel(struct natstr *np, natid them)
-{
-    return np->nat_relate[them];
-}
-
 /*
  * Return relations @us has with @them.
  * Countries are considered allied to themselves.
  */
-int
+enum relations
 relations_with(natid us, natid them)
 {
-    return us == them ? ALLIED : getrel(getnatp(us), them);
+    return us == them ? ALLIED : getrelatp(us)->rel_relate[them];
+}
+
+char *
+relations_string(enum relations rel)
+{
+    static char *relates[] = {
+       /* must match enum relations */
+       "At War", "Hostile", "Neutral", "Friendly", "Allied"
+    };
+
+    return relates[rel];
 }
 
 int
-getrejects(natid them, struct natstr *np)
+nat_accepts(natid us, natid them, enum rej_comm what)
 {
-    return np->nat_rejects[them];
+    return getnatp(them)->nat_stat == STAT_GOD
+       || !(getrejectp(us)->rej_rejects[them] & bit(what));
 }
 
 void
@@ -115,21 +109,6 @@ in_contact(natid us, natid them)
     return getcontactp(us)->con_contact[them];
 }
 
-void
-putrel(struct natstr *np, natid them, int relate)
-{
-    np->nat_relate[them] = relate;
-}
-
-void
-putreject(struct natstr *np, natid them, int how, int what)
-{
-    if (how)
-       np->nat_rejects[them] |= what;
-    else
-       np->nat_rejects[them] &= ~what;
-}
-
 int
 influx(struct natstr *np)
 {
@@ -146,37 +125,40 @@ influx(struct natstr *np)
 }
 
 /*
- * Initialize @natp for country #@cnum in status @stat.
+ * Initialize country #@cnum in status @stat.
  * @stat must be STAT_UNUSED, STAT_NEW, STAT_VIS or STAT_GOD.
  * Also wipe realms and telegrams.
  */
-struct natstr *
-nat_reset(struct natstr *natp, natid cnum, char *name, char *rep,
-         enum nat_status stat)
+void
+nat_reset(natid cnum, char *name, char *rep, enum nat_status stat)
 {
+    struct natstr nat;
+    struct relatstr relat;
     struct realmstr newrealm;
     char buf[1024];
     int i;
 
-    ef_blank(EF_NATION, cnum, natp);
-    natp->nat_stat = stat;
-    strncpy(natp->nat_cnam, name, sizeof(natp->nat_cnam) - 1);
-    strncpy(natp->nat_pnam, rep, sizeof(natp->nat_pnam) - 1);
+    ef_blank(EF_NATION, cnum, &nat);
+    ef_blank(EF_RELAT, cnum, &relat);
+    nat.nat_stat = stat;
+    strncpy(nat.nat_cnam, name, sizeof(nat.nat_cnam) - 1);
+    strncpy(nat.nat_pnam, rep, sizeof(nat.nat_pnam) - 1);
     if (stat == STAT_GOD)
-       natp->nat_money = 123456789;
+       nat.nat_money = 123456789;
     for (i = 0; i < MAXNOR; i++) {
        ef_blank(EF_REALM, i + cnum * MAXNOR, &newrealm);
        putrealm(&newrealm);
     }
     mailbox_create(mailbox(buf, cnum));
-    /* FIXME natp->nat_ann = #annos */
-    natp->nat_level[NAT_HLEV] = start_happiness;
-    natp->nat_level[NAT_RLEV] = start_research;
-    natp->nat_level[NAT_TLEV] = start_technology;
-    natp->nat_level[NAT_ELEV] = start_education;
+    /* FIXME nat.nat_ann = #annos */
+    nat.nat_level[NAT_HLEV] = start_happiness;
+    nat.nat_level[NAT_RLEV] = start_research;
+    nat.nat_level[NAT_TLEV] = start_technology;
+    nat.nat_level[NAT_ELEV] = start_education;
     for (i = 0; i < MAXNOC; i++)
-       natp->nat_relate[i] = NEUTRAL;
-    natp->nat_flags =
+       relat.rel_relate[i] = NEUTRAL;
+    nat.nat_flags =
        NF_FLASH | NF_BEEP | NF_COASTWATCH | NF_SONAR | NF_TECHLISTS;
-    return natp;
+    putnat(&nat);
+    putrelat(&relat);
 }