/*
* 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)
{
return np->nat_cnam;
}
-char *
-relatename(struct natstr *np, natid other)
-{
- return relates[getrel(np, other)];
-}
-
char *
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
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)
{
}
/*
- * 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);
}