-
-static int
-buildeff(struct sctstr *sp, int work, double *money)
-{
- int work_cost;
- int n, hcms, lcms;
- int effdone = 0;
-
- if (sp->sct_type != sp->sct_newtype) {
- /*
- * Tear down existing sector.
- * Easier to destroy than to build.
- */
- work_cost = (sp->sct_effic + 3) / 4;
- if (work_cost > work)
- work_cost = work;
- n = sp->sct_effic - work_cost * 4;
- if (n <= 0) {
- n = 0;
- sp->sct_type = sp->sct_newtype;
- }
- sp->sct_effic = n;
- work -= work_cost;
- *money += work_cost;
- effdone += work_cost;
- }
- if (sp->sct_type == sp->sct_newtype) {
- work_cost = 100 - sp->sct_effic;
- if (work_cost > work)
- work_cost = work;
-
- if (dchr[sp->sct_type].d_lcms > 0) {
- lcms = sp->sct_item[I_LCM];
- lcms /= dchr[sp->sct_type].d_lcms;
- if (work_cost > lcms)
- work_cost = lcms;
- }
- if (dchr[sp->sct_type].d_hcms > 0) {
- hcms = sp->sct_item[I_HCM];
- hcms /= dchr[sp->sct_type].d_hcms;
- if (work_cost > hcms)
- work_cost = hcms;
- }
-
- sp->sct_effic += work_cost;
- *money += work_cost * dchr[sp->sct_type].d_build;
-
- if ((dchr[sp->sct_type].d_lcms > 0) ||
- (dchr[sp->sct_type].d_hcms > 0)) {
- sp->sct_item[I_LCM] -= work_cost * dchr[sp->sct_type].d_lcms;
- sp->sct_item[I_HCM] -= work_cost * dchr[sp->sct_type].d_hcms;
- }
- effdone += work_cost;
- }
- return effdone;
-}