diff --git a/include/prototypes.h b/include/prototypes.h index 79b96ce6..2e4e9506 100644 --- a/include/prototypes.h +++ b/include/prototypes.h @@ -59,7 +59,6 @@ extern int edit_sect_i(struct sctstr *, char *, int); extern int load_comm_ok(struct sctstr *, natid, i_type, int); extern void gift(natid, natid, void *, char *); extern int display_mark(i_type, int); -extern int count_pop(int); extern int line_of_sight(char **rad, int ax, int ay, int bx, int by); extern void plane_sona(struct emp_qelem *, int, int, struct shiplist **); extern char *prsub(struct shpstr *); diff --git a/include/update.h b/include/update.h index 1d93a051..edb9bd79 100644 --- a/include/update.h +++ b/include/update.h @@ -73,7 +73,6 @@ struct budget { /* main.c */ extern struct budget nat_budget[MAXNOC]; -extern int tpops[MAXNOC]; /* nat.c */ extern float levels[MAXNOC][4]; diff --git a/src/lib/commands/budg.c b/src/lib/commands/budg.c index 63003fae..10f04331 100644 --- a/src/lib/commands/budg.c +++ b/src/lib/commands/budg.c @@ -163,7 +163,6 @@ calc_all(void) bank_income(sp, etu); } } - tpops[player->cnum] = budget->oldowned_civs; upd_slmilcosts(etu, player->cnum); pay_reserve(np, etu); diff --git a/src/lib/commands/prod.c b/src/lib/commands/prod.c index 86cd7847..22ff9b7d 100644 --- a/src/lib/commands/prod.c +++ b/src/lib/commands/prod.c @@ -37,27 +37,42 @@ #include #include "commands.h" #include "item.h" +#include "land.h" #include "optlist.h" #include "product.h" +#include "ship.h" #include "update.h" static void prprod(struct sctstr *, double, double, char, double, double, double, char[], int[], int[], int); -int -count_pop(int n) +static int +count_pop(void) { + /* FIXME don't duplicate the update's workings, use its code */ int i; int pop = 0; - struct sctstr *sp; + struct sctstr *sectp; + struct shpstr *sp; + struct lndstr *lp; - for (i = 0; NULL != (sp = getsectid(i)); i++) { - if (sp->sct_own != n) - continue; - if (sp->sct_oldown != n) - continue; - pop += sp->sct_item[I_CIVIL]; + for (i = 0; (sectp = getsectid(i)); i++) { + if (sectp->sct_own == player->cnum) { + if (sectp->sct_own == sectp->sct_oldown) + pop += sectp->sct_item[I_CIVIL]; + } } + + for (i = 0; (sp = getshipp(i)); i++) { + if (sp->shp_own == player->cnum) + pop += sp->shp_item[I_CIVIL]; + } + + for (i = 0; (lp = getlandp(i)); i++) { + if (lp->lnd_own == player->cnum) + pop += lp->lnd_item[I_CIVIL]; + } + return pop; } @@ -70,7 +85,7 @@ prod(void) struct pchrstr *pp; double p_e; double prodeff; - int totpop; + int totpop = -1; double cost; int i; int nsect; @@ -155,7 +170,8 @@ prod(void) cost = take * pp->p_cost; if (opt_TECH_POP) { if (pp->p_level == NAT_TLEV) { - totpop = count_pop(sect.sct_own); + if (totpop < 0) + totpop = count_pop(); if (totpop > 50000) cost *= totpop / 50000.0; } diff --git a/src/lib/update/main.c b/src/lib/update/main.c index 643b9d51..cb1cf295 100644 --- a/src/lib/update/main.c +++ b/src/lib/update/main.c @@ -47,7 +47,6 @@ #include "update.h" struct budget nat_budget[MAXNOC]; -int tpops[MAXNOC]; void update_main(void) @@ -87,7 +86,6 @@ update_main(void) if (!(np = getnatp(n))) continue; nat_budget[n].start_money = nat_budget[n].money = np->nat_money; - tpops[n] = count_pop(n); } logerror("preparing sectors..."); diff --git a/src/lib/update/produce.c b/src/lib/update/produce.c index 817be095..2ecf467a 100644 --- a/src/lib/update/produce.c +++ b/src/lib/update/produce.c @@ -68,8 +68,8 @@ produce(struct natstr *np, struct sctstr *sp) cost = product->p_cost * output / prodeff; if (opt_TECH_POP) { if (product->p_level == NAT_TLEV) { - if (tpops[sp->sct_own] > 50000) - cost *= tpops[sp->sct_own] / 50000.0; + if (budget->oldowned_civs > 50000) + cost *= budget->oldowned_civs / 50000.0; } }