]> git.pond.sub.org Git - empserver/blobdiff - src/lib/update/produce.c
config: Make product work independently configurable
[empserver] / src / lib / update / produce.c
index b6ff9ac60f0278feb2c2f41754aa3677b616e4e1..4cc6dc03f3617fae2fce4a5f4ffe91cc6cd8a583 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2017, 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
@@ -27,7 +27,7 @@
  *  produce.c: Produce goodies
  *
  *  Known contributors to this file:
- *     Markus Armbruster, 2004-2016
+ *     Markus Armbruster, 2004-2021
  */
 
 #include <config.h>
@@ -41,7 +41,9 @@
 #include "prototypes.h"
 #include "update.h"
 
+static double prod_materials_cost(struct pchrstr *, short[]);
 static void materials_charge(struct pchrstr *, short *, double);
+static double prod_resource_limit(struct pchrstr *, unsigned char *);
 
 static char *levelnames[] = {
     "Technology", "Research", "Education", "Happiness"
@@ -97,17 +99,14 @@ prod_output(struct sctstr *sp, double prodeff)
     else
        resource = NULL;
 
-    material_limit = prod_materials_cost(product, sp->sct_item,
-                                        &unit_work);
+    material_limit = prod_materials_cost(product, sp->sct_item);
+    unit_work = product->p_bwork;
 
     /* sector p.e. */
     p_e = sp->sct_effic / 100.0;
     if (resource) {
-       unit_work++;
        p_e *= *resource / 100.0;
     }
-    if (unit_work == 0)
-       unit_work = 1;
 
     worker_limit = sp->sct_avail * p_e / unit_work;
     res_limit = prod_resource_limit(product, resource);
@@ -182,16 +181,14 @@ prod_output(struct sctstr *sp, double prodeff)
 
 /*
  * Return how much of product @pp can be made from materials @vec[].
- * Store amount of work per unit in *@costp.
  */
-double
-prod_materials_cost(struct pchrstr *pp, short vec[], int *costp)
+static double
+prod_materials_cost(struct pchrstr *pp, short vec[])
 {
     double count, n;
-    int cost, i;
+    int i;
 
     count = ITEM_MAX;
-    cost = 0;
     for (i = 0; i < MAXPRCON; ++i) {
        if (!pp->p_camt[i])
            continue;
@@ -200,9 +197,7 @@ prod_materials_cost(struct pchrstr *pp, short vec[], int *costp)
        n = (double)vec[pp->p_ctype[i]] / pp->p_camt[i];
        if (n < count)
            count = n;
-       cost += pp->p_camt[i];
     }
-    *costp = cost;
     return count;
 }
 
@@ -230,7 +225,7 @@ materials_charge(struct pchrstr *pp, short *vec, double count)
  * Return how much of product @pp can be made from its resource.
  * If @pp depletes a resource, @resource must point to its value.
  */
-double
+static double
 prod_resource_limit(struct pchrstr *pp, unsigned char *resource)
 {
     if (CANT_HAPPEN(pp->p_nrndx && !resource))