extern void prepare_sects(int, struct bp *);
extern int bank_income(struct sctstr *, int);
/* produce.c */
-extern int produce(struct natstr *, struct sctstr *, int, int,
- int, int *, int *);
+extern int produce(struct natstr *, struct sctstr *, int, int, int *);
extern int prod_materials_cost(struct pchrstr *, short[], int *);
extern int prod_resource_limit(struct pchrstr *, unsigned char *);
extern double prod_eff(int, float);
};
int
-produce(struct natstr *np, struct sctstr *sp, int work,
- int desig, int neweff, int *cost, int *amount)
+produce(struct natstr *np, struct sctstr *sp,
+ int desig, int neweff, int *cost)
{
struct pchrstr *product;
double p_e;
resource = (unsigned char *)sp + product->p_nrndx;
else
resource = NULL;
- *amount = 0;
*cost = 0;
material_limit = prod_materials_cost(product, sp->sct_item,
if (unit_work == 0)
unit_work = 1;
- worker_limit = work * p_e / unit_work;
+ worker_limit = sp->sct_avail * p_e / unit_work;
res_limit = prod_resource_limit(product, resource);
material_consume = res_limit;
val = 0;
*resource = val;
}
- *amount = actual;
*cost = product->p_cost * material_consume;
if (opt_TECH_POP) {
}
if (CANT_HAPPEN(p_e <= 0.0))
- return 0;
+ return actual;
work_used = roundavg(unit_work * material_consume / p_e);
- if (CANT_HAPPEN(work_used > work))
- return work;
- return work_used;
+ if (CANT_HAPPEN(work_used > sp->sct_avail))
+ work_used = sp->sct_avail;
+ sp->sct_avail -= work_used;
+ return actual;
}
/*
if (sp->sct_effic >= 60) {
if (np->nat_money >= 0 && dchr[desig].d_prd >= 0)
- sp->sct_avail -= produce(np, sp, sp->sct_avail, desig,
- sp->sct_effic, &pcost, &amount);
+ amount = produce(np, sp, desig, sp->sct_effic, &pcost);
bp_put_items(bp, sp);
}