updated URL of forum and table in readme file
[neverball] / share / mapc.c
index 2c0161d..06eaedc 100644 (file)
@@ -63,7 +63,6 @@
 #define MAXN    1024
 #define MAXP    512
 #define MAXB    512
-#define MAXC    1024
 #define MAXH    1024
 #define MAXZ    16
 #define MAXJ    32
@@ -132,11 +131,6 @@ static int incb(struct s_file *fp)
     return (fp->bc < MAXB) ? fp->bc++ : overflow("body");
 }
 
-static int incc(struct s_file *fp)
-{
-    return (fp->cc < MAXC) ? fp->cc++ : overflow("coin");
-}
-
 static int inch(struct s_file *fp)
 {
     return (fp->hc < MAXH) ? fp->hc++ : overflow("item");
@@ -189,7 +183,6 @@ static void init_file(struct s_file *fp)
     fp->nc = 0;
     fp->pc = 0;
     fp->bc = 0;
-    fp->cc = 0;
     fp->hc = 0;
     fp->zc = 0;
     fp->jc = 0;
@@ -210,7 +203,6 @@ static void init_file(struct s_file *fp)
     fp->nv = (struct s_node *) calloc(MAXN, sizeof (struct s_node));
     fp->pv = (struct s_path *) calloc(MAXP, sizeof (struct s_path));
     fp->bv = (struct s_body *) calloc(MAXB, sizeof (struct s_body));
-    fp->cv = (struct s_coin *) calloc(MAXC, sizeof (struct s_coin));
     fp->hv = (struct s_item *) calloc(MAXH, sizeof (struct s_item));
     fp->zv = (struct s_goal *) calloc(MAXZ, sizeof (struct s_goal));
     fp->jv = (struct s_jump *) calloc(MAXJ, sizeof (struct s_jump));
@@ -874,37 +866,6 @@ static void make_body(struct s_file *fp,
         v_add(fp->vv[i].p, fp->vv[i].p, p);
 }
 
-static void make_coin(struct s_file *fp,
-                      char k[][MAXSTR],
-                      char v[][MAXSTR], int c)
-{
-    int i, ci = incc(fp);
-
-    struct s_coin *cp = fp->cv + ci;
-
-    cp->p[0] = 0.f;
-    cp->p[1] = 0.f;
-    cp->p[2] = 0.f;
-    cp->n    = 1;
-
-    for (i = 0; i < c; i++)
-    {
-        if (strcmp(k[i], "light") == 0)
-            sscanf(v[i], "%d", &cp->n);
-
-        if (strcmp(k[i], "origin") == 0)
-        {
-            int x = 0, y = 0, z = 0;
-
-            sscanf(v[i], "%d %d %d", &x, &y, &z);
-
-            cp->p[0] = +(float) x / SCALE;
-            cp->p[1] = +(float) z / SCALE;
-            cp->p[2] = -(float) y / SCALE;
-        }
-    }
-}
-
 static void make_item(struct s_file *fp,
                       char k[][MAXSTR],
                       char v[][MAXSTR], int c)
@@ -918,17 +879,23 @@ static void make_item(struct s_file *fp,
     hp->p[2] = 0.f;
 
     hp->t = ITEM_NONE;
+    hp->n = 0;
 
     for (i = 0; i < c; i++)
     {
         if (strcmp(k[i], "classname") == 0)
         {
-            if (strcmp(v[i], "item_health_large") == 0)
+            if (strcmp(v[i], "light") == 0)
+                hp->t = ITEM_COIN;
+            else if (strcmp(v[i], "item_health_large") == 0)
                 hp->t = ITEM_GROW;
             else if (strcmp(v[i], "item_health_small") == 0)
                 hp->t = ITEM_SHRINK;
         }
 
+        if (strcmp(k[i], "light") == 0)
+            sscanf(v[i], "%d", &hp->n);
+
         if (strcmp(k[i], "origin") == 0)
         {
             int x = 0, y = 0, z = 0;
@@ -1259,7 +1226,7 @@ static void read_ent(struct s_file *fp, FILE *fin)
         if (t == T_END) break;
     }
 
-    if (!strcmp(v[i], "light"))                    make_coin(fp, k, v, c);
+    if (!strcmp(v[i], "light"))                    make_item(fp, k, v, c);
     if (!strcmp(v[i], "item_health_large"))        make_item(fp, k, v, c);
     if (!strcmp(v[i], "item_health_small"))        make_item(fp, k, v, c);
     if (!strcmp(v[i], "info_camp"))                make_swch(fp, k, v, c);
@@ -2097,10 +2064,20 @@ static void node_file(struct s_file *fp)
 
 static void dump_file(struct s_file *p, const char *name)
 {
+    /* FIXME:  Count visible geoms.
+     *
+     * I'm afraid items break this (not sure though) so leaving it out.
+     */
+
+#if 0
     int i, j;
+#endif
+    int i;
     int c = 0;
     int n = 0;
+#if 0
     int m = p->rc + p->cc * 128 + (p->zc * p->jc + p->xc) * 32;
+#endif
 
     /* Count the number of solid lumps. */
 
@@ -2108,6 +2085,7 @@ static void dump_file(struct s_file *p, const char *name)
         if ((p->lv[i].fl & 1) == 0)
             n++;
 
+#if 0
     /* Count the number of visible geoms. */
 
     for (i = 0; i < p->bc; i++)
@@ -2116,24 +2094,32 @@ static void dump_file(struct s_file *p, const char *name)
             m += p->lv[p->bv[i].l0 + j].gc;
         m += p->bv[i].gc;
     }
+#endif
 
     /* Count the total value of all coins. */
 
-    for (i = 0; i < p->cc; i++)
-        c += p->cv[i].n;
+    for (i = 0; i < p->hc; i++)
+        if (p->hv[i].t == ITEM_COIN)
+            c += p->hv[i].n;
 
+#if 0
     printf("%s (%d/%d/$%d)\n"
+#endif
+    printf("%s (%d/$%d)\n"
            "  mtrl  vert  edge  side  texc"
            "  geom  lump  path  node  body\n"
            "%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d\n"
-           "  coin  item  goal  view  jump"
-           "  swch  bill  ball  char  indx\n"
-           "%6d%6d%6d%6d%6d%6d%6d%6d%6d%6d\n",
+           "  item  goal  view  jump  swch"
+           "  bill  ball  char  indx\n"
+           "%6d%6d%6d%6d%6d%6d%6d%6d%6d\n",
+#if 0
            name, n, m, c,
+#endif
+           name, n, c,
            p->mc, p->vc, p->ec, p->sc, p->tc,
            p->gc, p->lc, p->pc, p->nc, p->bc,
-           p->cc, p->hc, p->zc, p->wc, p->jc,
-           p->xc, p->rc, p->uc, p->ac, p->ic);
+           p->hc, p->zc, p->wc, p->jc, p->xc,
+           p->rc, p->uc, p->ac, p->ic);
 }
 
 /* Skip the ugly SDL main substitution since we only need sdl_image. */