diff --git a/include/prototypes.h b/include/prototypes.h index 5e193e66..254dc490 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -290,6 +290,7 @@ extern int blksize(int); extern time_t fdate(int); /* hap_fact.c */ extern double hap_fact(struct natstr *, struct natstr *); +extern double hap_req(struct natstr *np); /* hours.c */ extern int is_wday_allowed(int, char *); extern int is_daytime_allowed(int, char *); diff --git a/src/lib/commands/nati.c b/src/lib/commands/nati.c index db8dacf0..6fdc412c 100644 --- a/src/lib/commands/nati.c +++ b/src/lib/commands/nati.c @@ -47,7 +47,7 @@ nati(void) { struct natstr *natp; struct sctstr sect; - float hap; + double hap; int mil; int civ; int cnum; @@ -122,11 +122,9 @@ nati(void) pr("Max safe population for civs/uws: %d/%d\n", safepop, uwpop); - hap = ((natp->nat_level[NAT_TLEV] - 40) / 40.0 + - natp->nat_level[NAT_ELEV] / 3.0); - + hap = hap_req(natp); if (hap > 0.0) - pr("Happiness needed is %f\n", hap); + pr("Happiness needed is %.2f\n", hap); else pr("No happiness needed\n"); diff --git a/src/lib/common/hap_fact.c b/src/lib/common/hap_fact.c index 94efa32e..112f168b 100644 --- a/src/lib/common/hap_fact.c +++ b/src/lib/common/hap_fact.c @@ -62,3 +62,11 @@ hap_fact(struct natstr *tnat, struct natstr *vnat) hap_fact = 0.8; return hap_fact; } + +/* Return happiness required to keep NP's citizens happy. */ +double +hap_req(struct natstr *np) +{ + return (np->nat_level[NAT_TLEV] - 40.0) / 40.0 + + np->nat_level[NAT_ELEV] / 3.0; +} diff --git a/src/lib/update/populace.c b/src/lib/update/populace.c index eadb81bf..2bb5349a 100644 --- a/src/lib/update/populace.c +++ b/src/lib/update/populace.c @@ -49,10 +49,7 @@ void populace(struct natstr *np, struct sctstr *sp, int etu) { - float hap; - float tech; - float edu; - float pct; + double hap, pct; int n; int civ = sp->sct_item[I_CIVIL]; int mil = sp->sct_item[I_MILIT]; @@ -74,11 +71,9 @@ populace(struct natstr *np, struct sctstr *sp, int etu) } hap = np->nat_level[NAT_HLEV]; - edu = np->nat_level[NAT_ELEV]; - tech = np->nat_level[NAT_TLEV]; - pct = (double)((tech - 40) / 40.0 + edu / 3.0); + pct = hap_req(np); if (sp->sct_own == sp->sct_oldown && hap < pct && - chance(((double)pct - (double)hap) / (double)5.0)) { + chance((pct - hap) / 5.0)) { /* * zap the loyalty of unhappy civilians. * there is a 20% chance per hap point below the