I can't sleep, so fixing bugs #39
[neverball] / share / mapc.c
index 8bca378..154df92 100644 (file)
@@ -33,9 +33,8 @@
 #include <math.h>
 
 #include "vec3.h"
-#include "glext.h"
 #include "solid.h"
-#include "config.h"
+#include "base_config.h"
 
 #define MAXSTR 256
 #define MAXKEY 16
@@ -72,7 +71,7 @@
 #define MAXU   16
 #define MAXW    32
 #define MAXD    128
-#define MAXA   512
+#define MAXA   8192
 #define MAXI   32767
 
 static int overflow(const char *s)
@@ -790,19 +789,23 @@ static void make_body(struct s_file *fp,
         if (strcmp(k[i], "targetname") == 0)
             make_sym(v[i], bi);
 
-        if (strcmp(k[i], "target") == 0)
+       else if (strcmp(k[i], "target") == 0)
             make_ref(v[i], &bp->pi);
 
-        if (strcmp(k[i], "model") == 0)
+       else if (strcmp(k[i], "model") == 0)
             read_obj(fp, v[i]);
 
-        if (strcmp(k[i], "origin") == 0)
+       else if (strcmp(k[i], "origin") == 0)
             sscanf(v[i], "%d %d %d", &x, &y, &z);
 
-        if (strcmp(k[i], "message") == 0)
+       else if (strcmp(k[i], "classname") != 0)
         {
-            strcpy(fp->av, v[i]);
-            fp->ac = (int) (strlen(v[i]) + 1);
+           /* Considers other strings as metadata */
+            strcat(fp->av, k[i]);
+            strcat(fp->av, "=");
+            strcat(fp->av, v[i]);
+           strcat(fp->av, "\n");
+            fp->ac += (int) (strlen(v[i]) + (strlen(k[i])) + 2);
         }
     }
 
@@ -924,11 +927,17 @@ static void make_goal(struct s_file *fp,
     zp->p[1] = 0.f;
     zp->p[2] = 0.f;
     zp->r    = 0.75;
+    zp->s    = 0;
+    zp->c    = 0;
 
     for (i = 0; i < c; i++)
     {
         if (strcmp(k[i], "radius") == 0)
             sscanf(v[i], "%f", &zp->r);
+        if (strcmp(k[i], "skip") == 0)
+            sscanf(v[i], "%d", &zp->s);
+        if (strcmp(k[i], "special") == 0)
+            sscanf(v[i], "%d", &zp->c);
 
         if (strcmp(k[i], "origin") == 0)
         {
@@ -1030,6 +1039,7 @@ static void make_swch(struct s_file *fp,
     xp->t    = 0;
     xp->f0   = 0;
     xp->f    = 0;
+    xp->i    = 0;
 
     for (i = 0; i < c; i++)
     {
@@ -1044,6 +1054,9 @@ static void make_swch(struct s_file *fp,
 
         if (strcmp(k[i], "state") == 0)
             xp->f = atoi(v[i]);
+       
+        if (strcmp(k[i], "invisible") == 0)
+            xp->i = atoi(v[i]);
 
         if (strcmp(k[i], "origin") == 0)
         {
@@ -2035,6 +2048,12 @@ static void dump_file(struct s_file *p, const char *name)
            p->rc, p->uc, p->ac, p->ic);
 }
 
+/* Skip the ugly SDL main substitution */
+/* Since we only need sdl_image */
+#ifdef main
+#    undef main
+#endif
+
 int main(int argc, char *argv[])
 {
     char src[MAXSTR];