]> git.pond.sub.org Git - empserver/commitdiff
(mchrstr, lchrstr): Change from variable-style storage of load
authorMarkus Armbruster <armbru@pond.sub.org>
Tue, 17 Aug 2004 14:09:04 +0000 (14:09 +0000)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 17 Aug 2004 14:09:04 +0000 (14:09 +0000)
capacities to straight arrays.  Users now subscript the array instead
of calling vl_find() or walking the variable data structure.
(mchr, lchr): Initializers adapted.
(vl_find): No longer used.  Remove file.

22 files changed:
include/land.h
include/prototypes.h
include/ship.h
src/lib/commands/load.c
src/lib/commands/lten.c
src/lib/commands/new.c
src/lib/commands/tend.c
src/lib/common/Makefile
src/lib/common/vlist.c [deleted file]
src/lib/global/land.c
src/lib/global/ship.c
src/lib/subs/attsub.c
src/lib/subs/lndsub.c
src/lib/subs/plnsub.c
src/lib/subs/retreat.c
src/lib/subs/show.c
src/lib/subs/shpsub.c
src/lib/subs/supply.c
src/lib/update/nav_ship.c
src/lib/update/nav_util.c
src/lib/update/ship.c
src/server/main.c

index 4feea8458d886f39d658009fa4aed90530ee4fc3..85d0e3f2c9a0700e649e855f4d9fe6c595113d11 100644 (file)
@@ -99,9 +99,7 @@ struct lndstr {
 #define LND_NOTANY bit(0)      /* Just a placeholder, not used */
 
 struct lchrstr {
-    u_char l_nv;               /* number of variables it can hold */
-    u_char l_vtype[MAXCHRNV];
-    u_short l_vamt[MAXCHRNV];
+    u_short l_item[I_MAX+1];   /* load limit */
     s_char *l_name;            /* full name of type of land unit */
     int l_lcm;                 /* units of lcm to build */
     int l_hcm;                 /* units of hcm to build */
index 8a2b4231fa74666dd13eccc97e5aaefbf99ebe6f..3d31906454f53919279b4a700f011b0f6a5e05cf 100644 (file)
@@ -179,15 +179,6 @@ extern void snxtsct_dist(register struct nstr_sect *, coord, coord, int);
 /* type.c */
 extern int sct_typematch(char *);
 extern int typematch(char *, int);
-/* vlist.c */
-extern int vl_find(register int, u_char *, u_short *, int);
-extern int vl_set(register int, u_int, u_char *, u_short *, u_char *, int);
-extern int vl_damage(register int, register u_char *, register u_short *,
-                    register int);
-extern int vl_getvec(register u_char *, register u_short *, register int,
-                    register int, register int *);
-extern int vl_setvec(register u_char *, register u_short *, u_char *,
-                    int, register int, register int *);
 /* wantupd.c */
 extern void update_policy_check(void);
 extern int demand_update_want(int *, int *, int);
@@ -604,7 +595,6 @@ extern int prod_plane(int, int, int *, int);
 extern void populace(struct natstr *, register struct sctstr *, int);
 extern int total_work(register int, register int, register int,
                      register int, register int);
-extern double prod_eff(struct pchrstr *, float);
 /* prepare.c */
 extern void tax(struct sctstr *, struct natstr *, int, long *, int *,
                int *, int *);
@@ -614,6 +604,7 @@ extern int bank_income(struct sctstr *, int);
 /* produce.c */
 extern int produce(struct natstr *, struct sctstr *, short *, int, int,
                   int, int *, int *);
+extern double prod_eff(struct pchrstr *, float);
 /* removewants.c */
 extern int update_removewants(void);
 /* revolt.c */
index d6d56fcc6a4fd3b736c698001e0284474a6fcd20..0b715ca927343d586c1e6920dd35901224789626 100644 (file)
@@ -128,9 +128,7 @@ struct fltheadstr {
 };
 
 struct mchrstr {
-    u_char m_nv;               /* number of variables it can hold */
-    u_char m_vtype[MAXCHRNV];
-    u_short m_vamt[MAXCHRNV];
+    u_short m_item[I_MAX+1];   /* load limit */
     int m_lcm;                 /* units of lcm to build */
     int m_hcm;                 /* units of hcm to build */
     int m_armor;               /* how well armored it is */
index e08a827da8f02d4a8a212d1a8e23e627ba5508d9..3ce5c843e57d7d1f1bfc39979dbf39653ceec1d5 100644 (file)
@@ -754,7 +754,7 @@ load_comm_ship(struct sctstr *sectp, struct shpstr *sp,
        return RET_SYN;
 
     ship_amt = sp->shp_item[item];
-    ship_max = vl_find(item, mcp->m_vtype, mcp->m_vamt, mcp->m_nv);
+    ship_max = mcp->m_item[item];
     sect_amt = sectp->sct_item[item];
     amount = atoi(p);
     if (amount < 0)
@@ -957,7 +957,7 @@ load_comm_land(struct sctstr *sectp, struct lndstr *lp,
        return RET_SYN;
 
     land_amt = lp->lnd_item[item];
-    land_max = vl_find(item, lcp->l_vtype, lcp->l_vamt, lcp->l_nv);
+    land_max = lcp->l_item[item];
     sect_amt = sectp->sct_item[item];
     amount = atoi(p);
     if (amount < 0)
index 7f6c63121e7de0bf1da92b28b7c3e615445e1405..cddc1eaef017d11ca4cab8ba7aea0263d9c399ce 100644 (file)
@@ -94,8 +94,7 @@ ltend(void)
            return RET_FAIL;
        }
        vbase = &mchr[(int)tender.shp_type];
-       maxtender = vl_find(ip->i_vtype, vbase->m_vtype,
-                           vbase->m_vamt, (int)vbase->m_nv);
+       maxtender = vbase->m_item[ip->i_vtype];
        if (maxtender == 0) {
            pr("A %s cannot hold any %s\n",
               mchr[(int)tender.shp_type].m_name, ip->i_name);
@@ -121,8 +120,7 @@ ltend(void)
                continue;
            }
            lbase = &lchr[(int)target.lnd_type];
-           maxtarget = vl_find(ip->i_vtype, lbase->l_vtype,
-                               lbase->l_vamt, (int)lbase->l_nv);
+           maxtarget = lbase->l_item[ip->i_vtype];
            if (amt < 0) {
                if (!player->owner)
                    amt = 0;
index 6835ce4885cb7b17bc329732f335db96a0563e80..b429230fc59a0c70d55811af5fdacb5e79575a1e 100644 (file)
@@ -362,7 +362,7 @@ deity_build_land(int type, coord x, coord y, natid own, int tlev)
     land.lnd_fuelu = (int)LND_FU(lp->l_fuelu, tlev - lp->l_tech);
     land.lnd_maxlight = (int)LND_XPL(lp->l_nxlight, tlev - lp->l_tech);
     land.lnd_maxland = (int)LND_MXL(lp->l_mxland, tlev - lp->l_tech);
-    land.lnd_item[I_FOOD] = vl_find(V_FOOD, lp->l_vtype, lp->l_vamt, lp->l_nv);
+    land.lnd_item[I_FOOD] = lp->l_item[I_FOOD];
 
     putland(land.lnd_uid, &land);
     makenotlost(EF_LAND, land.lnd_own, land.lnd_uid, land.lnd_x,
index 06e3c73b8b5ab29a4e512381432a6e154ed7aa38..227766b1bda8b98dd92987d06a4a6293061d4ead 100644 (file)
@@ -121,8 +121,7 @@ tend(void)
            return RET_FAIL;
        }
        vbase = &mchr[(int)tender.shp_type];
-       maxtender = vl_find(ip->i_vtype, vbase->m_vtype,
-                           vbase->m_vamt, (int)vbase->m_nv);
+       maxtender = vbase->m_item[ip->i_vtype];
        if (maxtender == 0) {
            pr("A %s cannot hold any %s\n",
               mchr[(int)tender.shp_type].m_name, ip->i_name);
@@ -150,8 +149,7 @@ tend(void)
                continue;
            }
            vbase = &mchr[(int)target.shp_type];
-           maxtarget = vl_find(ip->i_vtype, vbase->m_vtype,
-                               vbase->m_vamt, (int)vbase->m_nv);
+           maxtarget = vbase->m_item[ip->i_vtype];
            if (amt < 0) {
                if (!player->owner)
                    amt = 0;
index 0c4bca5082ab89aaa44dd6a919c449f18a4a9698..609c591917cd035649ae4e21b06523d3b93e3b67 100644 (file)
@@ -38,13 +38,13 @@ NTLIB = $(SRCDIR)\lib\libcommon.lib
 OBJS =  bestpath.o bridgefall.o check.o damage.o file.o fsize.o \
        hap_fact.o hours.o land.o log.o mailbox.o maps.o move.o \
        nat.o path.o res_pop.o sectdamage.o \
-       stmtch.o tfact.o type.o vlist.o wantupd.o xy.o
+       stmtch.o tfact.o type.o wantupd.o xy.o
 
 NTOBJS = bestpath.obj bridgefall.obj check.obj damage.obj file.obj fsize.obj \
        hap_fact.obj hours.obj land.obj log.obj \
        mailbox.obj maps.obj move.obj nat.obj path.obj res_pop.obj \
        sectdamage.obj stmtch.obj tfact.obj \
-       type.obj vlist.obj wantupd.obj xy.obj
+       type.obj wantupd.obj xy.obj
 
 all: $(LIB)
 
diff --git a/src/lib/common/vlist.c b/src/lib/common/vlist.c
deleted file mode 100644 (file)
index 3cfe11c..0000000
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- *  Empire - A multi-player, client/server Internet based war game.
- *  Copyright (C) 1986-2000, Dave Pare, Jeff Bailey, Thomas Ruschak,
- *                           Ken Stevens, Steve McClure
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- *  ---
- *
- *  See the "LEGAL", "LICENSE", "CREDITS" and "README" files for all the
- *  related information and legal notices. It is expected that any future
- *  projects/authors will amend these files as needed.
- *
- *  ---
- *
- *  vlist.c: manage variable lists
- * 
- *  Known contributors to this file:
- *     Dave Pare, 1989
- */
-
-#include "misc.h"
-#include "var.h"
-#include "sect.h"
-#include "ship.h"
-#include "land.h"
-#include "product.h"
-#include "optlist.h"
-#include "common.h"
-#include "gen.h"
-
-#if 0
-static int freeslot(u_char *vec, register u_char *end);
-#endif
-
-int
-vl_find(register int vtype, u_char *typevec, u_short *amtvec, int nelem)
-{
-    register u_char *vp;
-    register u_short *ap;
-    register u_char *endp;
-
-    if (vtype < 0 || vtype > V_MAX)
-       return -1;
-    vp = typevec;
-    ap = amtvec;
-    endp = vp + nelem;
-    for (; vp < endp; vp++, ap++) {
-       if (*vp == vtype)
-           return (int)*ap;
-    }
-    return 0;
-}
-
-#if 0
-int
-vl_set(register int vtype, u_int amt, u_char *typevec, u_short *amtvec,
-       u_char *nvp, int max)
-{
-    register u_char *vp;
-    register u_char *endp;
-    register u_short *ap;
-    int n;
-
-    if (vtype < 0 || vtype > V_MAX)
-       return 0;
-    if (amt > 65536) {
-       logerror("vl_set: bad amt %d (%x), vtype %d\n", (int)amt, amt,
-                vtype);
-       return 0;
-    }
-    vp = typevec;
-    ap = amtvec;
-    endp = vp + *nvp;
-    for (; vp < endp; vp++, ap++) {
-       if (*vp == vtype)
-           break;
-    }
-    if (vp == endp) {
-       if (amt == 0) {
-           /* deleting, but not present */
-           return 0;
-       }
-       if (*nvp == max) {
-           if (isdel(vtype) || isdist(vtype))
-               return -1;
-           /* replace any del or dst entries */
-           if ((n = freeslot(typevec, endp)) < 0)
-               return -1;
-           vp = &typevec[n];
-           ap = &amtvec[n];
-       } else {
-           /* add at end */
-           (*nvp)++;
-       }
-       *vp = vtype;
-       *ap = amt;
-    } else {
-       if (amt != 0) {
-           /* altering; just change value */
-           *ap = amt;
-           return 1;
-       }
-       (*nvp)--;
-       if (vp < endp - 1) {
-           /* if not last element, copy last to current */
-           *ap = amtvec[*nvp];
-           *vp = typevec[*nvp];
-       }
-    }
-    return 1;
-}
-
-int
-vl_damage(register int pct, register u_char *typevec,
-         register u_short *amtvec, register int nelem)
-{
-    register int i;
-    register int lose;
-
-    if (pct >= 100)
-       return 0;
-    if (pct <= 0)
-       return nelem;
-    for (i = 0; i < nelem; i++) {
-       if (!isitem(typevec[i]))
-           continue;
-       if (opt_SUPER_BARS && typevec[i] == V_BAR)
-           continue;
-       lose = roundavg((double)amtvec[i] * pct * 0.01);
-       if (typevec[i] == V_CIVIL ||
-           typevec[i] == V_MILIT || typevec[i] == V_UW)
-           lose = ldround(people_damage * lose, 1);
-       if ((amtvec[i] -= lose) + 1 == 0) {
-           nelem--;
-           if (i == nelem)
-               break;
-           typevec[i] = typevec[nelem];
-           amtvec[i] = amtvec[nelem];
-           i--;
-       }
-    }
-    return nelem;
-}
-
-/*
- * extract all "mask" items from the variable list
- * caller must pass a pointer to an aray of I_MAX+1,
- * or else bad things will happen.
- */
-int
-vl_getvec(register u_char *src_type, register u_short *src_amt,
-         register int src_nv, register int class, register int *dst_amt)
-{
-    register int n;
-    int count;
-    int item;
-
-    for (n = 0; n < I_MAX + 1; n++)
-       dst_amt[n] = 0;
-    for (count = 0, n = 0; n < src_nv; n++) {
-       if ((src_type[n] & VT_TYPE) != class)
-           continue;
-       item = src_type[n] & ~VT_TYPE;
-       if (item > I_MAX) {
-           logerror("vl_getvec: bad I-type %d (vtype %d)\n",
-                    item, src_type[n]);
-           continue;
-       }
-       dst_amt[item] = src_amt[n];
-       count++;
-    }
-    return count;
-}
-
-/*
- * Copy the vec into the variable list.  All items zero in
- * the vec will be deleted from the vlist, and all items
- * present in the vec will be added to the vlist.
- */
-int
-vl_setvec(register u_char *type, register u_short *amt, u_char *nvp,
-         int max, register int class, register int *vec)
-{
-    register int nv;
-    register int n;
-    register int vec_n;
-
-    nv = *nvp;
-    vec_n = 1;
-    n = 0;
-    while (n < nv) {
-       if ((type[n] & VT_TYPE) != class) {
-           n++;
-           continue;
-       }
-       /* find non-zero vec entry to overwrite current slot */
-       for (; vec_n <= I_MAX; vec_n++)
-           if (vec[vec_n] != 0)
-               break;
-       if (vec_n > I_MAX) {
-           /* no more elements left; delete */
-           nv--;
-           if (n < nv) {
-               /* copy last entry over current entry */
-               type[n] = type[nv];
-               amt[n] = amt[nv];
-           }
-       } else {
-           /* use new (unused) entry */
-           type[n] = vec_n | class;
-           amt[n] = vec[vec_n];
-           vec_n++;
-           n++;
-       }
-    }
-    *nvp = nv;
-    if (n >= nv && vec_n > I_MAX)
-       return 1;
-    /* free slots at end; copy rest of vec into the vlist */
-    for (; vec_n <= I_MAX && nv < max; vec_n++) {
-       if (vec[vec_n] == 0)
-           continue;
-       type[nv] = vec_n | class;
-       amt[nv] = vec[vec_n];
-       nv++;
-    }
-    *nvp = nv;
-    if (vec_n <= I_MAX && (class == VT_ITEM || class == VT_COND)) {
-       /*
-        * still stuff left; make free slots out of deliveries
-        * and distributes and stuff 'em in (only for item or cond)
-        */
-       for (; vec_n <= I_MAX; vec_n++) {
-           if (vec[vec_n] == 0)
-               continue;
-           if ((n = freeslot(type, &type[max])) < 0) {
-               logerror("vl_setvec: no free slots left\n");
-               return 0;
-           }
-           logerror("vl_setvec: replacing type %d amt %d\n",
-                    type[n], amt[n]);
-           type[n] = vec_n | class;
-           amt[n] = vec[vec_n];
-       }
-    }
-    if (nv == max) {
-       /* checking for overflow */
-       while (vec_n <= I_MAX) {
-           if (vec[vec_n])
-               break;
-       }
-       if (vec_n <= I_MAX) {
-           logerror("vl_setvec: no space for i-type #%d (%d)\n",
-                    vec_n, vec[vec_n]);
-           return 0;
-       }
-    }
-    return 1;
-}
-
-/*
- * make a free slot; deliveries and distributions
- * are fair game for us.
- */
-static int
-freeslot(u_char *vec, register u_char *end)
-{
-    register u_char *vp;
-
-    for (vp = vec; vp < end; vp++) {
-       if (isdel(*vp) || isdist(*vp))
-           return vp - vec;
-    }
-    return -1;
-}
-#endif
index 1a9e0878e60877849df8465ac1879e2b0eef6da4..226c99887a427a1d2db10e40128f1839139955e6 100644 (file)
@@ -45,200 +45,155 @@ struct lchrstr lchr[] = {
    flags, nv
    cargo
 */
-    {2,
-     {V_FOOD, V_MILIT},
-     {12, 20},
+
+    {{0,   0,  20,   0,   0,   0,   0,   0,   0,  12,   0,   0,   0,   0,   0},
      "cav  cavalry",
      10, 5, 0, 0, 0, 30, 500,
      1.2, 0.5, 80, 32, 18, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      L_RECON | L_LIGHT,
      },
 
-    {3,
-     {V_FOOD, V_SHELL, V_MILIT},
-     {15, 1, 25},
+    {{0,   0,  25,   1,   0,   0,   0,   0,   0,  15,   0,   0,   0,   0,   0},
      "linf light infantry",
      8, 4, 0, 0, 0, 40, 300,
      1.0, 1.5, 60, 28, 15, 2, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0,
      L_ASSAULT | L_LIGHT,
      },
 
-    {2,
-     {V_FOOD, V_MILIT},
-     {24, 100},
+    {{0,   0, 100,   0,   0,   0,   0,   0,   0,  24,   0,   0,   0,   0,   0},
      "inf  infantry",
      10, 5, 0, 0, 0, 50, 500,
      1.0, 1.5, 60, 25, 15, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      L_ASSAULT | L_LIGHT,
      },
 
-    {3,
-     {V_FOOD, V_SHELL, V_MILIT},
-     {60, 8, 100},
+    {{0,   0, 100,   8,   0,   0,   0,   0,   0,  60,   0,   0,   0,   0,   0},
      "mtif motor inf",
      15, 10, 0, 0, 0, 190, 400,
      1.2, 2.2, 60, 33, 17, 1, 3, 0, 0, 0, 2, 3, 13, 1, 0, 0,
      L_LIGHT,
      },
 
-    {3,
-     {V_FOOD, V_SHELL, V_MILIT},
-     {60, 8, 100},
+    {{0,   0, 100,   8,   0,   0,   0,   0,   0,  60,   0,   0,   0,   0,   0},
      "mif  mech inf",
      15, 10, 0, 0, 0, 190, 800,
      1.5, 2.5, 50, 33, 17, 1, 3, 0, 0, 0, 2, 3, 13, 1, 0, 0,
      L_LIGHT,
      },
 
-    {3,
-     {V_FOOD, V_SHELL, V_MILIT},
-     {60, 4, 100},
+    {{0,   0, 100,   4,   0,   0,   0,   0,   0,  60,   0,   0,   0,   0,   0},
      "mar  marines",
      10, 5, 0, 0, 0, 140, 1000,
      1.4, 2.4, 60, 25, 14, 2, 1, 0, 0, 0, 1, 2, 0, 0, 0, 0,
      L_MARINE | L_ASSAULT | L_LIGHT,
      },
 
-    {10,
-     {V_SHELL, V_GUN, V_FOOD, V_LCM, V_HCM, V_DUST, V_BAR, V_IRON,
-      V_PETROL, V_MILIT},
-     {200, 10, 300, 200, 100, 100, 10, 100, 300, 25},
+    {{0,   0,  25, 200,  10, 300, 100, 100,  10, 300,   0, 200, 100,   0,   0},
      "sup  supply",
      10, 5, 0, 0, 0, 50, 500,
      0.1, 0.2, 80, 25, 20, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      L_LIGHT | L_SUPPLY,
      },
 
-    {12,
-     {V_SHELL, V_GUN, V_FOOD, V_LCM, V_HCM, V_DUST, V_BAR, V_IRON,
-      V_PETROL, V_MILIT, V_OIL, V_RAD},
-     {990, 200, 990, 990, 990, 500, 100, 500, 990, 990, 990, 150},
+    {{0,   0, 990, 990, 200, 990, 500, 500, 100, 990, 990, 990, 990,   0, 150},
      "tra  train",
      100, 50, 0, 0, 0, 40, 3500,
      0.0, 0.0, 120, 10, 25, 3, 0, 0, 0, 0, 0, 0, 0, 0, 5, 12,
      L_XLIGHT | L_TRAIN | L_HEAVY | L_SUPPLY,
      },
 
-    {0,
-     {V_FOOD},
-     {0,},
+    {{0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
      "spy  infiltrator",
      10, 5, 0, 0, 0, 40, 750,
      0.0, 0.0, 80, 32, 18, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      L_ASSAULT | L_RECON | L_LIGHT | L_SPY,
      },
 
-    {1,
-     {V_SHELL},
-     {3,},
+    {{0,   0,   0,   3,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0},
      "com  commando",
      10, 5, 0, 0, 0, 55, 1500,
      0.0, 0.0, 80, 32, 18, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      L_ASSAULT | L_RECON | L_LIGHT | L_SPY,
      },
 
-    {3,
-     {V_FOOD, V_SHELL, V_MILIT},
-     {12, 5, 20},
+    {{0,   0,  20,   5,   0,   0,   0,   0,   0,  12,   0,   0,   0,   0,   0},
      "aau  aa unit",
      20, 10, 0, 0, 0, 70, 500,
      0.5, 1.0, 60, 18, 20, 1, 1, 0, 0, 0, 1, 2, 0, 0, 0, 0,
      L_FLAK | L_LIGHT,
      },
 
-    {4,
-     {V_FOOD, V_SHELL, V_MILIT, V_GUN},
-     {24, 40, 25, 10},
+    {{0,   0,  25,  40,  10,   0,   0,   0,   0,  24,   0,   0,   0,   0,   0},
      "art  artillery",
      20, 10, 0, 0, 0, 35, 800,
      0.1, 0.4, 70, 18, 20, 1, 0, 8, 50, 5, 2, 1, 0, 0, 0, 0,
      L_LIGHT,
      },
 
-    {4,
-     {V_FOOD, V_SHELL, V_MILIT, V_GUN},
-     {12, 20, 25, 6},
+    {{0,   0,  25,  20,   6,   0,   0,   0,   0,  12,   0,   0,   0,   0,   0},
      "lat  lt artillery",
      20, 10, 0, 0, 0, 70, 500,
      0.2, 0.6, 60, 30, 18, 1, 1, 5, 10, 3, 1, 1, 0, 0, 0, 0,
      L_LIGHT,
      },
 
-    {4,
-     {V_FOOD, V_SHELL, V_MILIT, V_GUN},
-     {24, 80, 25, 12},
+    {{0,   0,  25,  80,  12,   0,   0,   0,   0,  24,   0,   0,   0,   0,   0},
      "hat  hvy artillery",
      40, 20, 0, 0, 0, 100, 800,
      0.0, 0.2, 60, 12, 20, 1, 0, 11, 99, 8, 4, 1, 0, 0, 0, 0,
      0,
      },
 
-    {4,
-     {V_FOOD, V_SHELL, V_MILIT, V_GUN},
-     {15, 40, 25, 10},
+    {{0,   0,  25,  40,  10,   0,   0,   0,   0,  15,   0,   0,   0,   0,   0},
      "mat  mech artillery",
      20, 10, 0, 0, 0, 200, 1000,
      0.2, 0.6, 50, 35, 17, 1, 1, 8, 35, 6, 3, 3, 13, 1, 0, 0,
      L_LIGHT,
      },
 
-    {3,
-     {V_FOOD, V_SHELL, V_MILIT},
-     {12, 3, 20},
+    {{0,   0,  20,   3,   0,   0,   0,   0,   0,  12,   0,   0,   0,   0,   0},
      "eng  engineer",
      10, 5, 0, 0, 0, 130, 3000,
      1.2, 2.4, 50, 25, 14, 2, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0,
      L_ENGINEER | L_ASSAULT | L_LIGHT,
      },
 
-    {3,
-     {V_FOOD, V_SHELL, V_MILIT},
-     {15, 4, 20},
+    {{0,   0,  20,   4,   0,   0,   0,   0,   0,  15,   0,   0,   0,   0,   0},
      "meng mech engineer",
      10, 5, 0, 0, 0, 260, 4500,
      1.8, 3.5, 45, 33, 15, 3, 3, 0, 0, 0, 1, 5, 25, 2, 0, 0,
      L_ENGINEER | L_ASSAULT | L_LIGHT,
      },
 
-    {3,
-     {V_FOOD, V_SHELL, V_MILIT},
-     {30, 4, 50},
+    {{0,   0,  50,   4,   0,   0,   0,   0,   0,  30,   0,   0,   0,   0,   0},
      "lar  lt armor",
      10, 5, 0, 0, 0, 150, 600,
      2.0, 1.0, 50, 42, 15, 4, 4, 0, 0, 0, 1, 2, 25, 1, 0, 0,
      L_RECON | L_LIGHT,
      },
 
-    {3,
-     {V_FOOD, V_SHELL, V_MILIT},
-     {48, 3, 100},
+    {{0,   0, 100,   3,   0,   0,   0,   0,   0,  48,   0,   0,   0,   0,   0},
      "har  hvy armor",
      20, 10, 0, 0, 0, 120, 500,
      2.0, 0.8, 50, 18, 17, 1, 1, 0, 0, 0, 2, 1, 10, 2, 0, 0,
      0,
      },
 
-    {3,
-     {V_FOOD, V_SHELL, V_MILIT},
-     {30, 4, 50},
+    {{0,   0,  50,   4,   0,   0,   0,   0,   0,  30,   0,   0,   0,   0,   0},
      "arm  armor",
      20, 10, 0, 0, 0, 170, 1000,
      3.0, 1.5, 40, 33, 16, 2, 2, 0, 0, 0, 1, 2, 13, 1, 0, 0,
      L_LIGHT,
      },
 
-    {3,
-     {V_FOOD, V_SHELL, V_MILIT},
-     {30, 4, 50},
+    {{0,   0,  50,   4,   0,   0,   0,   0,   0,  30,   0,   0,   0,   0,   0},
      "sec  security",
      10, 5, 0, 0, 0, 170, 600,
      1.0, 2.0, 60, 25, 15, 2, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0,
      L_SECURITY | L_LIGHT,
      },
 
-    {2,
-     {V_FOOD, V_MILIT},
-     {7, 10},
+    {{0,   0,  10,   0,   0,   0,   0,   0,   0,   7,   0,   0,   0,   0,   0},
      "rad  radar unit",
      10, 5, 0, 0, 0, 270, 1000,
      0.0, 0.0, 50, 33, 15, 3, 0, 0, 0, 0, 0, 2, 25, 2, 1, 0,
@@ -252,9 +207,7 @@ struct lchrstr lchr[] = {
    cargo
 */
 
-    {0,
-     {0},
-     {0},
+    {{0},
      "",
      0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
index b4be4826c62e25d0fbeaf9147a94401f40f67e4e..44f396b0fbfbb6766a57d6ba587b5019a5405422 100644 (file)
@@ -56,297 +56,158 @@ struct mchrstr mchr[] = {
 /* c   c    o   e   i  g   g   i   p  p   l  l                               */
 /* m   m    r   d   b  e   e   m   l  l   c  u  name                tech  Cost*/
 
-    {4,
-     {V_CIVIL, V_MILIT, V_FOOD, V_UW},
-     {300, 10, 900, 15},
-     25, 15, 10, 10, 15, 2, 0, 0, 0, 0, 0, 0, "fb   fishing boat", 0, 180,
-     M_FOOD, 0, 0,
-     },
-
-    {4,
-     {V_CIVIL, V_MILIT, V_FOOD, V_UW},
-     {300, 10, 900, 15},
-     25, 15, 10, 25, 15, 2, 0, 0, 0, 0, 20, 1, "ft   fishing trawler", 35,
-     300,
-     M_FOOD, 0, 0,
-     },
-
-    {8,
-     {V_CIVIL, V_MILIT, V_SHELL, V_GUN, V_FOOD, V_LCM, V_HCM, V_UW},
-     {600, 50, 300, 50, 900, 1400, 900, 250},
-     60, 40, 20, 25, 35, 3, 0, 0, 1, 0, 0, 0, "cs   cargo ship", 20, 500,
-     M_SUPPLY, 0, 2,
-     },
-
-    {7,
-     {V_CIVIL, V_MILIT, V_IRON, V_DUST, V_FOOD, V_UW, V_RAD},
-     {30, 5, 990, 990, 200, 45, 990},
-     60, 40, 20, 25, 35, 3, 0, 0, 1, 0, 30, 1, "os   ore ship", 20, 500,
-     0, 0, 0,
-     },
-
-    {4,
-     {V_CIVIL, V_MILIT, V_FOOD, V_UW},
-     {20, 80, 200, 1200},
-     60, 40, 20, 10, 35, 3, 0, 0, 1, 0, 0, 0, "ss   slave ship", 0, 300,
-     0, 0, 0,
-     },
-
-    {3,
-     {V_CIVIL, V_MILIT, V_FOOD},
-     {50, 50, 100},
-     200, 100, 20, 25, 35, 3, 0, 0, 1, 0, 30, 1, "ts   trade ship", 30,
-     1750,
-     M_TRADE, 0, 0,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {60, 10, 2, 60},
-     30, 30, 50, 25, 25, 3, 1, 1, 1, 0, 0, 0, "frg  frigate", 0, 600,
-     M_SEMILAND, 0, 2,
-     },
-
-    {4,
-     {V_CIVIL, V_MILIT, V_FOOD, V_OIL},
-     {10, 5, 100, 1},
+    {{0, 300,  10,   0,   0,   0,   0,   0,   0, 900,   0,   0,   0,  15,   0},
+     25, 15, 10, 10, 15, 2, 0, 0, 0, 0, 0, 0, "fb   fishing boat",
+     0, 180, M_FOOD, 0, 0},
+
+    {{0, 300,  10,   0,   0,   0,   0,   0,   0, 900,   0,   0,   0,  15,   0},
+     25, 15, 10, 25, 15, 2, 0, 0, 0, 0, 20, 1, "ft   fishing trawler",
+     35, 300, M_FOOD, 0, 0},
+
+    {{0, 600,  50, 300,  50,   0,   0,   0,   0, 900,   0,1400, 900, 250,   0},
+     60, 40, 20, 25, 35, 3, 0, 0, 1, 0, 0, 0, "cs   cargo ship",
+     20, 500, M_SUPPLY, 0, 2},
+
+    {{0,  30,   5,   0,   0,   0, 990, 990,   0, 200,   0,   0,   0,  45, 990},
+     60, 40, 20, 25, 35, 3, 0, 0, 1, 0, 30, 1, "os   ore ship",
+     20, 500, 0, 0, 0},
+
+    {{0,  20,  80,   0,   0,   0,   0,   0,   0, 200,   0,   0,   0,1200,   0},
+     60, 40, 20, 10, 35, 3, 0, 0, 1, 0, 0, 0, "ss   slave ship",
+     0, 300, 0, 0, 0},
+
+    {{0,  50,  50,   0,   0,   0,   0,   0,   0, 100,   0,   0,   0,   0,   0},
+     200, 100, 20, 25, 35, 3, 0, 0, 1, 0, 30, 1, "ts   trade ship",
+     30, 1750, M_TRADE, 0, 0},
+
+    {{0,   0,  60,  10,   2,   0,   0,   0,   0,  60,   0,   0,   0,   0,   0},
+     30, 30, 50, 25, 25, 3, 1, 1, 1, 0, 0, 0, "frg  frigate",
+     0, 600, M_SEMILAND, 0, 2},
+
+    {{0,  10,   5,   0,   0,   0,   0,   0,   0, 100,   1,   0,   0,   0,   0},
      25, 15, 10, 25, 15, 2, 0, 0, 0, 0, 20, 1, "oe   oil exploration boat",
-     40, 800,
-     M_OIL, 0, 0,
-     },
-
-    {5,
-     {V_CIVIL, V_MILIT, V_FOOD, V_OIL, V_UW},
-     {990, 80, 990, 990, 990},
-     60, 60, 30, 15, 65, 3, 0, 0, 2, 0, 0, 0, "od   oil derrick", 50, 1500,
-     M_OIL, 0, 0,
-     },
-
-    {4,
-     {V_MILIT, V_GUN, V_SHELL, V_FOOD},
-     {2, 2, 12, 5},
-     20, 10, 10, 38, 10, 2, 1, 1, 0, 0, 4, 1, "pt   patrol boat", 40, 300,
-     M_TORP, 0, 0,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {100, 40, 5, 100},
-     30, 40, 50, 30, 30, 5, 6, 3, 1, 0, 40, 1, "lc   light cruiser", 45,
-     800,
-     M_MINE, 0, 2,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {120, 100, 8, 200},
-     40, 50, 70, 30, 30, 5, 8, 4, 1, 0, 30, 1, "hc   heavy cruiser", 50,
-     1200,
-     0, 0, 4,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {120, 20, 4, 120},
-     50, 50, 60, 20, 35, 3, 1, 2, 1, 0, 0, 0, "tt   troop transport", 10,
-     800,
-     M_SEMILAND, 0, 2,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {200, 200, 10, 900},
-     50, 70, 95, 25, 35, 6, 10, 7, 1, 0, 50, 2, "bb   battleship", 45,
-     1800,
-     0, 0, 2,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {180, 100, 10, 400},
-     50, 60, 55, 30, 35, 6, 10, 6, 1, 0, 60, 2, "bbc  battlecruiser", 75,
-     1500,
-     0, 0, 2,
-     },
-
-    {6,
-     {V_CIVIL, V_MILIT, V_PETROL, V_FOOD, V_OIL, V_UW},
-     {30, 5, 990, 200, 990, 25},
-     60, 40, 75, 25, 45, 3, 0, 0, 1, 0, 30, 1, "tk   tanker", 35, 600,
-     M_OILER | M_SUPPLY, 0, 0,
-     },
-
-    {4,
-     {V_MILIT, V_FOOD, V_SHELL, V_GUN},
-     {10, 90, 100, 1},
-     25, 15, 10, 25, 15, 2, 0, 0, 0, 0, 20, 1, "ms   minesweeper", 40, 400,
-     M_MINE | M_SWEEP, 0, 0,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {60, 40, 4, 80},
-     30, 30, 45, 35, 20, 4, 6, 3, 1, 0, 30, 1, "dd   destroyer", 70, 600,
-     M_MINE | M_DCH | M_SONAR, 0, 1,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {25, 36, 5, 80},
-     30, 30, 25, 20, 5, 4, 3, 3, 0, 0, 30, 1, "sb   submarine", 60, 650,
-     M_TORP | M_SUB | M_MINE | M_SONAR, 0, 0,
-     },
-
-    {8,
-     {V_CIVIL, V_MILIT, V_SHELL, V_GUN, V_FOOD, V_LCM, V_HCM, V_PETROL},
-     {5, 10, 104, 20, 900, 500, 300, 100},
-     40, 40, 50, 30, 2, 3, 0, 0, 0, 0, 50, 2, "sbc  cargo submarine", 150,
-     1200,
-     M_SUPPLY | M_OILER | M_SUB | M_SONAR, 0, 0,
-     },
-
-    {5,
-     {V_MILIT, V_SHELL, V_GUN, V_PETROL, V_FOOD},
-     {175, 250, 4, 300, 180},
-     50, 60, 60, 30, 40, 5, 2, 2, 4, 20, 50, 2, "cal  light carrier", 80,
-     2700,
-     M_FLY, 20, 0,
-     },
-
-    {5,
-     {V_MILIT, V_SHELL, V_GUN, V_PETROL, V_FOOD},
-     {350, 500, 4, 500, 900},
+     40, 800, M_OIL, 0, 0},
+
+    {{0, 990,  80,   0,   0,   0,   0,   0,   0, 990, 990,   0,   0, 990,   0},
+     60, 60, 30, 15, 65, 3, 0, 0, 2, 0, 0, 0, "od   oil derrick",
+     50, 1500, M_OIL, 0, 0},
+
+    {{0,   0,   2,  12,   2,   0,   0,   0,   0,   5,   0,   0,   0,   0,   0},
+     20, 10, 10, 38, 10, 2, 1, 1, 0, 0, 4, 1, "pt   patrol boat",
+     40, 300, M_TORP, 0, 0},
+
+    {{0,   0, 100,  40,   5,   0,   0,   0,   0, 100,   0,   0,   0,   0,   0},
+     30, 40, 50, 30, 30, 5, 6, 3, 1, 0, 40, 1, "lc   light cruiser",
+     45, 800, M_MINE, 0, 2 },
+
+    {{0,   0, 120, 100,   8,   0,   0,   0,   0, 200,   0,   0,   0,   0,   0},
+     40, 50, 70, 30, 30, 5, 8, 4, 1, 0, 30, 1, "hc   heavy cruiser",
+     50, 1200, 0, 0, 4},
+
+    {{0,   0, 120,  20,   4,   0,   0,   0,   0, 120,   0,   0,   0,   0,   0},
+     50, 50, 60, 20, 35, 3, 1, 2, 1, 0, 0, 0, "tt   troop transport",
+     10, 800, M_SEMILAND, 0, 2 },
+
+    {{0,   0, 200, 200,  10,   0,   0,   0,   0, 900,   0,   0,   0,   0,   0},
+     50, 70, 95, 25, 35, 6, 10, 7, 1, 0, 50, 2, "bb   battleship",
+     45, 1800, 0, 0, 2},
+
+    {{0,   0, 180, 100,  10,   0,   0,   0,   0, 400,   0,   0,   0,   0,   0},
+     50, 60, 55, 30, 35, 6, 10, 6, 1, 0, 60, 2, "bbc  battlecruiser",
+     75, 1500, 0, 0, 2},
+
+    {{0,  30,   5,   0,   0, 990,   0,   0,   0, 200, 990,   0,   0,  25,   0},
+     60, 40, 75, 25, 45, 3, 0, 0, 1, 0, 30, 1, "tk   tanker",
+     35, 600, M_OILER | M_SUPPLY, 0, 0},
+
+    {{0,   0,  10, 100,   1,   0,   0,   0,   0,  90,   0,   0,   0,   0,   0},
+     25, 15, 10, 25, 15, 2, 0, 0, 0, 0, 20, 1, "ms   minesweeper",
+     40, 400, M_MINE | M_SWEEP, 0, 0},
+
+    {{0,   0,  60,  40,   4,   0,   0,   0,   0,  80,   0,   0,   0,   0,   0},
+     30, 30, 45, 35, 20, 4, 6, 3, 1, 0, 30, 1, "dd   destroyer",
+     70, 600, M_MINE | M_DCH | M_SONAR, 0, 1},
+
+    {{0,   0,  25,  36,   5,   0,   0,   0,   0,  80,   0,   0,   0,   0,   0},
+     30, 30, 25, 20, 5, 4, 3, 3, 0, 0, 30, 1, "sb   submarine",
+     60, 650, M_TORP | M_SUB | M_MINE | M_SONAR, 0, 0},
+
+    {{0,   5,  10, 104,  20, 100,   0,   0,   0, 900,   0, 500, 300,   0,   0},
+     40, 40, 50, 30, 2, 3, 0, 0, 0, 0, 50, 2, "sbc  cargo submarine",
+     150, 1200, M_SUPPLY | M_OILER | M_SUB | M_SONAR, 0, 0},
+
+    {{0,   0, 175, 250,   4, 300,   0,   0,   0, 180,   0,   0,   0,   0,   0},
+     50, 60, 60, 30, 40, 5, 2, 2, 4, 20, 50, 2, "cal  light carrier",
+     80, 2700, M_FLY, 20, 0},
+
+    {{0,   0, 350, 500,   4, 500,   0,   0,   0, 900,   0,   0,   0,   0,   0},
      60, 70, 80, 35, 40, 7, 2, 2, 10, 40, 120, 3, "car  aircraft carrier",
-     160, 4500,
-     M_FLY, 40, 0,
-     },
-
-    {5,
-     {V_MILIT, V_SHELL, V_GUN, V_PETROL, V_FOOD},
-     {350, 999, 4, 999, 900},
-     70, 80, 100, 45, 40, 9, 2, 2, 20, 4, 0, 0, "can  nuc carrier", 305,
-     8000,
-     M_OILER | M_FLY | M_SUPPLY, 60, 0,
-     },
-
-    {4,
-     {V_MILIT, V_FOOD, V_GUN, V_SHELL},
-     {400, 300, 1, 10},
-     60, 40, 40, 30, 30, 2, 0, 0, 2, 0, 30, 1, "ls   landing ship", 145,
-     1000,
-     M_LAND, 0, 6,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {60, 60, 4, 120},
-     40, 30, 50, 35, 30, 5, 2, 2, 4, 0, 40, 1, "af   asw frigate", 220,
-     800,
-     M_TORP | M_SUBT | M_DCH | M_SONAR, 0, 0,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {25, 60, 6, 500},
-     30, 40, 45, 40, 3, 6, 5, 3, 0, 0, 0, 0, "na   nuc attack sub", 260,
-     1200,
-     M_TORP | M_SUB | M_MINE | M_SONAR | M_SUBT, 0, 0,
-     },
-
-    {5,
-     {V_MILIT, V_SHELL, V_GUN, V_PETROL, V_FOOD},
-     {100, 80, 6, 40, 500},
-     40, 40, 60, 40, 35, 6, 8, 3, 10, 2, 80, 2, "ad   asw destroyer", 240,
-     1500,
-     M_TORP | M_SUBT | M_DCH | M_SONAR, 0, 0,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_FOOD, V_GUN},
-     {25, 200, 500, 1},
-     30, 40, 55, 35, 2, 6, 0, 0, 0, 0, 0, 0, "nm   nuc miss sub", 270,
-     1500,
-     M_SUB | M_SONAR, 20, 0,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_FOOD, V_GUN},
-     {25, 100, 500, 1},
-     30, 30, 35, 30, 3, 3, 0, 0, 0, 0, 30, 1, "msb  missile sub", 230,
-     1200,
-     M_SUB | M_SONAR, 10, 0,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {5, 100, 3, 500},
-     20, 20, 15, 40, 15, 3, 2, 2, 0, 0, 7, 1, "mb   missile boat", 180,
-     500,
-     0, 10, 0,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {60, 220, 4, 120},
-     40, 30, 50, 35, 30, 5, 2, 2, 2, 0, 30, 1, "mf   missile frigate", 280,
-     1000,
-     0, 20, 0,
-     },
-
-    {5,
-     {V_MILIT, V_SHELL, V_GUN, V_PETROL, V_FOOD},
-     {120, 500, 6, 160, 200},
-     50, 50, 70, 35, 35, 8, 8, 6, 8, 8, 35, 1, "mc   missile cruiser", 290,
-     1500,
-     M_ANTIMISSILE, 40, 0,
-     },
-
-    {4,
-     {V_MILIT, V_SHELL, V_GUN, V_FOOD},
-     {100, 100, 15, 200},
-     50, 60, 80, 35, 30, 6, 1, 8, 1, 0, 60, 2, "aac  aa cruiser", 130,
-     1500,
-     M_ANTIMISSILE, 0, 4,
-     },
-
-    {5,
-     {V_MILIT, V_SHELL, V_GUN, V_PETROL, V_FOOD},
-     {200, 400, 25, 40, 900},
-     50, 60, 80, 35, 30, 6, 1, 16, 30, 2, 0, 0, "agc  aegis cruiser", 265,
-     4000,
-     M_ANTIMISSILE, 32, 0,
-     },
-
-    {5,
-     {V_MILIT, V_SHELL, V_GUN, V_PETROL, V_FOOD},
-     {200, 400, 8, 40, 900},
-     50, 50, 100, 45, 35, 6, 14, 7, 10, 2, 0, 0, "ncr  nuc cruiser", 325,
-     1800,
-     M_ANTIMISSILE, 20, 0,
-     },
-
-    {5,
-     {V_MILIT, V_SHELL, V_GUN, V_PETROL, V_FOOD},
-     {200, 120, 6, 160, 500},
+     160, 4500, M_FLY, 40, 0},
+
+    {{0,   0, 350, 999,   4, 999,   0,   0,   0, 900,   0,   0,   0,   0,   0},
+     70, 80, 100, 45, 40, 9, 2, 2, 20, 4, 0, 0, "can  nuc carrier",
+     305, 8000, M_OILER | M_FLY | M_SUPPLY, 60, 0},
+
+    {{0,   0, 400,  10,   1,   0,   0,   0,   0, 300,   0,   0,   0,   0,   0},
+     60, 40, 40, 30, 30, 2, 0, 0, 2, 0, 30, 1, "ls   landing ship",
+     145, 1000, M_LAND, 0, 6},
+
+    {{0,   0,  60,  60,   4,   0,   0,   0,   0, 120,   0,   0,   0,   0,   0},
+     40, 30, 50, 35, 30, 5, 2, 2, 4, 0, 40, 1, "af   asw frigate",
+     220, 800, M_TORP | M_SUBT | M_DCH | M_SONAR, 0, 0},
+
+    {{0,   0,  25,  60,   6,   0,   0,   0,   0, 500,   0,   0,   0,   0,   0},
+     30, 40, 45, 40, 3, 6, 5, 3, 0, 0, 0, 0, "na   nuc attack sub",
+     260, 1200, M_TORP | M_SUB | M_MINE | M_SONAR | M_SUBT, 0, 0},
+
+    {{0,   0, 100,  80,   6,  40,   0,   0,   0, 500,   0,   0,   0,   0,   0},
+     40, 40, 60, 40, 35, 6, 8, 3, 10, 2, 80, 2, "ad   asw destroyer",
+     240, 1500, M_TORP | M_SUBT | M_DCH | M_SONAR, 0, 0},
+
+    {{0,   0,  25, 200,   1,   0,   0,   0,   0, 500,   0,   0,   0,   0,   0},
+     30, 40, 55, 35, 2, 6, 0, 0, 0, 0, 0, 0, "nm   nuc miss sub",
+     270, 1500, M_SUB | M_SONAR, 20, 0},
+
+    {{0,   0,  25, 100,   1,   0,   0,   0,   0, 500,   0,   0,   0,   0,   0},
+     30, 30, 35, 30, 3, 3, 0, 0, 0, 0, 30, 1, "msb  missile sub",
+     230, 1200, M_SUB | M_SONAR, 10, 0},
+
+    {{0,   0,   5, 100,   3,   0,   0,   0,   0, 500,   0,   0,   0,   0,   0},
+     20, 20, 15, 40, 15, 3, 2, 2, 0, 0, 7, 1, "mb   missile boat",
+     180, 500, 0, 10, 0},
+
+    {{0,   0,  60, 220,   4,   0,   0,   0,   0, 120,   0,   0,   0,   0,   0},
+     40, 30, 50, 35, 30, 5, 2, 2, 2, 0, 30, 1, "mf   missile frigate",
+     280, 1000, 0, 20, 0},
+
+    {{0,   0, 120, 500,   6, 160,   0,   0,   0, 200,   0,   0,   0,   0,   0},
+     50, 50, 70, 35, 35, 8, 8, 6, 8, 8, 35, 1, "mc   missile cruiser",
+     290, 1500, M_ANTIMISSILE, 40, 0},
+
+    {{0,   0, 100, 100,  15,   0,   0,   0,   0, 200,   0,   0,   0,   0,   0},
+     50, 60, 80, 35, 30, 6, 1, 8, 1, 0, 60, 2, "aac  aa cruiser",
+     130, 1500, M_ANTIMISSILE, 0, 4},
+
+    {{0,   0, 200, 400,  25,  40,   0,   0,   0, 900,   0,   0,   0,   0,   0},
+     50, 60, 80, 35, 30, 6, 1, 16, 30, 2, 0, 0, "agc  aegis cruiser",
+     265, 4000, M_ANTIMISSILE, 32, 0},
+
+    {{0,   0, 200, 400,   8,  40,   0,   0,   0, 900,   0,   0,   0,   0,   0},
+     50, 50, 100, 45, 35, 6, 14, 7, 10, 2, 0, 0, "ncr  nuc cruiser",
+     325, 1800, M_ANTIMISSILE, 20, 0},
+
+    {{0,   0, 200, 120,   6, 160,   0,   0,   0, 500,   0,   0,   0,   0,   0},
      50, 50, 80, 45, 35, 9, 10, 4, 25, 8, 0, 0, "nas  nuc asw cruiser",
-     330, 1800,
-     M_TORP | M_SUBT | M_DCH | M_SONAR, 0, 0,
-     },
-
-    {8,
-     {V_CIVIL, V_MILIT, V_SHELL, V_GUN, V_PETROL, V_FOOD, V_LCM, V_HCM},
-     {50, 50, 600, 50, 999, 999, 1500, 900},
-     60, 40, 40, 45, 35, 6, 0, 0, 10, 2, 0, 0, "nsp  nuc supply ship", 360,
-     1500,
-     M_SUPPLY, 0, 2,
-     },
-
-    {0,
-     {0},
-     {0},
-     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "", 0, 0,
-     0, 0, 0,
-     }
+     330, 1800, M_TORP | M_SUBT | M_DCH | M_SONAR, 0, 0},
+
+/*    ?    c    m    s    g    p    i    d    b    f    o    l    h    u    r */
+    {{0,  50,  50, 600,  50, 999,   0,   0,   0, 999,   0,1500, 900,   0,   0},
+     60, 40, 40, 45, 35, 6, 0, 0, 10, 2, 0, 0, "nsp  nuc supply ship",
+     360, 1500, M_SUPPLY, 0, 2},
+
+    {{0},
+     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "",
+     0, 0, 0, 0, 0}
 };
 
 int shp_maxno = (sizeof(mchr) / sizeof(struct mchrstr)) - 1;
index eb9d3b3de2bc97ae522af5cff93ca9f34690ddf2..071a7b92ba0ada4426636b59816cc98bc498c871 100644 (file)
@@ -868,8 +868,7 @@ get_mob_support(int combat_mode, struct combat *off, struct combat *def)
     case A_BOARD:
        if (off->type == EF_SECTOR && off->mob <= 0)
            return 0;
-       mob_support = vl_find(V_MILIT, def->shp_mcp->m_vtype,
-                             def->shp_mcp->m_vamt, def->shp_mcp->m_nv);
+       mob_support = def->shp_mcp->m_item[I_MILIT];
        if (mob_support < off->troops)
            pr("The size of the ship you are trying to board limits your party to %d mil,\n", mob_support);
        else
@@ -880,8 +879,7 @@ get_mob_support(int combat_mode, struct combat *off, struct combat *def)
            return 0;
        if (def->lnd_lcp->l_flags & L_SPY)
            return 1;
-       mob_support = vl_find(V_MILIT, def->lnd_lcp->l_vtype,
-                             def->lnd_lcp->l_vamt, def->lnd_lcp->l_nv);
+       mob_support = def->lnd_lcp->l_item[I_MILIT];
        if (mob_support < off->troops)
            pr("The size of the unit you are trying to board limits your party to %d mil,\n", mob_support);
        else
index 1b293e5ba35995e5709877c4c1dc66672b80f448..4d3bfb691dfb05aa4c65a24c38dcb974dc16cd0c 100644 (file)
@@ -705,8 +705,7 @@ lnd_sweep(struct emp_qelem *land_list, int verbose, int takemob,
        putland(llp->land.lnd_uid, &llp->land);
        if (!(mines = sect.sct_mines))
            continue;
-       max = vl_find(V_SHELL, llp->lcp->l_vtype,
-                     llp->lcp->l_vamt, (int)llp->lcp->l_nv);
+       max = llp->lcp->l_item[I_SHELL];
        lshells = llp->land.lnd_item[I_SHELL];
        sshells = sect.sct_item[I_SHELL];
        for (m = 0; mines > 0 && m < max * 2; m++) {
index 3e0bc1adc07e54796b586e38eddcd6ef16c62a90..cd2cb116b10c90f22d02b3515ecffcce223a52f9 100644 (file)
@@ -303,8 +303,7 @@ pln_dropoff(struct emp_qelem *list, struct ichrstr *ip, coord tx, coord ty,
        sp = ptr;
        there = sp->shp_item[ip->i_vtype];
        mp = &mchr[(int)sp->shp_type];
-       max = vl_find(ip->i_vtype, mp->m_vtype,
-                     mp->m_vamt, (int)mp->m_nv);
+       max = mp->m_item[ip->i_vtype];
     }
     there += amt;
     if (there > max) {
index 4149cd7593b4ded3fd482d0fd7c50eefc56df3b6..a0dae1f0eb368eba6a21e1f5bc1d56d689479785 100644 (file)
@@ -279,8 +279,7 @@ retreat_ship1(struct shpstr *sp, s_char code, int orig)
 
        mines = sect.sct_mines;
        if ((mcp->m_flags & M_SWEEP) && mines > 0 && !player->owner) {
-           max = vl_find(V_SHELL, mcp->m_vtype,
-                         mcp->m_vamt, (int)mcp->m_nv);
+           max = mcp->m_item[I_SHELL];
            shells = sp->shp_item[I_SHELL];
            for (m = 0; mines > 0 && m < 5; m++) {
                if (chance(0.66)) {
@@ -520,8 +519,7 @@ retreat_land1(struct lndstr *lp, s_char code, int orig)
        mines = sect.sct_mines;
        if ((lcp->l_flags & L_ENGINEER) && mines > 0 &&
            (sect.sct_oldown != lp->lnd_own)) {
-           max = vl_find(V_SHELL, lcp->l_vtype,
-                         lcp->l_vamt, (int)lcp->l_nv);
+           max = lcp->l_item[I_SHELL];
            shells = lp->lnd_item[I_SHELL];
            for (m = 0; mines > 0 && m < 5; m++) {
                if (chance(0.66)) {
index 402a6542369461dab9f3e38a718ae5f38603fec5..139da95f611a8fe8180d4c69ec984b20b5f8172e 100644 (file)
@@ -420,13 +420,9 @@ void
 show_ship_capab(int tlev)
 {
     register struct mchrstr *mp;
-    register u_short *ap;
-    register u_char *type;
     register int i;
-    register int it;
     int scount;
     int n;
-    s_char c;
     s_char *p;
 
     pr("%25s cargos & capabilities\n", "");
@@ -440,18 +436,9 @@ show_ship_capab(int tlev)
 
        pr("%-25.25s ", mp->m_name);
 
-       /*
-        * should use vector stuff
-        */
-       for (ap = mp->m_vamt, type = mp->m_vtype, i = 0;
-            i < mp->m_nv; i++, ap++, type++) {
-           it = unitem((int)*type);
-           if (it > 0 && it <= I_MAX && ichr[it].i_name != 0)
-               c = ichr[it].i_name[0];
-           else
-               c = '?';
-           pr(" %d%c", *ap, c);
-       }
+       for (i = 0; i <= I_MAX; ++i)
+           if (mp->m_item[i])
+               pr(" %d%c", mp->m_item[i], ichr[i].i_mnem);
        pr(" ");
        for (i = n = 0; i < 32; i++) {
            if (!(mp->m_flags & bit(i)))
@@ -559,11 +546,8 @@ show_land_capab(int tlev)
 {
     struct lchrstr *lcp;
     int lcount;
-    register u_short *ap;
-    register u_char *type;
     register int i, n;
-    register int it;
-    register s_char *p, c;
+    register s_char *p;
 
     pr("%25s capabilities\n", "");
 
@@ -575,18 +559,9 @@ show_land_capab(int tlev)
 
        pr("%-25s ", lcp->l_name);
 
-       /*
-        * should use vector stuff
-        */
-       for (ap = lcp->l_vamt, type = lcp->l_vtype, i = 0;
-            i < lcp->l_nv; i++, ap++, type++) {
-           it = unitem((int)*type);
-           if (it > 0 && it <= I_MAX && ichr[it].i_name != 0)
-               c = ichr[it].i_name[0];
-           else
-               c = '?';
-           pr(" %d%c", *ap, c);
-       }
+       for (i = 0; i <= I_MAX; ++i)
+           if (lcp->l_item[i])
+               pr(" %d%c", lcp->l_item[i], ichr[i].i_mnem);
        pr(" ");
        for (i = n = 0; i < 32; i++) {
            if (!(lcp->l_flags & bit(i)))
index 7fcf9208b13b06a1c1bc78f35b769416ede108ab..91cf1c906167b476ec22a0413202903bf49655bb 100644 (file)
@@ -250,8 +250,7 @@ shp_sweep(struct emp_qelem *ship_list, int verbose, natid actor)
        putship(mlp->ship.shp_uid, &mlp->ship);
        if (!(mines = sect.sct_mines))
            continue;
-       max = vl_find(V_SHELL, mlp->mcp->m_vtype,
-                     mlp->mcp->m_vamt, (int)mlp->mcp->m_nv);
+       max = mlp->mcp->m_item[I_SHELL];
        shells = mlp->ship.shp_item[I_SHELL];
        for (m = 0; mines > 0 && m < 5; m++) {
            if (chance(0.66)) {
index df0ac37dfece8d976ac9ffa6335a1c0c6447914c..d6c6cd00aeeb6ac74b7a2d8d31e0b51691a22637 100644 (file)
@@ -439,7 +439,7 @@ get_minimum(struct lndstr *lp, int type)
     int max, want = 0;
 
     lcp = &lchr[(int)lp->lnd_type];
-    max = vl_find(V_ITEM(type), lcp->l_vtype, lcp->l_vamt, (int)lcp->l_nv);
+    max = lcp->l_item[type];
 
     switch (type) {
     case I_FOOD:
index c12866f2fb25798a564aa10ad2b7d3a8c027b0b7..1a5c021cc2743f65348ab2893337a95a2b19ac46 100644 (file)
@@ -329,8 +329,7 @@ nav_ship(register struct shpstr *sp)
        /* special case for fishing boats */
        if ((mchr[(int)sp->shp_type].m_flags & M_FOOD) == 1) {
            food_amt = sp->shp_item[I_FOOD];
-           max_amt = vl_find(V_FOOD, vship->m_vtype,
-                             vship->m_vamt, vship->m_nv);
+           max_amt = vship->m_item[I_FOOD];
            sectp = getsectp(sp->shp_x, sp->shp_y);
 
            if (food_amt < max_amt && (sectp->sct_own == 0))
index 0a1513b686824fc208da9d214fae1016d83efca7..90769cd5843a5f286889649d92bb89c5bfe40b13 100644 (file)
@@ -107,8 +107,7 @@ load_it(register struct shpstr *sp, register struct sctstr *psect, int i)
     if (comm == V_CIVIL || comm == V_MILIT)
        sect_amt--;             /* leave 1 civ or mil to hold the sector. */
     vship = &mchr[(int)sp->shp_type];
-    abs_max = max_amt = vl_find(comm, vship->m_vtype,
-                               vship->m_vamt, (int)vship->m_nv);
+    abs_max = max_amt = vship->m_item[comm];
 
     if (!abs_max)
        return 0;               /* can't load the ship, skip to the end. */
index 9df0189410e9c0f2c3e8206a2aaef514ed7d25cd..88a5456363fcaaaaaccff9cde6b5bea1a6cb8716 100644 (file)
@@ -176,7 +176,7 @@ upd_ship(register struct shpstr *sp, register int etus,
                                      * (double)sp->shp_effic / 100.0
                                      * (double)sectp->sct_oil / 100.0
                                      * prod_eff(product, sp->shp_tech));
-               max_oil = vl_find(V_OIL, mp->m_vtype, mp->m_vamt, mp->m_nv);
+               max_oil = mp->m_item[I_OIL];
                if (sp->shp_item[I_OIL] + oil_gained > max_oil)
                    oil_gained = max_oil - sp->shp_item[I_OIL];
                sp->shp_item[I_OIL] += oil_gained;
@@ -201,7 +201,7 @@ upd_ship(register struct shpstr *sp, register int etus,
                if (n > 10)
                    nreport(sp->shp_own, N_DIE_FAMINE, 0, 1);
            }
-           max_food = vl_find(V_FOOD, mp->m_vtype, mp->m_vamt, mp->m_nv);
+           max_food = mp->m_item[I_FOOD];
            if (sp->shp_item[I_FOOD] > max_food)
                sp->shp_item[I_FOOD] = max_food;
            /*
index c284532f3842725e386746bb253ba6964701c50b..70c4da20f308021147effa38b1bb9ae676ad3b18 100644 (file)
@@ -414,10 +414,7 @@ nullify_objects(void)
        if (opt_NO_LCMS)
            lchr[i].l_lcm = 0;
        /* Fix up the military values */
-       for (j = 0; j < lchr[i].l_nv; j++) {
-           if (lchr[i].l_vtype[j] == V_MILIT)
-               lchr[i].l_mil = lchr[i].l_vamt[j];
-       }
+       lchr[i].l_mil = lchr[i].l_item[I_MILIT];
     }
     for (i = 0; i < shp_maxno; i++) {
        if (opt_NO_HCMS)