Fix score loader improperly reading player names with spaces
[neverball] / share / solid.h
index 5f5c525..4e694b0 100644 (file)
@@ -1,4 +1,4 @@
-/*   
+/*
  * Copyright (C) 2003 Robert Kooima
  *
  * NEVERBALL is  free software; you can redistribute  it and/or modify
@@ -31,7 +31,7 @@
  * the variable.
  *
  * The Xs are as documented by struct s_file:
- * 
+ *
  *     f  File          (struct s_file)
  *     m  Material      (struct s_mtrl)
  *     v  Vertex        (struct s_vert)
@@ -43,7 +43,7 @@
  *     n  Node          (struct s_node)
  *     p  Path          (struct s_path)
  *     b  Body          (struct s_body)
- *     c  Coin          (struct s_coin)
+ *     h  Item          (struct s_item)
  *     z  Goal          (struct s_goal)
  *     j  Jump          (struct s_jump)
  *     x  Switch        (struct s_swch)
  * lumps.  "ei" and "ej" are  edge indices into some "ev" edge vector.
  * An edge is  defined by two vertices, so  an edge structure consists
  * of "vi" and "vj".  And so on.
- * 
+ *
  * Those members that do not conform to this convention are explicitly
  * documented with a comment.
  *
- * These prefixes are still available: h k o q y.
+ * These prefixes are still available: c k o q y.
  */
 
 /*---------------------------------------------------------------------------*/
 #define M_ENVIRONMENT  8
 #define M_ADDITIVE    16
 #define M_CLAMPED     32
-#define M_SHADOWED (M_OPAQUE | M_REFLECTIVE | M_ENVIRONMENT)
+#define M_DECAL       64
+#define M_TWO_SIDED  128
 
 /* Billboard types. */
 
 #define B_EDGE     1
 #define B_FLAT     2
 #define B_ADDITIVE 4
+#define B_NOFACE   8
 
 /* Lump flags. */
 
 #define L_DETAIL   1
 
+/* Item types. */
+
+#define ITEM_NONE       0
+#define ITEM_COIN       1
+#define ITEM_GROW       2
+#define ITEM_SHRINK     3
+
+/* Path flags. */
+
+#define P_ORIENTED 1
+
 /*---------------------------------------------------------------------------*/
 
 struct s_mtrl
 {
-    float a[4];                                /* ambient color              */
     float d[4];                                /* diffuse color              */
+    float a[4];                                /* ambient color              */
     float s[4];                                /* specular color             */
     float e[4];                                /* emission color             */
     float h[1];                                /* specular exponent          */
+    float angle;
 
     int fl;                                    /* material flags             */
 
@@ -164,10 +178,16 @@ struct s_node
 struct s_path
 {
     float p[3];                                /* starting position          */
+    float e[4];                                /* orientation (quaternion)   */
     float t;                                   /* travel time                */
 
     int pi;
     int f;                                     /* enable flag                */
+    int s;                                     /* smooth flag                */
+
+    int fl;                                    /* flags                      */
+
+    /* TODO: merge enable and smooth into flags. */
 };
 
 struct s_body
@@ -187,9 +207,10 @@ struct s_body
     int gc;
 };
 
-struct s_coin
+struct s_item
 {
     float p[3];                                /* position                   */
+    int   t;                                   /* type                       */
     int   n;                                   /* value                      */
 };
 
@@ -197,8 +218,6 @@ struct s_goal
 {
     float p[3];                                /* position                   */
     float r;                                   /* radius                     */
-    int   s;                                   /* levels skiped              */
-    int   c;                                   /* special coloration?        */
 };
 
 struct s_swch
@@ -228,6 +247,8 @@ struct s_bill
     float rx[3];                               /* X rotation coefficients    */
     float ry[3];                               /* Y rotation coefficients    */
     float rz[3];                               /* Z rotation coefficients    */
+
+    float p[3];
 };
 
 struct s_jump
@@ -243,8 +264,9 @@ struct s_ball
     float p[3];                                /* position vector            */
     float v[3];                                /* velocity vector            */
     float w[3];                                /* angular velocity vector    */
+    float E[3][3];                             /* basis of pendulum          */
+    float W[3];                                /* angular pendulum velocity  */
     float r;                                   /* radius                     */
-    float a;                                   /* initial orientation (deg)  */
 };
 
 struct s_view
@@ -261,6 +283,7 @@ struct s_dict
 
 struct s_file
 {
+    int ac;
     int mc;
     int vc;
     int ec;
@@ -271,7 +294,7 @@ struct s_file
     int nc;
     int pc;
     int bc;
-    int cc;
+    int hc;
     int zc;
     int jc;
     int xc;
@@ -279,9 +302,9 @@ struct s_file
     int uc;
     int wc;
     int dc;
-    int ac;
     int ic;
 
+    char          *av;
     struct s_mtrl *mv;
     struct s_vert *vv;
     struct s_edge *ev;
@@ -292,39 +315,24 @@ struct s_file
     struct s_node *nv;
     struct s_path *pv;
     struct s_body *bv;
-    struct s_coin *cv;
+    struct s_item *hv;
     struct s_goal *zv;
     struct s_jump *jv;
     struct s_swch *xv;
     struct s_bill *rv;
     struct s_ball *uv;
     struct s_view *wv;
+    struct s_dict *dv;
     int           *iv;
-    char          *av;
 };
 
 /*---------------------------------------------------------------------------*/
 
-void sol_body_p(float p[3], const struct s_file *, const struct s_body *);
-
-/*---------------------------------------------------------------------------*/
-
 int   sol_load_only_file(struct s_file *, const char *);
+int   sol_load_only_head(struct s_file *, const char *);
 int   sol_stor(struct s_file *, const char *);
 void  sol_free(struct s_file *);
 
-float sol_step(struct s_file *, const float *, float, int, int *);
-
-int   sol_coin_test(struct s_file *, float *, float);
-struct s_goal *sol_goal_test(struct s_file *, float *, int);
-int   sol_jump_test(struct s_file *, float *, int);
-int   sol_swch_test(struct s_file *, int);
-
-/*---------------------------------------------------------------------------*/
-
-void put_file_state(FILE *, struct s_file *);
-void get_file_state(FILE *, struct s_file *);
-
 /*---------------------------------------------------------------------------*/
 
 #endif